%ED%8C%81

2020-05-07
이전 포스팅 에서 이어지는 내용이다. 전체 프로젝트는 여기 에서 받을 수 있다. 이번에는 리모트 디버그에 대해서 정리할 것이다. 공식 문서 에도 소개가 잘 되어 있지만, 이 문서도 보고 바로 따라하기에는 좀 어렵다. 여기서 정리할 내용이다. Docker Compose 설정 GDB 설정 Remote Debug via GDB/gdbserver Use Remote GDB Server Use GDB Remote Debug GDB Server로 Target Process를 실행 Target Process를 실행 후에 GDB Server를 해당 PID로 Attach Dockerfile, docker-compose.yml 그리고 CMake의 build type, compile debug option, release option과 같은 세부 사항이나 GDB Server의 옵션 등과 기타 디버그 설정 등도 여기서 모두 설명하면 너무 길어지므로 생략하고, 리모트 디버그 연동만 정리하겠다. 이전 포스팅에서 Debugger 설정을 다음과 같은 상태로 두고 넘어갔었다....
2020-04-26
0과 1로 구분된 데이터가 있다. 그런데 이상하게 구분값 1은 0, 0은 1로 바꾸고 싶네? 치환 명령어 ' %s/1$/0/ '와 ' %s/0$/1/ '를 순서대로 실행하면 1 -> 0, 0 -> 1로 바뀔까? 첫 번째 작업에서 1이 사라지고 0만 남기 때문에, 결과적으로 마지막엔 1만 남는다. 이럴 때 흔히 쓰이는 꼼수 ① 0 -> 1 치환 시 중복을 막기 위해 1 -> 11로 잠시 피신. ② 0 -> 1 치환 ③ 11 -> 0 치환 이게 귀찮다면? 구글신께 물어봤다. 오~ 조건 치환이 가능하단다. Conditional replace in vim ① 정규표현식 '...
2020-04-23
자바로 개발된 프로젝트를 유지 보수하다 보면 Object Serialization, Deserialization이 사용된 코드를 흔하게 볼 수 있다. 간단하게 Serializable 인터페이스를 구현했거나 Externalizable 인터페이스를 구현해서 JSON 등의 다른 포맷으로 영속화를 시켰는지는 여기서 중요하지 않다. serialVersionUID를 명시적으로 정의하지 않고 생략했다면, 모두 동일한 문제를 가지고 있다.   문제는 아래와 같은 상황에서 발생한다. A 객체를 직렬화하여 Redis나 DB 등 외부에 저장하고, 저장된 값을 A 객체로 역직렬화하여 사용하고 있다....
2020-04-14
게으름이 이렇게 무섭다. 이걸 포스팅하겠다고 메모해 놓은 지 반년이 지났다. (이렇게 밀린 메모가 더 있다는 건 비밀이다.) 서버 개발자로 일을 하다 보면 Linux 환경만 지원하는 서버를 유지보수 해야 할 수도 있다. 아마 epoll을 사용한 서버일 것이다. 어떤 개발 환경으로 세팅이 되어 있을지는 모르겠지만, 해당 서버에 직접 들어가서 vi로 작업을 하고 make로 빌드하고 gdb로 디버깅을 해도 된다. 또는, Docker로 같은 Linux로 개발 환경을 만들고 visual studio code를 리모트로 연동해도 된다. 방법은 다양하다. 하지만, 나는 에디터나 터미널에서 vi로 작업하고 make를 실행하고 git 커맨드를 직접 사용하는 진성 개발자가 아니다. 편리한 IDE를 선호한다. vi의 손맛을 좋아하며 코딩하던 나의 멋진 취향은 Sun의 Enterprises 3500에서 개발할 때까지였다. 여기서 소개하는 방법은 CLion과 Docker를 연동하는 방법이다....
2020-03-29
지난 글 에서 elapsed 필터로 멀티 라인 구조를 갖는 하나의 트랜잭션 실행 시간을 구해봤는데 멀티 코어가 멀티 라인 로그를 나눠 처리하는 로그스태시의 동작 방식 때문에 잘 되지 않았다. 그렇다고 싱글 코어를 쓰자니 로그양이 너무 많고 (..) test.log 멀티 라인 구조를 싱글 라인으로 바꿔보자. Logstash codec 플러그인 중 multiline 은 서로 다른 시점에 발생한 여러 개의 로그를 특정 조건으로 합쳐준다. 다음은 message 필드에 'EndJob' 패턴이 존재하면 직전 (previous)...
2020-02-12
특정 작업의 생성부터 소멸까지의 수명 주기가 jobID라는 식별자로 구분되는 로그가 있다. 하나의 작업에 소요된 시간을 구해보자. 마지막 작업이 실행된 시간에서 최초 작업 실행 시간을 빼면 된다. 근데 어떻게 하지? 가장 간단한 방법은 서로 다른 시점에 발생한 두 로그 간의 시간차를 계산해주는 로그스태시 필터 플러그인 elapsed 를 사용하는 것. 다음은 파이프라인 설정. 작업을 시작할 때는 send_begin, 작업이 끝날 때는 send_end 태그를 추가했으며, elapsed 플러그인은 해당 태그를 이용해서 계산이 필요한 시간대의 시작과 끝을 결정한다....
2019-12-31
작년 과 재작년 에 이어 벌써 글쓰기 회고만 3번째다. 읽는 분들에게는 재미없는 글이지만, 내가 popit 저자 중에서 글을 가장 많이 쓰는 축이란 점을 생각하면 공유가 아예 무의미하지는 않겠다. 올해 어떤 기록을 했으며, 그 변화가 내년에는 글로써 어떤 영향을 미칠지 대충이나마 짐작하게 할 수도... 27개 글쓰기와 ㅍㅍㅅㅅ 재발행 올해 발행한 글을 새어 보니 총 27개를 썼다. 2018년에 29개를 썼는데, 2개가 줄었다. 하지만, (양만 보면) 발행해도 될 분량을 써놓고 (공유할 가치가 없다고 보고) 지운 것이 있으니 숫자상 차이는 별 의미가 없다 하겠다. 2018년에 글쓰기 관련해 가장 눈에 띄는 일은...
2019-12-12
책을 읽고 난 느낌을 적는 것이 독후감이다. 책을 읽으면 어딘가 쓰고 싶은 욕구가 생긴다. 그래서 여기 저기 독후감을 썼다. 목적을 갖고 한 행위는 아니지만, 즉흥적인 쓰기를 했던 기록을 찾아보면서 읽고 쓰는 행위가 내게 가르쳐준 것이 무엇인지 돌아보려고 이 글을 쓴다. 네 가지 형태로 썼던 독후감 말로 하거나 책 여백에 쓴 것도 있지만, 기록을 쉽게 찾을 수 있는 것만 찾아 보면 대충 3곳에 집중적으로 썼다. 첫번째는 바로 이곳 popit 이다. 책 한권을 읽고 책에 대해 쓴 전형적인 독후감을 두 개를 썼다....
2019-10-21
#꼰대개발자가살아온이야기 #05 전제) 개인적인 사견일 뿐이고, 제 경험을 공유하는 것일 뿐입니다. 교육 개발자 교육이란게 대체 무엇일까요? 전 교육 전문가는 아니라서 정의하기가 좀 뭐하지만... 그래도 제 경험을 바탕으로 정의를 내려보자면 ”스스로 찾아서 공부할 수 있도록 서포트해주고 가이드 해주는 것” 물론 흔히들 말하는 주입식 교육도 분명 필요합니다. 기본(?)적인 사항은 외워야 하거든요~ 최소한 무언가를 할 때 어딘가를 찾아야한다더라, 이 분야는 누가 우리 회사에서 제일 잘한다드라, 이건 개발자라면 꼭 알아야 하는 최소한의 지식이라드라... 같은거 말이죠 ^^ 모두가 알고 있는 사실 하나. 컴퓨터가 이해하는 것은 0과 1뿐이다. 라고 다들 알고 있죠. (양자컴퓨터는 제외를 흑흑). 전산관련 전공 컴퓨터 구조 시간에 배우는 내용입니다. (ref....
2019-10-11
#꼰대개발자가살아온이야기 #04 전제) 개인적인 사견일 뿐이고, 제 경험을 공유하는 것일 뿐입니다. 독서 하늘이 높고 말이 살찐다.”는 천고마비의 계절이 돌아왔습니다. 제가 가을을 탄다는 말은 아니고 이 시기에 책을 사시는 분들이 제 주변에 많이 보입니다. ^^ 그것만으로도 반은 성공했다고 생각합니다. 읽든, 안읽든... 마음만이라도... 그런데 절반이 아닌 그 이상의 성공을 바라시고 구매하시자나요? 제가 읽은 그리고 제가 존경하는 분들이 책을 읽는 방법을 공유해보려고 합니다. 물론 책 읽는 방식은 개인차가 있음을 전제로 합니다. 저는 이상하게도 기술서적 외에는 책을 잘 읽지 않습니다. 단, 페이스북 친구. 흔히 "페친"이라고 칭하는 분들이 책을 출간하면 대부분 사서든 얻어서든 읽어보려고 하는 편입니다. 제 지인 중에 책을 출간하는 분들은 개발자보다 비개발자가 더 많더군요. 그래서 전 이분들 덕분에 비개발서적을 읽곤 합니다. (와이프가 그렇게 읽어라곤 할 땐 안읽...) “백지퍼즐 - 치우 (신명희)” ”공부는 망치다. - 유영만 (한양대 교수님, 지식생태학자) ”내 안의 거인 - 김진향” ”아직 불행하지 않습니다. - 김보통” ”마파영(마인드 파...
더보기