0. 서론
Spring Boot 프로젝트 초기 설정은 개발 환경의 효율성을 높이고, 목적에 맞는 의존성을 추가하여 기능을 확장하는 중요한 과정입니다!
이번 글에서는 프로젝트 생성 시 필수적이거나 선택적으로 추가한 의존성부터 application.yml 설정, 공통 시간 관리를 위한 BaseTimeEntity 구현 등의 초기 설정 과정을 단계별로 소개드리겠습니다! 추가적으로 다른 블로그 글에서 에러 시스템, Swagger 설정 등을 소개해드릴 예정입니다!!
1. 프로젝트 생성 시 의존성 추가
Spring Boot 프로젝트 생성 시, 필수적으로 추가하거나 사용 목적에 따라 선택적으로 추가하는 의존성은 다음과 같습니다. ...!
// 기본적으로 추가하는 설정
- devtools: 개발 편의성 향상
- lombok: 반복 코드를 줄이기 위한 애노테이션 지원
- web: 웹 개발 환경 구성
- validation: 데이터 유효성 검증
- spring data JPA: 데이터베이스 연동 및 ORM 처리
- spring security: 인증 및 권한 관리 기능 제공
// 데이터 베이스 종류에 따라 추가
- MySQL: mysql driver
- MongoDB: mongodb
- Redis: redis
// 소셜 로그인 사용 시 추가
- oauth2 client: OAuth 2.0 기반 소셜 로그인 지원
초기 세팅 시, dependency에 포함되어있지 않아, 프로젝트를 생성하고 추가적으로 설정하는 내용은 다음과 같습니다.
// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
// Querydsl
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// Slf4j
implementation 'org.slf4j:slf4j-api:2.0.6'
// logback
implementation 'ch.qos.logback:logback-classic:1.4.1'
}
JWT와 Swagger는 이전에 사용했던 설정들을 사용하였으며, Querydsl을 이번에 처음 사용해보기 때문에 추가적인 정보는 추후에 다시 정리할 예정입니다.
이런 식으로 프로젝트에 필요한 dependency를 설정하였습니다.
2. application.yml 설정
개발 및 배포 환경에서 application.yml 파일을 별도로 분리하여 사용하지만, 초기 단계에서는 개발 환경에 맞춰 아래와 같이 설정하였습니다.
이번 프로젝트에서는
MySQL과 MongoDB를 동시에 사용하였으며, 개발 환경에서는 아래와 같은 설정을 적용했습니다.
spring:
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: true
datasource:
url: jdbc:mysql://localhost:3306/chatbot?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: root
password: ssafy
data:
mongodb:
uri: mongodb://localhost:27017/local
- ddl-auto: update: 데이터베이스 스키마를 엔티티에 맞게 자동으로 갱신
- show-sql: true: 실행되는 SQL 쿼리 로그 출력
- uri: MongoDB의 접속 URL 지정
3. 공통 시간 관리를 위한 BaseTimeEntity 구현
프로젝트 내 모든 엔티티에서 생성 시간과 수정 시간을 자동으로 관리하기 위해 BaseTimeEntity를 구현하였습니다.
import java.time.LocalDateTime;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
- 주요 애노테이션 설명
- @MappedSuperclass: 상속받는 엔티티 클래스에서 필드를 컬럼으로 인식하도록 설정
- @EntityListeners: 생성/수정 시간 자동 관리
- @CreatedDate: 엔티티 생성 시 자동으로 저장
- @LastModifiedDate: 엔티티 수정 시 자동으로 저장
4. JPA Auditing 활성화
위 BaseTimeEntity의 기능이 정상 작동하도록 JPA Auditing을 활성화합니다.
이전에는 메인 클래스에 @EnableJpaAuditing을 사용했지만, 구조를 명확히 하기 위해 별도 설정 파일을 작성했습니다.
package com.chatbot.backend.global.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
각각의 어노테이션에 대한 설명은 다음과 같습니다
- @EnableJpaAuditing: JPA Auditing 기능을 활성화하여 생성/수정 시간을 자동 관리
- @Configuration: 해당 클래스가 Spring 설정 클래스임을 나타냄
5. 결론
Spring Boot 프로젝트의 초기 설정은 안정적이고 효율적인 개발 환경을 마련하는 데 중요한 역할을 합니다. 의존성 추가부터 공통 시간 관리와 JPA Auditing 활성화까지의 과정을 통해 프로젝트의 기본 구조를 체계적으로 잡을 수 있었습니다.
본 글이 프로젝트 초기 설정에 대한 이해를 돕고, 실무 환경에서 활용할 수 있는 가이드가 되었기를 바랍니다!!
'Spring' 카테고리의 다른 글
[Spring] Swagger 설정 (2) | 2024.11.25 |
---|---|
[Spring] 예외 처리 시스템 구축하기 (0) | 2024.11.21 |
[스프링/Spring] Port 8080 is already in use 에러 해결 방법 (2) | 2024.01.07 |