Do You Coding?
[회고] SSAFY 2학기 공통 프로젝트 회고 본문

1. 프로젝트 개요
프로젝트명 : SSABREE TIME (싸브리 타임)
서비스 개요 : SSAFY (삼성 청년 소프트웨어 아카데미) 교육생들을 위한 커뮤니티 플랫폼
내용 : 웹, Android, iOS 세 가지 클라이언트를 지원하는 풀스택 멀티 플랫폼 프로젝트로, 26.01.06 ~ 02.09, 약 6주간 진행
2. 프로젝트 요약
프로젝트 수치 정리
| 항목 | 수치 |
| 총 커밋 수 | 761개 |
| 개발 기간 | 35일 (1/6 ~ 2/9) |
| 브랜치 수 | 100+개 (feature 브랜치 포함) |
| 팀 인원 | 6명 |
| 플랫폼 | 4개 (Backend, Web, Android, iOS) |
팀원별 커밋 기여도
| 팀원 | 커밋 수 | 주요 담당 |
| 김*재 | ~237 | Backend + Frontend + Infra |
| 김*영 | ~158 | Backend |
| 김*규 | ~116 | Android |
| 김*호 | ~80 | iOS + 브랜치 관리 |
| 이*영 | ~65 | Android |
| 이*주 | ~56 | Android |
일별 커밋 추이
| 일자 | 기간 설명 | 추이 | 커밋 건 수 | 비고 |
| 1/19-25 | 설계기 | ████░░░░░░░░░░░░░░░░ | 52건 | |
| 1/26-27 | 개발 초기 | ████████░░░░░░░░░░░░ | 36건 | |
| 1/28-31 | 개발 가속 | ████████████████████ | 242건 | 최고 집중 구간 |
| 2/01-04 | 기능 완성 | ██████████████████░░ | 277건 | |
| 2/05-08 | QA+마무리 | ███████████░░░░░░░░░ | 146건 | |
| 2/09 | 최종 배포 | █░░░░░░░░░░░░░░░░░░░ | 8건 |
기술 스택
| 분류 | 기술 | 버전 | 핵심 선정 이유 |
| Backend | Java + Spring Boot | 21 / 4.0.1 | 엔터프라이즈 안정성, 통합 생태계 |
| PostgreSQL | 15 | 고급 SQL, 관계형 데이터 최적화 | |
| Redis | 7 | 알림 큐 + 캐시 이중 활용 | |
| JWT (JJWT) | 0.11.5 | Stateless 멀티 플랫폼 인증 | |
| STOMP/SockJS | - | 실시간 채팅, 경량 메시지 브로커 | |
| Firebase Admin | 9.2.0 | 크로스 플랫폼 푸시 알림 (FCM) | |
| Gemini API | 2.5-flash | AI 콘텐츠 자동 검열 | |
| Frontend | React + TypeScript | 19 / 5.9 | 선언적 UI, 타입 안전성 |
| Vite | 7.2 | 극속 HMR, 최적 빌드 | |
| Android | Kotlin + Compose | Latest | Google 공식, 선언적 UI |
| Retrofit + OkHttp | 3.0 / 4.12 | 선언적 API, 인터셉터 | |
| Room | 2.6 | 타입 안전 로컬 DB | |
| iOS | Swift + SwiftUI | Latest | Apple 공식, 선언적 UI |
| Combine | Built-in | 네이티브 반응형 프레임워크 | |
| Infra | Docker Compose | Latest | 10개 서비스 통합 관리 |
| Nginx | Alpine | 리버스 프록시, 경로 라우팅 | |
| GitLab CI/CD | - | SSAFY 인프라 통합 | |
| Prometheus + Grafana | Latest | 메트릭 + 시각화 | |
| Loki + Promtail | Latest | 로그 수집 + 검색 | |
| NetData | Latest | 실시간 시스템 모니터링 |
아키텍처 이미지

