liminfo

Spring Reference

Spring 프레임워크 레퍼런스

26개 결과

Spring Reference 소개

Spring Framework 레퍼런스는 Spring을 사용한 Java 엔터프라이즈 애플리케이션 개발을 위한 검색 가능한 빠른 참조입니다. 컴포넌트 스테레오타입(@Component, @Service, @Repository, @Controller, @Configuration)과 @Autowired 필드 주입, 생성자 주입(권장 방식), 빈 구분을 위한 @Qualifier, 프로퍼티 바인딩을 위한 @Value, @Bean 메서드 정의를 포함한 의존성 주입 패턴을 다룹니다. 각 항목은 현재 Spring 모범 사례를 따르는 프로덕션 Java 코드 예제를 제공합니다.

이 레퍼런스는 Spring 개념을 컴포넌트, 의존성 주입, AOP, MVC, Security, Data의 6가지 카테고리로 구성합니다. AOP 섹션에서는 @Aspect를 활용한 관점 지향 프로그래밍, @Before/@After 어드바이스, 타이밍 같은 횡단 관심사를 위한 @Around, 선언적 트랜잭션 관리를 위한 @Transactional을 다룹니다. MVC 섹션에서는 요청 매핑 어노테이션(@GetMapping, @PostMapping), 파라미터 바인딩(@RequestBody, @PathVariable, @RequestParam), 중앙 집중식 오류 처리를 위한 @ExceptionHandler를 상세히 설명합니다.

Security와 Data 섹션은 Spring에서 가장 강력한 두 모듈을 다룹니다. Spring Security 항목에서는 URL 기반 인가를 위한 SecurityFilterChain 설정과 SpEL 표현식을 활용한 메서드 수준 접근 제어를 위한 @PreAuthorize를 설명합니다. Spring Data JPA 항목에서는 파생 쿼리 메서드(findByEmail, findByUsername)가 포함된 JpaRepository 인터페이스, 커스텀 JPQL을 위한 @Query, @Id와 @GeneratedValue를 사용한 @Entity 매핑, REST 엔드포인트에서의 자동 페이지네이션 처리를 위한 Pageable을 다룹니다.

주요 기능

  • 사용 컨텍스트가 포함된 컴포넌트 스테레오타입 어노테이션(@Component, @Service, @Repository, @Controller, @Configuration)
  • 의존성 주입 패턴: 생성자 주입, @Autowired, @Qualifier, @Value, @Bean 정의
  • @Before, @After, @Around 어드바이스와 @Transactional 선언적 트랜잭션 관리를 포함한 AOP 애스펙트
  • @GetMapping, @PostMapping, @RequestBody, @PathVariable, @RequestParam을 활용한 Spring MVC 요청 매핑
  • ResponseEntity와 HTTP 상태 코드를 활용한 중앙 집중식 오류 처리를 위한 @ExceptionHandler
  • SecurityFilterChain URL 인가와 @PreAuthorize 메서드 수준 검사를 포함한 Spring Security
  • JpaRepository, 파생 쿼리 메서드, @Query JPQL, Pageable 페이지네이션을 포함한 Spring Data JPA
  • @Id, @GeneratedValue, @Table, 관계 어노테이션을 활용한 @Entity JPA 매핑

자주 묻는 질문

왜 생성자 주입이 @Autowired 필드 주입보다 선호되나요?

생성자 주입은 의존성을 명시적으로 만들고, final 필드로 불변성을 보장하며, 객체가 완전히 초기화됨을 보장합니다. 부분적으로 생성된 객체에서 NullPointerException을 방지하고, 모의 의존성을 직접 전달할 수 있어 단위 테스트가 쉬워집니다. Spring 4.3부터 단일 생성자에는 @Autowired가 필요하지 않습니다. 필드 주입은 의존성을 숨기고 클래스의 책임이 너무 많아질 때 식별하기 어렵게 만듭니다.

@Component, @Service, @Repository, @Controller의 차이점은 무엇인가요?

네 가지 모두 클래스를 Spring 빈으로 등록하지만 서로 다른 의미적 역할을 합니다. @Component는 범용 스테레오타입입니다. @Service는 서비스 레이어 클래스(비즈니스 로직)를 표시합니다. @Repository는 데이터 액세스 클래스를 표시하고 영속성 예외에 대한 자동 예외 변환을 추가합니다. @Controller는 HTTP 요청을 처리하는 웹 컨트롤러를 표시합니다. 올바른 스테레오타입 사용은 코드 가독성을 높이고 대상 지정 AOP 어드바이스를 가능하게 합니다.

