'육각형 개발자'을 읽고

Daniel_Yang·2026년 1월 3일

정신없이 일하고 개발하다보니 기초를 잊어버릴 때가 종종 있는 것 같다. 다시 한번 내 상태를 점검하고 review하기 위해 도서관을 구경하다가 꽂힌 책을 읽어보았다.

육각형개발자 책

개발이란

똑같은 패턴? 어디까지가 개발인가?

  • 코딩-구현 기술은 개발의 일부
  • 새로운 구현기술 != 성장
  • 서비스 회사
    - 고객 경험이 좋아야 수익-투자가 높다. 그래서 지속가능성이 높음

개발에 필요한 것(역량)

  • 구현 기술
  • 설계 역량 -> 시장 변화에 쉽게 해당하는 구조 -> 이게 결정적이다.
  • 업무 관리와 요구 분석, 공유, 리드&팔로우

구현 기술

  • 학습 전략, 유행 상관없는 기초

  • 학습대상 기준
    1. 현재 사용중인 기술
    2. 문제를 해결하기위한 기술

  • ex)
    - 스프링으로 된 API 지식 - Controller, Json 변환 처리, 트랜잭션 처리(원하는 대로 롤백이 안됨)
    - Database: 최대 커넥션 유지시간, 개수, 계정 권한과 같은 주요 설정 수정
    - 메시징 프로그램: kafka 사용 시 주요 구성 요소인 파티션, 레플리카, 프로듀서, 컨슈머의 동작 이해 => 데이터 손실과 서비스 중단 최소화 가능
    - 운영체제: 부팅 시 자동으로 PG 시작하기, 권한 설정, 스케줄링, 운영체제 상태보기 등

  • 구현기술 학습에는 끝이 없다. 주기적으로 탐색하고 학습하자

  • 유행 상관없는 개발 기초
    - HTTP 프로토콜, 네트워크 프로그래밍 기초, 동시성 처리, 프로그래밍 언어 등

구현 기술 적용

  • 기술 도입 시 고려사항
    1. 신뢰 구축: 신뢰받아야한다.
    2. 함께 할 동료: 기술에 대해 함께 논의하고 공감대를 형성하는 동료
    3. 타당성: 답이 아닌 질문을 따라하라. 즉, 다른 곳에서 해당 기술 사용하는 맥락을 따라해야!
    4. 점진적 적용
    5. 시장 상황: 해당 기술에 능숙한 인력풀이 많은가?
  • POC: 개념 증명

소프트웨어 가치와 비용

  • SW 버전이 올라가면 개발 비용이 올라간다.
    - 세상의 변화에 맞춰 같이 변해야하기 때문
    - 이게 유지보수의 중요!
    => SW의 가치를 유지한다. 유지보수를 지루하다고만 보지말라

유지보수 비용 낮추기

  • 코드품질은 유지보수 비용과 관련이 있다.
    1. 프로그래밍 패러다임을 알맞게 적용
    2. 코드 가독성 높이고 전형적인 디자인패턴 사용, 요구에 알맞은 아키텍처 적용
    3. 프로세스와 문화

코드 이해

  • 코드 개발-변경에는 코드 이해 시간이 많이 요구된다. 그래서 이를 줄이려면
    1. 코드 제대로 이해하는 역량
    - 코드 시각화 ex) UML
    - 클래스 다이어그램
    - Activity 다이어그램: 논리적 단위
    - 시퀀스 다이어그램: 런타임. 시간 흐름에 따라 구성요소 간 연동 과정
    - 상태 다이어그램
    - 스크래치 리팩토링: 이해용 리팩토링. 끝나면 원복
    2. 이해하기 쉬운 코드 작성 역량
    - 가독성 ex) 켄트백의 구현코드, 클린 코드 => 규칙을 만든 상황을 이해하자
    - 작성법
    - 이름, if 줄이기, 변수 줄이기, 값 변경 최소화, 길지않은 코드
    - 알맞은 파라미터 사용
    ex) MAP: 코드양 적고, 초기에는 좋으나 개발 생산성이 점점... 자동완성x, 코드 수정 시..
    - 추상화 수준 맞추기
    - 메서드 추출할때. 즉 depth를 맞추라.
    - 메서드 계속 이동하는 것도 흐름이 끊긴다.

