안녕하세요! 이번 블로그 포스트에서는 스프링 부트 3를 이용하여 첫 번째 웹 애플리케이션을 개발해보겠습니다. 스프링 부트는 자바 기반의 웹 애플리케이션을 쉽게 만들 수 있도록 도와주는 프레임워크입니다. 효율성과 생산성을 높이기 위해 설계되었으며, 많은 개발자들이 애용하고 있습니다. 이번 과정을 통해 간단한 RESTful API를 구축해보겠습니다.
1. 스프링 부트란?
스프링 부트는 스프링 프레임워크 위에 구축된 라이브러리로, 빠르고 손쉽게 스프링 애플리케이션을 만들 수 있는 환경을 제공합니다. 기본적으로 스프링 부트는 다음과 같은 장점을 가지고 있습니다:
- 자동 설정: 스프링 부트는 애플리케이션의 설정을 자동으로 처리합니다. 이를 통해 개발자는 복잡한 설정 과정을 줄일 수 있습니다.
- 의존성 관리: Maven 또는 Gradle을 통해 필요한 라이브러리를 쉽게 추가하고 관리할 수 있습니다.
- Standalone: 스프링 부트 애플리케이션은 자체적으로 실행할 수 있는 JAR 파일로 빌드됩니다. 별도의 웹 서버를 사용할 필요가 없습니다.
- 내장된 서버 지원: Tomcat, Jetty, Undertow와 같은 내장 서버를 지원하여 빠르게 테스트하고 배포할 수 있습니다.
2. 개발 환경 준비하기
스프링 부트 애플리케이션을 개발하기 위해 아래의 환경이 필요합니다:
- Java JDK 17 이상: 스프링 부트 3.x는 Java 17 이상에서 실행됩니다. JDK를 설치 후 환경 변수를 설정해야 합니다.
- IDE: IntelliJ IDEA, Eclipse와 같은 통합 개발 환경(IDE)을 추천합니다. 이번 예제에서는 IntelliJ IDEA를 사용합니다.
- Build Tool: Maven 또는 Gradle 중 하나를 선택하여 의존성을 관리해야 합니다. 이번 예제에서는 Maven을 사용할 것입니다.
3. 프로젝트 생성
스프링 부트 프로젝트를 생성하는 방법은 여러 가지가 있지만, 시간 절약을 위해 Spring Initializr를 이용하여 프로젝트를 생성하겠습니다. 다음 단계를 따라 진행하세요:
- 웹 브라우저에서 Spring Initializr를 엽니다.
- 다음과 같은 설정을 입력합니다:
- Project: Maven Project
- Language: Java
- Spring Boot: 3.x.x (가장 최신 버전)
- Project Metadata:
- Group: com.example
- Artifact: demo
- Name: demo
- Description: Demo project for Spring Boot
- Package name: com.example.demo
- Packaging: Jar
- Java: 17
- Dependencies에서 다음을 추가합니다:
- Spring Web
- Spring Data JPA
- H2 Database
- Generate 버튼을 클릭하여 ZIP 파일을 다운로드한 후, 이를 압축 해제합니다.
4. IDE에서 프로젝트 열기
IntelliJ IDEA를 실행한 후, 다음과 같이 프로젝트를 엽니다:
- File 메뉴를 클릭하고 “Open”을 선택합니다.
- 압축 해제한 프로젝트 폴더를 선택한 후 열기 버튼을 클릭합니다.
- Gradle 또는 Maven을 선택하여 필요한 라이브러리를 다운로드합니다.
5. 기본 애플리케이션 코드 작성하기
프로젝트의 기본 구조가 생성된 후, 애플리케이션의 엔트리 포인트인 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);
}
}
이제 REST API를 만들기 위해 컨트롤러 클래스를 추가하겠습니다. src/main/java/com/example/demo
경로에 HelloController.java
라는 파일을 생성합니다.
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot 3!";
}
}
위의 코드는 “/hello” URL로 GET 요청을 보낼 경우 “Hello, Spring Boot 3!”라는 문자열을 반환하는 간단한 컨트롤러입니다.
6. 애플리케이션 실행하기
이제 애플리케이션을 실행해 봅시다. IntelliJ IDEA의 상단 메뉴에서 아래와 같이 실행 버튼을 클릭합니다:
- Run → Run ‘DemoApplication’
애플리케이션이 성공적으로 시작되면, 콘솔에 “Started DemoApplication in …” 메시지가 출력됩니다. 이제 웹 브라우저를 열고 http://localhost:8080/hello
URL에 접속해보세요.
정상적으로 작동하면 “Hello, Spring Boot 3!” 메시지를 확인할 수 있습니다.
7. H2 데이터베이스를 이용한 간단한 CRUD 구현하기
이제 H2 데이터를 이용하여 간단한 CRUD Create, Read, Update, Delete 작업을 구현해보겠습니다. 먼저, src/main/resources/application.properties
파일에 다음과 같은 내용을 추가하여 H2 데이터베이스를 설정합니다:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=create
이제 모델 클래스를 생성합니다. src/main/java/com/example/demo
경로에 Product.java
파일을 생성합니다.
package com.example.demo;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
이제, Product 모델에 대한 CRUD 작업을 수행할 수 있는 서비스와 컨트롤러를 만들어보겠습니다. src/main/java/com/example/demo
경로에 ProductController.java
파일을 생성합니다.
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductRepository productRepository;
@GetMapping
public List getAllProducts() {
return productRepository.findAll();
}
@PostMapping
public Product createProduct(@RequestBody Product product) {
return productRepository.save(product);
}
@GetMapping("/{id}")
public ResponseEntity getProductById(@PathVariable Long id) {
return productRepository.findById(id)
.map(product -> ResponseEntity.ok().body(product))
.orElse(ResponseEntity.notFound().build());
}
@PutMapping("/{id}")
public ResponseEntity updateProduct(@PathVariable Long id, @RequestBody Product productDetails) {
return productRepository.findById(id)
.map(product -> {
product.setName(productDetails.getName());
product.setPrice(productDetails.getPrice());
Product updatedProduct = productRepository.save(product);
return ResponseEntity.ok().body(updatedProduct);
}).orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity deleteProduct(@PathVariable Long id) {
return productRepository.findById(id)
.map(product -> {
productRepository.delete(product);
return ResponseEntity.noContent().build();
}).orElse(ResponseEntity.notFound().build());
}
}
마지막으로, ProductRepository 인터페이스를 생성하여 데이터베이스와 상호작용할 수 있는 메소드를 정의합니다. src/main/java/com/example/demo
경로에 ProductRepository.java
파일을 생성합니다.
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository {
}
8. 애플리케이션 실행 및 테스트하기
애플리케이션을 다시 실행하고, Postman과 같은 API 테스트 도구를 사용하여 CRUD API를 테스트해봅시다. 다음은 각 요청에 대한 예시입니다:
- Create Product:
POST /products { "name": "Sample Product", "price": 19.99 }
GET /products
GET /products/{id}
PUT /products/{id} { "name": "Updated Product", "price": 29.99 }
DELETE /products/{id}
9. H2 콘솔 확인하기
H2 데이터베이스를 통해 데이터 관리도 가능합니다. 웹 브라우저를 열고 http://localhost:8080/h2-console
에 접속해보세요. JDBC URL에 jdbc:h2:mem:testdb
를 입력하고, 사용자 이름에 sa
를 입력한 후 Connect 버튼을 클릭합니다.
이제 H2 데이터베이스에서 데이터를 조회하거나 삭제하는 등 다양한 작업을 수행할 수 있습니다.
10. 마무리 및 다음 단계
이번 포스트에서는 스프링 부트 3를 사용하여 간단한 RESTful API와 H2 데이터베이스를 통해 CRUD 기능을 구현해보았습니다. 이 예제를 통해 스프링 부트의 기본 개념과 작동 방식을 이해할 수 있었길 바랍니다. 이후에는 더 복잡한 데이터베이스와 비즈니스 로직을 추가하여 애플리케이션을 발전시킬 수 있습니다.
다음 블로그 포스트에서는 인증과 인가를 위한 Spring Security에 대해 다뤄볼 예정입니다. 감사합니다!