BE/Spring & Spring Boot

[Spring Boot] 관련 어노테이션

baek-dev 2025. 1. 1. 12:46

1. 스프링부트 기본 설정 관련

@SpringBootApplication

  • 스프링부트 애플리케이션의 시작점임을 명시
  • @Configuration, @EnableAutoConfiguration, @ComponentScan 을 결합한 어노테이션
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 

@EnableAutoConfiguration

  • 스프링부트가 클래스패스에 있는 라이브러리와 애플리케이션의 설정을 기반으로 자동 설정을 활성화

 

@Configuration

  • Java 기반의 설정 파일임을 명시
  • @Bean 어노테이션과 함께 사용하여 스프링 빈을 생성
@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

 

@ComponentScan

  • 특정 패키지를 기준으로 컴포넌트(@Component, @Service, @Repository, @Controller 등)를 검색하여 스프링 컨텍스트에 등록

 

@PropertySource

  • 특정 프로퍼티 파일을 읽어 애플리케이션에 설정값으로 주입
@PropertySource("classpath:application.properties")
public class AppConfig { }

2. 컴포넌트 스캔 및 빈 등록 관련

@Component

  • 스프링이 관리하는 빈으로 등록하기 위해 사용
  • 모든 계층에서 공통적으로 사용할 수 있음

 

@Service

  • 비즈니스 로직을 처리하는 서비스 클래스에 사용
  • @Component의 특수화된 형태

 

@Repository

  • 데이터 액세스 계층(DAO 클래스)에서 사용
  • 데이터베이스와 상호작용하는 클래스임을 명시
  • 예외 변환 (AOP기반) 기능을 추가

 

@Controller

  • 웹 요청을 처리하는 클래스임을 명시

 

@RestController

  • @Controller와 @ResponseBody를 합친 어노테이션
  • JSON/XML 형식으로 HTTP 응답을 생성

3. 요청/응답 매핑 관련 (Spring MVC)

@RequestMapping

  • URL과 HTTP 메서드를 클래스 또는 메서드에 매핑

속성 :

  • value : 요청 URL
  • method : HTTP 메서드(GET, POST 등)
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getUsers() { }

※ 클래스에 걸면 그안의 메서드들의 경로 공통 설정

@Controller
@RequiredArgsConstructor
@RequestMapping("/question")
public class QuestionController {
    @GetMapping("/list")
    public String list(Model model, @RequestParam(defaultValue = "0") int page) {}
}

→ list 메서드의 경로는 question/list

 

@GetMapping / @PostMapping / @PutMapping / @DeleteMapping

  • 특정 HTTP 메서드에 대한 요청을 처리하는 간편한 어노테이션
@GetMapping("/users")
public List<User> getUsers() { }

 

@RequestParam

  • 쿼리 파라미터 또는 폼 데이터를 매개변수로 바인딩
@GetMapping("/users")
public User getUser(@RequestParam String name) { }

※ 쿼리스트링 (?name=@@@) 에서 name 값을 받아옴

 

@PathVariable

  • URL 경로의 일부를 매개변수로 바인딩
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { }

※ @RequestParam 과 같이 URL에서 데이터를 받아오지만, @PathVariable 은 하나의 데이터만 받아올 수 있다

 

@RequestBody

  • 요청 본문(body JSON으로)을 객체로 변환하여 매핑
@PostMapping("/users")
public void createUser(@RequestBody User user) { }

 

@ResponseBody

  • 반환 값을 HTTP 응답 본문에 직접 전달

 

@ResponseStatus

  • 메서드에서 반환하는 HTTP 상태 코드를 명시적으로 설정
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/users")
public void createUser(@RequestBody User user) { }

4. 데이터 검증 및 바인딩

@Valid

  • 요청 데이터의 유효성을 검사

 

@NotNull, @Size, @Email 등

  • 데이터 검증을 위한 제약 조건 설정

 

@ModelAttribute

  • 요청 파라미터를 객체에 바인딩
@PostMapping("/users")
public void createUser(@ModelAttribute User user) { }

5. 트랜잭션 관리

@Transactional

  • 메서드나 클래스에 트랜잭션 처리를 적용

속성 :

  • readOnly : 읽기 전용 트랜잭션 여부
  • rollbackFor : 롤백할 예외 지정
@Transactional
public void updateUser(User user) { }

6. Spring Security

@Secured

  • 메서드 수준에서 접근 권한을 제어

 

@PreAuthorize / @PostAuthorize

  • SpEL (Spring Expression Language) 을 사용하여 권한을 검사

7. 기타 자주 사용하는 어노테이션

@Value

  • 프로퍼티 값을 주입
@Value("${app.name}")
private String appName;

 

@Profile

  • 특정 환경(Profile)에서만 빈을 활성화
@Profile("dev")
@Service
public class DevService { }

 

@Scheduled

  • 스케줄링 작업을 수행
@Scheduled(fixedRate = 5000)
public void scheduleTask() { }

 

@Async

  • 비동기 메서드를 정의
@Async
public void performTask() { }

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] DTO  (0) 2025.01.04
[Spring Boot, JPA] 관련 어노테이션  (0) 2025.01.01
[Spring Boot] Validation 유효성 검사  (0) 2024.12.30
[Spring Boot] Thymeleaf 타임리프  (0) 2024.12.29
[Spring Boot] Page  (0) 2024.12.27