3. 프로젝트 타임라인
: 26.01.06 ~ 26.02.09 (6주) 의 기간동안 진행된 SSAFY 2학기 공통 프로젝트 "SSABREE TIME (싸브리 타임)"의 타임라인
[ 1주차 (26.01.06 ~ 26.01.11) ] - 초기 아이디어 기획 단계
- 주요 활동
- 팀원 6명 전원 아이디어 브레인스토밍 및 Zoom 화상 회의 진행
- 총 15개 후보 주제에 대해 투표 진행 (1인당 3표)
- 난관
- 압도적인 지지를 받는 아이템의 부재로 인한 의견 통합 실패
- 투표 결과가 분산되어 2표를 받은 주제만 7개가 나오는 등 동률 상황 반복
- 1차 결론
- 수차례의 재투표(최최최최최종)를 거쳐 '회사형 스터디 플랫폼' 아이디어를 선정했으나,
주제가 단순하고 깊이가 부족하다는 내부 평가로 인해 재검토 결정
- 수차례의 재투표(최최최최최종)를 거쳐 '회사형 스터디 플랫폼' 아이디어를 선정했으나,
[ 2주차 (26.01.12 ~ 26.01.18) ] - 아이디어 기획 확정 단계

- 방향성 수정: 기존 안을 폐기하고 각자 추가 아이디어를 발굴하여 재논의
- 시도 1: 유기견 디지털 펫
- 내용: 유기견 보호와 디지털 펫 육성을 결합한 서비스 기획 및 구체화
- 피드백: 담당 컨설턴트님의 긍정적인 초기 반응 확보
- 결과: 구체화 단계에서 법적 제약 사항 및 현실적 사용성 문제 등 현실적인 장벽에 부딪혀 폐기
- 시도 2: SSAFY 커뮤니티 플랫폼 (최종 선정)
- 내용: 대학생 커뮤니티 '에브리타임'의 기능을 벤치마킹하여, SSAFY 교육생들에게 최적화한 커뮤니티 플랫폼
- 결과: 팀원 전원 합의로 최종 주제 채택 및 상세 기획 착수
[ 3주차 (26.01.19 ~ 26.01.25) ] - 개발 설계 단계
팀 커밋 32건 | 내 커밋 (김*영) 5건
팀 주요 활동
| 날짜 | 활동 | 담당 |
| 01.19 | Spring Boot 초기 프로젝트 생성, Android 프로젝트 생성, README 작성 | 김*재, 김*규, 김*호 |
| 01.20 | Android 프로젝트 구조화 (패키지, 모듈 분리) | 김*규 |
| 01.21 | ERD 초고~2차 작성, 로그인/회원가입 스켈레톤, 게시판 스켈레톤, Repository/유틸 클래스 생성 |
김*재, 김*영, 김*규, 김*호 |
| 01.22 | .gitignore/nginx 설정, 기본 API 작동 확인, ViewModel 팩토리 설계, 홈 화면 작업 시작, ERD 3차 수정 |
김*재, 김*호, 김*규, 김*영 |
| 01.23~24 | 다크/라이트 Theme 정리, 홈 화면 중간 저장, 싸피 교육생 인증 기능 추가 | 김*규, 김*영 |
| 01.25 | 홈 화면/네비게이션바/스플래시 완성, 게시판 스켈레톤, 아이디/비밀번호 찾기 스켈레톤, 회원가입 기능 |
김*규, 김*호, 김*영 |
팀 난관
- ERD 설계 반복 수정
: 초고부터 3차까지 4일간 계속 수정이 필요했음.
요구사항이 명확히 정리되지 않은 상태에서 설계를 시작하여 반복 작업 발생 - Android 아키텍처 결정
: ViewModel 팩토리 패턴, SavedStateHandle 필요 여부,
Repository 구조 등 초기 아키텍처 설계에서 여러 번의 시행착오 - 바텀 네비게이션 바 UI 겹침
: 스크롤 가능한 컨텐츠가 bottom navigation bar에 가려지는 문제 반복 발생
해결 방법
- ERD는 팀 전체가 리뷰하며 점진적으로 완성해나가는 방식 채택 (김*영 + 김*재 공동 작업)
- Android는 AssistedViewModel / SimpleViewModel 분리 패턴으로 확정 (김*호 제안)
- 바텀바 패딩 문제는 Scaffold의 contentPadding 파라미터로 해결 (김*호, 김*규 협업)
결과
- Backend: Spring Boot 프로젝트 초기화, ERD 3차까지 완성, 싸피 인증/회원가입 API 완성
- Android: 프로젝트 구조 확정, 로그인/회원가입/홈/게시판 스켈레톤 완성, Theme 시스템 구축
- 6명 모두 각자의 담당 영역이 명확히 잡힌 상태
회고
첫 주는 "뼈대를 세우는 주간"이었다.
우선 요구사항 명세서와 API 명세서를 설계함과 동시에, figma 디자인도 병행하며,
팀 전부 설계에 모두 힘을 쏟아서 기초 뼈대를 열심히 만들었다.
ERD 설계에 예상보다 시간이 걸렸지만, 이 과정에서 팀원 간 데이터 구조에 대한 이해가 맞춰졌다.
아이디어 주간에 설계를 완벽히 끝내지 못하여, 개발과 설계를 동시에 진행하다보니 API 설계와 개발이 꼬이기도 했다.
Android 쪽은 스켈레톤 화면을 빠르게 만들어 시각적으로 진행감을 확인할 수 있었다.
다만 Backend와 Android가 아직 연결되지 않아 각자 독립적으로 작업하는 구간이었다.
나의 3주차 활동 정리
주요 활동
| 날짜 | 시간 | 커밋 | 내용 |
| 01.21 | 17:51 | Feat | ERD 1차 수정 - 테이블 관계 초안 정리 |
| 01.21 | 22:05 | Feat | ERD 2차 수정 및 검토 - 팀 리뷰 반영 |
| 01.22 | 17:54 | Feat | ERD 3차 수정 - 최종 스키마 확정 |
| 01.24 | 21:03 | Feat | 싸피 교육생 인증 기능 추가 - Mattermost 연동 검증 로직 |
| 01.25 | 19:34 | Feat | 회원가입 기능 추가 - 인증 기반 가입 플로우 완성 |
난관
- ERD 설계 시 팀/스터디/게시판 등 다양한 엔티티 간 관계가 복잡하여 3차까지 수정 필요
- 싸피 교육생 인증이라는 도메인 특화 기능의 검증 로직 설계
해결 방법
- Mattermost API 연동을 통한 실명 인증 방식 채택 (Incoming Webhook 을 사용!)
- ERD는 김*재님과 공동으로 리뷰하며 점진적 수정
결과
- 프로젝트의 데이터 설계 기반 확립 (ERD 3차 완성)
- 싸피 교육생 인증 → 회원가입 플로우 백엔드 완성
회고
첫 주는 API 설계 및 DB 설계에 집중한 주간이었다.
ERD를 3번 수정하면서 "처음부터 완벽한 설계는 불가능하다"는 것을 체감했다.
API 설계가 완벽하지 않은 상태에서 DB를 만들어서 조금 순서가 어긋난 듯하다.

