안녕하세요
오늘은 springboot 팀 프로젝트 초기세팅에 대해서
이야기 해보려고합니다.
다양한 프로젝트에 참여하다보니
프로젝트 초기세팅에 많은 시간을 투자한다는 것을 알게되었습니다.
그만큼 중요해서 그렇겠죠?
각설하고,
여러 프로젝트를 하면서 제가 항상 갖추던 개발 초기세팅을 공유하겠습니다
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/018.gif)
1. 프로젝트 개발 프로세스 파악
먼저 프로젝트를 시작하기 위해서는 개발환경을 파악하는 것이 중요합니다
아래는 초기 프로젝트에 필요한 개발 프로세스를 작성한 것입니다.
아래와 같이 정리해서 아카이빙 해두면 나중에 프로젝트를 진행할때 참고도 할 수 있고
프로젝트를 진행하면서 계속 확인하면서 할 수도 있어서
한번 미리 정리해두고 개발하는 것이 유리합니다
기술 스택
- 백엔드: Spring Boot 3.x
- 데이터베이스: PostgreSQL
- 빌드 툴: Gradle
- 프로젝트 구조
- Monolithic Application
- Layered Architecture
- RESTful API
- Exception Handling: 글로벌 예외 처리 (ExceptionHandler 사용)
- 데이터베이스 설계
- 테이블 명명 규칙: 모든 테이블에 p_ 접두사 사용
- UUID 사용: 모든 주요 엔티티의 식별자는 UUID를 사용 (유저는 예외)
- Audit 필드: 모든 테이블에 created_at, created_by, updated_at, updated_by, deleted_at, deleted_by
- ERD 설계
- 보안
- JWT 인증: Spring Security와 JWT(Json Web Token)를 이용한 인증 및 권한 관리
- 권한 확인 : CUSTOMER 이상의 권한은 요청마다 저장되어 있는 권한 값과 동일한지 체크필요
- 비밀번호 암호화: BCrypt 해시 알고리즘을 사용한 비밀번호 암호화
- 데이터 유효성 검사: 서버 측 데이터 유효성 검사를 위해 Spring Validator 사용
- 테스트
- 테스트: Spring Boot Test를 사용한 테스트
- Spring Boot Test 을 반드시 사용할 필요는 없으나, 적절한 테스트 방법을 선정하여 진행
2. 프로젝트 세팅에 필요한 파일들
위의 개발 프로세스를 참고해서,
프로젝트 초기에 필요한 근본적인 파일들은
application.yml, docker-compose.yml, env.properties 파일 등이 있을 것 같습니다.
(github repo , git flow, gitignore, erd, dependency, 공통 응답 객체, custom exception 등등
이런건 개별적으로 구성하실 수 있져? 매우 중요합니다람쥐)
1) 아래는 docker-compose.yml 입니다.
위의 개발 프로세스를 확인하여 postgreSQL DB환경을 맞춥니다
services:
postgres:
image: postgres:15
container_name: service-postgres
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 1234
POSTGRES_DB: postgres
pgadmin:
image: dpage/pgadmin4
container_name: service-pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
PGADMIN_DEFAULT_PASSWORD: 12345
ports:
- "5050:80" # pgadmin에 접속하는 포트
depends_on:
- postgres
volumes:
postgres_data:
2) application.yml
아래는 프로젝트를 실행시키기 위한 application.yml 입니다.
spring:
application:
name: service
config:
import: optional:file:.env[.]yml
security:
user:
name: user
password: 54623
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
naming:
physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
database-platform: org.hibernate.dialect.PostgreSQLDialect
# show-sql: true
datasource:
url: ${DATABASE_URL}
username: ${DATABASE_USERNAME}
password: ${DATABASE_PASSWORD}
driver-class-name: ${DATABASE_DRIVER}
servlet:
multipart:
max-file-size: ${MAX_FILE_SIZE}
max-request-size: ${MAX_REQUEST_SIZE}
jwt:
secret: ${JWT_SECRET}
3)아래는 env 파일 입니다.
개인정보, 비밀번호, 시크릿 키 같은 민감 정보를 관리하는 파일입니다.
# Local
DATABASE_URL=jdbc:postgresql://localhost:5432/postgres
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=1234
DATABASE_DRIVER=org.postgresql.Driver
# JWT Secret
JWT_SECRET=시크릿키
# Multipart file size
MAX_FILE_SIZE=10MB
MAX_REQUEST_SIZE=10MB
4) 프로젝트 아키텍처
프로젝트 아키텍처를 미리 설계해두고 프로젝트를 진행하면
참고하면서 되게 편리하게 개발을 할 수 있더라구요!
아래는 위의 개발 프로세스를 참고하여 구성한 개발 프로세스 입니다
3. 민감한 파일들은 .gitignore로!
지금까지 언급한 파일들 외에도 초기에 필요한 파일들이 있을 수 있겠지만
spring boot 팀플을 진행할때는 위의 파일들만,
팀원들과 함께 공유한다면 초기세팅에는 큰 문제는 없을 것입니다!
그리고 위의 파일들은 민감한 파일들 이기 때문에 .gitignore로 꼭 관리해주셔야 한다는점 잊지마세요!
'Back-End > JavaSpring' 카테고리의 다른 글
DTO 에서 회원정보 유효성 검증하기 (spring boot, @Valid) (0) | 2024.12.24 |
---|