Java & Spring/SpringBoot

스프링부트 소개 3편: 개발환경 구축하기 - JDK부터 IDE까지 완벽 가이드

ai-one 2025. 5. 28. 14:56

스프링부트 소개 3편: 개발환경 구축하기 - JDK부터 IDE까지 완벽 가이드

스프링부트의 이론을 익혔다면 이제 실제로 개발할 수 있는 환경을 구축할 차례입니다. 이번 글에서는 JDK 설치부터 IDE 설정, 프로젝트 생성까지 스프링부트 개발환경을 완벽하게 구축하는 방법을 단계별로 알아보겠습니다.

1단계: JDK 17+ 설치하기

Windows 환경

# 1. Oracle JDK 다운로드 (https://oracle.com/java/technologies/downloads)
# 2. 또는 OpenJDK 사용 (추천)

# Chocolatey를 통한 설치
choco install openjdk17

# 설치 확인
java -version
# 출력 예시: openjdk version "17.0.11" 2024-04-16

macOS 환경

# Homebrew를 통한 설치 (추천)
brew install openjdk@17

# 환경변수 설정
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# 설치 확인
java -version

Linux (Ubuntu) 환경

# APT를 통한 설치
sudo apt update
sudo apt install openjdk-17-jdk

# 설치 확인
java -version
javac -version

# JAVA_HOME 설정
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

🎯 JDK 17 선택 이유

  • LTS(Long Term Support): 2029년까지 장기 지원
  • 스프링부트 3.x 필수 요구사항
  • 성능 개선: G1GC 개선, ZGC 지원
  • 새로운 언어 기능: Pattern Matching, Records, Sealed Classes

2단계: IDE 선택 및 설정

IntelliJ IDEA (강력 추천)

설치 및 기본 설정

# 1. JetBrains 홈페이지에서 다운로드
# 2. Community Edition (무료) 또는 Ultimate (유료)
# 3. 대학생은 GitHub Student Pack을 통해 Ultimate 무료 사용 가능

스프링부트 개발 최적화 설정

# IntelliJ IDEA 설정 (Settings/Preferences)
File > Settings > Build, Execution, Deployment > Build Tools > Gradle
- Build and run using: IntelliJ IDEA (더 빠른 빌드)
- Run tests using: IntelliJ IDEA

# Java Compiler 설정
File > Settings > Build, Execution, Deployment > Compiler > Java Compiler
- Additional command line parameters: -parameters
# Spring Boot 3.2+ 에서 필수 설정

필수 플러그인 설치

📦 권장 플러그인 목록:
✅ Spring Boot (기본 포함)
✅ Spring Data (기본 포함)  
✅ Database Navigator
✅ GitToolBox
✅ SonarLint
✅ Rainbow Brackets
✅ String Manipulation

Visual Studio Code (경량화 선택)

필수 확장 프로그램

{
  "recommendations": [
    "vscjava.vscode-java-pack",
    "vmware.vscode-spring-boot",
    "vscjava.vscode-spring-initializr",
    "vscjava.vscode-spring-boot-dashboard",
    "redhat.java",
    "gabrielbb.vscode-lombok"
  ]
}

VS Code 스프링부트 설정

// settings.json
{
  "java.home": "/path/to/java-17",
  "java.configuration.runtimes": [
    {
      "name": "JavaSE-17",
      "path": "/path/to/java-17"
    }
  ],
  "spring-boot.ls.java.home": "/path/to/java-17"
}

Eclipse (전통적인 선택)

Spring Tool Suite 4 설치

# 1. https://spring.io/tools 에서 STS4 다운로드
# 2. 압축 해제 후 실행
# 3. Java 17 런타임 설정

3단계: 빌드 도구 설정

Gradle (추천)

# Gradle Wrapper 사용 (프로젝트에 포함)
./gradlew --version

# 또는 시스템 전역 설치
# macOS
brew install gradle

# Windows (Chocolatey)  
choco install gradle

# Linux
sudo apt install gradle

Maven

# macOS
brew install maven

# Windows (Chocolatey)
choco install maven

# Linux  
sudo apt install maven

# 설치 확인
mvn -version

4단계: 스프링부트 프로젝트 생성

방법 1: Spring Initializr 웹사이트 (추천)

# 1. https://start.spring.io/ 접속
# 2. 프로젝트 설정

추천 설정값:

Project: Gradle - Groovy
Language: Java  
Spring Boot: 3.4.1 (최신 버전)
Project Metadata:
  Group: com.example
  Artifact: demo
  Name: demo
  Package name: com.example.demo
  Packaging: Jar
  Java: 17

Dependencies:
  - Spring Web
  - Spring Data JPA  
  - H2 Database (개발용)
  - Spring Boot DevTools
  - Lombok

방법 2: IntelliJ IDEA 내장 기능

# 1. File > New > Project
# 2. Spring Initializr 선택
# 3. 프로젝트 설정 입력
# 4. 의존성 선택
# 5. 프로젝트 생성

방법 3: 커맨드라인 (고급 사용자)

# curl을 사용한 프로젝트 생성
curl https://start.spring.io/starter.zip \
  -d dependencies=web,data-jpa,h2,devtools,lombok \
  -d type=gradle-project \
  -d language=java \
  -d bootVersion=3.4.1 \
  -d baseDir=my-spring-app \
  -o my-spring-app.zip

