스프링 부트(Spring Boot)는 Java 기반의 웹 애플리케이션을 빠르고 간편하게 개발할 수 있는 프레임워크입니다. 이 강좌에서는 스프링 부트를 사용하여 백엔드 서버를 구축하고, 블로그 제작 예제를 통해 RESTful API를 구현해보겠습니다. 마지막으로 API 실행 테스트 방법에 대해서도 알아보겠습니다.
1. 스프링 부트 소개
스프링 부트는 스프링 프레임워크를 바탕으로 간편하고 빠르게 애플리케이션을 개발할 수 있는 기술입니다. 스프링 부트를 사용하면 복잡한 설정을 줄이고, 내장 서버를 통해 쉽게 테스트할 수 있습니다.
- 자동 설정: 기본 설정을 자동으로 수행하여 개발자가 설정에 신경 쓸 필요를 줄입니다.
- 내장 서버: Tomcat, Jetty 등의 내장 서버를 지원하여 별도의 서버 설치 없이 개발과 테스트가 가능합니다.
- 스타터 의존성: 다양한 기능을 쉽게 추가할 수 있게 도와주는 스타터 의존성을 제공합니다.
2. 개발 환경 설정
스프링 부트를 사용하기 위해서는 Java Development Kit (JDK)와 Maven 또는 Gradle과 같은 빌드 도구가 필요합니다. 아래는 JDK 및 Maven 설치 방법입니다.
2.1 JDK 설치
JDK 8 이상의 버전을 설치합니다. Oracle의 공식 웹사이트에서 다운로드할 수 있습니다. 설치 후, 아래 명령어로 설치된 버전을 확인합니다:
java -version
2.2 Maven 설치
Maven은 스프링 부트 프로젝트의 의존성을 관리하는 데 사용됩니다. Apache Maven의 공식 사이트에서 다운로드 후 설치합니다. 설치 후 아래 명령어로 설치된 버전을 확인합니다:
mvn -version
2.3 IDE 선택
IntelliJ IDEA, Eclipse, Spring Tool Suite(STS)와 같은 IDE를 사용할 수 있습니다. 이번 강좌에서는 IntelliJ IDEA를 기준으로 설명하겠습니다.
3. 스프링 부트 프로젝트 생성
스프링 부트 프로젝트는 Spring Initializr를 통해 쉽게 생성할 수 있습니다. Spring Initializr는 스프링 부트 애플리케이션의 기본 구조를 자동으로 생성해주는 웹 애플리케이션입니다.
3.1 Spring Initializr 접근하기
아래 링크를 통해 Spring Initializr에 접근합니다:
Spring Initializr
3.2 프로젝트 설정
- Project: Maven Project
- Language: Java
- Spring Boot: 최신 버전 선택
- Group: com.example
- Artifact: blog-api
- Name: blog-api
- Description: 블로그 API 예제
- Package name: com.example.blogapi
- Packaging: Jar
- Java: 11 선택
3.3 의존성 추가
필요한 의존성을 추가합니다. 다음 의존성을 추가하세요:
- Spring Web
- Spring Data JPA
- H2 Database (또는 MySQL 선택 가능)
설정 후, GENERATE 버튼을 클릭하여 ZIP 파일을 다운로드하고, 원하는 위치에 압축을 풀어줍니다.
4. 프로젝트 구조 이해하기
생성된 프로젝트 폴더 구조는 다음과 같은 형태입니다:
blog-api
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── blogapi
│ │ │ └── BlogApiApplication.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── static
│ └── test
├── pom.xml
5. 도메인 객체 만들기
이제 블로그 포스트를 나타내는 도메인 객체를 만들어보겠습니다. Post
클래스를 생성하여 블로그 포스트의 속성을 정의합니다.
5.1 Post 클래스 생성
src/main/java/com/example/blogapi
폴더 내에 Post.java
파일을 생성합니다:
package com.example.blogapi;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
// getters and setters
}
6. 리포지토리 인터페이스 만들기
데이터베이스와 상호작용하기 위해 JPA 리포지토리를 사용합니다. PostRepository
인터페이스를 생성하여 CRUD 기능을 구현합니다.
6.1 PostRepository 인터페이스 생성
src/main/java/com/example/blogapi
폴더 내에 PostRepository.java
파일을 생성합니다:
package com.example.blogapi;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository {
}
7. 서비스 클래스 만들기
비즈니스 로직을 처리하기 위해 서비스 클래스를 생성합니다. PostService
클래스를 만들어 블로그 포스트의 CRUD 기능을 구현합니다.
7.1 PostService 클래스 생성
src/main/java/com/example/blogapi
폴더 내에 PostService.java
파일을 생성합니다:
package com.example.blogapi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PostService {
@Autowired
private PostRepository postRepository;
public List getAllPosts() {
return postRepository.findAll();
}
public Post getPostById(Long id) {
return postRepository.findById(id).orElse(null);
}
public Post createPost(Post post) {
return postRepository.save(post);
}
public Post updatePost(Long id, Post post) {
Post existingPost = postRepository.findById(id).orElse(null);
if (existingPost != null) {
existingPost.setTitle(post.getTitle());
existingPost.setContent(post.getContent());
return postRepository.save(existingPost);
}
return null;
}
public void deletePost(Long id) {
postRepository.deleteById(id);
}
}
8. 컨트롤러 클래스 만들기
클라이언트의 요청을 처리할 RESTful API를 생성하기 위해 컨트롤러 클래스를 작성합니다.
8.1 PostController 클래스 생성
src/main/java/com/example/blogapi
폴더 내에 PostController.java
파일을 생성합니다:
package com.example.blogapi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/posts")
public class PostController {
@Autowired
private PostService postService;
@GetMapping
public List getAllPosts() {
return postService.getAllPosts();
}
@GetMapping("/{id}")
public Post getPostById(@PathVariable Long id) {
return postService.getPostById(id);
}
@PostMapping
public Post createPost(@RequestBody Post post) {
return postService.createPost(post);
}
@PutMapping("/{id}")
public Post updatePost(@PathVariable Long id, @RequestBody Post post) {
return postService.updatePost(id, post);
}
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deletePost(@PathVariable Long id) {
postService.deletePost(id);
}
}
9. 애플리케이션 속성 설정
데이터베이스 연결 및 기타 설정을 위해 application.properties
파일을 수정합니다.
9.1 H2 데이터베이스 설정
src/main/resources/application.properties
파일을 다음과 같이 수정합니다:
# H2 Database
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
10. 애플리케이션 실행하기
이제 모든 설정이 완료되었습니다. IDE에서 BlogApiApplication.java
클래스를 실행하여 애플리케이션을 시작합니다.
10.1 H2 콘솔 접근하기
애플리케이션이 정상적으로 실행되면, H2 콘솔에 접근하여 데이터베이스를 확인할 수 있습니다:
- 웹 브라우저에서 http://localhost:8080/h2-console에 접속합니다.
- JDBC URL:
jdbc:h2:mem:testdb
입력 후, Connect 버튼 클릭합니다.
11. API 테스트하기
이제 Postman이나 cURL을 사용하여 API를 테스트해봅시다.
11.1 Postman 설치
Postman은 API를 테스트하는 데 사용되는 유용한 도구입니다. Postman을 설치한 후, 아래와 같이 요청을 보낼 수 있습니다.
11.2 API 요청 예제
- GET /api/posts: 모든 포스트 조회
- GET /api/posts/{id}: 특정 포스트 조회
- POST /api/posts: 포스트 생성
- PUT /api/posts/{id}: 포스트 수정
- DELETE /api/posts/{id}: 포스트 삭제
11.2.1 POST 요청 예제:
POST /api/posts
Content-Type: application/json
{
"title": "첫 포스트",
"content": "안녕하세요, 첫 포스트입니다."
}
11.2.2 GET 요청 예제:
GET /api/posts
12. 마무리
이번 강좌에서는 스프링 부트를 사용하여 간단한 블로그 API를 구현하는 방법을 알아보았습니다. 도메인 객체, 리포지토리, 서비스, 컨트롤러를 모두 설정하고, Postman을 사용하여 API를 테스트하는 과정을 살펴보았습니다.
이제 여러분은 스프링 부트를 통해 블로그 API를 생성할 수 있는 기초를 마련하였습니다. 추가적으로 더 많은 기능을 구현하거나, 다른 데이터베이스로의 전환, 배포 방법 등을 학습하며 지식을 확장해 나가시기 바랍니다.