특히 API 설계 시에 단순히 GET, POST와 엔드포인트만 작성해뒀었는데,
Request body, Response body를 작성해두지 않은게 추후에 너무 뼈아픈 일이었다.

Request body, Response body를 포함하여 API 명세서를 작성했더니,
개발 과정에서 프론트엔드에서 백엔드로 요청, 재요청, 추가요청.. 이 없이 순조롭게 잘 진행되었다.
이 과정이 이후 개발의 기반이 되었기에 의미 있는 시간이었다.
주 후반에 인증/회원가입 기능을 빠르게 구현하며 API 개발의 리듬을 잡기 시작했다.
[ 4주차 (26.01.26 ~ 26.02.01) ] - 개발 가속 단계
팀 커밋 176건 | 내 커밋 (김*영) 27건
팀 주요 활동
| 날짜 | 활동 | 담당 |
| 01.26 | 게시물/게시판 기초 구현, Swagger 세팅, CSR 작성, 프로젝트 구조 리팩토링, AuthService 구현, 게시글 기능 |
김*재, 김*호, 김*규 |
| 01.27 | 알림 목록 스켈레톤, 마이페이지/스터디 상세 스켈레톤, 팀 목록 스켈레톤, 기본 MVC 구현 |
이*영, 이*주, 김*재, 김*규 |
| 01.28 | CI/CD 파이프라인 구축, 그룹관리/팀원관리, 쪽지/디데이 스켈레톤, 게시글 작성, 테스트 페이지, API 수정 반영 |
김*재, 이*주, 이*영, 김*규, 김*영 |
| 01.29 | 반(class) CRUD, 에러 핸들링 체계, 회원가입/로그인 기능 완성, 알림 시스템 기초, 설정화면/다크모드, Projects 파트, iOS 스켈레톤 |
김*재, 김*규, 이*주, 김*영, 김*호 |
| 01.30 | 설정 도메인 완성, 회원관리 이슈 통합, soft delete, 팀/스터디 기초, 게시글 투표/검색, 식단 조회, Mattermost 매칭 |
김*재, 이*주, 김*영, 이*영, 김*규 |
| 01.31 | UI 라이트/다크 모드 통합, 게시판 API 연동, 커서기반 페이지네이션, 쪽지 기능, 채팅 실시간, 게시판 필터 UI |
김*규, 김*호, 김*영, 이*주 |
| 02.01 | 마이페이지/포트폴리오 완성, Hot 게시판, 조회수, 댓글 soft-delete, 백준 연동, 채팅 Nginx, 그룹 멤버 역할 구분 |
김*규, 김*영, 김*재, 김*호, 이*영 |
팀 난관
- CI/CD 구축 난항 - GitLab Runner 설정, Docker 권한 문제, 이미지 빌드 실패 등으로
01.28 하루 동안 김*재가 10회 이상 커밋하며 파이프라인 안정화 - Swagger-Spring Boot 버전 비호환 - 에러 핸들링 도입 과정에서 Swagger와 Spring Boot 4.0 간 호환성 문제 발생
- lombok @Builder.Default 이슈 - 엔티티에 기본값을 설정할 때 lombok 빌더와의 충돌로 반복적인 수정 필요
- AppNavGraph 충돌 폭발 - 여러명이 동시에 새 화면을 추가하면서 네비게이션 파일에서 merge conflict 빈번 발생
- 바텀바가 컴포넌트를 가리는 문제 재발 - UI 통합 과정에서 이전에 해결한 문제가 다시 발생
해결 방법
- CI/CD : Docker 명령어 수정, 권한 재설정으로 배포 자동화 완성
- Swagger : 에러 핸들링 방식을 Spring Boot 4 호환 방식으로 전환, IllegalArgumentException - 400 에러 핸들링 추가
- lombok : @Builder.Default 어노테이션 명시적 추가, 중복 문제 해결
- NavGraph : 이*주가 네비게이션 허브 역할을 맡아 24회 수정으로 통합 관리
- 바텀바 : 김*규가 HOT Fix로 즉시 대응
결과
- Backend: API 5차 반영 완료, 에러 핸들링 체계 확립, CI/CD 파이프라인 가동, 알림 시스템 기초 완성
- Android: 전체 화면의 80% + 스켈레톤 완성, UI 라이트/다크 모드 통합 80%, 게시판 API 첫 연동 성공
- Frontend: 테스트 페이지 생성으로 Backend 검증 시작
- 주간 176커밋 - 프로젝트 전체의 37%가 이 한 주에 집중
회고
4주차는 모든 것이 동시에 진행된 가장 바쁜 주간이었다.
Backend와 Android가 처음으로 연결되기 시작하면서
"내 코드가 실제로 화면에 보인다"는 성취감이 팀 전체의 동력이 되었다.
다만 CI/CD 구축에 많은 투자를 해야 했고,
여러명이 같은 파일(AppNavGraph.kt)을 동시에 수정하면서 충돌 지옥을 경험했다.
1월 30일에는 팀 전원이 풀 가동되어 하루에 37커밋이라는 최고 기록을 세웠다.
나의 4주차 활동정리
주요 활동
| 날짜 | 시간 | 커밋 | 내용 |
| 01.28 | 16:58 | Fix | API 수정 및 추가사항 반영 (3차) |
| 01.29 | 13:34 | Feat | Projects 파트 추가 — 포트폴리오 프로젝트 엔티티 |
| 01.29 | 13:48 | Fix | Projects 부분 버그 수정 |
| 01.29 | 16:35 | Feat | API 수정 및 추가사항 4차 반영 |
| 01.29 | 16:48 | Fix | PostController 오류 수정 |
| 01.30 | 14:17 | Feat | API 수정 및 추가사항 5차 반영 |
| 01.30 | 14:37 | Fix | Team, Study Deleted_at 추가 - soft delete 버그 수정 |
| 01.30 | 14:45 | Fix | @Builder.Default 추가 |
| 01.30 | 20:29 | Feat | Mattermost 데이터 매칭 확인 기능 추가 |
| 01.30 | 21:38 | Feat | 검색 기능 및 게시글 투표 기능 추가 |
| 01.30 | 22:04 | Fix | 캠퍼스별 식단 조회 기능 수정 |
| 01.30 | 22:25 | Feat | 게시판별 게시글 목록 조회 기능 추가 |
| 01.31 | 16:11 | Fix | 캠퍼스별 식단 이미지 업로드/조회 수정 |
| 01.31 | 17:58 | Feat | 쪽지 기능 구현 |
| 01.31 | 19:23 | Feat | 게시글 커서기반 페이지네이션 추가 |
| 01.31 | 22:23 | Feat | 채팅 기능 전반적 수정 및 실시간 기능 추가 |
| 01.31 | 22:56 | Fix | 게시글 목록에서 댓글 갯수 안 세는 현상 해결 |
| 02.01 | 16:16 | Feat | Hot 게시판 기능 추가 |
| 02.01 | 17:43 | Feat | 조회수 기능 추가 |
| 02.01 | 18:07 | Feat | 댓글 soft-delete 변경 |
| 02.01 | 18:43 | Feat | 백준 아이디 연동 → Solved.ac 티어 가져오기 |
| 02.01 | 22:37 | Feat | 채팅 기능 Nginx 수정 |
| 02.01 | 23:45 | Feat | 포트폴리오 URL type 제거 |
| 02.01 | 23:57 | Fix | URL type 필드 수정 핫픽스 |
| 02.02 | 00:14 | Fix | JwtToken 관련 수정 |
난관
- API 반영 반복 - 3~5차까지 프론트엔드 요구사항에 맞춰 API를 계속 수정해야 했음
- soft delete 처리 - Deleted_at 필드 누락으로 삭제된 데이터가 조회되는 버그 발생
- @Builder.Default - lombok 빌더와 기본값 설정 간 충돌
- 채팅 실시간 구현 - WebSocket + STOMP 기반 실시간 채팅의 Nginx 프록시 설정
해결 방법
- API 수정은 이슈 번호를 매겨 체계적으로 관리 (3차 ~ 5차 반영)
- soft delete는 @Where(clause = "deleted_at IS NULL") 또는 @SQLRestriction 활용
- 채팅은 Nginx의 WebSocket 프록시 설정(upgrade, connection 헤더)으로 해결
- 커서기반 페이지네이션으로 대량 게시글 조회 성능 확보
결과
- 하루에 4~8커밋씩 꾸준히 기능을 추가하여 검색, 투표, 쪽지, 채팅, Hot 게시판, 조회수, 백준 연동 등 핵심 기능 대부분 완성
회고
4주차는 "API를 쏟아내는 주간" 이었다.
하루에 여러 기능을 동시에 구현하면서 속도감 있게 진행했지만,
API 수정이 3차 ~ 5차까지 반복된 것은 초기에 Frontend/Android 팀과 API 스펙을 더 상세히 합의했으면 줄일 수 있었을 것이다.
(초기 설계의 문제점을 깨닫고 Request body, Response body를 포함하여 API 명세서를 작성한 것이 이 시기였다.)
Mattermost나 백준 API 등 외부 API도 활용해보고 여러 기능들을 상세하게 만들어봐서 좋은 경험이었다.
실시간 채팅 기능 (Web socket 활용), 페이지네이션 등 처음 해보는 것들도 있었지만 잘 완성해서 다행이다.
[ 5주차 (26.02.02 ~ 26.02.08) ] - 기능 완성 및 QA 단계
팀 커밋 259건 | 내 커밋(김*영) 45건
팀 주요 활동
| 날짜 | 활동 | 담당 |
| 02.02 | AI 검열 시스템 구축 (Ollama→OpenAI→Gemini), 디데이/포트폴리오 UI 개선, 다크모드 설정, 알림 연동, 초기설정 데이터, 팀/스터디 API 전면 수정, 웹 프론트 생성 시작 |
김*재, 김*규, 김*호, 이*영, 김*영 |
| 02.03 | 관리자 공지, FCM 알림 수정, 홈화면 연결(디데이/게시판/그룹), 마이페이지 로그아웃, Grafana 모니터링 도입, 댓글 페이지네이션, Lazy 오류 |
김*영, 이*영, 김*재, 김*호 |
| 02.04 | iOS 프로젝트 시작, 팀/스터디 버그 전면 수정, Redis 캐시 도입, FCM 재동기화, Jackson 3 마이그레이션, 웹 프론트 본격 개발, Android 버그 수정 85~90% |
김*호, 김*영, 김*재, 김*규 |
| 02.05 | 팀/스터디 동기화, 자진 탈퇴, 익명성 보장 처리, FCM 알림(지원/수락), 게시판 사진 5개 제한, 그룹 수정/점심 확대/마이페이지 |
김*영, 김*재, 김*규, 김*호, 이*영 |
| 02.06 | 회원탈퇴 hard delete, 탈퇴 시 리더 null 처리, 모니터링(Prometheus/NetData), 알림 설정 간소화, 그룹 찾기/상세 보정, QA 50% |
김*영, 김*재, 김*호, 김*규 |
| 02.07 | 회원탈퇴 side effect 해결, 쪽지 버그 수정, APK 빌드, 공휴일 반영 D-day, 채팅/게시판 UI 개선, v1.0.3 배포 |
김*영, 김*규, 김*호 |
| 02.08 | iOS 기능 대량 구현 (FCM, 채팅, 공지 CRUD, 과제), 웹 프론트 전체 기능 구현 (게시판, 채팅, 마이페이지, 포트폴리오, 랜딩 페이지) |
김*호, 김*재 |
팀 난관
- AI 검열 시스템 삽질 - Ollama(내장 모델) → OpenAI API → Gemini Flash Lite까지 3번 변경.
내장 모델(qwen:4b)은 서버 리소스 과다, OpenAI는 비용 문제, 최종적으로 Gemini 무료 버전으로 전환 - Jackson 3 마이그레이션 지옥 - Spring Boot 4가 Jackson 3을 요구하면서 기존 2.x 코드와의 호환성 문제.
JsonProcessingException → JacksonException 등 패키지 변경으로 7커밋 연속 수정 - Redis 캐시 직렬화 문제 - Jackson 3 전환 과정에서 Redis 직렬화 설정도 함께 변경 필요.
김*영이 5번 연속 "redis 재수정" 커밋 - Hibernate LazyInitializationException - 팀/스터디 엔티티의 Lazy 로딩이 세션 밖에서 접근될 때 발생.
- 회원탈퇴 side effect 연쇄 - hard delete로 변경 후 리더 null, soft delete된 게시물/댓글 처리,
팀/스터디 탈퇴 로직 등 연쇄적 문제 발생 - iOS 프로젝트 일정 압박 - 02.04에 시작하여 5일 만에 주요 기능 구현 필요
해결 방법
- AI 검열 : Gemini 2.5 Flash Lite + 커스텀 프롬프트로 최종 확정, isBlinded 필드로 검열된 게시글 처리
- Jackson 3 : 패키지 전체를 tools.jackson.core로 통일, @Primary 설정 충돌 해결
- Redis : Jackson 3 호환 직렬화 설정으로 완전 마이그레이션
- Lazy : @Transactional 범위 조정 및 Fetch Join 적용으로 전면 수정
- 회원탈퇴 : 리더 null 처리, 게시물/댓글 수정, 팀/스터디 탈퇴 로직 순차적 해결
- iOS : 김*호가 집중 개발, AI 도구 활용하여 Android 코드 기반 빠르게 전환
결과
- Backend: AI 검열, 익명성 보장, 회원탈퇴 hard delete, FCM 고도화, Redis 캐시, 모니터링 시스템 완성
- Android: 버그 수정 90% 완료, v1.0.3 APK 배포, QA 2차까지 완료
- iOS: 5일간 로그인, 채팅, 알림, 공지까지 주요 기능 구현
- Frontend(Web): 게시판, 채팅, 마이페이지, 포트폴리오, 랜딩 페이지 전체 구현
회고
5주차는 "통합의 고통과 성취가 공존한" 주간이었다.
Jackson 3 마이그레이션, Redis 직렬화, Lazy 오류 등 기술적 난관이 동시다발적으로 터졌고,
특히 김*영과 김*재 (Backend 2명) 가 밤새 디버깅하는 날이 많았다.
하지만 팀의 저력이 빛난 주간이기도 했다.
김*호는 iOS를 5일 만에 완성했고, 김*재는 웹 프론트를 하루 만에 올렸으며,
김*규는 QA를 체계적으로 진행하며 Android 완성도를 끌어올렸다.
회원탈퇴 한 기능에서 4일간 side effect가 이어진 것은
"하나를 바꾸면 열 개가 영향받는" 프로젝트 후반의 전형적인 패턴이었다.
그럼에도 불구하고, 잘 극복하여 side effect를 잘 해결해내서 모두 뿌듯한 주간이었다.
나의 5주차 활동 정리
주요 활동
02.02 - 초기 데이터 & 팀/스터디 재정비
| 시간 | 내용 |
| 12:58 | Mattermost 메시지 템플릿 변경 |
| 15:12 | 초기설정 데이터들 JPA로 기입 (캠퍼스, 반 등) |
| 15:49 | 팀/스터디 API 전면 수정 |
| 16:22 | 에러 처리 |
| 17:01 | 15기 반정보 추가 |
| 17:48 | Study, Team 수정 |
02.03 - FCM & 팀/스터디 오류 해결
| 시간 | 내용 |
| 01:27 | 스터디 및 팀 API 관련 수정사항 재반영 |
| 02:54 | 관리자 공지 생성 기능 |
| 03:17 | 블라인드 처리 안된 최신 글 제목만 홈에 표시 |
| 03:52 | Backend 전반적인 코드 정리 |
| 14:42 | 새소식에 댓글 알림 수정 |
| 16:13 | FCM 내용 수정 |
| 17:39 | 팀 관련/스터디 관련 수정 |
| 22:13 | Hibernate LazyInitializationException 해결 |
02.04 - Redis 캐시 & 버그 수정
| 시간 | 내용 |
| 10:00 | 팀/스터디 LAZY 관련 오류 전면 수정 |
| 10:11 | 팀/스터디 버그 수정 |
| 12:38 | 팀/스터디 버그 재수정 |
| 13:38 | Redis 캐시 관련 수정 |
| 14:30 | 버그 수정 |
| 14:57 | FCM 얕은 재동기화 도입 |
| 15:58 | 팀/스터디 관련 수정 |
| 17:19 | FCM 기존 버전 삭제 수정 |
02.05 - 동기화 & 익명성
| 시간 | 내용 |
| 02:58 | FCM 오류 수정 |
| 09:18 | 팀/스터디 동기화 및 CRUD 변경 |
| 09:30 | 팀/스터디원 자진 탈퇴 |
| 10:15 | 팀 지원 관련 FCM 알림 + 새소식 알림 |
| 15:25 | 익명성 보장 백엔드 처리 |
02.06 ~ 02.07 - 회원탈퇴 & 최종 수정
| 시간 | 내용 |
| 22:10 | 회원탈퇴 시 hard delete로 변경 |
| 22:25 | 팀/스터디 탈퇴 로직 수정 |
| 22:38 | 회원탈퇴 시 리더 null 처리 |
| 23:07 | soft delete 되었던 게시물/댓글 수정 |
| 13:31 | 회원탈퇴 side effect 해결 |
| 15:23 | 쪽지 버그 수정 (최종 커밋) |
난관
- Lazy 로딩 관련 - LazyInitializationException이 팀/스터디 조회 전반에서 발생.
밤 8:45부터 10:13까지 4커밋으로 해결 시도 - Redis 캐시 반복 실패 - 12:59부터 13:38까지 40분간 5번 연속 "redis 재수정" 커밋.
Jackson 3 전환과 맞물려 직렬화 설정이 계속 실패 - 회원탈퇴 연쇄 문제 - hard delete로 변경했더니 리더 참조, 게시물/댓글 참조,
팀 소속 등 연쇄적으로 FK 제약 위반 발생
해결 방법
- Lazy : @Transactional 범위 확장 + Fetch Join 으로 필요한 엔티티를 미리 로딩
- Redis : Jackson 3 호환 직렬화 설정 (GenericJackson3JsonRedisSerializer) 적용
- 회원탈퇴 : 리더 → null 처리, soft delete 게시물/댓글 cascade 정리, 탈퇴 로직 재설계
결과
- 13개 이상의 핵심 API 기능 완성 (관리자 공지, 익명성 보장, 회원탈퇴, FCM 재동기화 등)
- 팀/스터디 관련 API의 완전한 안정화
- 02.07 15:23 쪽지 버그 수정을 마지막으로 전체 백엔드 기능 완성
회고
5주차는 나에게 가장 고된 주간이었다.
02.03에 새벽 1시부터 코딩을 시작해 하루 13커밋, 02.04에는 14커밋으로 Redis 캐시와 씨름했다.
특히 "redis 재수정"이 5번 연속으로 이어진 것은 기술 부채가 한꺼번에 터진 결과였다.
하지만 이 과정에서 JPA Lazy 로딩, Redis 직렬화, FCM 알림 시스템 등 기술적으로 극복을 해보며
다양하고 깊은 지식들을 얕게라도 습득했다.
회원탈퇴 하나에서 4일간 side effect를 추적한 경험은 "데이터 무결성의 중요성"을 체감하게 해준 사건이었다.
처음엔 단순하게 soft delete로 회원탈퇴를 하는 게 맞다고 생각했는데, 사용자 입장에서는 탈퇴 시에 본인의 기록들이 모두
사라지는 걸 원하지 않을까? 라고 생각했고, 관련 법이나 일반적으로 어떻게 처리했는지를 찾아보고,
hard delete로 회원탈퇴를 해야겠다고 수정했다.
하지만 side effect가 정말 많았고 (스터디, 팀 리더가 회원탈퇴를 하면 그 스터디와 팀의 처리는..? 등)
하나하나 다 고려해가면서 수정하다보니 꽤 오랜 시간동안 side effect를 수정했다. 좋은 경험이라고 생각한다.
[ 6주차 (26.02.09 ~ 26.02.13) ] - 최종 배포 및 회고 단계
팀 커밋 6건
팀 주요 활동
| 날짜 | 활동 | 담당 |
| 02.09 | 관리자 endpoint 제거, .gitignore 수정, 시나리오 문서 업로드 | 김*재, 김*호 |
팀 난관
- 최종 발표 준비와 시나리오 문서 정리에 시간 투자 필요
해결 방법
- 불필요한 관리자 endpoint를 제거하여 보안 강화 (swagger UI 등)
- 시나리오 문서를 최종 정리하여 업로드
결과
- 프로젝트 코드 정리 및 문서화 완료
- ssabree time 프로젝트 최종 완성
회고
마지막주는 코드보다 문서와 발표 준비에 집중했다.
또한, 원스토어와 ios 앱스토어에 출시하는데에 공을 들여, 원스토어에는 바로 출시했고,
앱스토어에는 시간이 좀 걸려 2월 중순이 넘어서 출시에 성공했다.



