스프링 부트 백엔드 개발 강좌, 블로그 제작 예제, 블로그 글 조회 API 구현하기

스프링 부트(Step Boot)는 자바 환경에서 웹 애플리케이션을 빠르게 구축하기 위해 설계된 프레임워크입니다. 이번 강좌에서는 스프링 부트를 이용하여 블로그 애플리케이션의 백엔드 API를 구현하는 방법을 배워보겠습니다. 특히 블로그 글 조회 API에 중점을 두고, 데이터베이스 설계, 엔드포인트 구현, 테스트 및 배포에 대해 자세히 설명하겠습니다.

1. 프로젝트 설정

스프링 부트 프로젝트를 시작하기 위해 Maven이나 Gradle을 사용하여 프로젝트를 설정합니다. IntelliJ IDEA 또는 Spring Initializr를 통해 스프링 부트 프로젝트를 시작할 수 있습니다. 필요한 종속성은 다음과 같습니다:

  • Spring Web
  • Spring Data JPA
  • H2 Database (개발 및 테스트 환경)
  • Spring Boot DevTools (편리한 개발을 위한 도구)

1.1 Maven을 이용한 프로젝트 생성

            <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.example</groupId>
            <artifactId>blog</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>jar</packaging>
            <name>blog</name>
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.5.4</version>
                <relativePath/>
            </parent>  
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-jpa</artifactId>
                </dependency>
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>runtime</scope>
                    <optional>true</optional>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
            </project>
            
        

2. 데이터베이스 설계

블로그 글 조회 API를 만들기 위해 먼저 데이터베이스에 저장할 블로그 글 모델을 설계합니다. 기본적인 블로그 글 모델은 제목, 내용, 작성자, 작성일 등이 포함됩니다.

            import javax.persistence.*;
            import java.time.LocalDateTime;

            @Entity
            public class BlogPost {
                @Id
                @GeneratedValue(strategy = GenerationType.IDENTITY)
                private Long id;

                private String title;
                private String content;
                private String author;
                private LocalDateTime createdAt;
                
                // Getters and Setters
            }
            
        

3. JPA 저장소 인터페이스 생성

블로그 글을 데이터베이스에 CRUD(Create, Read, Update, Delete)하기 위해 JPA Repository 인터페이스를 생성합니다.

            import org.springframework.data.jpa.repository.JpaRepository;

            public interface BlogPostRepository extends JpaRepository {
            }
            
        

4. 서비스 클래스 구현

클라이언트의 요청을 처리할 서비스 클래스를 만듭니다.

            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.stereotype.Service;

            import java.util.List;

            @Service
            public class BlogPostService {

                @Autowired
                private BlogPostRepository blogPostRepository;

                public List<BlogPost> getAllBlogPosts() {
                    return blogPostRepository.findAll();
                }

                public BlogPost getBlogPostById(Long id) {
                    return blogPostRepository.findById(id)
                      .orElseThrow(() -> new RuntimeException("포스트를 찾을 수 없습니다."));
                }
            }
            
        

5. REST 컨트롤러 구현

앞서 만든 서비스 클래스를 이용해 REST API 엔드포인트를 구현합니다. Spring MVC의 @RestController를 사용하여 GET 요청을 처리하는 메서드를 생성합니다.

            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.web.bind.annotation.*;

            import java.util.List;

            @RestController
            @RequestMapping("/api/blogposts")
            public class BlogPostController {

                @Autowired
                private BlogPostService blogPostService;

                @GetMapping
                public List<BlogPost> getBlogPosts() {
                    return blogPostService.getAllBlogPosts();
                }

                @GetMapping("/{id}")
                public BlogPost getBlogPost(@PathVariable Long id) {
                    return blogPostService.getBlogPostById(id);
                }
            }
            
        

6. 테스트

API가 올바르게 작동하는지 확인하기 위해 단위 테스트를 작성합니다. JUnit과 MockMvc를 사용하여 테스트를 진행할 수 있습니다.

            import org.junit.jupiter.api.Test;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
            import org.springframework.boot.test.context.SpringBootTest;
            import org.springframework.test.web.servlet.MockMvc;

            import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
            import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
            import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;

            @SpringBootTest
            @AutoConfigureMockMvc
            public class BlogPostControllerTests {

                @Autowired
                private MockMvc mockMvc;

                @Test
                public void getAllBlogPosts() throws Exception {
                    mockMvc.perform(get("/api/blogposts"))
                            .andExpect(status().isOk());
                }

                @Test
                public void getBlogPost() throws Exception {
                    mockMvc.perform(get("/api/blogposts/1"))
                            .andExpect(status().isOk())
                            .andExpect(jsonPath("$.id").value(1));
                }
            }
            
        

7. 배포

애플리케이션을 배포할 준비가 되면, JAR 파일을 생성하고 AWS, Heroku 등 원하는 플랫폼에 배포할 수 있습니다. 명령어는 다음과 같습니다:

            mvn clean package
        

Maven을 사용해 빌드한 후, 생성된 JAR 파일을 서버에 업로드하면 됩니다.

8. 결론

본 강좌에서는 스프링 부트를 사용하여 블로그 글 조회 API를 구현하는 방법에 대해 알아보았습니다. 데이터베이스 모델 설계부터 API 개발, 테스트, 배포까지 전체 과정을 살펴보았습니다. 이를 바탕으로 여러분의 블로그 애플리케이션을 더욱 발전시킬 수 있기를 바랍니다.