본문 바로가기

개발/루퍼스(Loopers)

10주간의 이커머스 개발을 통해 설계부터 대규모 데이터처리까지 경험하기

반응형

드디어 10주간의 여정이 끝났다. 

 

10주 동안 개발해온걸 간단하게 요약하자면 다음과 같다. 

  • 1~3주차 : 도메인 모델링, 계층 분리, 객체 협력 설계
  • 4~6주차 : 트랜잭션과 동시성, 읽기 최적화, 외부 시스템(결제 PG) 연동과 회복 탄력성
  • 7~9주차 : 이벤트 기반 분리, Kafka와 실시간 집계, 랭킹 시스템 구축
  • 10주차 : 배치와 Materialized View를 통한 대규모 집계와 조회 최적화

유저가 거의 없는 솔루션 회사에 재직한 내가 대용량 트래픽처리에 대한 경험을 해볼 수 있는건 매우 값진 시간이었다.

 

특히 학습 과정에서 떠오른 경험이 하나 있다. 이전 회사에서 공공기관과 협력하며 약 100만 건의 데이터를 삭제해야 했던 작업이 있었다. 당시에도 인덱스에 대한 기본적인 이해는 있었지만,

  • EXPLAIN을 활용한 쿼리 분석
  • 복합 인덱스 설계
  • Grafana를 활용한 지표 시각화
  • k6를 통한 성능 테스트

와 같은 것들은 직접 경험해보지 못한 상태였다.

결과적으로 DELETE 문을 실행해두고 오랜 시간을 기다리다 에러로 실패했고, 데이터를 Chunk 단위로 나누어 배치 작업으로 DELETE를 수행하며 중간중간 SELECT로 남은 데이터 개수를 확인하는, 말 그대로 노가다(?)에 가까운 작업을 했던 기억이 난다. 

 

지금 다시 같은 작업을 맡게 된다면, 복합 인덱스 설계와 쿼리 분석을 먼저 통해 훨씬 안정적이고 예측 가능한 방식으로 성능 최적화를 시도해볼 수 있을 것 같다.

 

책임을 나누고 가볍게 만드는 경험 

과거에 서비스를 출시할 때  내 최우선의 고려사항은 "코드를 굴러가게 하는 것"이었다. 코드 품질이라든지 레이어책임은 모두 갖다버린 코드들 뿐이었다. 공식처럼 Controller, Service, Entity, DTO, Repository를 만든 다음에 각각에 맞는 어노테이션 붙이고, 어떤 계층이 어떠한 책임만을 가져야하는지에 대해서는 별로 고려하지 않았다. 

 

하지만 나는 10주간 공부하며 레이어 책임과 도메인 중심 설계에 대해 깊이 고민해볼 수 있었다.

컨트롤러에서 여러 도메인을 직접 조합하던 방식에서 벗어나, 각 Aggregate 내부에서는 Domain Service로 로직을 구현하고
Application Layer에서는 Facade 패턴을 통해 여러 도메인의 흐름을 오케스트레이션하는 경험을 했다.

이를 통해 하나의 작업을 더 작고 명확한 책임 단위로 나누고, 결과적으로 작업을 Atmoic하게 처리하는 방법을 배울 수 있었다.

 

또한 하나의 트랜잭션 안에서 모든 것을 처리하려다 발생할 수 있는 문제를 피하기 위해, 핵심 로직과 후속 로직을 분리하고 Application Event를 활용해 무거워진 트랜잭션을 풀어내는 경험도 해보았다.

 

비록 대규모 트래픽을 직접 경험해보지는 못했지만, 실무에서 유사한 문제가 발생했을 때 어떤 방향으로 접근할 수 있을지에 대한 고민 지점을 미리 가져볼 수 있었다는 점에서 의미 있는 경험이었다. 

 

아고라의 순기능

Kafka를 처음 접하며 상당한 난관을 겪었다. 동작 과정이 쉽게 와닿지 않아 관련 강의를 반복해서 들으며 이해하려고 노력했던 기억이 난다. 특히 과제 마감이 임박한 상황에서도 구현보다 개념 이해가 먼저 필요하다고 느껴 아고라에 질문을 올린 적이 있다. 올리면서도 아 이런건 너무 지엽적인가? 싶었는데, kafka 공식 문서를 근거로 가려운 곳을 긁어주시는 분들이 계셨다.

아직 Kafka를 완벽하게 다룬다고 말할 수는 없지만, 적어도 누군가 동작 과정을 묻는다면 조금이나마 설명해줄 수 있는 수준까지는
이해하게 된 것 같다.


후기

함께 공부했던 사람들의 코드를 보거나, 그들이 던지는 질문을 들을 때마다 실력 차이를 체감하고는 절망을 많이 했던 것 같다. 특히 절반이 지난 5주차 이후부터는, 과제를 시작하기 전 학습에 더 많은 시간을 투자하게 되었고 그 시점부터는 ‘완주’ 자체를 목표로 달려왔던 것 같다.

10주 전, 내가 세웠던 목표 중 하나는 “AI의 도움을 덜 받는 개발자”가 되는 것이었다.

AI를 불신해서가 아니라, AI 없이는 아무것도 하지 못하는 개발자가 될까 두려웠기 때문이다.

하지만 솔직히 말하면, 10주가 지난 지금 그 목표를 완전히 이루지는 못했다. 오히려 후반으로 갈수록 더 많은 도움을 받았던 것 같다.

그러나 이 과정은 여기서 끝이 아니다. 지금까지 쌓아온 이 재료들을 가지고 앞으로 어떻게 요리하느냐에 따라 내 것이 될 수도, 그저 ‘완주했다’는 타이틀만 남을 수도 있을 것 같다. 지금까지는 음식을 삼키는데에만 급급했다면, 앞으로의 시간 동안에는 완벽하게 내 것으로  소화해내겠다.  

 

 

 

 

반응형