미니 SNS 스파클링 백엔드 1주차
미니 SNS 프로젝트, 스파클링을 시작하며
1. 간단한 소개
Sparkling ✨ 은 소셜 네트워크 서비스(SNS)의 핵심 기능만 담은 미니 백엔드 프로젝트입니다.
거창한 서비스를 만들려는 게 아닙니다. 회원가입부터 게시글, 댓글, 좋아요까지 SNS의 뼈대가 되는 기능을 직접 설계하고 구현하면서, “왜 이렇게 만드는가”를 매주 기록으로 남기는 것이 목표입니다.
기술 스택은 다음과 같습니다.
| 구분 | 기술 |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 4.1.0 |
| Security | Spring Security, JWT |
| ORM | Spring Data JPA |
| Database | MySQL |
| Build | Gradle |
2. 구현 기능
필수 / 선택 / 제외 세 단계로 나눠 정의했습니다.
필수 기능
| No | 기능 | 설명 |
|---|---|---|
| 1 | 회원가입 | 신규 사용자 계정 생성 |
| 2 | 로그인 | 사용자 인증 및 로그인 |
| 3 | 내 정보 조회 | 로그인한 사용자의 프로필 조회 |
| 4 | 게시글 CRUD | 게시글 작성 / 목록 / 상세 / 수정 / 삭제 |
| 5 | 댓글 | 댓글 작성 / 삭제 |
| 6 | 좋아요 | 좋아요 추가 / 취소 |
| 7 | 내 게시글 조회 | 로그인한 사용자가 작성한 게시글 목록 조회 |
| 8 | 페이지네이션 | 목록 조회 시 페이지 단위 응답 |
선택 기능
필수 기능이 끝난 뒤에 여유가 있으면 도전합니다.
- 검색 (게시글 / 사용자)
- 해시태그
- DM (1:1 채팅 메시지)
제외 기능
알림, 인기글, 대댓글은 이번 범위에서 의도적으로 제외했습니다.
- 알림: 비동기 + 팬아웃. 거의 모든 기능(좋아요/댓글/팔로우)에 훅이 박혀야 하고, 실시간이면 웹소켓/FCM까지 필요합니다.
- 인기글: 집계/랭킹. 실시간 카운트냐 배치냐 결정이 필요하고 스케줄러 + 집계 테이블 + 캐시가 따라옵니다.
- 대댓글: 재귀/트리 구조. 댓글이 트리가 되면서 조회/정렬/깊이 제한 로직이 통째로 바뀝니다.
기능 하나를 넣었을 뿐인데 코드와 인프라가 몇 배로 커지는 기능들이 있습니다. 1주차 조사에서 그 공통 특징(비동기/실시간성, 팬아웃, 별도 저장소 요구, 집계/랭킹, 재귀 구조)을 정리했고, 여기에 해당하는 기능은 과감히 잘라냈습니다.
3. 프로젝트 원칙
이 프로젝트를 진행하면서 지키려는 원칙은 세 가지입니다.
원칙 1. 코드는 직접 작성한다
이 프로젝트의 코드는 AI에 맡기지 않고 직접 작성합니다. 12주차 이후에는 같은 프로젝트를 AI로 다시 만들어 볼 예정이라, 직접 만든 결과물과 비교하는 기준점이 되기 때문입니다.
원칙 2. 결정에는 이유를 남긴다
기술 선택이든 범위 결정이든, “그냥 남들이 쓰니까”가 아니라 선택지 → 내가 고른 방식 → 이유 → 아직 확신 없는 점 순서로 기록합니다. 매주 조사 문서(week research)를 이 템플릿으로 작성합니다.
원칙 3. 매주 결과물을 만든다
일주일 단위로 조사 + 구현 + 기록을 한 사이클로 돌립니다. 완벽한 코드보다 매주 돌아가는 결과물과 그 과정의 기록을 우선합니다.
4. 무엇을 올리려고 하는지
이 블로그에는 주차별로 다음 내용을 올릴 예정입니다.
- 주차별 진행 기록: 그 주에 구현한 기능과 부딪힌 문제, 해결 과정
- 조사 내용 정리: 매주 정한 조사 주제와 그 결과
- 설계 결정 회고: 왜 이렇게 설계했는지, 나중에 돌아봤을 때 어땠는지
1주차에 한 것
- 프로젝트 셋업 (Spring Boot 4.1.0 + Gradle)
- 기능 명세(scope.md) 작성 — 필수 / 선택 / 제외 기준 정리
- Spring Security 뼈대 작성 — CSRF/폼로그인/HTTP Basic 비활성화, 세션 STATELESS 설정 (JWT 준비)
- 헬스체크 컨트롤러 작성 (JSON 응답)
- Week-01 조사: MVP란 무엇인가, 작은 서비스에서 범위를 자르는 기준, 넣으면 프로젝트가 급격히 커지는 기능