MyBatis Error – The content of elements must consist of well-formed character data or markup.

MyBatis 의 Mapper XML 파일에서 다음과 같은 오류가 발생 했다.

MyBatis Mapper XML Error
“The content of elements must consist of well-formed character data or markup.”

이는 SQL 연산자인 <, =, > 와 같은 엔터티가 MyBatis 문법과 혼동되서 나오는 문제다. 이럴때는 CDATA 를 적용해주면 된다.

이렇게하면 에러를 없앨 수 있다.

Java 시간 대역 체크하기

Java 프로그래밍을 하다보면 시간을 다루게 된다. 만일 점심시간인지 아닌지를 시간을 체크하고 싶다면 어떻게 할까? 대략 다음과 같이 할 수 있다.

isAfter, isBefore 메소드를 이용하면 손쉽게 체크할 수 있다.

Virtual Image 만들기

dd 명령어를 사용해서 다음과 같이 Virtual Image 만들기가 가능하다.

10GiB 의 용량을 가진 가상 이미지를 만들어 줍니다.

인생이란게 노력만으로는 안되는 거다.

요새 느끼는 거지만 인생은 노력만으로는 안되는 것 같다. 뭐랄까 잠깐 이나마 외모에 신경을 쓰는 연예인들의 기분을 이해할 수 있다라고 할까? 잠깐, 내 인생이 외모 때문이다라고 하는거 같은데 그건 아니다. 외모야 뭐.. 오징어지.. 찐따에 오징어면 뭐.. 그냥 혼자살 인생은 결정된거라 딱히 불만은 없다.

무슨 말을 하고 싶은거냐하면 IT 직업이란게 환경도 중요하다는 걸 말하고 싶다. 내가 개발자로서 입지를 다지고 싶다면 개발자로서 다양한 개발과 경험을 할 수 있는 곳이 좋다. 이왕이면 개발을 하는데 필요한 것들도 모두 경험할 수 있는 곳 말이다. 코딩만 잘한다고 개발을 잘한다고 할 수 있는가… 애자일이나 기타 개발을 위한 각종 기반이되는 지식도 중요한데 그런것까지 모두 경험할 수 있는 곳이면 좋다.

개인적으로 나는 인프라를 다루는 분야에서 일을 하고 있다. 좀 더 구체적으로는 AWS 인프라를 다룬다. AWS 를 하는 사람은 알겠지만 AWS 의 인프라는 정말 방대하고 각 종 서비스를 조합하는 방법도 천차만별이다.

그런데, 어떤 곳에서는 IAM 사용을 막아놓고 또 어떻곳에서는 Billing 을 막아놓는다. 또 어떻곳에서는 RDS 를 막아놓기도 한다. 이런식으로 사용에 제약을 받는 경우가 있는데 그런 환경은 별로 좋지 않다.

자신이 하는 분야에서 성공을 하고 싶다면 그러한 성공을 뒷받침해줄 환경 또한 중요하다는 것이다. 하지만 그 환경을 내 노력만으로 쉽게 구축을 되냐 이 말이지… 정책이다 보안이다 하면서 제약을 받기도 한다. 때로는 프로젝트의 세팅이 덜됐다면서 몇개월째 AWS 계정은 고사하고 Linux 시스템에 접근하는 것도 불가능했던 적도 있다. “꿀 빨고 좋았겠다” 라고 부러워하지 마라… 몇개월이 지난뒤에 나는 바보가 되어 있었으니까…

나이가 먹어감에 따라 지금까지 내가 쌓아올린 것을 현상유지하는 것도 벅차다. 불과 몇년전까지만 해도 이런 생각을 할거라는 걸 꿈에도 생각을 못했다. 죽을때까지 Fresh 할줄 알았지. ㅎㅎ. 점점 더 뭔가를 하고 싶어도 나이때문에 못하게 되는  것을 목격하기도 한다. 그런 모습을 지켜보면서 나도 곧 저렇게 될거 같다는 두려움에 휩싸이게 된다.

한국에서의 삶이 많이 고달프다. 나이때문에 안된다는 말을 들을 시기가 다가와가니 한국에서의 삶이 많이 고달프다. 누군가 내게 존댓말을 쓴다는 것도 이상하고… 한국이란 사회에서 내가 너무 이상한 놈인가 싶기도 하고.. 암튼 머리가 복잡하네..

Ubuntu 18.04 도메인을 찾을 수 없을때

Ubuntu 18.04 를 사용중인데, 보안 업데이트를 하기 위해서 apt 명령을 입력했더니 다음과 같이 도메인을 찾을 수 없는 이유로 오류가 생긴다.

