Latest

코드 복잡도 줄이기 (Cyclomatic Complexity, NPath Complexity)

코드 복잡도 줄이기 (Cyclomatic Complexity, NPath Complexity)

이번 포스팅도 어떤 백엔드 서비스의 코드를 리팩터링한 내용을 정리하는 것으로, 이번에는 코드 복잡도 줄인 리팩터링에 대한 내용을 정리한다. 이전에 포스팅했던 '가변 Context 클래스는 신중하게 사용하자'와 '고차 함수로 의존성 줄이기'로 코드의 의존성 문제들이 많이 정리된 상태라서 복잡도 줄이기를 진행할 수 있었다. 아래는 어떤 백엔드 서비스

By 이 상우
파이썬으로 티스토리 백업 유틸리티 만들기

파이썬으로 티스토리 백업 유틸리티 만들기

배경 티스토리를 사용한 지 10년이 넘다 보니 글도 제법 쌓였고, 백업도 한번 받고 싶은데, 백업 기능이 없다. (없었다.) 백업 기능을 만들어 달라고 문의도 해봤는데, 안 만들어준다. 구글링을 해보니 티스토리 백업 유틸리티가 제법 많이 나오기는 하는 데 사용하기가 조금 애매하던 차에 이번에 고등학교 로봇동아리 학생들을 대상으로 '개발자에 대한 궁금증'

By 이 상우
고차 함수로 의존성 줄이기

고차 함수로 의존성 줄이기

스프링을 사용한 프로젝트에서 종종 보이는 어노테이션에 사용한 의존성 주입의 남용과 오랜 세월의 흐름으로 의도치 않게 서비스 간의 의존성 그래프가 복잡하게 강결합으로 묶이면서 코드를 읽기도 어렵고 단위 테스트를 구성하기도 어려운 상황이 생긴다. 아래는 어떤 백엔드 서비스의 의존성 그래프다. 순환 종속성이 포함된 복잡한 왼쪽의 의존성 그래프를 오른쪽의 단순한 의존성 그래프로 리팩터링하여 라이브

By 이 상우
하위 버전 CentOS Linux에 배포할 때의 glibc, libstdc++ 라이브러리 버전 문제

하위 버전 CentOS Linux에 배포할 때의 glibc, libstdc++ 라이브러리 버전 문제

배경 최근에 읽은 ‘구글 엔지니어는 이렇게 일한다.’에서 컴파일러 버전업에 대한 이야기가 나와서 예전에 작업했던 GCC 컴파일러 버전업에 대한 내용을 정리해본다. 몇 년 전 새로운 팀에 합류했을 때 서비스 중인 서버군들 중에서 C++ 구현된 서버군이 gcc 4.4.7을 사용하고 있었고, 컴파일러 버전이 낮아서 모던 C++의 시작인 C++ 11를

By 이 상우
가변 Context 클래스는 신중하게 사용하자

가변 Context 클래스는 신중하게 사용하자

요즘 라이브 서비스의 레거시 코드 리팩터링을 하고 있다. 흔히 가변 상태를 관리하는 Context 클래스가 레거시 코드에 있는 건 새삼스럽지 않았지만, 과도하게 사용하고 있어서 정리가 필요했다.   가변 상태 Context 사용 시 문제점 가변 상태를 가지는 Context 클래스가 2, 3개도 도 아니고 10개쯤 되면 과하다고 생각한다. 이렇게 많은 Context 클래스들이 서로 물고

By 이 상우
자바 직렬화(Java Object Serialization)에 유연성 더하기

자바 직렬화(Java Object Serialization)에 유연성 더하기

자바 객체를 영속화하는 방법의 하나로 자바 직렬화를 사용할 수 있다. 단순하게는 Serializable 인터페이스를 구현하거나 더 확장성 있는 방법으로는 Externalizable 인터페이스를 구현하는 것을 선택할 수 있고, 자바 직렬화에 종속되지 않는 다른 방법을 선택할 수도 있다. 일단, Serializable 인터페이스를 구현한 클래스의 인스턴스가 외부 저장소에 영속화되면 호환성을 유지하면서 해당 클래스의 필드를 수정하기는 어렵다.