그렇게 6주간의 여정이 하나의 서비스로 완성되었다.
📊 전체 요약
내 주별 커밋
| 주차 | 추이 | 커밋 건 수 | 내용 |
| 3주차 | ████░░░░░░░░░░░░░░░░░░ | 5건 (6%) | ERD·인증·회원가입 |
| 4주차 | ██████████████░░░░░░░░ | 27건 (35%) | API 양산 (검색·투표·채팅·식단) |
| 5주차 | ██████████████████████ | 45건 (58%) | 버그·캐시·FCM·탈퇴 |
내 핵심 기여 정리
| 영역 | 구현 기능 |
| 데이터 설계 | ERD 1~3차 설계 및 수정 |
| 인증 | 싸피 교육생 인증, 회원가입, Mattermost 매칭 |
| 게시판 | 검색, 투표, Hot 게시판, 커서기반 페이지네이션, 조회수, 댓글 soft-delete |
| 커뮤니케이션 | 쪽지, 채팅 실시간 (WebSocket/STOMP), Nginx 프록시 |
| 그룹 | 팀/스터디 CRUD, 동기화, 자진 탈퇴, 지원 관리 |
| 알림 | FCM 알림 (댓글/지원/수락), 새소식, 재동기화 |
| 보안/정책 | 익명성 보장, 회원탈퇴 hard delete, AI 블라인드 연동 |
| 성능 | Redis 캐시, 댓글 페이지네이션, Lazy 로딩 최적화 |
| 데이터 | 초기설정 데이터, 14-15기 반정보, 관리자 공지 |
마무리하며