“Temporary failure resolving” 이게 뭘까 싶어서 알아본 내용을 정리한다.

resolve.conf 파일을 열어보면 다음과 같이 되어 있을 것이다.

resolv.conf 파일은 다들 알다시피 도메인 네임 서버를 지정해주는 설정 파일로 이 파일이 잘못되면 도메인을 ip로 변환할 수가 없게되어 결국에는 인터넷 연결을 할 수가 없게 된다.

그런데, 위 내용을 보면 도메인 서버 ip는 로컬 호스트로 보이고 코멘트에 이것을 수동으로 바꾸지 말것을 경고하고 있다. 거기다 resolve 상태를 “systemd-resolve –status”로 확인하라고 친절히 안내하고 있다. 이 명령어는 uplink DNS 서버에 대한 상태를 알려준다.

그러면 이 uplink DNS 를 바꿀 수는 없을까?

systemd-resolve 데몬이 이를 수행하는데, 이는 다음과 같은 위치의 파일들을 읽어서 동작한다.

Ubuntu18.04 에서는 /etc/systemd/resolved.conf 파일이 존재하며 여기에 DNS= 부분에 DNS 서버를 space 로 구분해 리스트로 적어놓을 수 있다.

실제로 ‘DNS=8.8.8.8’ 을 입력하고 ‘systemctl restart systemd-resolved’ 하면 적용되어 apt update 가 잘 동작했다.

내가 보기에 구조적인 문제의 시작은….

내가 보기에 한국 사회의 구조적인 문제의 시작은 ‘계급’ 인거 같다. 민주주의 한국에서 무슨 계급이냐고 하겠지만, 제도화되지 않은 계급은 엄연히 존재한다.

사회적인 직위도 어찌보면 사회적인 제도이기도 하지만, 내가 말하고자 하는 계급은 ‘내가 너보다는 잘났다’ 하는 의식구조를 말한다.

문제는 ‘내가 너보다 잘났다’ 라고 한다면 뭔가 현실을 바꿀수 있는 액션, 예를들어 번뜩이는 아이디어를 낸다던지 그 많은 사회생활과 자기분야의 경험을 기반으로 어려운 문제를 해결해나간다든지 하는 것이 있어야 한다. 쉽게말해서 자타공인 능력자소리는 들어야 그런 말쯤은 할 수 있지 않겠나?

하지만 한국 ‘내가 너보다 잘났다’ 는 것은 조선시대의 ‘양반’ 계급의식을 말한다. 양반이 고된 논밭일을 하는 걸 봤나? 망한 집안이 아니라면 절대로 그것은 양반이 할일이 아니다.

이 양반 계급의식은 나이나 성별을 뛰어넘어 어떤 상황이 발생하면 그 상황에서 ‘나는 양반이 되어야 해!’ 하는 일념으로 말과 행동을 하는 인간들이 사회전반에 넘쳐나는게 문제다. 이런 양반이 되기 위해서 그 상황에서 키를 잡고 있는 사람과 깊은 관계를 갖고 그들과 어울려 논다. 그러면서 그 권력자에게 주위사람들에 대해서 평가하기 시작한다. 얘는 어떻게 제는 어떻고….

대부분의 권력자는 주위 사람들에 대한 평가 이야기를 흥미로워하면서 귀담아 듣는다. 그러다보면 그 권력자조차도 그런 말을 하는 인간에게 감화되어 어떤 중요한 결정사항을 그와함께 의논하는 지경까지 이르게 된다.

소위 말만하는, 이빨만 까는 인간들이 한국 사회를 망치는 조선시대의 양반계급의식을 그대로 가지고 생활하는 놈들이다. 문제는 한국에서 이러한 사람들 주위에 사람들이 모인다는 거다. 서로 뒷담화를 안당하기 위해서 친하게 곁에 붙어있어야 하지 않겠나…

능력을 가지고 현실세계를 바꾸는 일을 하는 사람은 이 ‘양반’ 계급의 먹잇감이 된다. 이 양반 계급은 현실에서의 능력을 가진사람을 자신이 관리하려고 한다. 그래서 나온 말이 ‘사람 관리도 능력이다’ 아니겠나. 천하의 개소리다. 그런말 하는 사람치고 사람을 제대로 관리하는 인간 못봤다.

나는 지금까지 현실 능력을 갖추기 위해서 노력해왔다. 말보다는 행동 아니겠나…. 한국사회의 구조적인 문제를 알면서도 이렇게 하는대에는 내가 가진 신념때문이였다. 몰라서 그렇게 행동한게 아니였다.

