밑에 작성해준 목록가지고 딸깍함 ㅎㅎ
---

백엔드 개발자 포트폴리오 프로젝트 제안서

문서명: 대규모 트래픽 커머스·예약 플랫폼 구축 포트폴리오 주제(안)
버전: v1.0

1. 프로젝트 주제(요약)

프로젝트명(예시): 대규모 이벤트 커머스·좌석예약 플랫폼
한 줄 소개: 쿠폰 선착순 발급, 좌석/상품 주문, 실시간 채팅 상담, 대용량 파일 업로드, 통계 집계/배치, 검색·캐시·분산락·메시지큐 기반의 고성능 백엔드 시스템을 MSA로 구현한다.

이 주제는 실무에서 자주 발생하는 성능/동시성/데이터 일관성/운영 이슈를 하나의 서비스 시나리오 안에 자연스럽게 포함시키며, 아래 기술 항목(1~38)을 모두 기능 요구사항 및 기술 과제로 녹여낼 수 있도록 구성한다.

2. 핵심 사용자 시나리오
  1. 사용자는 이벤트 페이지에서 **쿠폰 선착순 발급(100개 한정)**을 시도한다.

  2. 사용자는 공연/스터디룸 등에서 좌석(자리) 예약을 진행한다.

  3. 사용자는 상품을 장바구니에 담고 결제 API 연동으로 결제를 완료한다.

  4. 사용자는 문의를 위해 실시간 채팅(WebSocket) 상담을 진행한다.

  5. 운영자는 콘텐츠(이미지/영상/엑셀 등)를 업로드하며, 시스템은 이미지 리사이징대용량 파일 처리를 수행한다.

  6. 시스템은 조회수/매출/예약/쿠폰 소진 등의 통계 정보를 배치로 적재하고, 조회 API는 캐시 및 인덱스 최적화로 대량 트래픽을 처리한다.

  7. 트래픽 급증 구간에서 로드밸런서/리버스 프록시/무중단 배포/부하테스트로 운영 품질을 검증한다.

3. 아키텍처 방향(권장)
  • MSA 아키텍처(서비스 분리)

    • Auth 서비스(세션/JWT/OAuth)

    • Coupon 서비스(선착순/동시성/분산락)

    • Reservation 서비스(중복 예약 방지/락/유니크 제약)

    • Order/Payment 서비스(결제 연동/보상 트랜잭션)

    • Content 서비스(S3 presigned-url/리사이징/대용량 처리)

    • Search 서비스(Elastic/CDC/Fulltext)

    • Analytics 서비스(통계 테이블/배치)

    • Chat 서비스(WebSocket)

  • 이벤트 드리븐 아키텍처

    • 주문 생성, 결제 승인, 쿠폰 발급, 예약 확정, 통계 반영을 Kafka 또는 RabbitMQ 이벤트로 비동기 처리

    • Outbox 패턴/재처리 전략으로 이벤트 신뢰성 확보

  • 헥사고날 아키텍처 + DDD

    • 도메인 로직(핵심 규칙)과 인프라(DB/Redis/MQ/S3)를 포트/어댑터로 분리

    • Bounded Context별 모델/트랜잭션 경계 명확화

4. 기술 스택(예시)
  • Backend: Java, Spring Boot, Spring Data JPA, JDBC Template(또는 MyBatis), Spring Cache, Spring Security

  • DB: MySQL(InnoDB), Replication(Primary/Replica), ProxySQL

  • Cache/Lock: Redis(Cluster/Sentinel), Redisson 또는 Lua 기반 분산락

  • MQ: Kafka 또는 RabbitMQ

  • Search: Elasticsearch(+ CDC 연계 또는 배치 색인)

  • Infra: Nginx(리버스 프록시, gzip), Load Balancer

  • CI/CD: Jenkins, Blue-Green 또는 Rolling 배포

  • Storage: AWS S3(presigned-url, multipart upload)

  • Test/Obs: JMeter/Gatling/k6, APM/Metric(프로메테우스/그라파나 등)

5. 포트폴리오에서 다룰 “기술 과제” 목록(요구사항 → 해결 포인트)

아래 항목은 각 서비스/모듈에서 “문제 상황 → 설계/구현 → 검증(로그/EXPLAIN/부하테스트)” 형태로 문서화한다.

