모든 블로그
마켓컬리

마켓컬리

주요 카테고리 백엔드 · AI · 아키텍처

활동 요약

대표 인기 포스트Claude Code를 활용한 예측 가능한 바이브 코딩 전략370 조회
최근 30일
3개
평균 조회
27
누적 조회
6,328
전체 글
236개
마지막 발행
2026. 11. 9.
블로그 방문

마켓컬리 기술 블로그 글 (84)

백엔드

내가 만든 API를 널리 알리기 - Spring REST Docs 가이드편

Spring REST Docs의 테스트 기반 API 문서화와 Swagger 대비 선택 기준을 소개했습니다. OpenAPI 명세와 Swagger UI를 결합해 정적 문서와 API 호출 편의성을 함께 확보했습니다.

#Spring REST Docs#Swagger#Spring Boot
400

백엔드

내가 만든 API를 널리 알리기 - Spring REST Docs 가이드편

Spring REST Docs와 Swagger(Springdoc)를 비교하며 API 문서화 선택 기준을 정리했습니다. 또한 테스트 기반 문서 생성과 Swagger UI 결합 방법까지 소개했습니다.

#Spring REST Docs#Swagger#Springdoc
4400

백엔드

컬리 공통 암호화 모듈의 동시성 이슈 해결하기

공유 캐시의 AWS KMS Data Key 버퍼에서 발생한 간헐적 동시성 오류를 분석했습니다. 동기화 대신 ByteBuffer 복제로 스레드별 버퍼를 분리해 해결했습니다.

#AWS#KMS#Java
100

백엔드

컬리 공통 암호화 모듈의 동시성 이슈 해결하기

컬리 공통 암호화 모듈에서 간헐적인 `newPosition > limit` 버퍼 오류를 분석했습니다. 스레드 간 공유 버퍼가 원인이었고 `duplicate()`로 동시성 문제를 해결했습니다.

#AWS KMS#동시성#ByteBuffer
4100

백엔드

컬리 검색이 카프카를 들여다본 이야기 2

Kafka Streams로 서로 다른 토픽의 동일 키 메시지를 병합해 검색 인덱싱 파이프라인을 단순화했습니다. Spring Kafka와 헬스체크로 스트림즈 상태를 관리·모니터링했습니다.

#Kafka#Kafka Streams#Spring Kafka
300

백엔드

컬리 검색이 카프카를 들여다본 이야기 2

카프카 스트림즈로 서로 다른 토픽의 메시지를 병합해 검색 인덱싱 파이프라인을 구성한 사례를 다뤘습니다. 또한 스프링과 연동해 생명주기 관리와 헬스체크 가시성을 확보했습니다.

#Kafka#Spring Boot#Spring Cloud
4300

백엔드

컬리 검색이 카프카를 들여다본 이야기 1

카프카 컨슈머 적체와 반복 리밸런싱으로 지연된 검색 색인 문제를 분석했습니다. max.poll과 Spring Kafka 배치 리스너 조정으로 스루풋을 높이고 리밸런싱을 방지했습니다.

#Kafka#Spring Kafka#Redis
200

백엔드

컬리 검색이 카프카를 들여다본 이야기 1

검색 인덱싱 파이프라인의 메시지 적체와 반복 리밸런싱 원인을 Kafka 소비 설정에서 점검했습니다. Batch Listener와 배치 색인으로 처리 스루풋을 높이고 리밸런싱을 방지했습니다.

#Kafka#Redis#Spring Kafka
3100

백엔드

컬리에서 데이터 분석가로 일한다는 것

요구사항 구체화부터 분석계 구축, QA, 배치 시점 관리까지 데이터 분석 과정을 소개했습니다. 재고 시뮬레이션으로 운영 비율을 검증해 발주와 재고 운영에 활용했습니다.

#SQL#데이터 분석#데이터 QA
100

백엔드

컬리에서 데이터 분석가로 일한다는 것

데이터 요청을 구체화하고 운영계와 분리된 분석용 테이블을 구축하는 과정을 소개했습니다. 데이터 QA와 적재 시점 검증, 시뮬레이션으로 데이터 활용 가치를 높였습니다.

#데이터 분석#SQL#대시보드
7600

백엔드

카트 개발 연대기

주소 기반 상품 노출과 기술부채 해소를 위해 카트를 4세대에 걸쳐 개선했습니다. 다중 세션 경합의 데드락은 아이템 공유형 Multi Cart로 완화했습니다.

#Laravel#deadlock#migration
2600

백엔드

왜 폴 그레이엄은 회사 이름을 Y Combinator라고 지었을까

Clojure와 JavaScript 예제로 Combinator와 이름 없는 재귀를 단계적으로 설명했습니다. Y Combinator가 자기 참조 없이 재귀를 만드는 고정점 조합자임을 보여줍니다.

#Clojure#JavaScript#함수형 프로그래밍
100

백엔드

왜 폴 그레이엄은 회사 이름을 Y Combinator라고 지었을까

Clojure와 JavaScript 예제로 Combinator와 이름 없는 함수의 재귀를 설명했습니다. Y Combinator가 자기 참조 없이 재귀를 만드는 고정점 조합자임을 살펴봤습니다.

#Clojure#Y Combinator#람다 계산법
1600

백엔드

두근두근 컬리의 면접, 팀에서 성장하기

Java·Spring·MySQL 면접 준비과 DDD·헥사고날 아키텍처 적응 경험을 소개했습니다. 발표·코드 리뷰·장애 회고를 통한 팀 성장 문화를 공유합니다.

#Java#Spring#MySQL
4300

백엔드

신규 서비스 배포 전에 실험과 개선을 반복한 이야기

VSMS 배포 전 성능 테스트에서 재고 갱신 순서로 인한 DB 데드락과 I/O 병목을 발견했습니다. 상품 정렬과 로그 MongoDB 분리로 목표 1,200 TPS를 넘어 1,500 TPS 이상을 유지했습니다.

#성능#데드락#transaction
200

백엔드

신규 서비스 배포 전에 실험과 개선을 반복한 이야기

가상 재고 관리 시스템의 성능 테스트에서 DB 데드락과 I/O 병목을 발견해 개선했습니다. 잠금 순서 정렬, commit 축소, MongoDB 로그 분리로 목표 TPS를 넘겼습니다.

#Java#DB#동시성
3200

백엔드

JPA 덕분에 DB에서 삽질한 이야기

UUID를 BINARY(255)에 저장해 조회가 실패한 원인을 MySQL 우측 패딩에서 찾았습니다. UUID 크기에 맞춰 BINARY(16)으로 변경하고 H2·MySQL 차이도 확인했습니다.

#JPA#UUID#MySQL
100

백엔드

JPA 덕분에 DB에서 삽질한 이야기

UUID를 `BINARY(255)`에 저장하면서 MySQL 우측 패딩으로 조회가 실패한 원인을 분석했습니다. UUID 컬럼을 `BINARY(16)`으로 변경하고 SQL로 패딩 영향을 검증했습니다.

#JPA#MySQL#UUID
4100