스프링 부트 백엔드 개발 강좌, 스프링 부트 3 둘러보기

이번 포스팅에서는 최신 버전인 스프링 부트 3을 중심으로 스프링 부트의 기본 개념부터 시작해, 백엔드 개발에 필요한 모든 요소를 포함한 강좌를 진행하고자 합니다. 스프링 부트는 자바 개발 커뮤니티에서 널리 사용되는 프레임워크로, 개발자들이 손쉽게 자바 웹 애플리케이션을 만들 수 있도록 돕습니다. 이 글에서는 스프링 부트의 특징과 장점, 기본 설정, RESTful 웹 서비스 구축, 데이터베이스 연동, 보안 설정 등을 자세히 설명하겠습니다.

1. 스프링 부트란?

스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 경량화된 프레임워크로, 애플리케이션의 설정 및 배포를 단순화하기 위해 개발되었습니다. 스프링 부트는 개발자가 복잡한 XML 설정 없이도 빠르게 독립 실행형 애플리케이션을 만들 수 있도록 도와줍니다. 또한, 많은 기본 설정이 자동으로 제공되어 개발 속도를 크게 향상시킵니다. 스프링 부트는 기업 환경에서의 애플리케이션 개발은 물론, 개인 프로젝트에서도 그 효용성을 발휘하고 있습니다.

2. 스프링 부트의 주요 특징

  • 설정의 간소화: 기본적인 설정을 자동으로 구성하므로 개발자가 별도로 설정하지 않아도 됩니다.
  • 독립 실행형: 내장 웹 서버(예: Tomcat, Jetty)를 포함하여 별도의 웹 서버 설치 없이 실행할 수 있습니다.
  • 생산성 향상: Spring Initializr와 같은 도구를 통해 초기 설정 및 프로젝트 생성을 간편하게 할 수 있습니다.
  • 스타터 의존성: 여러 라이브러리를 묶어놔 필요한 의존성을 간편하게 추가할 수 있습니다.
  • 액추에이터: 애플리케이션의 모니터링과 관리 기능을 제공하여 운영 중 발생하는 문제를 쉽게 파악할 수 있습니다.

3. 스프링 부트 3의 새로운 기능

스프링 부트 3에서는 몇 가지 새로운 기능과 개선 사항이 추가되었습니다:

  • JDK 17 이상 지원: 최신 Java LTS 버전을 지원하여 성능과 안정성을 향상시킵니다.
  • Spring Native와의 통합: 네이티브 실행 파일 생성 기능이 개선되어 개발자가 더 쉽게 사용할 수 있도록 합니다.
  • 구성 프로퍼티의 개선: @ConfigurationProperties를 통한 환경 설정이 더욱 직관적으로 변경되었습니다.
  • 모듈화의 강화: 보다 세분화된 모듈로 구성되어 필요에 따라 필요한 부분만 선택적으로 사용할 수 있습니다.

4. 스프링 부트 설치 및 설정

4.1. 개발 환경 구축

스프링 부트를 개발하기 위해서는 다음과 같은 요소들이 필요합니다:

  • Java Development Kit (JDK) – JDK 17 이상이 필요합니다.
  • 통합 개발 환경 (IDE) – IntelliJ IDEA, Eclipse 등의 IDE를 사용할 수 있습니다.
  • Maven 또는 Gradle – 의존성 관리 도구로 Maven이나 Gradle을 선택할 수 있습니다.

4.2. Spring Initializr를 통한 프로젝트 생성

스프링 부트 프로젝트를 시작하는 가장 간편한 방법은 Spring Initializr를 이용하는 것입니다. 연동되는 다양한 설정을 통해 프로젝트를 생성할 수 있습니다. 다음은 프로젝트를 설정하는 방법입니다:

  1. 웹사이트에 접속합니다.
  2. 프로젝트 메타데이터 (Group, Artifact 등)를 입력합니다.
  3. 의존성을 선택합니다 (예: Spring Web, Spring Data JPA 등).
  4. 생성한 ZIP 파일을 다운로드하고 압축을 풉니다.
  5. IDE에서 프로젝트를 엽니다.

5. RESTful 웹 서비스 구축

5.1. REST의 개념