1) N+1, fetch join 페이징/중복, batchsize, 엔티티 그래프
  • 주문/상품/쿠폰/예약 조회 API에서 N+1 재현 후 개선

  • Fetch Join의 페이징 한계 및 중복 row 문제를 DTO 조회/서브쿼리/배치 로딩/엔티티 그래프로 비교

  • hibernate.default_batch_fetch_size 또는 @BatchSize, @EntityGraph 적용 근거 제시

2) Redis·Spring 인메모리 캐시: TTL, 캐시 스탬피드, 불일치, 교체/무효화, 백업/이중화
  • 조회 API(이벤트 페이지/상품 상세/좌석 현황)에 캐시 적용

  • TTL 설계(데이터 성격별), 캐시 스탬피드 방지(락/SingleFlight/랜덤 TTL)

  • Cache-DB 불일치 전략(Write-through/Cache-aside, 무효화 정책, 이벤트 기반 캐시 삭제)

  • Redis HA(Replication/Sentinel/Cluster), 백업(AOF/RDB) 정책 정리

3) 동시성 문제: 쿠폰 100개인데 99/101 지급, 중복 예약, 트랜잭션 이상현상/락/유니크
  • 쿠폰 선착순 발급에서 레이스 컨디션 재현

  • 해결책 비교:

    • DB 유니크 제약 + 재시도

    • 낙관적 락(버전 컬럼)

    • 비관적 락(SELECT … FOR UPDATE)

    • 네임드 락(GET_LOCK)

    • Redis 분산락(항목 9와 연계)

  • 트랜잭션 이상현상(Dirty/Non-repeatable/Phantom)과의 연결 설명

4) 외래키(FK) 설정과 데드락
  • 예약/주문/결제/쿠폰 등 다중 테이블 갱신 시 FK로 인한 잠금 경합/데드락 사례 재현

  • 접근 순서 통일, 인덱스 설계, 트랜잭션 범위 최소화, 데드락 재시도 정책 정리

5) 정규화/반정규화, 통계 테이블, 배치
  • OLTP 테이블은 정규화 중심으로 설계하고

  • 조회 성능이 필요한 구간은 반정규화/머티리얼라이즈드(통계 테이블)로 분리

  • 통계 적재 전략(일/시간 단위 집계, 증분 업데이트)

6) 조회수 중복 방지
  • 동일 사용자/세션/디바이스의 중복 조회 카운트 방지

  • Redis Set/TTL, 쿠키 기반, Bloom Filter(선택), 이벤트 기반 비동기 집계(Analytics 서비스) 설계

7) 잘못된 인덱스 선택과 인덱스 힌트
  • 특정 쿼리에서 옵티마이저가 비효율 인덱스를 타는 사례를 만들고

  • 통계 갱신/인덱스 재설계/힌트 적용 시 장단점과 운영 리스크를 문서화

8) 페이징: Offset vs No-Offset, 커서 기반
  • 목록 API(이벤트, 주문 내역, 채팅 메시지, 예약 목록)에

  • Offset 페이징의 비용 증가 문제와 No-Offset(커서 기반) 개선 비교

  • 정렬 키 설계(복합 인덱스, 마지막 조회 지점 전달)

9) 분산 환경 동시성 제어: Redis 분산락
  • 다중 인스턴스 환경에서 쿠폰/좌석 예약에 Redis 분산락 적용

  • 만료/연장/재진입/락 해제 안전성 및 장애 시나리오 정리

10) 이벤트 드리븐: @Async, RabbitMQ, Kafka, 비동기 처리
  • 결제 승인 후 “주문 확정 → 쿠폰 사용 처리 → 통계 반영 → 알림 발송”을 이벤트로 분리

  • @Async의 한계(프로세스/재시도/유실)와 MQ 기반 처리의 차이를 비교

  • Kafka vs RabbitMQ 선정 근거(처리량/순서/재처리/컨슈머 그룹)

11) 스케줄러 배치: 벌크 insert/update, 시간대 분산, 부분 커밋
  • 통계 적재/정산/검색 색인 배치에서 JDBC 벌크 최적화

  • 배치 실행 시간대 분산(샤드/파티션 단위 분산) 및 부분 커밋(Chunk) 적용

12) DB 커넥션 풀(HikariCP) sizing
  • 인스턴스 스레드 모델, DB max connection, 트래픽 목표치를 기반으로 풀 크기 산정

  • 풀 과대/과소 시 병목(대기시간/DB 부하) 측정 및 튜닝 근거 제시

