이미지 로딩 중...

Spring Boot 기초부터 심화까지 완벽 가이드 - 슬라이드 1/13
C

CodeDeck AI

2025. 11. 8. · 2 Views

Spring Boot 기초부터 심화까지 완벽 가이드

Spring Boot의 핵심 개념부터 실무 활용까지 단계별로 학습합니다. 의존성 주입, REST API, JPA, 보안 설정 등 실무에서 자주 사용하는 패턴을 다룹니다.


카테고리:Java
언어:Java
난이도:intermediate
메인 태그:#Spring Boot
서브 태그:
#Dependency Injection#REST API#JPA#Security

들어가며

이 글에서는 Spring Boot 기초부터 심화까지 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Spring Boot 애플리케이션 시작하기
  2. 의존성_주입_Constructor_Injection
  3. REST API 컨트롤러 생성
  4. JPA 엔티티 정의
  5. JPA Repository 인터페이스
  6. DTO와 엔티티 분리
  7. 예외 처리 GlobalExceptionHandler
  8. application.yml 설정
  9. 트랜잭션 관리
  10. Validation 유효성 검증
  11. Spring Security 기본 설정
  12. 페이징과 정렬

1. Spring Boot 애플리케이션 시작하기

개요

@SpringBootApplication 어노테이션으로 Spring Boot 애플리케이션을 초기화하고 실행합니다.

코드 예제

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

설명

@SpringBootApplication은 자동 설정, 컴포넌트 스캔, 설정 클래스 기능을 모두 포함하며, main 메서드로 애플리케이션을 시작합니다.


2. 의존성_주입_Constructor_Injection

개요

생성자를 통한 의존성 주입으로 불변성과 테스트 용이성을 확보합니다.

코드 예제

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

설명

생성자 주입은 필드를 final로 선언할 수 있어 불변성을 보장하며, Spring 4.3 이후로는 @Autowired 생략이 가능합니다.


3. REST API 컨트롤러 생성

개요

@RestController와 HTTP 메서드 어노테이션으로 RESTful API를 구현합니다.

코드 예제

@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

설명

@RestController는 @Controller와 @ResponseBody를 결합하여 JSON 응답을 자동으로 생성하며, @PathVariable로 URL 경로 변수를 받습니다.


4. JPA 엔티티 정의

개요

@Entity 어노테이션으로 데이터베이스 테이블과 매핑되는 엔티티 클래스를 정의합니다.

코드 예제

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String username;
}

설명

@Entity는 JPA 엔티티를 선언하고, @Id는 기본 키를, @GeneratedValue는 자동 증가 전략을 설정합니다.


5. JPA Repository 인터페이스

개요

JpaRepository를 상속하여 기본적인 CRUD 메서드를 자동으로 제공받습니다.

코드 예제

@Repository
public interface UserRepository
    extends JpaRepository<User, Long> {

    Optional<User> findByUsername(String username);
}

설명

JpaRepository는 기본 CRUD 메서드를 제공하며, 메서드 이름 규칙으로 쿼리를 자동 생성합니다.


6. DTO와 엔티티 분리

개요

데이터 전송 객체(DTO)를 사용하여 엔티티와 API 계층을 분리합니다.

코드 예제

public record UserDTO(
    Long id,
    String username,
    String email
) {
    public static UserDTO from(User user) {
        return new UserDTO(user.getId(),
            user.getUsername(), user.getEmail());
    }
}

설명

Java 14의 record를 사용하여 불변 DTO를 간결하게 정의하고, 정적 팩토리 메서드로 엔티티를 DTO로 변환합니다.


7. 예외 처리 GlobalExceptionHandler

개요

@ControllerAdvice로 전역 예외 처리를 중앙화하여 일관된 에러 응답을 제공합니다.

코드 예제

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(
        ResourceNotFoundException ex) {
        return ResponseEntity.status(404).body(
            new ErrorResponse(ex.getMessage()));
    }
}

설명

@ControllerAdvice는 모든 컨트롤러에 적용되며, @ExceptionHandler로 특정 예외를 처리하여 클라이언트에게 일관된 에러 응답을 제공합니다.


8. application.yml 설정

개요

YAML 형식으로 애플리케이션 설정을 계층적으로 관리합니다.

코드 예제

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: true

설명

application.yml은 properties 파일보다 가독성이 좋으며, 계층 구조로 설정을 그룹화하여 관리합니다.


9. 트랜잭션 관리

개요

@Transactional 어노테이션으로 선언적 트랜잭션을 관리합니다.

코드 예제

@Service
@Transactional(readOnly = true)
public class UserService {
    @Transactional
    public User createUser(UserDTO dto) {
        User user = new User(dto.username());
        return userRepository.save(user);
    }
}

설명

클래스 레벨의 readOnly는 조회 최적화를, 메서드 레벨의 @Transactional은 쓰기 트랜잭션을 관리합니다.


10. Validation 유효성 검증

개요

Bean Validation 어노테이션으로 요청 데이터의 유효성을 검증합니다.

코드 예제

public record CreateUserRequest(
    @NotBlank(message = "이름은 필수입니다")
    @Size(min = 2, max = 20)
    String username,

    @Email
    String email
) {}

설명

@NotBlank, @Size, @Email 등의 어노테이션으로 선언적 검증을 수행하며, @Valid와 함께 사용하여 컨트롤러에서 자동 검증됩니다.


11. Spring Security 기본 설정

개요

SecurityFilterChain으로 HTTP 보안 정책을 설정합니다.

코드 예제

@Bean
public SecurityFilterChain filterChain(
    HttpSecurity http) throws Exception {
    return http
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/api/public/**").permitAll()
            .anyRequest().authenticated())
        .build();
}

설명

SecurityFilterChain 빈으로 URL 별 접근 권한을 설정하며, 공개 API는 permitAll(), 나머지는 인증을 요구합니다.


12. 페이징과 정렬

개요

Pageable 인터페이스로 페이징과 정렬을 간편하게 구현합니다.

코드 예제

@GetMapping
public Page<UserDTO> getUsers(
    @PageableDefault(size = 20, sort = "id")
    Pageable pageable) {
    return userService.findAll(pageable)
        .map(UserDTO::from);
}

설명

Pageable은 page, size, sort 파라미터를 자동으로 바인딩하며, Page 객체로 페이징 메타데이터와 함께 결과를 반환합니다.


마치며

이번 글에서는 Spring Boot 기초부터 심화까지 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Spring Boot #Dependency Injection #REST API #JPA #Security

#Spring Boot#Dependency Injection#REST API#JPA#Security#Java

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.