Post

실무형 백엔드 포트폴리오 로드맵

실무형 백엔드 포트폴리오 로드맵

DATT v2 개발 및 성능 개선 로드맵

프로젝트 목표

DATT v2는 단순 장소 검색 서비스가 아니다.

핵심 목표는 다음과 같다.

  • 공공데이터 기반 장소 플랫폼 구축
  • 사용자 기록 기반 장소 가치 형성
  • 장소 컬렉션 및 공유
  • 게임화 기반 사용자 참여 유도
  • 실무형 백엔드 구조 경험
  • 성능 측정 및 개선 경험 확보

핵심 전략

이번 프로젝트의 핵심 전략은 다음과 같다.

처음부터 완벽하게 만들지 않는다.
측정 가능한 MVP를 먼저 만든다.
이후 실제 수치 기반으로 개선한다.

즉:

기능 구현

성능 측정

병목 분석

구조 개선

수치 검증

흐름 중심으로 진행한다.


기술 스택

영역기술
LanguageJava 21
FrameworkSpring Boot
SecuritySpring Security + JWT
DatabasePostgreSQL
SpatialPostGIS
MigrationFlyway
ORMSpring Data JPA
LoggingSLF4J + MDC
MetricsMicrometer
MonitoringPrometheus + Grafana
Performance Testk6
BuildGradle
ContainerDocker

전체 일정

기간목표
5월 3주차공통 코드 및 DB 기반 구축
5월 4주차회원/JWT 인증
6월 1주차장소/공공데이터/place_group
6월 2주차Anchor/리뷰/이미지/컬렉션
6월 3주차게임화 + 성능 측정
6월 4주차성능 개선 및 포트폴리오 정리

5월 3주차 — 공통 기반 및 DB 구축

목표

개발 가능한 백엔드 기반 구조 완성


구현 목표

공통 응답 및 예외 처리

구현 항목:

  • ApiResponse
  • ErrorResponse
  • ValidationErrorResponse
  • FieldErrorResponse
  • ErrorCode
  • BusinessException
  • GlobalExceptionHandler

요청 로그 기반 구축

구현 항목:

  • RequestLoggingFilter
  • traceId 생성
  • durationMs 기록
  • MDC 기반 로그 추적

예상 로그:

[REQUEST]
traceId=ab12cd34
method=GET
uri=/api/health
status=200
durationMs=18


DB 및 마이그레이션 기반 구축

구현 항목:

  • Flyway 설정
  • member 테이블
  • refresh_token 테이블
  • place 테이블
  • place_group 테이블
  • place_group_mapping 테이블

MVP 기준

이 단계에서는 성능 최적화를 하지 않는다.

현재 목표:

  • 구조 안정화
  • 개발 기반 확보
  • 응답 형식 통일

일부러 남기는 개선 포인트

현재 상태추후 개선
단순 request loggingObservability 확장
DB 기반 refresh tokenRedis 전환
단순 DB 인덱스PostGIS 최적화

작성 문서

  • 공통 응답/예외 처리 구현 기록
  • 물리 ERD 및 Flyway 적용 기록
  • JWT 인증 구조 설계

5월 4주차 — 회원/JWT 인증

목표

자체 회원가입과 JWT 인증 구조 완성


구현 목표

회원 기능

구현 항목:

  • 회원가입
  • 로그인
  • 회원 조회
  • 닉네임 변경
  • 회원 탈퇴

JWT 인증

구현 항목:

  • Access Token 발급
  • Refresh Token 발급
  • JWT 인증 필터
  • AuthenticationEntryPoint
  • AccessDeniedHandler

Refresh Token 전략

초기 구조:

DB 저장 방식

추후 개선 예정:

Redis 기반 Refresh Token 저장


MVP 기준

현재는 Redis를 사용하지 않는다.

이유:

  • 인프라 복잡도 감소
  • 기능 구현 속도 확보
  • JWT 인증 구조 이해 우선

일부러 남기는 개선 포인트

현재 상태추후 개선
DB 기반 Refresh TokenRedis 기반 전환
단순 JWT 구조토큰 블랙리스트
단순 인증 로그인증 메트릭 수집

작성 문서

  • 자체 회원가입과 JWT 인증 구현
  • Refresh Token DB 저장 전략
  • Spring Security 인증 흐름 분석

6월 1주차 — 장소/공공데이터/place_group

목표

공공데이터 기반 장소 검색 및 지도 조회 구현


구현 목표

공공데이터 적재

구현 항목:

  • 공공데이터 Import
  • place 저장
  • 데이터 정제

place_group 구조 구축

구현 항목:

  • place_group 생성
  • place_group_mapping 생성
  • 대표 장소 결정

장소 검색

구현 항목:

  • 키워드 검색
  • 카테고리 필터
  • 장소 상세 조회
  • 지도 bounds 조회

MVP 기준

현재 구조:

  • latitude/longitude 범위 조회
  • LIKE 검색
  • 단순 정렬

아직 적용하지 않는 것:

  • PostGIS GiST 인덱스
  • 전문 검색
  • Redis 캐시

일부러 남기는 개선 포인트

현재 상태추후 개선
latitude/longitude 조회PostGIS GiST 인덱스
LIKE 검색검색 최적화
단순 정렬popular_score 최적화

