게시물, 댓글, 좋아요에 대한 완전한 CRUD 작업을 제공하는 소셜 미디어 플랫폼용 포괄적인 Spring Boot REST API 애플리케이션입니다.
다음 사양으로 구축된 프로덕션 준비가 완료된 Spring Boot 애플리케이션입니다:
- 패키지 명:
com.contoso.socialapp - Artifact ID:
socialapp - Group ID:
com.contoso - 패키지 타입:
jar - Java 버전: OpenJDK 21
- 빌드 도구: Gradle
- 데이터베이스: SQLite (내장형)
- 포트: 8080
- Spring Boot 3.2.5: 코어 프레임워크
- Spring Web: RESTful API 엔드포인트
- Spring Data JPA: 데이터베이스 작업
- Spring Boot Actuator: 애플리케이션 모니터링
- Spring Boot Validation: 입력 검증
- SQLite: 내장형 데이터베이스
- Hibernate Community Dialects: SQLite 지원
- Springdoc OpenAPI: API 문서화 (Swagger UI)
- Lombok: 보일러플레이트 코드 감소
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── contoso/
│ │ └── socialapp/
│ │ ├── SocialAppApplication.java # 메인 애플리케이션 클래스
│ │ ├── config/
│ │ │ ├── WebConfig.java # CORS 구성
│ │ │ └── OpenApiConfig.java # Swagger/OpenAPI 구성
│ │ ├── controller/
│ │ │ ├── HealthController.java # 상태 엔드포인트
│ │ │ ├── PostController.java # 게시물 관리
│ │ │ └── CommentController.java # 댓글 및 좋아요 관리
│ │ ├── model/
│ │ │ ├── Post.java # 게시물 엔티티
│ │ │ ├── Comment.java # 댓글 엔티티
│ │ │ ├── Like.java # 좋아요 엔티티
│ │ │ └── dto/ # 데이터 전송 객체
│ │ ├── repository/
│ │ │ ├── PostRepository.java # 게시물 데이터 액세스
│ │ │ ├── CommentRepository.java # 댓글 데이터 액세스
│ │ │ └── LikeRepository.java # 좋아요 데이터 액세스
│ │ └── service/
│ │ ├── PostService.java # 게시물 비즈니스 로직
│ │ └── CommentService.java # 댓글 비즈니스 로직
│ └── resources/
│ ├── application.properties # 애플리케이션 구성
│ └── data.sql # 샘플 데이터 (선택사항)
└── test/
└── java/
└── com/
└── contoso/
└── socialapp/
└── SocialAppApplicationTests.java # 통합 테스트
- ✅ 소셜 미디어 작업을 위한 완전한 RESTful API
- ✅ 게시물 관리 (생성, 읽기, 업데이트, 삭제)
- ✅ 완전한 CRUD 작업을 포함한 댓글 시스템
- ✅ 좋아요/취소 기능
- ✅ JPA/Hibernate를 사용한 SQLite 데이터베이스
- ✅ OpenAPI/Swagger 문서화
- ✅ localhost 및 GitHub Codespaces용 CORS 활성화
- ✅ 동적 서버 URL 구성
- ✅ 상태 확인 엔드포인트
- ✅ Spring Boot Actuator 통합
- ✅ 포괄적인 오류 처리
- ✅ Bean Validation을 사용한 입력 검증
준비를 위해 README 문서를 참조하세요.
먼저 $REPOSITORY_ROOT 환경 변수를 설정하세요.
# bash/zsh
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)# PowerShell
$REPOSITORY_ROOT = git rev-parse --show-toplevel그런 다음 java 디렉터리로 이동하세요.
cd $REPOSITORY_ROOT/complete/java# gradlew를 실행 가능하게 만들기 (필요한 경우)
chmod +x ./gradlew
# 프로젝트 빌드
./gradlew build# Gradle을 사용하여 애플리케이션 시작
./gradlew bootRun
# 대안: JAR 파일을 직접 실행
# java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar# 상태 엔드포인트 확인
curl http://localhost:8080/api/health
# 예상 응답: {"status":"healthy"}브라우저를 열고 다음으로 이동하세요:
- Swagger UI: http://localhost:8080/swagger-ui.html
- OpenAPI JSON: http://localhost:8080/v3/api-docs
GET /api/health- 커스텀 상태 확인 엔드포인트GET /api/welcome- 환영 메시지 엔드포인트
GET /api/posts- 모든 게시물 가져오기GET /api/posts/{id}- ID로 특정 게시물 가져오기POST /api/posts- 새 게시물 생성PATCH /api/posts/{id}- 기존 게시물 업데이트DELETE /api/posts/{id}- 게시물 삭제
GET /api/posts/{postId}/comments- 게시물의 모든 댓글 가져오기GET /api/posts/{postId}/comments/{commentId}- 특정 댓글 가져오기POST /api/posts/{postId}/comments- 게시물에 댓글 추가PATCH /api/posts/{postId}/comments/{commentId}- 댓글 업데이트DELETE /api/posts/{postId}/comments/{commentId}- 댓글 삭제
POST /api/posts/{postId}/like- 게시물 좋아요DELETE /api/posts/{postId}/like- 게시물 좋아요 취소
GET /actuator/health- Spring Boot 상태 지표GET /actuator/info- 애플리케이션 정보
curl -X POST http://localhost:8080/api/posts \
-H "Content-Type: application/json" \
-d '{
"title": "My First Post",
"content": "This is the content of my first post!",
"authorName": "John Doe"
}'curl http://localhost:8080/api/postscurl -X POST http://localhost:8080/api/posts/1/comments \
-H "Content-Type: application/json" \
-d '{
"content": "Great post!",
"authorName": "Jane Smith"
}'curl -X POST http://localhost:8080/api/posts/1/like \
-H "Content-Type: application/json" \
-d '{
"userName": "john_doe"
}'- http://localhost:8080/swagger-ui.html 열기
- 사용 가능한 엔드포인트 탐색
- 임의의 엔드포인트에서 "Try it out" 클릭
- 매개변수를 입력하고 "Execute" 클릭
# 모든 테스트 실행
./gradlew test
# 커버리지 리포트와 함께 실행
./gradlew test jacocoTestReport
# 특정 테스트 클래스 실행
./gradlew test --tests "SocialAppApplicationTests"애플리케이션은 SQLite를 내장형 데이터베이스로 사용합니다:
- 데이터베이스 파일:
sns_api.db(자동 생성) - 위치: 프로젝트 루트 디렉터리
- 스키마: Hibernate에 의해 자동 생성
- 샘플 데이터:
data.sql에서 로드 (있는 경우)
데이터베이스를 재설정하려면 sns_api.db 파일을 삭제하고 애플리케이션을 다시 시작하세요.
application.properties의 주요 구성 설정:
# 애플리케이션 설정
spring.application.name=socialapp
server.port=8080
# 데이터베이스 구성
spring.datasource.url=jdbc:sqlite:sns_api.db
spring.jpa.hibernate.ddl-auto=update
# OpenAPI/Swagger 구성
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.swagger-ui.operationsSorter=method애플리케이션은 localhost와 GitHub Codespaces를 모두 지원합니다:
- Localhost:
http://localhost:8080 - GitHub Codespaces: 자동 감지되고 동적으로 구성됨
애플리케이션은 런타임 환경을 자동으로 감지합니다:
- 로컬 개발:
http://localhost:8080사용 - GitHub Codespaces:
https://{codespace-name}-8080.{domain}사용
# 프로덕션 JAR 생성
./gradlew clean build
# JAR 위치
ls -la build/libs/socialapp-0.0.1-SNAPSHOT.jar# 프로덕션 프로필로 실행
java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# 또는 커스텀 포트로
java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --server.port=8081# 8080 포트를 사용하는 프로세스 찾기
lsof -i :8080
# 프로세스 종료 (PID 교체)
kill -9 <PID>
# 또는 다른 포트 사용
./gradlew bootRun --args='--server.port=8081'# 정리 후 재빌드
./gradlew clean build
# Gradle wrapper 업데이트
./gradlew wrapper --gradle-version=8.5# 데이터베이스 재설정
rm sns_api.db
./gradlew bootRun- 애플리케이션 로그:
./gradlew bootRun실행 시 콘솔 출력 - 상태 확인:
GET /actuator/health - 애플리케이션 정보:
GET /actuator/info
- 모든 출처에 대해 CORS 활성화
- SQLite 데이터베이스 (프로덕션 규모에는 적합하지 않음)
- 인증/권한 부여 없음
프로덕션 배포를 위해서는 다음을 고려하세요:
- 특정 도메인으로 CORS 제한
- SQLite 대신 PostgreSQL/MySQL 사용
- 인증을 위한 Spring Security 구현
- 속도 제한 및 입력 정화 추가
- HTTPS/TLS 암호화 사용
면책조항: 이 문서는 GitHub Copilot에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 issue를 생성해 주세요.