이번에는 Backend 개발 환경 세팅에 대해 정리해보겠다!
[네컷로그] 2. 사이드 프로젝트 개발 환경 세팅(1) : 기술 스택 선정
이번 프로젝트에서 내가 가장 해보고싶었던(?) 부분이 개발 환경 세팅이다.실무에서는 선임분들이 개발 환경 세팅을 완료한 후 기능 개발만 할 수 있도록 환경을 구축해줘서 사실 그 프로젝트가
caveloperstudylog.tistory.com
기술 스택 선정 글에서 말했듯이 Java + Spring Boot로 백엔드 개발을 진행하기로 했고 단계별로 차근차근 개발 환경 세팅을 해보았다.
Spring Boot 프로젝트 생성
Spring Initializr 사용해서 기본 프로젝트 생성
[기본 환경 설정 ]
Project: Gradle - Groovy
Language: Java
Spring Boot: 3.4.3
Packaging: Jar
Java: 17
프로젝트 구조 설계
src/main/java/com/flog/fourcut_log/
├── FourcutLogApplication.java
├── {domain}/ # 도메인별 기능 (예: auth, user, flog 등)
│ ├── controller/ # REST API 컨트롤러
│ ├── entity/ # JPA 엔티티
│ ├── model/ # DTO, Request/Response 모델
│ ├── repository/ # 데이터 접근 계층
│ └── service/ # 비즈니스 로직
└── global/ # 전역 설정 및 공통 기능
├── config/ # 설정 클래스들 (Security, Redis, CORS 등)
├── jwt/ # JWT 관련 클래스
└── model/ # 공통 모델/DTO (공통 응답, 에러 모델 등)
build.gradle 기본 구성
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.3'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.flog'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral() // Maven 중앙 저장소에서 라이브러리 다운로드
}
Java 환경 설정
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
여기서 새롭게 공부한 것은 Java Toolchain
Java Toolchain의 역할은 전체 빌드 과정의 Java 버전을 통일해주는 것
컴파일, 테스트, 실행 모든 단계에서 Java 17 버전을 사용하도록 해준다.
개발자마자 다른 Java 환경을 사용하더라도 동일한 결과를 보장해준다는 장점이 있다.
실제로 개발을 하다보면 버전이 안맞아서 빌드가 안되고 그런 경우가 꽤나 자주 발생하는데 아주 유용하다고 생각한다!
Lombok 설정
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
→ 어노테이션 프로세서 의존성 관리 효율화
compileOnly가 annotationProcessor를 상속받도록 설정해 dependencies에 Lombok을 중복으로 선언하지 않아도 됨!
Dependencies
[기본 스택]
// Spring Boot 기본
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
RESTful API 개발을 위한 기본 스택과 DB 연동을 위한 JPA 스택을 기본적으로 추가
spring-boot-starter-data-jpa는 웹 개발에 필요한 모든 것을 포함하고 있다.
spring-boot-starter-data-jpa는 Hiberate, Spring Data JPA를 포함하고 있고 기본적인 CRUD를 자동 생성한다!
[보안 관련]
// 보안
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
testImplementation 'org.springframework.security:spring-security-test'
// 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'
Spring Security
→ 인증/인가 처리를 위한 프레임워크
OAuth2 Client
→ 소셜 로그인 기능 구현 예정이기 때문에 추가
JWT 라이브러리
→ api, impl, jackson 각각 jwt 사용, 실제 구현체(런타임에만 필요), json 처리를 위해 추가
[DB & Cache]
// Database
runtimeOnly 'com.mysql:mysql-connector-j'
// Redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
MySQL을 사용하기 위해 mysql-connector-j 추가
spring-boot-starter-data-redis는 jwt 토큰 저장 및 관리를 위해 추가
[개발 도구]
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// 개발 도구
developmentOnly 'org.springframework.boot:spring-boot-devtools'
Lombok
→ `@Getter`, `@Setter`, `@ToString` 등의 어노테이션으로 반복되는 코드를 자동 생성
💡위에서 설정한 configurations 덕분에 중복 선언 없이 관리됨
DevTools
→ 코드 변경 시 자동 재시작으로 개발 생산성 향상
[테스트]
// 테스트
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
tasks.named('test') {
useJUnitPlatform()
}
Spring Boot Test Starter
→ JUnit 5, Mockito, AssertJ 등 테스트 도구 모음, Spring Boot 애플리케이션 테스트를 위한 통합 환경
application.yml 설정
spring:
# 데이터베이스 설정
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
# JPA 설정
jpa:
open-in-view: true
hibernate:
ddl-auto: create
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
use-new-id-generator-mappings: false
show-sql: true
properties:
hibernate.format_sql: true
dialect: org.hibernate.dialect.MySQL8InnoDBDialect
# OAuth2 설정 (네이버 소셜 로그인)
security:
oauth2:
client:
registration:
naver:
client-id: ${NAVER_CLIENT_ID}
client-secret: ${NAVER_CLIENT_SECRET}
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: "http://localhost:8080/login/oauth2/code/naver"
scope:
- name
- email
provider:
naver:
authorization-uri: https://nid.naver.com/oauth2.0/authorize
token-uri: https://nid.naver.com/oauth2.0/token
user-info-uri: https://openapi.naver.com/v1/nid/me
user-name-attribute: response
# 로깅 설정
logging:
level:
org.hibernate.SQL: debug
# Redis 설정
redis:
host: localhost
port: 6379
# JWT 설정
jwt:
secret: ${JWT_SECRET}
일단 여기까지 작성했다 ! 필요한 부분이 생기면 더 추가해서 수정하고 ..
보안관리를 위해 민감한 정보는 .env 파일로 분리해서 관리해서 환경 변수로 사용 하기로 했다.
env 파일은 git에 올라가지 않도록 .gitignore에 꼭 추가하는 것이 중요 ..
그리고 OAuth2 부분은 카카오도 추가할 예정이다.
처음으로 제대로 Spring Boot 환경을 직접 구축해보니 각 설정이 어떤 역할을 하는지 더 명확하게 이해할 수 있었다.
특히 Java Toolchain이나 Lombok configurations 같은 전에는 그냥 다들 쓰니까 썼던 내용들을 각각 어떤 역할인지 자세히 공부해볼 수 있어서 꽤나 만족스럽다 ..
다음 글에서는 실제 Security 설정과 JWT 구현 과정을 정리해보겠습니드아!!!!!
💬 개발 관련 피드백은 언제나 환영합니다. 씨몬!
'Side Project' 카테고리의 다른 글
[네컷로그] 2. 사이드 프로젝트 개발 환경 세팅(1) : 기술 스택 선정 (4) | 2025.07.16 |
---|---|
[네컷로그] 1. 사이드 프로젝트 기획 및 설계(ERD, API명세서, 기능명세서) (0) | 2025.07.15 |
[네컷로그] 0. 사이드 프로젝트 개발 시작 (4) | 2025.07.10 |