Skip to content

Commit 7dd1b7f

Browse files
committed
docs: 프로젝트 구조 및 기술 스택 정리
1 parent 3c3b232 commit 7dd1b7f

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

README.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Gridgestagram
2+
3+
Instagram 클론 프로젝트 - Spring Boot 기반의 소셜 미디어 플랫폼
4+
5+
## 프로젝트 개요
6+
7+
- **프로젝트명**: gridgestagram
8+
- **Java 버전**: 17
9+
- **Spring Boot 버전**: 3.5.5
10+
- **빌드 도구**: Gradle
11+
12+
## 기술 스택
13+
14+
| 카테고리 | 기술 | 설명 | 선택 이유 |
15+
|---------|------|------|------------------------------------------------------------------------------------|
16+
| **프레임워크** | Spring Boot 3.5.5 | 메인 애플리케이션 프레임워크 | 소셜 미디어의 복잡한 비즈니스 로직과 다양한 API 엔드포인트를 효율적으로 관리하며, 자동 설정과 내장 서버로 빠른 개발과 배포가 가능 |
17+
| **보안** | Spring Security | 인증/인가 관리 | 사용자 계정, 개인정보, 콘텐츠 보호가 핵심인 소셜 플랫폼에서 OAuth2, JWT 토큰 인증, 역할 기반 권한 관리를 통합적으로 제공 |
18+
| **데이터베이스** | MySQL | 메인 데이터베이스 | 사용자, 피드, 팔로우 관계 등 복잡한 관계형 데이터 구조를 안정적으로 처리하며, 트랜잭션 일관성과 ACID 속성을 보장하여 데이터 무결성 확보 |
19+
| **ORM** | Spring Data JPA | 객체-관계 매핑 | 복잡한 엔티티 관계(User-Feed-Subscription 등)를 객체 지향적으로 관리하고, 반복적인 CRUD 작업을 자동화하여 개발 생산성 향상 |
20+
| **쿼리** | QueryDSL | 타입 안전한 쿼리 작성 | 피드 검색, 사용자 필터링, 구독 이력 조회 등 복잡한 동적 쿼리를 컴파일 시점에 검증하여 런타임 오류를 방지하고 유지보수성 향상 |
21+
| **인증** | JWT | 토큰 기반 인증 시스템 | Stateless 인증을 지원하며, 확장성이 뛰어나고 서버 부하를 줄이면서 사용자 세션을 안전하게 관리 |
22+
| **캐싱** | Redis | 캐싱 및 세션 관리 | 피드 좋아요 데이터를 메모리에 캐싱하여 응답 속도를 개선하고, 데이터베이스 부하를 줄여 처리 능력 향상 |
23+
| **파일 저장소** | AWS S3 | 이미지/동영상 파일 저장 | Instagram과 같은 미디어 중심 플랫폼에서 대용량 이미지/동영상 파일을 안정적으로 저장 가능 |
24+
| **설정 관리** | AWS Parameter Store | 환경별 설정 관리 | 개발/스테이징/프로덕션 환경별 데이터베이스 연결 정보, API 키 등 민감한 설정을 안전하게 중앙 관리하고 암호화된 상태로 저장 |
25+
| **컨테이너** | Docker | 애플리케이션 컨테이너화 | 개발 환경과 프로덕션 환경의 일관성을 보장하고, 마이크로서비스 아키텍처로의 확장과 CI/CD 파이프라인 구축을 위한 기반 제공 |
26+
| **API 문서** | Swagger | REST API 문서화 | 프론트엔드 팀과의 협업 효율성을 높이고, API 명세를 자동으로 생성하여 개발 속도를 향상시키며 API 테스트 환경 제공 |
27+
| **코드 생성** | Lombok | 보일러플레이트 코드 자동 생성 | Entity, DTO 클래스의 getter/setter, builder 패턴 등 반복적인 코드를 자동 생성하여 코드 가독성을 높이고 개발 시간 단축 |
28+
| **빌드 도구** | Gradle | 의존성 관리 및 빌드 | Maven보다 빠른 빌드 속도와 유연한 설정을 제공하며, 멀티 모듈 프로젝트 관리와 다양한 플러그인을 통한 확장성 제공 |
29+
| **언어** | Java 17 | 프로그래밍 언어 | LTS 버전으로 안정성을 보장 |
30+
31+
## 프로젝트 구조
32+
33+
```
34+
src/main/java/org/example/gridgestagram/
35+
├── GridgestagramApplication.java # 메인 애플리케이션 클래스
36+
├── annotation/ # 커스텀 어노테이션
37+
│ ├── LogAction.java # 로그 액션 어노테이션
38+
│ └── LoggingAspect.java # AOP 로깅 관점
39+
├── config/ # 설정 클래스들
40+
│ ├── AsyncConfig.java # 비동기 처리 설정
41+
│ ├── CacheConfig.java # 캐시 설정
42+
│ ├── CorsConfig.java # CORS 설정
43+
│ ├── JacksonDateTimeConfig.java # 날짜/시간 직렬화 설정
44+
│ ├── PasswordEncoderConfig.java # 비밀번호 암호화 설정
45+
│ ├── QuerydslConfig.java # QueryDSL 설정
46+
│ ├── RedisConfig.java # Redis 설정
47+
│ ├── S3Config.java # AWS S3 설정
48+
│ ├── SchedulingConfig.java # 스케줄링 설정
49+
│ ├── SecurityConfig.java # Spring Security 설정
50+
│ ├── SwaggerConfig.java # API 문서화 설정
51+
│ └── WebConfig.java # 웹 관련 설정
52+
├── controller/ # REST API 컨트롤러
53+
│ ├── admin/ # 관리자 기능
54+
│ ├── auth/ # 인증 관련
55+
│ ├── feed/ # 피드 관련
56+
│ ├── file/ # 파일 관련
57+
│ ├── subscription/ # 구독 관련
58+
│ └── user/ # 사용자 관련
59+
├── data/ # 데이터 관련 클래스
60+
├── exceptions/ # 커스텀 예외 클래스
61+
├── repository/ # 데이터 접근 계층
62+
│ ├── feed/ # 피드 리포지토리
63+
│ ├── files/ # 파일 리포지토리
64+
│ ├── log/ # 로그 리포지토리
65+
│ ├── payment/ # 결제 리포지토리
66+
│ ├── refreshToken/ # 리프레시 토큰 리포지토리
67+
│ ├── subscription/ # 구독 리포지토리
68+
│ ├── term/ # 약관 리포지토리
69+
│ └── user/ # 사용자 리포지토리
70+
├── security/ # 보안 관련 클래스
71+
├── service/ # 비즈니스 로직 계층
72+
│ ├── domain/ # 도메인 서비스
73+
│ └── facade/ # 파사드 패턴 서비스
74+
└── utils/ # 유틸리티 클래스
75+
```
76+
77+
## 주요 기능
78+
79+
- **사용자 관리**: 회원가입, 로그인, 프로필 관리
80+
- **피드 관리**: 게시글 작성, 조회, 수정, 삭제
81+
- **파일 관리**: 이미지/동영상 업로드 및 저장
82+
- **관리자 기능**: 사용자 관리, 피드 관리, 신고 처리
83+
- **인증/인가**: JWT 토큰 기반 보안
84+
- **API 문서화**: Swagger를 통한 API 문서 제공
85+
86+
## 설정 파일
87+
88+
- `application.yml` - 기본 설정
89+
- `application-local.yml` - 로컬 환경 설정
90+
- `application-prod.yml` - 프로덕션 환경 설정

0 commit comments

Comments
 (0)