%EA%B0%9C%EB%B0%9C%EC%9E%90

2022-04-18
요즘 라이브 서비스의 레거시 코드 리팩터링을 하고 있다. 흔히 가변 상태를 관리하는 Context 클래스가 레거시 코드에 있는 건 새삼스럽지 않았지만, 과도하게 사용하고 있어서 정리가 필요했다. 가변 상태 Context 사용 시 문제점 가변 상태를 가지는 Context 클래스가 2, 3개도 도 아니고 10개쯤 되면 과하다고 생각한다. 이렇게 많은 Context 클래스들이 서로 물고 물리는 종속성을 가지고 각기 다른 클래스에 넘기고, 넘겨받고, 가변 Context의 레퍼런스가 다양한 함수들로 넘겨져 전역 변수처럼 여기저기서 사용되면서 어딘가에서 A가 set을 하고 다른 곳에서는 B가 get을 하는 상황은 코드를 매우 읽기 어렵게 만들었다. 읽기 어렵다는 것은 Context를 수정할 때, 사용처를 모두 추적하는 것이 어렵고, 문제 발생 시 디버깅 역시 어렵다는 것이다.   다른 것보다 이걸 먼저 해결하기로 했다. 이 Context 클래스를 정리하는 리팩터링을 점진적으로 진행하여 총 10개에서 6개를 삭제하고 2개는 사이즈를 많이 줄였다. 프로덕션 코드에서 총 568라인을 삭제했다. 당연히 기능에 변화는 없다. Context를 정리하는 리팩터링이 일단락되어 ...
2021-12-13
자바 객체를 영속화하는 방법의 하나로 자바 직렬화를 사용할 수 있다. 단순하게는 Serializable 인터페이스를 구현하거나 더 확장성 있는 방법으로는 Externalizable 인터페이스를 구현하는 것을 선택할 수 있고, 자바 직렬화에 종속되지 않는 다른 방법을 선택할 수도 있다. 일단, Serializable 인터페이스를 구현한 클래스의 인스턴스가 외부 저장소에 영속화되면 호환성을 유지하면서 해당 클래스의 필드를 수정하기는 어렵다. ( https://docs.oracle.com/en/java/javase/11/docs/specs/serialization/version.html...
2021-04-11
기술을 기반으로 현재 진행되고 있는 프로젝트와 서비스는 물론 기술팀의 사람 관리 문화 및 프로세스에 대한 관리 역할을 담당하는 것이 바로 VP of Engineering의 역할입니다. CTO가 뛰어난 기술 리더이며 전체 아키텍트 팀의 리더라면, VPE는 좀 더 많은 수의......
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-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-13
개발자가 아닌 관리자가 경험한 재택근무 [1] : 재택유감! 개발자가 아닌 관리자가 경험한 재택근무 [2] : 믿는구석! 베이징 S/W개발회사의 재택근무 이야기 마무리 : Not System But Culture ■ 영리한 협업도구 Dooray 세상에 좋은 협업 툴들이 많습니다. 커뮤니케이션 기반의 Slack과  PMS(Project Management System)계열의 여러 솔루션들이 대표적이죠. 그런데 일하는 방식에 많은 영향을 미치는 도구를 선정할 때는 신중할 필요가 있다고 여겨집니다. 자칫 잘못하면 쓸데없이 많은 커뮤니케이션을 하여 몰입도가 떨어질 수 있고, 또는 너무 딱딱한 통제로 인해 직원들이 요식행위를 할 수도 있기 때문입니다. 그런 측면에서 우리회사는 Dooray에서 요식행위 없이 적절한 양만큼의 의사소통을 하며 협업을 해오고 있습니다. 이에 Dooray를 직접 사용하는 입장에서 두레이의 장점을 간략히 설명하겠습니다. 물론 다른 협업툴을 써보지 않아서 다른 툴들의 장점과 겹칠 수도 있습니다....
2020-03-11
개발자가 아닌 관리자가 경험한 재택근무 [1] : 재택유감! 개발자가 아닌 관리자가 경험한 재택근무 [마무리] : Not System But Culture! 베이징 S/W개발회사의 재택근무 이야기 제 2편 : 믿는 구석! ■ 향후 이어질 이야기들의 밑밥을 깔기 위해 회사 소개부터 간단히 하겠습니다. 제가 몸 담고 있는 회사는 한국 대기업이 중국 사업을 위해 투자한 IT회사로 12년전에 설립되었습니다. 베이징에 위치하고 있으며  80여명이 함께 일하고 있습니다. 그중 한국인이 대충 5명 정도 됩니다. 한국에 있는 그룹 내 IT법인에서 구축한 중국 리테일 시스템의 오프쇼어링 운영 업무를 꽤 오랫동안 하다가 '16년부터 어지간한 회사들은 다 하고 있다는... "Cloud X Open Source X Micro Service Architecture X Agile"기반으로 서비스를 주도적으로 만들며 변신해 왔습니다....
2020-03-10
개발자가 아닌 관리자가 경험한 재택근무 [2] : 믿는구석! 개발자가 아닌 관리자가 경험한 재택근무 [마무리] : Not System But Culture! 베이징 S/W개발회사의 재택근무 이야기 들어가며 : 재택유감 在宅遺憾 필자는 한국보다 한 달 먼저 중국에서 직원이자 한 회사의 책임자로서 재택근무를 체험했습니다. 제 실전 경험담을 공유하고, 또 근본적으로 고민해봐야 할 "일하는 문화"에 대한 생각도 나누고자 합니다. ■ 재택근무 불안감 중국 우한에서 시작된 코로나 바이러스가 중국을 넘어 전세계로 퍼저나가며 의료와 방역 뿐만 아니라 사회 여러 방면에 영향을 미치고 있습니다. 그중 베일에 쌓여있던 사이비 종교단체의 무책임한 행태 때문에 많은 사람들이 생명을 잃고 고통에 빠지게 된 것이 가장 안타까울 따름입니다. 한편 저같은 평범한 직장인들이 직접적으로 체감하는 가장 큰 변화는 아마도...
2019-12-17
안녕하세요 ! 간만의 블로그 글을 쓰는 것 같습니다. 이번에는 예전에 시도했었던 Windows + GitLab Runner + Spring 연동을 해보았던 경험을 공유하고자 합니다. 여러 블로그를 공식적으로 참조를 했었고, 그 과정에서 최종적으로 했던 작업은 Windows + Local Tomcat + GitLab Runner 입니다. 도움받았던 사이트도 많아서 함께 명시하고 같이 경험하실 수 있었으면 합니다. 원본 : GitLab 공식 사이트 0. 들어가기에 앞서.. Gitlab - Runner를 하게 된 계기는 개발 시 소스 레포지토리와 연동되어 Pull Request 발생 시에 테스트 자동 실행, 실행 결과 자동 통보 등과 같은 환경을 구성을 많이 하시는 분들이 많았고, 직접 해보고 싶었습니다. 이를 위해 여러가지 도구들이 있는데 가장 많이 사용되는 방식이 github과 이를 중심으로 하는 에코 시스템들입니다. 하지만 직접 private하게 레포지토리를 구성하는 경우 gitab을 설치하여 많이 사용하는데 직접 이런 체계를 구성해야 했습니다. 이번 글에서는 이런 상황속 특히 Windows 상황에서 gitlab의 CI/CD를 지원하는 Gitlab Runn...
더보기