백엔드 엔지니어링

DB 모델링·확장부터 Spring Batch, DDD·헥사고날, 그리고 기술 선택의 근거

43

백엔드 엔지니어링수정 2026-08-19

「되돌린다」는 한 가지 명령이 아니다 — 형상관리가 CI/CD의 전제인 이유

CI/CD 일곱 편 중 둘째다. 파이프라인이 서 있는 첫 전제인 형상관리를 연다. CD가 사람 손을 어디까지 뗄 수 있는지 그 경계를 먼저 긋고, Git이 파일을 Working Directory · Stage(Index) · Repository 세 곳에 나눠 두는 구조에서 「되돌린다」가 왜 두 번 갈리는지, 그리고 실무 배포의 기준이 왜 브랜치가 아니라 태그인지까지 간다.

백엔드 엔지니어링수정 2026-08-29

경계를 어디에 그을 것인가 — 조회와 생성을 쪼개고 모듈을 나누는 기준

알림 생성과 알림 조회를 한 서버에 두면 무엇이 먼저 마르는지, 좋아요 서비스가 알림 서버를 동기로 부르는 순간 장애가 왜 중요도의 반대 방향으로 흐르는지를 먼저 본다. 그렇게 서버를 쪼갠 대가로 생기는 도메인 코드 두 벌 문제를 한 프로젝트 안의 멀티모듈로 받아 내고, 의존 방향과 Gradle 선언 키워드가 그 경계를 실제로 강제하는 자리까지 내려간다. 마지막은 여기서 멈출 것인가 MSA로 갈 것인가의 기준이다.

백엔드 엔지니어링수정 2026-08-18

관계형 데이터베이스와 NoSQL — 무엇을 고르고, 무엇을 기준으로 고르는가

저장소를 고르기 전에 정리해야 할 것들을 다룬다. 관계형 모델이 「관계」를 물리적으로 어디에 저장하는지, NoSQL 네 유형이 각각 무엇을 잘하고 못하는지, 그리고 제품 선택을 성능이 아니라 문제 해결·비용·유지·보수로 판정하는 이유다.

백엔드 엔지니어링수정 2026-08-30

로그인한 사람을 다음 요청에서 알아보는 장치 — 세션과 토큰이 갈리는 저울

요청이 컨트롤러에서 테이블까지 내려가는 계층을 세우고 그 위에 로그인 상태를 붙이는 구간을 다룬다. 상태를 서버에 두는 방식과 토큰에 담아 보내는 방식이 각각 무엇을 얻고 무엇을 포기하는지, 그리고 접근 토큰과 갱신 토큰으로 나누는 회전 정책이 그 저울을 어떻게 매듭짓는지가 이 편의 주제다.

백엔드 엔지니어링수정 2026-08-30

만든 것을 몇 개 띄울 것인가 — 이미지에서 무중단 교체까지

한 대의 서버 안에 있던 애플리케이션을 클러스터 위로 옮기는 구간을 다룬다. 소스가 이미지로 굳어 레지스트리를 거쳐 배포에 닿는 경로, 살아 있는지와 받을 준비가 되었는지를 갈라 보는 두 점검, 복제본을 늘리기 위해 치러야 하는 조건이 차례로 나온다. 마지막은 조직이 바뀌었을 때 코드를 건드리지 않고 데이터만 고쳐 대응하는 자리다.

백엔드 엔지니어링수정 2026-08-30

명세에서 스키마로 — 요구 문장이 테이블 일곱 개가 되기까지

요구사항 명세서에서 ERD로 내려오는 구간을 따라간다. 기능 요구 문장 옆에 엔드포인트를 붙여 추적할 수 있는 표로 만들고, 그 표에서 되풀이되는 명사를 엔티티로 꺼내고, 한 사람이 역할을 둘 이상 가진다는 요구 한 줄이 어떻게 열 하나를 테이블 하나로 갈라놓는지를 본다. 떠올려서 그린 저장 구조와 표에서 뽑아낸 저장 구조가 무엇이 다른지가 이 편의 주제다.

백엔드 엔지니어링수정 2026-08-19

무엇을 단위로 합치고 무엇을 단위로 나르는가 — 브랜치 전략과 컨테이너

CI/CD 일곱 편 중 셋째다. 파이프라인이 서 있는 나머지 전제인 재현 가능한 실행 단위를 연다. 병합 세 방식이 히스토리에 서로 다른 것을 남기는 이유, 브랜치 전략 네 종이 릴리즈 단위를 어디서 끊는지, 그리고 「내 로컬에서는 됐는데」를 없애는 컨테이너 이미지가 무엇을 담아 나르는지까지 간다.

백엔드 엔지니어링수정 2026-08-18

복제 — 무엇을 사고 무엇을 지불하는가

같은 데이터를 여러 벌 두면 가용성과 읽기 처리량을 얻지만, 그 순간부터 복제본끼리 값이 다를 수 있다는 문제를 떠안는다. 토폴로지 세 가지가 그 문제를 어떻게 처리하는지, 동기·반동기·비동기가 무엇을 담보로 속도를 사는지, 복제 지연과 장애가 무엇을 사라지게 하는지를 정리한다.