하지만 이제는 바꾸기로 했다. 자꾸 양반같은 놈들이 내게 꼬인다. 이런게 해달라 저런거 해달라도 부족해 이제는 돈까지 빼갈려는 인간들… 매일 새벽 2시까지 컴퓨터 앞에 앉아서 키보드를 두드린 이유가 고작 그 쌍놈같은 양반들 인생 밑바닥 깔아줄려고 했던게 아니다. 그런데 이 쌍놈의 양반놈들은 날 호구로본건지…

신념은 버리지 않는다. 하지만 나도 사람을 대하는 방법을 교체할 필요는 느낀다. 이제는 그렇게 해야 겠다. 자꾸자꾸 뭘 해주면 그걸 권리인줄 아는지… 이제는 도장깨기를 해야지, 그래야 이놈들이 자신들이 양반이다 라는 소리를 안하지…

오랫동안 그래도 인간들인데,,, 인간들인데,,,, 했지만 이제는 털끝만큼도 그런 생각을 가지지 않기로 했다. 다들 자신들의 이익을 위해서 인생을 살지 않나… 남보다 내가족, 나가 최우선일뿐인데.. 그럼 나도 내 자신을 최우선두고 인생을 살아볼련다.. 겁나 악날하게..

우리은행 전산장애 관련해 드는 생각.

지난 5월 초. 5월 5일 어린이날에 주말이라 대체휴일로 월요일까지 쉬는때였는데, 우리은행에서 전산작업으로 인해서 카드결제외엔 아무것도 안된다고 문자가 왔다. 뭔가 큰 작업을 하는 거구나만 생각했는데, 다음날에 사람들 사이에서 우리은행 전산망이 작동하지 않는다고 말을 하더라. 그날 급여를 받아야 하는 사람들은 월급이 이체가 안되었다고 하면서 불만을 토로하기도 했다.

‘은행 전산’, 차세대만 하면 장애부터…

은행 전산망은 다른 전산과는 차원이 좀 다르다. 인간세상 돈이 매우 중요하지 않은가? 그런 돈을 관리를 전산화하는 리스크는 다른 전산시스템을 능가한다.

그런데, 이러한 은행/증권 전산시스템 작업을 했다하면 장애부터 발생하고 시작하는게 문제가 아닐까?

우리나라의 IT 산업도 이제는 성숙기다. 2000년대 버블이 붕괴되면서 옥석이 가려졌고 그래서 살아남은 IT기업들이 지금까지 생종해 있다. 벌써 20년전일인데, 그동안 전산시스템 작업을 한두번 해본것도 아닐텐데 이런일이 반복되는게 안타갑다.

그 이유는 아주 명확하다. 은행/증권 전산시스템 작업은 아주 오래전 과거의 개발  프로세스를 그대로 가지고 가고 있기 때문이다. 기획-분석/설계-개발-테스트-오픈.

최근 소프트웨어 개발방법론이 바뀐지가 언제인데, 아직도 저러고 있나 싶다. 특히나 리스크가 아주 클수록 작게작게 코드를 수정하고 바로바로 적용하는 방법이야말로 한번에 업데이트를 하는 방법보다 리스크가 몇 배는 적다.

이미 우리은행 차세대 구축은 2월 오픈을 지키지 못하고 5월로 미뤘지만 장애는 피할 수 없었다.

IT 가 뭔지 모르는 사람들이 사업을하니…

다음은 우리은행 차세대 구축을 맡았던 회사 관계자의 말이다.

SK C&C 홍보실 관계자는 “(오류는)전산시스템 교체 초기 어디서든 발생하는 문제로 얼마나 빨리 수정하느냐가 관건이다”며 “(우리은행 위니에서는)그렇게 큰 오류가 발생한 것도 아니다”고 말했다.

얼마나 빨리 수정하느냐가 관건이 아니라 문제가 발생하지 않도록 사전에 개발 프로세스를 정립하고 오픈을 했어야 했다. 오픈을 하면 으레 장애는 발생하는것이 IT 개발 프로세스가 아니다.

IT를 하는 사업자 입에서 저런 소리가 나온다는게 이제는 놀랍지도 않다. 홍보실 관계자라는 사람이 과연 IT 개발의 실무경험을 해봤다면 저런 소리는 못한다.