unzip my-spring-app.zip
cd my-spring-app

5단계: 프로젝트 구조 이해하기

my-spring-app/
├── gradle/
│   └── wrapper/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/
│           └── com/example/demo/
├── build.gradle
├── gradlew
├── gradlew.bat
└── settings.gradle

핵심 파일 분석

build.gradle

plugins {
    id 'org.springframework.boot' version '3.4.1'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

6단계: 개발 환경 최적화

DevTools 활용하기

# application.yml
spring:
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java
    livereload:
      enabled: true

DevTools 주요 기능:

  • 자동 재시작: 코드 변경 시 애플리케이션 자동 재시작
  • LiveReload: 브라우저 자동 새로고침
  • 프로퍼티 기본값: 개발 환경에 최적화된 설정 자동 적용

데이터베이스 설정 (H2 개발용)

# application-dev.yml
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  h2:
    console:
      enabled: true
      path: /h2-console
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    properties:
      hibernate:
        format_sql: true

로깅 설정

# application.yml
logging:
  level:
    com.example.demo: DEBUG
    org.springframework.web: DEBUG
    org.hibernate.SQL: DEBUG
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE

7단계: 첫 번째 애플리케이션 실행

1. Hello World 컨트롤러 생성

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    
    @GetMapping("/")
    public String hello() {
        return "Hello, Spring Boot 3.4.1!";
    }
    
    @GetMapping("/health")
    public String health() {
        return "Application is running with Java " + 
               System.getProperty("java.version");
    }
}

2. 애플리케이션 실행

# Gradle을 사용한 실행
./gradlew bootRun

# 또는 IDE에서 DemoApplication.java 실행
# 또는 JAR 파일 빌드 후 실행
./gradlew build
java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

3. 실행 확인

# 브라우저에서 접속 또는 curl 사용
curl http://localhost:8080/
# 출력: Hello, Spring Boot 3.4.1!

curl http://localhost:8080/health  
# 출력: Application is running with Java 17.0.11

# H2 콘솔 접속
http://localhost:8080/h2-console

8단계: 개발 도구 및 유틸리티 설정

Git 설정

# 프로젝트 루트에서
git init
echo "build/" >> .gitignore
echo ".gradle/" >> .gitignore
echo "*.log" >> .gitignore
echo ".DS_Store" >> .gitignore

git add .
git commit -m "Initial Spring Boot project setup"

Docker 개발 환경 (선택사항)

# Dockerfile
FROM openjdk:17-jdk-slim
VOLUME /tmp
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# docker-compose.yml (데이터베이스 포함)
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/myapp
      - SPRING_DATASOURCE_USERNAME=user
      - SPRING_DATASOURCE_PASSWORD=password
      
  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    ports:
      - "5432:5432"

트러블슈팅: 자주 발생하는 문제들

1. Java 버전 문제

# 문제: Java 17이 설치되었는데 인식되지 않음
echo $JAVA_HOME
which java

# 해결: JAVA_HOME 환경변수 올바르게 설정
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

2. 포트 충돌 문제

# application.yml
server:
  port: 8081  # 기본 8080에서 변경

3. 인코딩 문제 (Windows)

# application.yml
server:
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
      force: true

4. Gradle 실행 권한 문제 (Linux/macOS)

chmod +x gradlew
./gradlew bootRun

성능 최적화 팁

JVM 옵션 설정

# 개발 환경용 JVM 옵션
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
./gradlew bootRun

IDE 성능 최적화

# IntelliJ IDEA VM 옵션 (Help > Edit Custom VM Options)
-Xms2048m
-Xmx4096m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

개발 워크플로우 구축

1. 브랜치 전략

# Feature 브랜치 생성
git checkout -b feature/user-management
git checkout -b hotfix/security-patch

2. 코드 품질 도구 통합

// build.gradle에 추가
plugins {
    id 'checkstyle'
    id 'pmd'
    id 'jacoco'
}

checkstyle {
    toolVersion = '10.12.4'
    configFile = file("${rootDir}/config/checkstyle/checkstyle.xml")
}

3. 테스트 자동화

@SpringBootTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class DemoApplicationTests {
    
    @Test
    void contextLoads() {
        // 애플리케이션 컨텍스트 로딩 테스트
    }
    
    @Test  
    @Sql("/test-data.sql")
    void testWithTestData() {
        // 테스트용 데이터와 함께 테스트
    }
}

마무리 및 다음 단계

개발환경 구축이 완료되었습니다! 이제 다음과 같은 환경이 준비되었습니다:

Java 17+ 개발 환경
최적화된 IDE 설정
Spring Boot 3.4.1 프로젝트
개발 도구 및 유틸리티
자동화된 빌드/테스트 환경

이제 실제 애플리케이션 개발을 시작할 준비가 되었습니다. 다음 편에서는 스프링부트의 핵심 기능들을 활용하여 실제 웹 애플리케이션을 만드는 방법에 대해 알아보겠습니다.

팁: 개발 초기에는 H2 데이터베이스로 시작하되, 실제 프로덕션 환경을 고려하여 PostgreSQL이나 MySQL 등으로 전환할 계획을 세워두세요.