백엔드 엔지니어링수정 2026-08-18

분산 시스템과 CAP — 무엇이 원리적으로 불가능한가

여러 머신에 걸친 순간, 예산이나 기술로 밀어낼 수 없는 제약이 붙는다. 이 글은 분산 시스템이 어떤 장애를 상정하고 출발하는지, 완벽한 합의가 왜 불가능한지, 네트워크가 끊어졌을 때와 멀쩡할 때 각각 무엇을 내주게 되는지, 그리고 그 한계 위에서 장애 감지와 리더 선출과 결함 격리를 어떻게 배치하는지를 다룬다.

백엔드 엔지니어링수정 2026-08-18

분산 트랜잭션과 합의 — 여러 노드가 하나의 결정에 이르는 법

노드가 여러 대로 늘어난 순간 커밋은 선언이 아니라 합의가 된다. 이 글은 2PC가 코디네이터 장애에서 정확히 무엇을 잃는지, 3PC·Calvin·Spanner와 Saga가 그 대가를 각각 어디로 옮기는지, Paxos·Raft·PBFT가 견디는 장애 모델이 어떻게 다른지, 그리고 분산 원장이 데이터베이스와 갈라지는 지점을 정리한다.

백엔드 엔지니어링수정 2026-08-19

사람 손에서 뗀 배포를 무엇으로 멈추는가 — CI/CD 자동화의 지형

CI/CD 일곱 편의 지도다. CI와 CD가 각각 무엇을 자동화하고 실패가 어디까지 번지는지, 그 자동화가 형상관리와 컨테이너라는 두 전제 위에 서 있다는 것, 그리고 「파이프라인」·「스테이지」·「게이트」처럼 편마다 다른 것을 가리키는 낱말을 이 시리즈에서 어떤 뜻으로 쓸지를 먼저 정한다.

백엔드 엔지니어링수정 2026-08-19

서버가 먼저 있고 파일은 나중이다 — Jenkins의 Controller·Agent와 Pipeline

CI/CD 일곱 편 중 다섯째다. 도구 두 갈래 중 둘째인 Jenkins를 연다. 빌드가 어느 기계에서 도는지를 직접 정해야 하는 모델에서 Controller와 Agent와 Executor가 무엇을 맡는지, 설정을 폼에 채우는 것과 코드로 적는 것이 무엇을 가르는지, Declarative 문법과 사람이 누르는 승인 게이트가 어디에 놓이는지까지 간다.

백엔드 엔지니어링수정 2026-08-18

실시간으로 하면 안 되는 일 — 이커머스에서 배치가 필요한 지점

「배치로 돌립시다」는 느리게 해도 된다는 허가가 아니라 지연을 내주고 처리량을 사는 거래다. 이 글은 이커머스 거래 체인의 어디에 배치가 붙는지, 그 결정이 어떤 청구서를 되돌려 주는지, Spring Batch가 그 지형에서 책임지는 범위가 어디까지인지를 정한다.

백엔드 엔지니어링수정 2026-08-18

실시간이라는 요구가 왔을 때 — 전송 방식과 WebSocket 프로토콜

「실시간으로 만들어 달라」는 요구는 기술의 이름이 아니라 증상의 이름이다. 이 글은 서버가 먼저 말을 걸어야 하는 문제를 다섯 가지 전송 방식으로 갈라 언제 무엇을 고르는지 정하고, WebSocket을 골랐을 때 실제로 무엇이 오가는지를 핸드셰이크·프레임·하트비트 세 층에서 본다.

백엔드 엔지니어링수정 2026-08-29

쌓이기만 하는 데이터를 어떻게 빠르게 읽는가 — 저장소 선택과 조회 설계

알림은 지워지는 계기가 없어 무한히 쌓이는데 실제로 읽히는 것은 언제나 최신 스무 건뿐이다. 이 비대칭 위에서 저장소를 문서형으로 고른 근거를 도메인 특성에서 끌어내고, 기준값을 넘겨 받는 페이징과 읽음 경계를 시각 한 값으로 푸는 설계, 가장 자주 불리는 엔드포인트를 캐시로 받는 자리, 그리고 90일이 지난 문서를 배치 없이 치우는 만료 인덱스까지 차례로 본다.

백엔드 엔지니어링수정 2026-08-29

알림 하나가 만들어지기까지 무엇을 지나는가 — 알림센터 설계의 지형

알림센터 다섯 편의 지도다. 좋아요 한 번이 알림 한 줄이 되기까지 어떤 서버와 어떤 저장소를 지나는지, 그 경로를 왜 조회와 생성으로 쪼개고 사이에 브로커를 끼우는지, 그리고 「파티션」·「모듈」·「이벤트」처럼 편마다 다른 것을 가리키는 낱말을 이 시리즈에서 어떤 뜻으로 쓸지를 먼저 정한다.

