스프링(Spring)은 자바 플랫폼을 위한 오픈소스 프레임워크로, 객체 지향 설계를 기반으로 의존성 주입(DI)과 관점 지향 프로그래밍(AOP) 같은 기능을 통해 개발자의 생산성과 유지보수성을 높여주는 반면, 설정이 복잡하고 XML 설정 파일이나 자바 설정 클래스가 많이 필요하다는 단점이 있습니다. 이에 비해 스프링부트(Spring Boot)는 스프링을 더욱 쉽게 사용할 수 있도록 만든 확장 프레임워크로, 자동 설정(Auto Configuration)과 내장 톰캣, 스타터 의존성 관리 등을 통해 개발자가 빠르게 애플리케이션을 구축할 수 있도록 도와줍니다.

1. IntelliJ에서 Spring 프로젝트 만들기 (Spring Boot 기준)
1. 프로젝트 생성
- IntelliJ 실행 → New Project 클릭
- 왼쪽에서 Spring Initializr 선택
- SDK는 설치된 Java 버전 선택 (예: 17)
- Project Metadata 입력:
- Group: com.example
- Artifact: myapp ← 프로젝트 이름
- Next 클릭 후 필요한 Dependency 선택
- Spring Web (웹 개발)
- Spring Boot DevTools (자동 재시작)
- Lombok (선택사항)
2. 프로젝트 구조
myapp/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/myapp/
│ │ │ ├── MyappApplication.java <-- 🔸 시작 클래스
│ │ │ ├── controller/ <-- 🔹 요청을 받는 클래스
│ │ │ ├── service/ <-- 🔹 비즈니스 로직 처리
│ │ │ └── repository/ <-- 🔹 DB 접근 계층 (JPA 등)
│ │ └── resources/
│ │ ├── static/ <-- 🔹 정적 파일 (HTML, CSS, JS 등)
│ │ ├── templates/ <-- 🔹 Thymeleaf 등의 템플릿 파일
│ │ └── application.properties <-- 🔸 설정 파일
│
├── build.gradle OR pom.xml <-- 의존성 관리 파일 (Gradle or Maven)
└── ...
| MyappApplication.java | 애플리케이션의 시작점 (@SpringBootApplication) |
| controller/ | 사용자 요청을 처리하는 클래스 (예: /hello) |
| service/ | 실제 로직 처리 (예: 계산, 비즈니스 처리) |
| repository/ | 데이터베이스와의 연결 담당 (JPA, MyBatis 등 사용) |
| static/ | HTML, CSS, JS 같은 정적 파일 위치 |
| templates/ | 뷰 템플릿 파일 (Thymeleaf 등) 위치 |
| application.properties / yml | 포트번호, DB연결 등 설정 파일 |
| build.gradle or pom.xml | 필요한 라이브러리(의존성)를 정의하는 곳 |
2. Gradle
Gradle은 자바를 비롯한 여러 프로그래밍 언어 프로젝트의 빌드 자동화 도구로, 코드 컴파일, 테스트, 패키징, 의존성 관리 등을 손쉽게 처리해주는 도구입니다. 기존의 Maven보다 더 빠르고 유연하게 동작하며, Groovy 또는 Kotlin DSL 문법을 사용해 빌드 스크립트를 작성합니다. Gradle은 필요한 라이브러리를 자동으로 다운로드하고, 프로젝트를 실행 가능한 형태(jar, war 등)로 만들어주는 역할을 하며, 특히 Spring Boot와 함께 사용할 때 매우 강력하고 편리한 도구로 널리 사용됩니다.
1. 파일 구조
1. 파일 구조
myapp/
├── build.gradle <-- 🔸 가장 핵심적인 빌드 스크립트 파일
├── settings.gradle <-- 프로젝트 이름 설정
├── gradle/
│ └── wrapper/ <-- Gradle 버전 관리 및 자동 설치용
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew <-- 유닉스용 Gradle 실행 스크립트
├── gradlew.bat <-- 윈도우용 Gradle 실행 스크립트
2. build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0' // 스프링 부트 플러그인
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.example' // 그룹 ID (패키지명처럼 사용)
version = '0.0.1-SNAPSHOT' // 버전
java {
sourceCompatibility = '17' // 자바 버전 설정
}
repositories {
mavenCentral() // 라이브러리 다운로드 위치
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' // 웹 기능
testImplementation 'org.springframework.boot:spring-boot-starter-test' // 테스트 기능
}
3. Lombok
Lombok은 자바 개발에서 반복적으로 작성해야 하는 코드를 자동으로 생성해주는 코드 간소화 라이브러리입니다. 예를 들어, 클래스에서 자주 사용하는 getter, setter, toString, equals, hashCode, 생성자 등을 직접 작성하지 않아도 @Getter, @Setter, @ToString, @AllArgsConstructor, @NoArgsConstructor 같은 Lombok 어노테이션만 붙이면 컴파일 시점에 자동으로 생성해줍니다. 이로 인해 코드가 훨씬 깔끔해지고, 유지보수도 쉬워지며, 특히 DTO나 Entity 클래스 작성 시 매우 유용하게 사용됩니다. 단, IDE에서 Lombok 플러그인을 설치해야 정상 동작하며, 빌드 도구(Gradle/Maven)에도 의존성을 추가해야 합니다.
1. Gradle (또는 Maven)에 Lombok 의존성 추가
추가 후에는 Gradle Reload (또는 Refresh 버튼) 꼭 눌러주세요.
dependencies {
implementation 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
}
2. IntelliJ에서 Lombok 플러그인 설치
- IntelliJ 메뉴에서 File → Settings(환경설정) 클릭
(Mac은 IntelliJ IDEA → Preferences) - 왼쪽 메뉴에서 Plugins 선택
- 오른쪽 위 검색창에 Lombok 입력
- "Lombok Plugin" 설치
- 설치 후 IntelliJ 재시작
3. 설정 확인 (Lombok 기능 활성화 여부)
체크하지 않으면 Lombok 어노테이션이 적용되지 않습니다!
- File → Settings → Build, Execution, Deployment → Compiler → Annotation Processors
- Enable annotation processing 체크
// src/main/java/com/example/demo/User.java
package com.example.demo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
4. JUnit
JUnit은 자바에서 가장 널리 사용되는 단위 테스트 프레임워크로, 메서드 단위로 코드를 테스트하고 검증할 수 있도록 도와주는 도구입니다. 개발자는 @Test 어노테이션을 통해 특정 메서드의 동작을 검증하고, assertEquals, assertTrue 같은 다양한 검증 메서드를 사용해 기대한 결과와 실제 결과를 비교할 수 있습니다. JUnit은 코드의 신뢰성과 유지보수성을 높여주며, 특히 TDD(테스트 주도 개발)나 CI/CD 환경에서 자동화된 테스트를 실행하는 데 필수적인 도구로 활용됩니다. 최근에는 JUnit 5가 주로 사용되며, 이전 버전보다 더 유연하고 확장 가능한 구조를 가지고 있습니다.
myapp/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ └── User.java <-- 💡 실제 클래스
│ └── test/
│ └── java/
│ └── com/example/demo/
│ └── UserTest.java <-- ✅ 테스트 클래스
UserTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class UserTest {
@Test
void testUserGetterSetter() {
User user = new User();
user.setName("김사과");
user.setAge(25);
assertEquals("김사과", user.getName());
assertEquals(25, user.getAge());
}
}
1. 테스트 실행 방법
- 클래스 이름 우클릭 → Run 'UserTest'
- 또는 함수 위에 있는 녹색 ▶ 버튼 클릭
- 성공 시 녹색 체크 ✅, 실패 시 빨간 X ❌
2. IntelliJ가 테스트 프레임워크를 인식하지 못할 때
- File → Project Structure → Modules → Dependencies 탭
- JUnit이 있는지 확인 (없으면 수동 추가)
- 또는 File → Invalidate Caches / Restart... 시도
5. 스프링부트의 View 선택
1. JSP
Spring Boot에서도 JSP 사용은 가능하지만, 공식적으로 권장되지 않으며 Spring Boot의 내장 톰캣(embedded Tomcat)과는 일부 호환 문제가 있어서 다음과 같은 제약이 있습니다.
- JSP는 /WEB-INF/views/*.jsp 같은 WAR 전용 구조에 더 적합
- Jar 패키징에서는 JSP가 정상 작동하지 않음
- 따라서 Spring Boot + JSP = war 패키징 + 외부 톰캣 배포가 일반적
디렉토리 구조
src/
├─ main/
│ ├─ java/
│ │ └─ com.example.demo/
│ │ └─ controller/
│ │ └─ HomeController.java
│ └─ webapp/
│ └─ WEB-INF/
│ └─ views/
│ └─ home.jsp
build.gradle (또는 pom.xml)
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
compileOnly 'org.apache.tomcat.embed:tomcat-embed-jasper'
runtimeOnly 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl:1.2'
}
application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
HomeController.java
@Controller
public class HomeController {
@GetMapping("/home")
public String home() {
return "home"; // /WEB-INF/views/home.jsp 로 포워딩
}
}
home.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>Home</title></head>
<body>
<h1>Hello, JSP from Spring Boot!</h1>
</body>
</html>
2. Thymeleaf
기본적으로 Spring Boot는 Thymeleaf, Mustache, Freemarker 같은 템플릿 엔진과 REST API + 프론트엔드 분리 구조를 선호합니다. 타임리프(Thymeleaf)는 HTML을 기반으로 작동하는 자바 서버 사이드 템플릿 엔진으로, Spring Boot와 매우 잘 통합되어 주로 웹 페이지를 동적으로 생성할 때 사용됩니다. 타임리프는 HTML 파일을 그대로 브라우저에서 열어도 깨지지 않는 정상적인 HTML 문서 형태를 유지하면서, ${변수}와 같은 표현식이나 th:if, th:each 같은 속성으로 데이터를 출력하고 조건/반복 처리 등을 할 수 있도록 도와줍니다. JSP보다 설정이 간편하고 HTML 디자이너와 개발자가 협업하기 쉬우며, 템플릿 캐시, 레이아웃 구성, 국제화(i18n) 등도 쉽게 지원하여 실무에서 널리 사용되고 있습니다.
build.gradle 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
디렉토리 구조
src/
├─ main/
│ ├─ java/
│ │ └─ com/example/demo/
│ │ └─ HomeController.java
│ └─ resources/
│ ├─ templates/
│ │ └─ home.html ← ✅ 타임리프 템플릿
│ └─ application.properties
HomeController.java
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("name", "김사과");
return "home"; // → templates/home.html 렌더링
}
}
home.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>타임리프 예제</title>
</head>
<body>
<h1 th:text="'안녕하세요, ' + ${name} + '님!'">안녕하세요, 손님!</h1>
</body>
</html>'백엔드 > SpringBoot' 카테고리의 다른 글
| REST API 구현 (0) | 2025.07.07 |
|---|---|
| Thymeleaf (0) | 2025.07.07 |
| 웹서버와 WAS (0) | 2025.07.07 |