sprint boot 어노테이션
**Spring Boot**에서 사용하는 **어노테이션(Annotation)**은 **메타데이터** 역할을 하며, 코드에 의미를 부여하고 특정 기능을 활성화하는 데 사용됩니다. Spring에서는 어노테이션을 통해 **의존성 주입**, **요청 처리**, **데이터 매핑** 등의 작업을 간단하게 처리할 수 있습니다.
* * * * *
**1\. 어노테이션의 역할**
-----------------
어노테이션은 다음과 같은 역할을 합니다:
1. **구성(Configuration)**:
- 애플리케이션의 동작 방식을 설정합니다.
- 예: `@Configuration`, `@EnableAutoConfiguration`
2. **의존성 주입(Dependency Injection)**:
- Spring이 객체를 자동으로 관리하고 주입할 수 있도록 설정합니다.
- 예: `@Autowired`, `@Component`
3. **웹 요청 처리**:
- HTTP 요청과 컨트롤러 메서드를 연결합니다.
- 예: `@RestController`, `@GetMapping`, `@PostMapping`
4. **데이터 매핑**:
- 데이터베이스 테이블과 자바 객체(Entity)를 매핑합니다.
- 예: `@Entity`, `@Table`, `@Column`
5. **제어 흐름 및 기타 기능**:
- AOP(Aspect-Oriented Programming)나 트랜잭션 관리를 활성화합니다.
- 예: `@Transactional`
* * * * *
**2\. 알아야 할 주요 어노테이션**
----------------------
### **(1) 스프링 핵심 어노테이션**
| 어노테이션 | 역할 |
| --- | --- |
| `@Component` | Spring이 관리하는 **일반적인 빈(Bean)**으로 등록. (부모 어노테이션) |
| `@Service` | **비즈니스 로직**을 처리하는 클래스에 사용. `@Component`의 특수화. |
| `@Repository` | **데이터 접근 계층**을 나타냄. JPA 예외를 스프링 예외로 변환. |
| `@Controller` | HTTP 요청을 처리하고, **뷰 반환**을 담당. |
| `@RestController` | HTTP 요청을 처리하고, **JSON 응답**을 반환. (`@Controller` + `@ResponseBody`) |
| `@Configuration` | **설정 클래스**를 정의. Bean 등록 등 설정을 위한 클래스에 사용. |
| `@Bean` | 개발자가 직접 관리할 **Spring Bean**을 정의. |
| `@Autowired` | 의존성 주입. Spring Bean을 클래스에 주입. |
* * * * *
### **(2) 웹 요청 관련 어노테이션**
| 어노테이션 | 역할 |
| --- | --- |
| `@RequestMapping` | **HTTP 요청 경로**를 클래스 또는 메서드와 매핑. (`@GetMapping` 등과 동일한 역할) |
| `@GetMapping` | HTTP **GET** 요청을 처리. |
| `@PostMapping` | HTTP **POST** 요청을 처리. |
| `@PutMapping` | HTTP **PUT** 요청을 처리. |
| `@DeleteMapping` | HTTP **DELETE** 요청을 처리. |
| `@PathVariable` | URL 경로 변수 데이터를 메서드 매개변수에 매핑. |
| `@RequestParam` | 쿼리 파라미터 데이터를 메서드 매개변수에 매핑. |
| `@RequestBody` | HTTP 요청 본문 데이터를 **JSON → 객체**로 변환. |
| `@ResponseBody` | 객체를 **JSON 응답**으로 변환. |
* * * * *
### **(3) 데이터 매핑 관련 어노테이션**
| 어노테이션 | 역할 |
| --- | --- |
| `@Entity` | 이 클래스가 **데이터베이스 테이블**과 매핑됨을 나타냄. |
| `@Table` | 테이블 이름을 명시적으로 설정. |
| `@Id` | 테이블의 기본 키(Primary Key)를 지정. |
| `@GeneratedValue` | 기본 키 값의 자동 증가 전략을 설정. |
| `@Column` | 테이블의 열(Column)과 필드를 매핑. |
| `@OneToOne` | 테이블 간 **1:1 관계**를 정의. |
| `@OneToMany` | 테이블 간 **1:N 관계**를 정의. |
| `@ManyToOne` | 테이블 간 **N:1 관계**를 정의. |
| `@ManyToMany` | 테이블 간 **N:M 관계**를 정의. |
* * * * *
### **(4) 트랜잭션 관리 어노테이션**
| 어노테이션 | 역할 |
| --- | --- |
| `@Transactional` | 메서드 또는 클래스에 트랜잭션을 적용. |
* * * * *
### **(5) 기타 유용한 어노테이션**
| 어노테이션 | 역할 |
| --- | --- |
| `@RestControllerAdvice` | 컨트롤러 전역에서 예외를 처리. |
| `@Valid` | **유효성 검사**를 활성화. |
| `@CrossOrigin` | **CORS** 설정을 허용. |
* * * * *
**3\. 어떤 어노테이션을 알아야 할까?**
-------------------------
### **필수적으로 알아야 할 어노테이션**
1. **Spring 핵심 어노테이션**: `@Component`, `@Service`, `@Repository`, `@Controller`, `@RestController`
2. **웹 요청 처리**: `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@RequestParam`, `@PathVariable`
3. **데이터 매핑**: `@Entity`, `@Table`, `@Id`, `@GeneratedValue`, `@Column`
* * * * *
### **필요에 따라 학습할 어노테이션**
1. **트랜잭션 관리**: `@Transactional`
2. **예외 처리**: `@RestControllerAdvice`
3. **복잡한 관계 매핑**: `@OneToOne`, `@OneToMany`, `@ManyToOne`
* * * * *
**4\. 결론**
----------
어노테이션은 Spring Boot의 **설정 및 동작을 선언적으로 정의**하는 핵심 도구입니다.
- 소규모 프로젝트: 컨트롤러와 요청 처리 관련 어노테이션 중심으로 사용.
- 대규모 프로젝트: 트랜잭션, 데이터 매핑, 예외 처리 등 다양한 어노테이션 활용.
궁금한 어노테이션이 있거나, 특정 동작이 이해되지 않으면 더 설명해드릴게요! 😊
댓글
댓글 쓰기