백엔드 엔지니어링수정 2026-08-18

어디가 느린지 모른 채 스레드부터 늘리는 일 — 배치 성능 최적화와 병렬화 3단계

병렬화는 튜닝 축 다섯 개 중 하나의, 그 안에서도 한 칸이다. 그마저도 병목이 어디인지 확정한 뒤에야 의미를 갖는다. 이 글은 측정 설비를 세우는 데서 시작해 Multi-threaded Step·Parallel Step·Partitioning 셋이 각각 무엇을 쪼개고 무엇을 깨뜨리는지, 그리고 여기서 말하는 파티셔닝이 왜 저장 구조를 바꾸는 파티셔닝과 다른 결정인지를 정한다.

백엔드 엔지니어링수정 2026-08-18

어디까지 처리했는지 누가 기억하는가 — Spring Batch 아키텍처와 메타데이터

Spring Batch를 쓴다는 것은 재시작 가능한 배치를 직접 설계하지 않겠다는 결정이다. 3계층 아키텍처가 무엇을 어디에 두었는지, JobRepository에 남는 기록이 어떻게 재시작이라는 성질로 이어지는지, 그리고 그 재시작이 안전하려면 배치 쪽이 무엇을 지켜야 하는지를 정한다.

백엔드 엔지니어링수정 2026-08-29

요구사항 한 줄이 배포된 서비스가 되기까지 — 사내 인증 시스템 설계의 지형

사내 인증 서비스 여섯 편의 지도다. 로그인이 시스템마다 따로인 상황에서 출발해 범위 기술서 한 장이 API 표가 되고 그 표가 스키마와 파드 개수까지 내려가는 경로를 그린다. 「역할」·「토큰」·「세션」처럼 편마다 다른 층을 가리키는 낱말도 여기서 먼저 갈라 둔다.

백엔드 엔지니어링수정 2026-08-29

인증과 인가가 갈리는 자리 — 통합 인증의 선택지와 요구사항이 굳는 네 문서

전사 통합 인증을 만들기 전에 정해야 하는 것들을 다룬다. 인증과 인가를 왜 끝까지 따로 써야 하는지, 하나의 로그인을 여럿이 인정하게 만드는 방식들이 각각 무엇을 전제하는지, 그리고 그 결정이 범위 기술서·이벤트 목록·유스케이스·액티비티 다이어그램을 거쳐 다음 단계가 받아 쓸 수 있는 형태로 굳는 과정을 따라간다.

백엔드 엔지니어링수정 2026-08-19

저장소에서 일어난 일이 곧 트리거다 — GitHub Actions로 파이프라인 조립하기

CI/CD 일곱 편 중 넷째다. 도구 두 갈래 중 첫째인 GitHub Actions를 연다. 저장소 이벤트가 그대로 트리거가 되는 모델이 무엇을 공짜로 주고 무엇을 대가로 가져가는지, Workflow → Job → Step 세 층과 Runner 두 종이 무엇을 격리하며 그 사이로 값과 파일을 어떻게 넘기는지까지 간다.

백엔드 엔지니어링수정 2026-08-18

파티셔닝 전략과 샤딩 — 무엇을 기준으로 쪼개고, 어디서 머신 경계를 넘는가

수평으로 자르기로 정한 다음의 질문은 무엇을 기준으로 자를 것인가다. Range·Hash·List·Composite 네 전략이 각각 무엇을 사고 무엇을 내주는지, 인덱스를 로컬로 둘지 글로벌로 둘지, 조각이 머신 경계를 넘는 순간 무엇이 되돌릴 수 없게 되는지를 다룬다.

백엔드 엔지니어링수정 2026-08-29

한 번 이상 오는 메시지를 어떻게 한 번처럼 다루는가 — Kafka 구조와 전달 보장

브로커를 끼워 넣으면 장애가 거꾸로 번지는 경로는 사라지지만 그 대가로 지연과 중복과 순서 뒤집힘이 청구된다. 토픽과 파티션이 무엇을 정하는지, 컨슈머를 늘려도 처리량이 늘지 않는 구간이 왜 생기는지, 오프셋을 언제 커밋하느냐가 전달 보장을 어떻게 바꾸는지를 차례로 본다. 이어서 순서가 지켜지는 범위와 중복을 견디는 도메인 설계, 끝내 실패하는 한 건을 줄 밖으로 빼내는 장치까지 다룬다.

백엔드 엔지니어링수정 2026-08-18

OAuth2 로그인과 채팅 도메인 — 비밀번호를 갖지 않고 사용자를 아는 법

소셜 로그인은 비밀번호를 우리가 들고 있지 않으면서 사용자를 식별하는 방법이다. 이 글은 Authorization Code를 한 번 더 거치는 이유, Spring Security가 폼 로그인과 대칭으로 그것을 얹는 구조, 그리고 인증이 끝난 뒤 필요한 채팅 도메인 모델과 페이징·알림 설계를 다룬다.