Spring에서 @Transactional은 어떻게 작동하나요?

@Transactional은 어노테이션된 메서드 주위에 프록시를 생성하여 실행 전에 트랜잭션을 시작하고 완료 후 커밋합니다. 런타임 예외가 발생하면 트랜잭션이 롤백됩니다. 주요 속성으로는 propagation(REQUIRED, REQUIRES_NEW), 격리 수준, 쿼리 최적화를 위한 readOnly 플래그, 롤백을 트리거하는 예외를 지정하는 rollbackFor가 있습니다. 프록시 기반 AOP이므로 @Transactional은 클래스 외부에서 호출되는 public 메서드에서만 작동합니다.

Spring MVC에서 예외를 전역적으로 처리하는 방법은?

@ControllerAdvice(또는 @RestControllerAdvice)와 @ExceptionHandler 메서드를 사용합니다. 각 핸들러 메서드는 특정 예외 타입을 잡아 적절한 HTTP 상태 코드와 오류 본문이 포함된 ResponseEntity를 반환합니다. 이를 통해 모든 컨트롤러에 걸쳐 오류 처리를 중앙 집중화합니다. 커스텀 예외 클래스에 @ResponseStatus를 사용할 수도 있습니다. 유효성 검사 오류에는 MethodArgumentNotValidException을 처리하여 필드 수준 오류 메시지를 반환합니다.

SecurityFilterChain이란 무엇이며 WebSecurityConfigurerAdapter를 어떻게 대체하나요?

Spring Security 5.7부터 SecurityFilterChain은 폐기된 WebSecurityConfigurerAdapter를 대체하는 @Bean입니다. HttpSecurity의 메서드 체이닝으로 설정합니다: authorizeHttpRequests()로 URL 패턴, formLogin()/httpBasic()으로 인증, csrf()로 CSRF 보호, cors()로 교차 출처 설정. 여러 SecurityFilterChain 빈을 @Order로 정의하여 다른 URL 패턴에 대해 더 유연하고 조합 가능한 보안 설정을 제공합니다.

Spring Data JPA에서 파생 쿼리 메서드는 어떻게 작동하나요?

Spring Data JPA는 메서드 이름 규칙에 기반하여 자동으로 쿼리 메서드를 구현합니다. 예를 들어 findByEmail(String email)은 "SELECT ... WHERE email = ?"를 생성합니다. And/Or로 속성을 결합하고(findByNameAndAge), OrderBy, Between, LessThan, Like, In 같은 키워드를 사용할 수 있으며, Optional, List, Page, Stream 타입을 반환할 수 있습니다. 이름 규칙을 넘어서는 복잡한 쿼리에는 JPQL이나 네이티브 SQL과 함께 @Query를 사용합니다.

@PreAuthorize는 무엇을 하며 SpEL을 어떻게 사용하나요?

@PreAuthorize는 메서드 실행 전에 Spring Expression Language(SpEL) 표현식을 평가합니다. 일반적인 표현식으로는 hasRole("ADMIN"), hasAuthority("WRITE"), isAuthenticated(), 리소스 소유권 확인을 위한 #username == authentication.principal.username 등이 있습니다. @EnableMethodSecurity로 활성화합니다. 메서드 파라미터에 접근하고 복잡한 불리언 로직을 지원하므로 URL 기반 보안보다 유연합니다.

Spring Data에서 API 페이지네이션을 위한 Pageable은 어떻게 작동하나요?

컨트롤러 메서드와 리포지토리에 Pageable 파라미터를 추가합니다. Spring이 자동으로 요청 쿼리 문자열에서 page, size, sort 파라미터를 추출합니다(예: ?page=0&size=20&sort=name,asc). 리포지토리 메서드는 데이터 슬라이스와 함께 총 개수, 총 페이지 수, 내비게이션 메타데이터를 포함하는 Page<T> 객체를 반환합니다. 기본 페이지 크기는 @PageableDefault 또는 application.properties의 spring.data.web.pageable.default-page-size로 설정할 수 있습니다.