작성 문서

  • place와 place_group 분리 이유
  • 공공데이터 기반 장소 그룹화 설계
  • 지도 bounds 조회 구현

6월 2주차 — Anchor/리뷰/이미지/컬렉션

목표

DATT 핵심 사용자 기능 완성


구현 목표

Anchor

구현 항목:

  • Anchor 작성
  • Anchor 수정
  • Anchor 삭제
  • Anchor 공개 범위

이미지

구현 항목:

  • 이미지 업로드
  • Anchor 이미지 연결
  • 장소 대표 이미지 표시

리뷰

구현 항목:

  • 리뷰 작성
  • 평점 작성
  • 평균 평점 계산

컬렉션

구현 항목:

  • 컬렉션 생성
  • 장소 저장
  • 공유 링크 생성
  • 컬렉션 조회

MVP 기준

현재는 다음 구조로 간다.

  • 원본 이미지 중심
  • 단순 조회 구조
  • 최소 기능 우선

아직 적용하지 않는 것:

  • 이미지 썸네일
  • 이미지 리사이징
  • 컬렉션 조회 최적화

일부러 남기는 개선 포인트

현재 상태추후 개선
원본 이미지 사용썸네일 생성
단순 컬렉션 조회N+1 제거
단순 장소 상세 조회fetch 최적화

작성 문서

  • Anchor 중심 기록 구조 구현
  • 내부 리뷰/평점 기반 장소 가치 설계
  • 장소 컬렉션과 공유 링크 구현

6월 3주차 — 게임화 및 성능 측정

목표

서비스 완성도 확보 및 성능 기준값 측정


구현 목표

게임화

구현 항목:

  • 경험치 이벤트
  • 레벨 시스템
  • 배지/칭호
  • 활동 기록

성능 측정 환경 구축

구현 항목:

  • Spring Actuator
  • Micrometer
  • k6
  • DB Query Time 측정

측정 대상 API

장소 검색

측정 항목:

  • 평균 응답 시간
  • P95
  • P99
  • 실패율

지도 bounds 조회

측정 항목:

  • bounds 조회 시간
  • 응답 데이터 크기
  • DB query time

장소 상세 조회

측정 항목:

  • Anchor 조회 시간
  • 리뷰 조회 시간
  • 이미지 조회 시간

컬렉션 상세 조회

측정 항목:

  • N+1 발생 여부
  • 응답 시간

k6 테스트 시나리오

테스트 대상:

지역카테고리
성수카페
강남음식점
홍대술집
을지로작업 공간

동시 사용자:

  • 1명
  • 10명
  • 30명

작성 문서

  • 기록 기반 게임화 시스템 설계
  • k6 기반 성능 측정 환경 구축
  • DATT v2 개선 전 성능 측정 결과

6월 4주차 — 성능 개선 및 포트폴리오 정리

목표

측정 결과 기반 성능 개선 및 포트폴리오 완성


개선 우선순위

1순위 — 지도 조회 성능 개선

Before:

단순 latitude/longitude 조회

After:

PostGIS GiST 인덱스 적용

측정 비교:

  • 평균 응답 시간
  • P95
  • P99

2순위 — popular_score 개선

Before:

요청 시 실시간 집계

After:

반정규화 count 컬럼 기반 계산

추가 예정:

  • 배치 갱신
  • 이벤트 기반 갱신

3순위 — 컬렉션 조회 최적화

Before:

단순 연관관계 조회

After:

fetch 전략 최적화
N+1 제거


4순위 — 이미지 응답 최적화

Before:

원본 이미지 응답

After:

thumbnail_url 사용


5순위 — Redis 캐시 검토

후보 대상:

  • 인기 장소 조회
  • 지도 bounds 조회
  • 장소 상세 조회

성능 개선 포인트

개선 대상개선 방식
지도 조회PostGIS GiST Index
인기 장소반정규화 + 배치
컬렉션 조회N+1 제거
이미지 응답Thumbnail
캐시Redis

작성 문서

  • 지도 bounds 조회 성능 개선
  • popular_score 반정규화 개선
  • 컬렉션 조회 N+1 해결
  • 이미지 응답 최적화
  • DATT v2 성능 개선 전후 비교

최종 목표

6월 말까지 다음 상태를 목표로 한다.

  • 회원가입/로그인 가능
  • JWT 인증 가능
  • 장소 검색 가능
  • 지도 bounds 조회 가능
  • Anchor 작성 가능
  • 리뷰 작성 가능
  • 이미지 업로드 가능
  • 컬렉션 저장/공유 가능
  • 게임화 가능
  • k6 성능 측정 가능
  • 최소 2개 이상 성능 개선 문서 확보

핵심 방향

이번 프로젝트의 핵심은 단순 기능 구현이 아니다.

중요한 것은 다음을 설명 가능한 수준까지 가는 것이다.

왜 병목이 발생했는가?
어떤 계층이 느렸는가?
왜 이런 구조를 선택했는가?
어떤 Trade-off가 존재했는가?
어떻게 측정했는가?
어떻게 개선했는가?

즉:

기능 구현

측정

개선

수치 검증

흐름 자체를 포트폴리오로 만드는 것이 이번 프로젝트의 핵심 목표다.

This post is licensed under CC BY 4.0 by the author.