본 강좌에서는 스프링 부트를 이용하여 블로그를 제작하는 방법을 배우며, 반복 작업을 줄여 줄 테스트 코드 작성법에 대해 알아보겠습니다. 이 블로그 프로젝트는 실제로 배울 수 있는 가장 좋은 방법 중 하나이며, 개발자로서의 역량을 한층 더 강화할 것입니다. 이 강좌는 초보부터 중급자까지 모두를 위한 내용을 담고 있습니다.
1. 스프링 부트 소개
스프링 부트는 스프링 프레임워크의 단순화된 구성으로, 빠르고 쉽게 스프링 애플리케이션을 개발할 수 있도록 도와줍니다. 스프링 부트를 사용하면 복잡한 설정이나 XML 구성을 최소화할 수 있으며, 다양한 내장 서버와 통합하여 적용할 수 있는 이점을 제공합니다.
1.1 스프링 부트의 장점
- 빠른 시작: 미리 설정된 템플릿을 사용해 간단한 애플리케이션을 빠르게 실행할 수 있습니다.
- 자동 구성: 스프링 부트는 애플리케이션의 구성 요소를 자동으로 설정해 줍니다.
- 내장 서버: Tomcat, Jetty 등의 내장 서버를 사용하여 별도의 서버 설치 없이 애플리케이션을 실행할 수 있습니다.
- 의존성 관리: Maven이나 Gradle을 통한 의존성 관리가 용이합니다.
2. 프로젝트 환경 설정
이제 실제 블로그 애플리케이션을 만들기 위한 환경을 설정해 보겠습니다. 스프링 이니셜라이저를 사용하여 프로젝트를 구성할 수 있습니다.
2.1 스프링 이니셜라이저 사용하기
- 웹 브라우저에서 스프링 이니셜라이저로 가습니다.
- 프로젝트 메타데이터를 입력합니다:
- Project: Maven Project
- Language: Java
- Spring Boot: 최신 버전 선택
- Group: com.example
- Artifact: blog
- Name: blog
- Package name: com.example.blog
- Dependencies에서 다음을 선택합니다:
- Spring Web
- Spring Data JPA
- H2 Database (이나, MySQL로 변경 가능)
- Spring Boot DevTools
- Generate 버튼을 눌러 ZIP 파일을 다운로드합니다.
3. 블로그 애플리케이션 구조
프로젝트를 설정한 후, 애플리케이션 구조를 살펴보겠습니다. 적절한 디렉토리 구조는 유지보수성과 가독성을 높여줍니다.
3.1 디렉토리 구조
blog ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── blog │ │ │ ├── BlogApplication.java │ │ │ ├── controller │ │ │ ├── model │ │ │ └── repository │ │ └── resources │ │ ├── application.properties │ │ └── static │ │ └── ... └── test
4. 기본 모델 및 레포지토리 생성
이제 블로그의 기본적인 모델 클래스와 레포지토리를 생성하겠습니다. 모델은 블로그 포스트를 나타내며, 레포지토리는 데이터베이스와 상호작용하는 역할을 합니다.
4.1 모델 클래스 생성
먼저 BlogPost 모델 클래스를 생성합니다.
package com.example.blog.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Column; import java.time.LocalDateTime; @Entity public class BlogPost { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String title; @Column(nullable = false, length = 5000) private String content; private LocalDateTime createdAt; public BlogPost() { this.createdAt = LocalDateTime.now(); } // Getter와 Setter }
4.2 레포지토리 인터페이스 생성
다음으로 BlogPostRepository 인터페이스를 생성하여 JPA의 CRUD 기능을 사용할 수 있습니다.
package com.example.blog.repository; import com.example.blog.model.BlogPost; import org.springframework.data.jpa.repository.JpaRepository; public interface BlogPostRepository extends JpaRepository{ }
5. 컨트롤러 생성 및 REST API 구현
블로그 포스트의 데이터를 관리하기 위한 REST API를 만들겠습니다. 이를 위해 컨트롤러 클래스를 작성합니다.
5.1 REST 컨트롤러 생성
package com.example.blog.controller; import com.example.blog.model.BlogPost; import com.example.blog.repository.BlogPostRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/posts") public class BlogPostController { @Autowired private BlogPostRepository blogPostRepository; @GetMapping public ListgetAllPosts() { return blogPostRepository.findAll(); } @PostMapping public BlogPost createPost(@RequestBody BlogPost blogPost) { return blogPostRepository.save(blogPost); } @GetMapping("/{id}") public ResponseEntity getPostById(@PathVariable Long id) { return blogPostRepository.findById(id) .map(post -> ResponseEntity.ok().body(post)) .orElse(ResponseEntity.notFound().build()); } // Update and Delete 메소드 추가 }
6. 테스트 코드 작성
이번 섹션에서는 작성한 REST API가 올바르게 작동하는지 확인하기 위해 테스트 코드를 작성하겠습니다. 스프링 부트에서는 JUnit과 Mockito를 사용하여 간편하게 테스트를 진행할 수 있습니다.
6.1 테스트 환경 설정
org.springframework.boot spring-boot-starter-test test
6.2 REST API 테스트 예시
package com.example.blog; import com.example.blog.model.BlogPost; import com.example.blog.repository.BlogPostRepository; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; 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.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @SpringBootTest @AutoConfigureMockMvc public class BlogPostControllerTest { @Autowired private MockMvc mockMvc; @Autowired private BlogPostRepository blogPostRepository; private ObjectMapper objectMapper; @BeforeEach public void setUp() { objectMapper = new ObjectMapper(); blogPostRepository.deleteAll(); } @Test public void createPost_ShouldReturnCreatedPost() throws Exception { BlogPost post = new BlogPost(); post.setTitle("제목"); post.setContent("본문 내용"); mockMvc.perform(post("/api/posts") .content(objectMapper.writeValueAsString(post)) .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isCreated()); } // 다른 메소드 테스트 추가 }
7. 프로젝트 실행
이제 블로그 애플리케이션을 실행할 준비가 되었습니다. IDE를 사용해 BlogApplication.java
파일을 실행하면 내장 서버가 시작되고 REST API를 사용할 수 있습니다.
7.1 Postman으로 API 테스트하기
Postman과 같은 API 테스트 도구를 사용하여 작성한 REST API를 테스트할 수 있습니다. POST, GET 요청을 통해 블로그 포스트를 추가하고 조회하는 과정을 직접 경험해 보세요.
결론
이번 스프링 부트 백엔드 개발 강좌에서는 간단한 블로그 애플리케이션을 개발하면서 스프링 부트의 핵심 기능을 학습했습니다. 기본적인 CRUD 작업을 통해 데이터베이스와의 상호작용을 경험하고, 테스트 코드를 작성함으로써 개발 프로세스를 더욱 효율적으로 만들 수 있는 방법을 익혔습니다.
이 프로젝트를 기반으로 더 많은 기능을 추가하고, 디자인을 개선해 나감으로써 더욱 완성도 높은 블로그 애플리케이션으로 발전시켜 보세요. 앞으로도 계속 새로운 기능과 프레임워크에 도전하시길 바랍니다. 감사합니다.