스프링 부트 백엔드 개발 강좌, 스프링 부트 3와 자바 버전

안녕하세요! 오늘은 스프링 부트를 사용한 백엔드 개발에 대해 심도 깊은 강좌를 진행하겠습니다. 스프링 부트는 자바 기반의 프레임워크로, 빠르고 간편하게 웹 애플리케이션을 개발할 수 있는 플랫폼입니다. 본 강좌는 스프링 부트 3자바 최신 버전에 초점을 맞춰 구성됩니다.

1. 스프링 부트란?

스프링 부트는 스프링 프레임워크의 확장입니다. 스프링 프레임워크는 자바로 개발된 애플리케이션을 위한 강력한 개발 도구이지만, 설정과 초기화가 복잡할 수 있습니다. 스프링 부트는 이러한 문제를 해결하기 위해 탄생하였으며, 다음과 같은 주요 기능을 제공합니다:

  • 자동 설정: 복잡한 스프링 설정 없이도 애플리케이션을 시작할 수 있습니다.
  • 독립 실행형 애플리케이션: 내장 서버를 통해 독립적으로 실행할 수 있는 애플리케이션을 제공합니다.
  • 프로덕션 준비: 모니터링 및 관리를 위한 다양한 기능을 내장하고 있습니다.

2. 스프링 부트 3의 주요 변화

스프링 부트 3는 스프링 프레임워크 6을 기반으로 하며, 여러 가지 새로운 기능과 개선 사항이 포함되어 있습니다. 주요 변경 사항은 다음과 같습니다:

  • JDK 17 이상 필수: 스프링 부트 3부터는 최소 JDK 17이 필요합니다. 이를 통해 새로운 자바 기능을 사용할 수 있습니다.
  • HTTP/2 지원: 더 빠른 성능을 위해 HTTP/2를 기본적으로 지원합니다.
  • Jakarta EE 9 지원: 패키지 네임스페이스가 변경되어 `javax`에서 `jakarta`로 변경되었습니다.

3. 개발 환경 설정

스프링 부트 개발을 위해서는 개발 환경을 설정해야 합니다. 아래의 내용을 따라 진행하시기 바랍니다.

1. JDK 설치: OpenJDK 17 이상을 설치합니다.
2. IDE 설치: IntelliJ IDEA, Eclipse 등의 IDE를 선택하여 설치합니다.
3. Maven 또는 Gradle 설치: 의존성을 관리하기 위해 Maven 또는 Gradle을 사용합니다.

3.1 JDK 설치

JDK는 자바 개발 도구로, 최신 버전을 다운로드하여 설치합니다. 설치 후, PATH 환경 변수를 설정해줍니다.

3.2 IDE 설치

IntelliJ IDEA는 스프링 부트와의 통합이 잘 되어 있어 추천됩니다. 설치 후, 필요한 플러그인을 추가합니다.

3.3 Maven 또는 Gradle 설치

둘 중 하나를 선택하여 설치합니다. Maven을 사용하는 경우, pom.xml을 통해 의존성을 관리합니다. Gradle을 사용하는 경우, build.gradle 파일을 사용합니다.

4. 스프링 부트 프로젝트 생성

스프링 부트 프로젝트를 생성하는 방법은 여러 가지가 있습니다. 여기서는 Spring Initializr를 사용한 방법을 소개합니다.

  1. Spring Initializr 웹사이트에 접속합니다.
  2. Project Metadata를 입력합니다:
    • Group: com.example
    • Artifact: demo
    • Dependencies: 선택적으로 Spring Web, Spring Data JPA, H2 Database 등을 추가합니다.
  3. Generate 버튼을 클릭하여 ZIP 파일을 다운로드합니다.
  4. 다운로드한 ZIP 파일을 해제하고, IDE에서 프로젝트를 엽니다.

5. 간단한 RESTful API 만들기

이제 스프링 부트를 사용하여 간단한 RESTful API를 만들어보겠습니다. 아래 예시는 사용자 관리 API입니다.

5.1 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

5.2 모델 클래스 생성

package com.example.demo.model;

public class User {
    private Long id;
    private String name;
    
    // 생성자, Getter 및 Setter 메서드
}

5.3 컨트롤러 클래스 생성

package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;
import com.example.demo.model.User;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private List users = new ArrayList<>();

    @GetMapping
    public List getUsers() {
        return users;
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        users.add(user);
        return user;
    }
}

5.4 애플리케이션 실행

이제 애플리케이션을 실행하면, http://localhost:8080/api/users에서 사용자 목록을 확인할 수 있습니다.

6. 데이터베이스 연동

스프링 부트는 다양한 데이터베이스와 통합할 수 있습니다. H2, MySQL, PostgreSQL 등 여러 데이터베이스를 사용할 수 있으며, 그 중 H2를 사용해보겠습니다.

6.1 H2 데이터베이스 의존성 추가

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

6.2 application.properties 설정

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

7. 명세서 작성

프로젝트가 커짐에 따라 API 명세서 작성이 중요해집니다. Swagger를 사용하여 간편하게 API 문서를 작성할 수 있습니다.

7.1 Swagger 의존성 추가

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

7.2 Swagger 설정 클래스 생성

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

7.3 Swagger UI 사용

애플리케이션을 실행한 후, http://localhost:8080/swagger-ui/에서 Swagger UI를 통해 API 문서를 확인할 수 있습니다.

8. 테스트 케이스 작성

아래는 스프링 부트를 사용한 테스트 케이스 작성 예시입니다. JUnit과 Spring Test를 사용하여 작성합니다.

8.1 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

8.2 테스트 클래스 생성

package com.example.demo;

import static org.assertj.core.api.Assertions.assertThat;

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;

@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTests {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void getUsers_ShouldReturnUsers() throws Exception {
        this.mockMvc.perform(get("/api/users"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.length()").value(0));
    }
}

9. 결론

이번 강좌를 통해 스프링 부트를 사용하여 간단한 백엔드 애플리케이션을 만드는 방법을 살펴보았습니다. 스프링 부트는 다양한 기능과 간편한 설정 덕분에 빠르게 웹 애플리케이션을 개발하는 데 유용한 도구입니다. 더 깊이 있는 학습을 위해 스프링 부트 공식 문서를 참고하시기 바랍니다.

감사합니다!