Back-End/JavaSpring

SpringBoot 팀 프로젝트 초기 세팅

stars_one 2025. 2. 13. 23:56

그래도 시작은 중요해ㅣㄴㅁㅁㅇㄴ,ㅏ러

 

안녕하세요 

오늘은 springboot 팀 프로젝트 초기세팅에 대해서

이야기 해보려고합니다.

 

다양한 프로젝트에 참여하다보니

프로젝트 초기세팅에 많은 시간을 투자한다는 것을 알게되었습니다.

그만큼 중요해서 그렇겠죠?

 

각설하고,

여러 프로젝트를 하면서 제가 항상 갖추던 개발 초기세팅을 공유하겠습니다

 

 


 

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로 꼭 관리해주셔야 한다는점 잊지마세요!