응집도와 결합도

  • 응집도: 관련 도메인이 얼마나 같은 모듈에 존재 => 수정시 같은 곳에서만 수정되도록!
    - 목표
    1. 가독성
    2. 수정 비용 낮추기
    3. 단일 책임: 구성요소를 수정할 이유는 하나여야한다. 캡슐화를 통해 충족된다!

  • 결합도: 두 모듈이 서로 의존하는 정도 => 한 쪽 수정하면 다른 쪽도 수정해야하면 결합도가 높아지는 것
    - 수정대상이 많으면 가독성 저하, 수정비용 증가
    - 해결 방법: 추상화 타입(구현체 별도), 이벤트, 상속보다는 조립


리팩토링

  • legacy에 대한 정의: 정의는 다양하나, 공통점은 수정이 어렵다는 것
  • 참고책: 리팩터링 2판(2020)
  • 리팩토링의 목표: 코드 수정 비용 낮추기 위해 코드를 수정하기 쉬운 구조로 변경
    - 기존 동작 유지, 내부 구조 변경
    - Test Code 필요
    - 미사용코드는 todo 삭제예정(날짜)로 주석 처리하자
  • 리팩토링 방법: 미사용 삭제, 매직넘버, 이름 변경, 메서드 추출(가독성-응집도), 클래스 추출, 클래스 분리, 메서드 분리, 파라미터값 정리
    +같은 for문 내 작업 분리
    - for문 더 돈다고 걱정하지만 대부분 성능문제 상관없다. 문제가 될 때에 최적화하면 되는 것. 오히려 이해하기 좋은 코드로서의 이점이 더 있다.

테스트

  • 테스트 코드 작성이 어려우면 테스트 카능성 높이기만이라도 해야한다.
  • 리팩토링을 위한 Test Code
  • 다양한 테스트 코드를 작성하면서 업무에 대한 이해도가 높아진다!
  • TDD: 코드 작성 - 구현 - 코드 정리의 과정을 반복
    - 예외 case 먼저. 그리고 정상 case
    - 테스트 코드는 다른 테스트 추가를 쉽게한다.
    - edge case를 분별하기 쉽다.
    - TDD는 설계 지원
    - 테스트 대상의 이름, 메서드, 파미터 등을 결정해야한다. 또한 테스트 대상이 직접 기능을 구현하는 게 아니라면 다른 타입에 구현을 구현을 미루는 형태로 역할 분리 => 이게 설계 과정

    - 처음에는 코드 작성시간이 높지만 반복되는 테스트 시간이 줄어든다. 추가로, 일부만 검증하면 되기 때문에 디버깅 시간이 줄어든다.
  • 외부 연동은 별도 타입으로 분리하자

아키텍처 - 패턴

  • 아키텍처 역량: 주니어-시니어 구분 기준
  • 아키텍처: SW 추상적인 구조
    - 결정요소
    1. 기능 요구사항: SW로 해결하고자하는 문제
    2. 품질 속성(비기능 요구사항): 성능, 확장성, 도메인 준수, 가용성, 보안, 유지보수성
    - 품질 속성의 trade off: 품질속성이 높아지면 시스템 복잡도가 높아진다.
  • 품질 속성

=> 아키텍처에 따라 적합, 부적합 case 구분하기!

