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의 **설정 및 동작을 선언적으로 정의**하는 핵심 도구입니다.


-   소규모 프로젝트: 컨트롤러와 요청 처리 관련 어노테이션 중심으로 사용.

-   대규모 프로젝트: 트랜잭션, 데이터 매핑, 예외 처리 등 다양한 어노테이션 활용.


궁금한 어노테이션이 있거나, 특정 동작이 이해되지 않으면 더 설명해드릴게요! 😊

댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet