WELCOME TO THE PROJECT STORE

ReadAndShare

독서 기록 공유 서비스의 인증, 검색, 탈퇴 기능을 확장한 커뮤니티 백엔드

Community2025.03.13 ~ 2025.03.314명완료
ROLE
member 도메인 전반 + 테스트 보강
IMPACT
이메일 인증, BCrypt, 사용자 검색/탈퇴, 회원 생명주기 회귀 테스트
PROOF
본인 PR 8건: #44, #53, #80, #100, #133, #148, #158, #167

IN THE STORE

프로젝트 안내

WHY THIS STORE EXISTS
목적
독서 기록·리뷰 공유 커뮤니티의 회원, 리뷰, 팔로우, 알림 흐름 안정화
목표
기존 백엔드에 이메일 인증, 사용자 검색, 회원 탈퇴, 테스트, Swagger 문서화 보강
개발 과제
짧은 기간의 기존 코드 인수인계와 기능 확장. 인증·회원·리뷰 도메인의 예외 흐름 동시 검증 필요.
결과
  • 이메일 인증, 사용자 검색, 회원 탈퇴 기능 구현
  • member 중심 테스트 보강, 일부 도메인 회귀 테스트 정리
  • Swagger 기반 API 문서화 추가, 협업 정합 강화

IN THE STORE

내가 맡은 일

OWNERSHIP
역할
Member domain & regression tests
기여도
이메일 인증, 사용자 검색, 회원 탈퇴 기능 구현. 주요 기능 테스트 작성, 기능 추가 과정의 예외·실패 흐름 검증 집중.
구현한 기능
  • 회원가입과 이메일 인증 토큰 발급·검증
  • 이메일 기반 사용자 검색
  • 회원 정보 수정과 탈퇴
  • member 외 일부 도메인 회귀 테스트 보강
  • Swagger 기반 API 문서화
개인 성과
  • member 도메인 전반 직접 구현, 인증·회원 생명주기 정리
  • PR 단위 테스트 추가, 기존 기능 회귀 감소
  • 팀원이 이어 볼 수 있는 문서화와 테스트 자산

IN THE STORE

기술과 선택

TECH & DECISIONS

백엔드

Java 17
독서 SNS 백엔드의 Spring Boot 런타임
Spring Boot 3.3.7
독서 SNS 도메인 API 구성
Spring Security + JWT
로그인, 토큰 재발급, 인증 사용자 접근 제어
Spring Events
팀원 구현 알림 이벤트 구조 분석, 테스트 경계 이해용 프로젝트 기술

데이터

Spring Data JPA
회원, 도서, 리뷰, 팔로우, 알림 도메인의 관계형 모델 관리

인프라

Redis
인증·피드·알림 관련 상태 저장소
FCM
알림 푸시 전송
Prometheus + Micrometer
서비스 관측 지표 노출

테스트

H2
로컬 테스트의 빠른 도메인 동작 검증
JUnit 5 + Mockito
회원, 인증, 도서, 리뷰 기능 회귀 검증
GitHub Actions + SonarCloud
CI와 정적 분석 기반 변경 품질 확인

문서화

Swagger
프론트엔드/백엔드 API 계약 정합

이메일 인증을 회원가입 흐름에서 분리

선택
회원가입 이후 이메일 인증 토큰 발급, 인증 상태 갱신은 별도 흐름
이유
회원가입 직후 실제 이메일 소유 여부 미확인 시 잘못된 계정 활성화 위험
대안
가입 즉시 활성화, 관리자 수동 승인, 소셜 로그인만 허용
트레이드오프
인증 토큰·메일 발송 실패 처리 추가 vs 계정 신뢰도 향상
검증
EmailServiceTest와 MemberApiControllerTest 기반 인증 성공·실패 케이스 검증
주도성
직접 구현/결정

BCrypt 기반 비밀번호 처리

선택
회원 비밀번호 평문 저장 금지, BCrypt 해시 저장과 인증 흐름 검증
이유
회원 도메인의 기본 보안 경계: 비밀번호 저장 방식의 코드 보장
대안
평문 저장, 단순 SHA 해시, 외부 인증 서비스 위임
트레이드오프
해시 비용·테스트 setup 부담 vs 비밀번호 유출 위험 감소
검증
회원가입·로그인 테스트 기반 해시 저장과 인증 성공/실패 확인
주도성
직접 구현/결정

회원 생명주기 회귀 테스트 보강

선택
회원 검색, 정보 수정, 탈퇴, 이메일 인증 등 상태 변경 기능을 서비스와 컨트롤러 테스트로 고정
이유
짧은 기간의 기존 코드 확장, 회원 상태 변화로 인한 다른 API 회귀 가능성
대안
수동 QA 중심 확인, 컨트롤러 테스트만 작성
트레이드오프
테스트 작성 시간 증가 vs 기능 추가 후 빠른 회귀 확인
검증
MemberServiceTest와 MemberApiControllerTest 기반 정상·예외 흐름 확인
주도성
직접 구현/결정

IN THE STORE

문제를 푼 방식

PROBLEM SOLVING

이메일 인증 흐름 구현

문제
회원가입 직후 서비스 이용 허용 시 실제 이메일 소유 여부 확인 어려움
접근
EmailToken 엔티티·저장소·EmailService 추가, 인증 토큰 발급과 상태 갱신 흐름 구성
원인
기존 회원가입 흐름의 이메일 소유 검증 단계 분리 부족
해결
메일 발송 실패, 인증 실패, 토큰 검증 성공 케이스 테스트 동반 구현
결과
회원가입 이후 이메일 인증 상태의 서비스 정책화

사용자 검색·탈퇴 기능

문제
사용자 검색·탈퇴와 인증 상태, 중복 이메일, 삭제 상태의 예외 결합
접근
이메일 기반 검색과 탈퇴 흐름의 서비스 계층 분리, 테스트 케이스 보강
원인
같은 회원 데이터를 다루는 회원 생명주기와 검색 API, 서로 다른 실패 조건
해결
탈퇴 후 조회·인증 흐름 영향 최소화를 위한 예외와 테스트 정리
결과
회원 도메인 기능 추가 이후 주요 회귀의 자동 테스트 확인

IN THE STORE

검증 자료

EVIDENCE, NOT DECORATION
Architecture

Architecture

GitHub CI/CD → Docker Compose 배포, AWS 서버의 ReadNShare 백엔드와 Refresh Token Store, 도서 검색·이메일 인증·푸시 알림 외부 연동

ERD

ERD

회원·도서·리뷰·팔로우·피드·좋아요·즐겨찾기와 인증(refresh_token·email_token·fcm_token) 도메인 관계

본인 직접 PR

8건member 도메인 전반과 테스트 보강 중심 PR.

테스트 검증

당시 Java 17 로컬 test suite 통과기존 포트폴리오 기록 기준이며 전체 품질 보증률을 뜻하지 않는다.

Graphify 노드

1,030개vault Graphify readandshare AST-only 보고서 기준.

IN THE STORE

회고

WHAT I LEARNED

배운 점

  • 기존 코드 기능 추가의 안전장치: 실패 흐름 테스트 선고정
  • Swagger 문서화의 역할: 산출물이 아니라 프론트엔드/백엔드의 공유 계약

아쉬운 점

  • Redis 필요 Feed/FCM 통합 테스트 실행 조건 분리 지연
  • 인증·인프라 논의에서 부족했던 기본기 보완 속도 아쉬움

다음 개선

  • 외부 API 키와 FCM 키 로테이션 절차의 별도 운영 문서화
  • 도메인별 테스트 범위와 실행 조건의 README 명확화

협업

짧은 팀 프로젝트. Git Flow, Swagger, 테스트 결과 기준 변경 공유와 다음 작업자 인수인계 정리.

IN THE STORE

면접에서 설명할 사례

STAR STORIES

이메일 인증과 회원 도메인 테스트 보강

상황
기존 독서 SNS의 이메일 인증·회원 탈퇴 추가, 회원 상태 변화의 다중 API 영향 가능성
행동
EmailToken, EmailService, MemberService 테스트 추가, 인증 성공·실패·탈퇴 후 흐름 분리 구현
결과
회원 도메인 기능 확장과 주요 실패 케이스 회귀 테스트 확보
배움
기존 코드 확장의 우선순위: 새 기능보다 회귀 가능성 탐색