빅뱅방식: 아키텍처를 바꾸기 위해 모든 걸 다시 개발 ex) 차세대 프로젝트

  • 최신 장비와 최신 SW를 사용해서 기존 시스템을 새로 구현하는 것
  • 단점: to-be 신규 요구사항. as-is 기능 누락. 시간이 오래 걸린다.
    => 점진적으로 구조 변경: 모놀리식 1개 -> 모놀리식 2개 등 서비스 분리 + 비동기 연동 by 메시징 시스템

패턴 익히기

  • 패턴: 특정 맥락에서 반복되는 문제해결법
  • 패턴의 종류: 아키텍처 패턴, 디자인 패턴, 기업 통합 패턴, 결함 허용 패턴
    - 아키텍처 패턴: 아키텍처 수준에서의 패턴
    ex) 포트-어댑터, 마이크로서비스, 이벤트 기반
    - 이벤트 기반은 탄력성과 성능에 장점 but 트랜잭션 처리 복잡, 테스트 어려움
    - 디자인 패턴: ex) GoF 디자인 패턴 - 전략, 커맨드, 싱글톤, 템플릿, 팩토리 메서드, 프록시 등
    - 기업 통합 패턴: 파일 전송부터 메시징에 이르기까지 시스템 간 통합을 위한 패턴
    - 최근에는 기업 간 연동뿐 아니라 내부 시스템 간 연동도 증가하는 추세이기 때문
    - 결함 허용 패턴 ex) 하트비트, 재시작, 재시도 제한, 서킷 브레이커 등 => 주로 MSA

업무 관리

  • 업무 관리의 기초: 업무 나누기, 위험 관리, 요구 사항
  • 점진적-반복적 개발, 수작업 줄이기, 이유와 목적

업무 나누기

  • 개발 계획
    - 업무의 크기에 따라 일하자. 일은 하루에서 수일 이내로 끝낼 수 있는 크기로 나누자.
    - 계획이 있어야 진행상태 파악. 변화에 대응.
    - 계획을 세우려면 일의 규모를 파악해야한다.
    - 규모를 파악하려면 작업 목록이 필요하다.
    - 완료는 개발 + 검증까지

위험 관리

  • 스스로 위험 신호 감지시 즉시 공유
  • 겪었던 경험으로 나중에 시니어가 되면 주니어 개발자가 놓치기 쉬운 위험요소를 확인하고 해소 필요
  • 미리 위험 목록 작성 + 등급 매김

변경되는 요구사항

  • 바뀌는 요구사항 단계 : 초기 > 중간 > QA 과정에서
  • 요구사항의 변동 폭을 줄이려면
    1. 왜 이런 요구사항을 원하는지 이해하려는 노력 필요
    => 이를 고민하면 이해관계자가 원하는 결과에 가까운 산출물을 얻기 쉬워진다.
    2. 요구사항을 나눠서 분석하자
    - 초반에 모든 것을 세세하게 분석 x. 개략적으로.
    - 전체 요구사항 중 절반을 초반에 집중 개발. 그 다음에 나머지 요구사항 정리
    - agile 역시 비슷하다. 스크럼에서 스프린트를 진행할 때 앞으로 진행할 2~3번의 스프린트에서 개발할 요구사항만 자세하게 도출. 다른 요구사항은 상세하게 기술하지않고 이름과 개요 정도만 도출. 필요한 시점에 세부 요구사항을 만들면 불필요한 시간 낭비 줄여준다.
  • 우선 순위 세우기 ex) 이번 오픈은 어디까지. 다음 오픈 때 이걸 하자는 둥

점진적 - 반복적 개발

  • 점진적 개발: 결과물을 구분되는 조각으로 나누고 각 조각을 점진적으로 완성하는 방식 ex) 스크럼의 스프린트
    - 스프린트: 고정된 기간을 정하고 그 기간에 선택한 작업을 완료하는 것을 목표로 진행하는 작업 단위
    - 개발 기간동안 이런 스프린트를 지속하며 하나의 스프린트가 끝나면 출시할 수 있는 결과물이 나온다.
    => 스프린트마다 가치를 만든다.
    - 점진적 개발의 핵심은 작업을 분할해서 더 빨리 가치를 제공하는 데 있다.
  • 반복적 개발: 사용자 요구사항 또는 제품 일부분을 반복해서 개발하여 목표로 하는 결과를 만드는 방식
    - 주로 난이도가 높은 개발 진행시에 주로 사용 ex) 60% -> 80% -> 100% 수준