REST(Representational State Transfer)는 웹 기반의 아키텍처 스타일로, 클라이언트와 서버 간의 통신을 정의하는 방법입니다. RESTful 웹 서비스는 HTTP 프로토콜을 기반으로 하며, 다음과 같은 원칙을 따릅니다:

  • 리소스 기반 – URI를 통해 리소스를 식별합니다.
  • HTTP 메서드 사용 – GET, POST, PUT, DELETE 등의 메서드를 통해 리소스를 조작합니다.
  • 상태 비저장성 – 클라이언트의 상태를 서버가 유지하지 않습니다.
  • 표현의 전송 – JSON, XML 등의 형식으로 데이터를 전송합니다.

5.2. 스프링 부트를 이용한 RESTful API 구현

이제 스프링 부트를 이용하여 간단한 RESTful API를 구현해보겠습니다. 다음은 Todo 애플리케이션을 만드는 과정입니다:

Step 1: 엔티티 클래스 정의

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Todo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private boolean completed;

    // 생성자, Getter, Setter 생략
}

Step 2: 레포지토리 인터페이스 생성

package com.example.demo.repository;

import com.example.demo.model.Todo;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TodoRepository extends JpaRepository {
}

Step 3: 서비스 클래스 구현

package com.example.demo.service;

import com.example.demo.model.Todo;
import com.example.demo.repository.TodoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TodoService {
    @Autowired
    private TodoRepository todoRepository;

    public List getAllTodos() {
        return todoRepository.findAll();
    }

    public Todo createTodo(Todo todo) {
        return todoRepository.save(todo);
    }

    public void deleteTodo(Long id) {
        todoRepository.deleteById(id);
    }
}

Step 4: 컨트롤러 생성

package com.example.demo.controller;

import com.example.demo.model.Todo;
import com.example.demo.service.TodoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/todos")
public class TodoController {
    @Autowired
    private TodoService todoService;

    @GetMapping
    public List getAllTodos() {
        return todoService.getAllTodos();
    }

    @PostMapping
    public Todo createTodo(@RequestBody Todo todo) {
        return todoService.createTodo(todo);
    }

    @DeleteMapping("/{id}")
    public void deleteTodo(@PathVariable Long id) {
        todoService.deleteTodo(id);
    }
}

6. 데이터베이스 연동

스프링 부트는 여러 데이터베이스와 쉽게 연동할 수 있습니다. 이 강좌에서는 H2 데이터베이스를 사용하여 Todo 애플리케이션을 강화하겠습니다.

6.1. 의존성 추가

dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'com.h2database:h2'
    }

6.2. application.properties 설정

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update

위와 같이 설정하면 H2 데이터베이스와 연동되어 애플리케이션을 개발할 수 있습니다. H2 콘솔을 활성화하여 데이터베이스를 직접 확인할 수 있습니다.

7. 보안 설정

웹 애플리케이션의 보안은 매우 중요한 요소입니다. 스프링 부트에서는 Spring Security를 통해 보안을 강화할 수 있습니다.

7.1. 의존성 추가

dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-security'
    }

7.2. 기본 보안 설정

스프링 부트의 기본 보안 설정을 통해 모든 요청에 대해 인증을 요구할 수 있습니다. 이를 위해 WebSecurityConfigurerAdapter를 상속한 클래스를 생성합니다.

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }
}

8. 결론

이 강좌를 통해 스프링 부트 3의 기본 개념과 주요 기능, 그리고 RESTful API, 데이터베이스 연동, 보안 설정까지 아우르는 백엔드 개발의 기초를 살펴보았습니다. 스프링 부트는 개발자에게 필요한 다양한 기능을 제공하며, 이를 통해 생산성을 높이고 개발 과정을 단순화할 수 있습니다. 앞으로 실무에서 스프링 부트를 활용하여 다양한 웹 애플리케이션을 개발해보시기 바랍니다.

9. 부록

9.1. 유용한 도구와 자료

9.2. 커뮤니티와 포럼

스프링 부트와 관련된 질문이나 정보를 교환할 수 있는 커뮤니티와 포럼이 많이 있습니다. 대표적인 곳은 다음과 같습니다:

9.3. 추천 서적

이번 강좌를 통해 스프링 부트의 매력을 느끼고, 실제 프로젝트에 적용할 수 있는 기초 지식을 쌓으셨기를 바랍니다. 모든 개발자는 시작이 어려운 법입니다. 하지만 꾸준한 연습과 학습을 통해 더 나은 개발자로 성장할 수 있습니다.