이는 어찌보면 실무적 경험을 중시하지 않는데서 원인이 있을 수도 있다. SK C&C 회사에 다니는 사람들, 그중에서 사업적인 영향력을 행사하는 위치에 있는 부장급 이상들 중에 과연 개발 경력을 수년간 가진 사람이 존재하기는 할까?

IT 사업도 사업인지라, 경영을 잘하는 셀러리맨같은 사람들이 현실의 결정권을 가지는 경우가 있다. 사업의 특성을 책으로만 읽은 수준이고 사업은 돈을 벌어야하는 것이 목표이다보니 최대한 지출을 줄일려고 한다. 개발을 그져 Copy & Paste 수준으로 보고 이미 만들어진거 버전이나 좀 올리고 서버 시스템을 최신으로 교체하는 것이 차세대로 착각하는 사람들이 사업자 중역을 이끌고 있다는게 심각한 문제다.

내가 우리은행 전산책임자라면…

절대로 사업자에 책임을 맡은 사람들과 이야기 하지 않는다. 1000여명이 투입된 이 프로젝트에서 자세히 보면 군대에서 중대장 역할을 하는 개발자들이 아주 많다. 사실상 그들만큼 이 프로젝트의 규모와 비용을 정확하게 계산해낼 사람들은 드물다.

직급, 정규직, 비정규직이 대체 무슨 소용이란 말인가… 현실을 직시하고 바꿀수 있는 힘을 가진사람을 곁에 두는것이 리스크를 줄이는 길인데도 그놈의 사업자와 수주자… 그리고 R&R을 따지면서 일을 하다보니 이 모양인지도 모른다.

아무튼 이번 우리은행 차세대는 실패다. 오픈하고난 후에 장애를 해결했다고해서 그것이 성공해다고 평가하지 않는다. 2월달 오픈을 지키지도 못했고 오픈하고 난후에 장애는 그동안에 개발 프로세스가 어떠했는지를 단적으로 보여준다.

발전 없는 사람들…

안타까운 현실이다. IT 사업을 하면서 IT를 모른다. 장애는 날수 있지만 얼마나 빨리 수정하느냐?? 그 빠른 수정을 위해서 개발 코드가 걸레짝이 되어도 상관없다는 건가. Agile 이 다 무엇이며 DevOps 가 다 무슨 소용이란 말인가……..  그져 시대에 뒤쳐지고 있지 않다는 가면을 쓰기 위한 노력일 뿐이다.

Docker 에 Volumes 추가 하기.

Docker 를 서비스 모드로 실행을 시키면 나중에 문제가되는게 하나 있다. 예를들어, MySQL 을 Docker 를 이용해서 서비스 모드로 실행시켰다고 치자. 그러면 MySQL를 위한 데이터 디렉토리 Container 내에 생성된다. 만일 MySQL을 패치된 버전으로 올리고 싶다면 어떻게 될까? 이럴 경우에 데이터 디렉토리를 Container 내에서 백업할 방법이 없다.

이를 위해서 Docker 에는 Data Volumes 을 추가 할 수 있다.

Data Volumes

데이터 볼륨은 호스트 파일 시스템을 컨테이너에 마운트 하는 방법이다. 따라서 Container 가 중지되었거나 Container 를 삭제했다 하더라도 호스트 파일 시스템에는 Container 에서 사용했던 데이터 볼륨의 데이터가 살아 있게 된다.

이를 이용하면 MySQL, Redis 와 같이 데이터를 보존해야 하는 서비스를 위해서 호스트에 파일을 저장하도록 할 수있다.

-v 옵션을 통해서 로컬 호스트 디렉토리를 Container 의 데이터 디렉토리를, 여기서는 MySQL의 데이터 디렉토리인 /var/lib/mysql ,  마운트 하도록 했다.

이렇게 서비스를 실행하고 난 후에 호스트의 /home/systemv/mysql/data 디렉토리를 살펴보면 MySQL 위한 데이터 파일이 생성되었음을 확인 할 수 있다.

Docker inspect [Container]

이 명령어를 이용하면 Container 의 정보를 확인 할 수 있다. Data Volume 상태와 Container 의 IP 주소등을 다양한 정보를 살펴볼 수 있다.

Eclipse Jeeeyuls themes

Sometime ago, I found themes of Jeeeyul’s for the Eclipse. But now I can’t find it anywhere in the internet. I have some themes of Jeeeyul’s, so I post it.

Download: Jeeeyul’s themes

If you want to use it, first you should install Jeeyul’s Theme plugins for the Eclipse.

jeeeyul's themes for the Eclipse
jeeeyul’s themes for the Eclipse