이유와 목적 생각하기

  • 요청 시에 이유와 목적을 설명해야 목표한 것을 이루기 쉽다.
  • 뿐만 아니라 맡은 업무에 대해서도 이유와 목적을 알아야!

정리하고 공유하기

  • 글로 정리해서 공유하기, 발표하기

글로 정리해서 공유하기

  • 글의 주제, 개요, 목적, 대상 => 목차
  • SCQA 프레임워크
    - Situation, Complication, Question, Answer
  • 모호한 표현 줄이기
  • 배경, 정보 제공하기(Context)
  • 5가지 글쓰기 팁
    - 문장 짧게 쓰기
    - 글머리 기호 목록-번호 목록 사용하기
    - 표나 그래프 사용하기
    - 그림 사용하기
    - 시각적 효과 사용하기
  • 평소 실천
    - 출퇴근 이동 시간: 글의 주제나 내용 흐름 등을 정리한다.
    - 저녁: 자기 전에 20분~1시간 정도 시간을 내서 글을 쓴다.
    - 점심시간: 점심을 먹고나서는 남는 시간을 활용해서 글을 쓴다.
  • 글쓰기 연습 주제
    - 일기: 그 날 있었던 일 중에서 기억나는 일을 기록한다.
    - 시스템 구조 설명: 담당하는 시스템 구조를 설명하는 글을 써본다. 시스템을 시각적으로 표시하는 연습도
    - 문제 해결 방안: 운영 중인 시스템의 문제 해결방안을 글로 적어본다.
  • 마인드맵 ex) XMind

발표하기

  • 사내에 도입하고 싶은 기술 또는 프로세스가 있다면 설득하기위해, 내 의견에 동조하기위해서도 발표
  • 외래어 남용 x

리더와 팔로워

리더 연습하기

  • 우리는 서로에게 영향을 주기 때문에 직위, 직급 상관없이 언제든 리더가 될 수 있다.
  • 문제 해결 리더십
  • 사람이 아닌 프로세스-시스템 변화시키기
    - 사람은 쉽게 바뀌지않으므로
    - 프로세스, 시스템도 마찬가지다. 그러니 본인이 모범 사례로
  • 기술력 상실의 두려움 없애기
    - 리더, 관리자가 되면 코딩에서 멀어진다. 하지만 넓은 시야, 깊은 수준 또한 중요한 역량
    ex)아키텍처 설계, 복잡한 시스템을 알맞은 단위로 분해, 진행계획 세우기, 적합한 기술 선택
  • 리더로서 대신하지않기, 자율성 보장, 요청하기
  • SW의 규모의 비경제(사공이 많으면 배가 산으로 간다)
    - 대규모 프로젝트는 반드시 여러 개의 프로젝트로 나눠야 생산성이 높다. 인력이 많다고 빨리 끝나는 게 아니다. 독립성에 중점을 둬서 프로젝트를 나눈다.
    - 도메인: SW로 해결하고자 하는 문제 영역

팔로워십

  • 리더를 따르는 것만이 아니라 리더와 조화를 이루고 능동적으로 일을 수행하면서 리더가 성공할 수 있도록 지원하는 것. 리더와 소통하고 공감하며 문제를 발견하고 의견을 제시해서 리더와 함께 조직의 목표를 달성하는데 기여한다.
  • 좋은 팔로워가 되려면 전문성 + 리더의 결정에 대한 맥락 파악

겸손, 존중, 신뢰

0개의 댓글