By 이 상우
스타트업에서 CTO의 역할

스타트업

스타트업에서 CTO의 역할

CTO (Chief Technical Officer) 란? CTO (Chief Technical Officer, 또는 Chief Technology Officer)는 우리말로 ‘최고기술책임자’라고 불리며 보통 회사 내에서 기술과 관련된 최종 의사결정을 내리는 역할을 말합니다. 일반적으로 기술팀을 관리하며 회사의 전략과 기술의 전략이 잘 어울리도록(aligment) 노력하는 일을 합니다. 그러나 CTO의 역할은 늘 고정적인 것이 아니라 회사의 규모,

By Hosang Jeon
Remote Debug via GDB/gdbserver Of CLion With Docker

Remote Debug via GDB/gdbserver Of CLion With Docker

이전 포스팅에서 이어지는 내용이다. 전체 프로젝트는 여기에서 받을 수 있다. 이번에는 리모트 디버그에 대해서 정리할 것이다. 공식 문서에도 소개가 잘 되어 있지만, 이 문서도 보고 바로 따라하기에는 좀 어렵다. 여기서 정리할 내용이다. * Docker Compose 설정 * GDB 설정 * Remote Debug via GDB/gdbserver * Use Remote GDB Server * Use GDB Remote Debug

By 이 상우
serialVersionUID가 없는 Serializable Class를 수정해야 할 때

serialVersionUID가 없는 Serializable Class를 수정해야 할 때

자바로 개발된 프로젝트를 유지 보수하다 보면 Object Serialization, Deserialization이 사용된 코드를 흔하게 볼 수 있다. 간단하게 Serializable 인터페이스를 구현했거나 Externalizable 인터페이스를 구현해서 JSON 등의 다른 포맷으로 영속화를 시켰는지는 여기서 중요하지 않다. serialVersionUID를 명시적으로 정의하지 않고 생략했다면, 모두 동일한 문제를 가지고 있다.   문제는 아래와 같은 상황에서 발생한다. 1. A 객체를 직렬화하여

By 이 상우
Full Remote Mode Of CLion With Docker

Full Remote Mode Of CLion With Docker

게으름이 이렇게 무섭다. 이걸 포스팅하겠다고 메모해 놓은 지 반년이 지났다. (이렇게 밀린 메모가 더 있다는 건 비밀이다.) 서버 개발자로 일을 하다 보면 Linux 환경만 지원하는 서버를 유지보수 해야 할 수도 있다. 아마 epoll을 사용한 서버일 것이다. 어떤 개발 환경으로 세팅이 되어 있을지는 모르겠지만, 해당 서버에 직접 들어가서 vi로 작업을 하고

By 이 상우
개발자가 아닌 관리자가 경험한 재택근무 [마무리]

개발자가 아닌 관리자가 경험한 재택근무 [마무리]

개발자가 아닌 관리자가 경험한 재택근무 [1] : 재택유감! 개발자가 아닌 관리자가 경험한 재택근무 [2] : 믿는구석! 베이징 S/W개발회사의 재택근무 이야기 마무리 : Not System But Culture ■ 영리한 협업도구 Dooray 세상에 좋은 협업 툴들이 많습니다. 커뮤니케이션 기반의 Slack과  PMS(Project Management System)계열의 여러 솔루션들이 대표적이죠. 그런데 일하는 방식에 많은 영향을 미치는 도구를

By Gereon
개발자가 아닌 관리자가 경험한 재택근무 [2]

개발자가 아닌 관리자가 경험한 재택근무 [2]

개발자가 아닌 관리자가 경험한 재택근무 [1] : 재택유감! 개발자가 아닌 관리자가 경험한 재택근무 [마무리] : Not System But Culture! 베이징 S/W개발회사의 재택근무 이야기 제 2편 : 믿는 구석! ■ 향후 이어질 이야기들의 밑밥을 깔기 위해 회사 소개부터 간단히 하겠습니다.   제가 몸 담고 있는 회사는 한국 대기업이 중국 사업을 위해 투자한 IT회사로 12년전에 설립되었습니다.

By Gereon