13) OR 대신 UNION, ORDER BY 인덱스, 서브쿼리→조인
  • 검색/필터 API에서 OR 조건으로 인덱스 비효율이 발생하는 케이스를

  • UNION/UNION ALL, 정렬 컬럼 인덱스, 서브쿼리 구조 개선으로 최적화

14) PK 설계: auto increment vs UUID vs 복합PK, 클러스터링 인덱스
  • MySQL InnoDB 클러스터드 인덱스 특성을 근거로

  • 이벤트/주문/채팅 메시지 등 도메인별 PK 전략을 비교

  • 샤딩/분산 환경 고려 시 UUID/ULID/KSUID 등도 논의 가능

15) MSA 아키텍처
  • 도메인별 서비스 분리 기준, 데이터 소유권, 동기/비동기 통신 기준

  • 장애 격리, 확장 전략, API Gateway 고려(선택)

16) 헥사고날 아키텍처, DDD
  • Aggregate/Entity/Value Object/Domain Service 구성

  • Port/Adapter로 Redis/MQ/S3/DB 교체 용이성 확보

17) JWT vs 세션, 스티키 세션, JWT 이슈(리프레시/블랙리스트), OAuth, 비밀번호 해시
  • 인증/인가 요구사항 정의 후 세션과 JWT 선택 근거 제시

  • Refresh Token 회전, 탈취 대응, 블랙리스트(또는 토큰 버전 전략) 적용

  • OAuth2 소셜 로그인, 비밀번호 해시(BCrypt/Argon2 등) 및 솔트 정책

18) 파티셔닝/샤딩, 파티션 키·샤드 키, 복제(마스터-슬레이브) 이중화
  • 주문/채팅/로그/통계 등 대용량 테이블에 파티셔닝 전략 수립

  • 샤드 키 선택 기준(균등 분산, 조회 패턴, 핫키 방지)

  • Replication 구성 및 장애 전환 시나리오 문서화

19) ICP, 커버링 인덱스
  • 목록/필터 조회에서 Index Condition Pushdown 및 커버링 인덱스 적용

  • EXPLAIN으로 Before/After 비교 자료 생성

20) 인덱스가 있어도 풀스캔하는 상황(카디널리티/비용 기반)
  • 낮은 선택도, 함수/형변환, LIKE 패턴 등으로 인덱스 미사용 사례 정리

  • “풀스캔이 더 빠른” 경우(테이블이 작거나 범위가 넓은 경우)도 함께 설명

21) Facade 디자인 패턴
  • 예: “주문 상세 조회”에서 주문/결제/배송/쿠폰/상품 정보를 조합하는 조립 계층에 Facade 적용

  • 컨트롤러 단 복잡도 감소 및 테스트 용이성 강조

22) 트랜잭션 격리 수준, MySQL MVCC, 격리수준별 락, 전파 옵션
  • 서비스별로 적절한 격리 수준을 선택하고 근거 제시

  • 전파 옵션(REQUIRED/REQUIRES_NEW 등)로 이벤트/보상 트랜잭션과 결합

23) JPA → JDBC 전환 최적화(특정 구간)
  • 배치/대량 업데이트/통계 적재 등 JPA 비효율 구간을 선별해 JDBC로 전환

  • 성능 비교(처리량/쿼리 수/GC 영향) 자료화

24) 문자열 검색 “%키워드%” 인덱스 미탐 문제, CDC, Elasticsearch, Fulltext
  • 기본 LIKE 검색의 한계 제시

  • MySQL Fulltext vs Elasticsearch 비교 및 선택

  • CDC 기반 색인 동기화 또는 배치 색인 전략 문서화

25) 부하테스트, 로드밸런서, 리버스 프록시
  • 목표 TPS/지연시간 정의 후 부하테스트 수행

  • Nginx/로드밸런서 구성, 병목 지점(DB/캐시/MQ) 분석 결과 포함

26) DB 리플리카, 마스터-슬레이브, ProxySQL
  • 읽기/쓰기 분리, 장애 시 읽기 일관성 이슈(지연 복제) 대응

  • ProxySQL로 라우팅/헬스체크/Failover 전략 정리

27) JSON 압축 전송, Nginx gzip
  • API 응답 크기 개선(압축 적용 전후 전송량/응답 시간 비교)

  • 과압축/CPU 비용 및 기준선 설정