처음으로 6인이라는 규모로 프로젝트를 진행해보았다.
끈끈하고 정말 좋은 유대감을 가지고 팀이 잘 진행되었지만,
6명 모두 프로젝트 경험이 많지 않아 애를 먹은 부분도 많았다.
하지만 그마저도 모두에게 좋은 성장 기회였다고 생각하고, 좋은 추억도 되었다.
기술적으로는 Spring 버전을 4.0대 버전을 쓴게 큰 패착 중에 하나라고 생각한다.
Claude code와 Gemini Pro 등을 활용해서 코딩했는데, Spring 4.0대 버전이 너무 최신이라
AI도 학습이 되어있지 않았고, 그로 인해서 Jackson 3 관련 문제를 해결하려해도 AI 조차 해결을 못했다.
결국은 팀원분이 하루종일 고생해서 직접 Jackson 3 내용들을 웹서핑해서 AI에 학습 시킨 뒤에 고쳤는데,
이 일이 있고나서는 무엇이든 안정적으로 동작중인 최소 1~2년 정도된 버전을 default로 사용해야겠다는 생각을 했다.
'Project > Retrospect' 카테고리의 다른 글
| [회고] SSAFY 1학기 최종 관통 프로젝트 회고 (0) | 2026.02.12 |
|---|