28) S3 presigned-url
  • 대용량 업로드를 서버 경유 없이 처리(보안/만료/권한 범위)

  • 멀티파트 업로드, 업로드 완료 이벤트 처리(리사이징/검증 연계)

29) HTTPS 암호화 과정 이해
  • TLS 핸드셰이크, 인증서 검증, 대칭키 교환 개요를 정리하고

  • 실제 서비스 구성(Nginx TLS termination 등)과 연결

29-추가) JPA 객체 순환 참조 문제
  • 엔티티 양방향 연관관계 직렬화 순환 참조 재현

  • DTO 분리, Jackson 설정, 연관관계 설계 원칙 정리

30) NOT / EXISTS 최적화
  • 대량 데이터에서 NOT IN의 함정(NULL, 성능)과 EXISTS 대안 비교

  • 인덱스/조인 전략과 함께 EXPLAIN 근거 제시

31) 배치로 통계 정보 저장 기법
  • 항목 5/11과 연결: 실시간 이벤트를 스트림/큐로 모아 배치 적재

  • 재처리/정합성 검증(일별 리컨실리에이션) 전략 포함

32) 보상 트랜잭션
  • 결제 성공 후 쿠폰 차감 실패 등 분산 트랜잭션 실패 시나리오 정의

  • Saga 패턴(보상 이벤트) 설계 및 재시도/멱등성 키 적용

33) 채팅 WebSocket
  • STOMP(WebSocket) 또는 순수 WebSocket 기반 채팅

  • 메시지 저장/페이징(항목 8), 읽음 처리, 확장(멀티 인스턴스) 시 MQ/Redis PubSub 연계

34) 이미지 리사이징(사이즈 정책)
  • 업로드 후 비동기 리사이징(썸네일/중간/원본)

  • 저장 포맷/품질, 캐시/CDN 고려, 처리 실패 재시도

35) Jenkins CI/CD, 무중단 배포
  • Blue-Green 또는 Rolling 배포 전략

  • DB 마이그레이션 정책(Backward compatible), 헬스체크/롤백 절차 포함

36) 결제 API 연동
  • 결제 승인/취소/환불 웹훅 처리, 위변조 검증

  • 멱등성 키(중복 결제 방지), 장애 시 보상 트랜잭션(항목 32) 연계

37) Java GC 문제, JVM 튜닝
  • 부하테스트 중 GC pause/메모리 압박 관찰

  • 힙 사이즈, GC 알고리즘, 메트릭 기반 튜닝 리포트 구성

38) 대용량 파일 처리(엑셀/동영상 등)
  • 엑셀: 스트리밍 파서(SAX) 기반 처리, 비동기 작업 큐, 처리 상태 조회 API

  • 동영상: 서버 직접 업로드 회피(presigned-url), 업로드 완료 후 비동기 트랜스코딩(선택) 및 메타데이터 관리

6. 산출물(포트폴리오 구성 권장)
  • 아키텍처 다이어그램(MSA, 이벤트 흐름, 데이터 흐름)

  • ERD 및 정규화/반정규화 의사결정 기록

  • 핵심 API 명세 및 시퀀스 다이어그램(쿠폰/예약/결제/채팅)

  • 성능 개선 리포트

    • N+1 개선 전후 쿼리 수/응답 시간

    • EXPLAIN 캡처(인덱스/ICP/커버링)

    • 캐시 적용 전후 히트율/지연시간

    • 부하테스트 결과(TPS, P95/P99, 병목 분석)

  • 운영 관점 문서

    • 장애 시나리오(캐시 장애, DB failover, MQ 적체)

    • 재시도/멱등성/보상 트랜잭션 정책

    • 배포/롤백 절차(Jenkins 파이프라인)

7. 최종 제안 요약

본 포트폴리오 주제는 “기능 구현” 자체보다, **대규모 트래픽과 운영 현실에서의 기술적 의사결정(동시성, 캐시, 데이터 정합성, 인덱스/쿼리 튜닝, 분산 환경, 배치, 무중단 배포)**을 한 프로젝트에서 체계적으로 증명하는 데 초점을 둔다.
제시된 항목 1~38은 모두 특정 도메인(쿠폰·예약·결제·채팅·콘텐츠·통계) 안에서 자연스럽게 재현 및 해결 과제로 연결되며, 결과를 정량적으로 남기기 용이하다.