개발/부트캠프

본캠프 : 어노테이션 정리_freship project

EJ EJ 2025. 3. 28. 21:24

1. Spring  Boot  관련 어노테이션

@SpringBootApplication

  • Spring Boot 애플리케이션의 진입점. 자동 설정, 컴포넌트 스캔을 포함

@Component

  • Spring이 관리하는 빈(Bean)으로 등록하는 기본 어노테이션
  • @Service, @Repository, @Controller의 부모 개념

@ComponentScan

  • 특정 패키지를 스캔하여 Bean으로 등록

@Bean

  • 개발자가 직접 Bean을 생성할 때 사용
  • @Configuration 클래스 내에서 선언하여 객체를 관리 가능

@Configuration

  • 해당 클래스를 설정(Configuration) 클래스로 지정
  • @Bean 메서드를 포함하여 Bean을 등록할 때 사용

@Value("${jwt.secret.key}")

  • 설정 파일(application.properties 또는 application.yml)에서 값을 가져옴
  • 환경변수, 프로퍼티 값 등을 사용할 때 유용

@PostConstruct

  • Spring이 해당 Bean을 생성한 후 초기화 단계에서 실행할 메서드를 지정

@Service

  • 비즈니스 로직을 처리하는 클래스를 Bean으로 등록

@Transactional

  • 트랜잭션을 관리하는 어노테이션
  • 메서드가 정상 실행되면 commit, 예외 발생 시 rollback

2. Spring Security 관련 어노테이션

@EnableWebSecurity

  • Spring Security를 활성화하여 보안 설정을 적용

@EnableMethodSecurity(securedEnabled = true)

  • @Secured, @PreAuthorize 등의 메서드 기반 보안 활성화

@EnableGlobalMethodSecurity(prePostEnabled = true)

  • @PreAuthorize 등의 메서드 수준 보안 활성화

@Secured

  • 특정 역할(Role)을 가진 사용자만 접근 가능하도록 제한
  • ROLE_ 접두사를 반드시 사용해야 함
  • 메서드 단위에서만 사용 가능 (클래스 단위에서는 사용 불가)

@PreAuthorize

  • 더 강력한 권한 검사 기능 제공 (SpEL 사용 가능)
  • hasRole(), hasAuthority(), #username == authentication.name 같은 논리적 조건을 설정할 수 있음
  • 메서드 & 클래스단위에서 사용 가능

@AuthenticationPrincipal

  • 현재 인증된 사용자 정보 가져오기

3. Spring MVC 관련 어노테이션

@RestController

  • 해당 클래스를 REST API 컨트롤러로 설정
  • @Controller + @ResponseBody 기능을 포함

@RequestMapping("/auth")

  • 해당 컨트롤러의 기본 URL을 설정

@RestControllerAdvice

  • 전역 예외 처리를 위한 컨트롤러

@PathVariable

  • URL 경로에서 값을 가져옴 (/users/{id} → @PathVariable Long id)

@RequestParam

  • 쿼리 파라미터 값을 가져옴 (/search?query=apple → @RequestParam String query)

@RequestBody

  • JSON 요청 데이터를 Java 객체로 변환

@ResponseBody

  • 객체를 JSON 형태로 변환하여 반환

@ExceptionHandler(ClientException.class)

  • 특정 예외(ClientException)가 발생했을 때 실행할 핸들러

4. JPA 관련 어노테이션

@EnableJpaAuditing

  • 엔티티가 생성되거나 수정되는 시점을 감시
  • 생성일, 생성자, 수정일, 수정자를 자동으로 기록

@Entity

  • 해당 클래스를 JPA 엔티티(Entity)로 선언

@Table(name = "members")

  • 매핑할 데이터베이스 테이블 이름을 지정

@Id

  • 해당 필드를 기본 키(Primary Key)로 설정

@GeneratedValue(strategy = GenerationType.IDENTITY)

  • 기본 키 자동 생성 전략 지정
  • IDENTITY: 데이터베이스에서 자동 증가(AUTO_INCREMENT) 사용

@Column(nullable = false, unique = true)

  • 데이터베이스 컬럼 속성 지정

@JoinColumn(name = "column_name")

  • 외래 키(Foreign Key) 설정

@OneToMany, @ManyToOne, @OneToOne, @ManyToMany

  • 엔티티 간 관계 설정

@MappedSuperclass

  • 공통 필드를 정의하는 부모 클래스에 사용
  • 엔티티에서 상속받아 사용 가능

@EntityListeners(AuditingEntityListener.class)

  • 엔티티의 생성 및 수정 이벤트를 감지하여 자동 처리

@CreatedDate

  • 엔티티가 생성된 날짜를 자동 저장

@LastModifiedDate

  • 엔티티가 수정된 날짜를 자동 저장

@Temporal(TemporalType.TIMESTAMP)

  • 날짜 필드(Date, LocalDateTime)의 저장 형식을 지정

5. Lombok 관련 어노테이션

@Slf4j(topic = "JwtUtil")

  • 로그(Log)를 쉽게 사용할 수 있도록 하는 Lombok 어노테이션
  • log.info("메시지") 같은 방식으로 로그 출력 가능
  • 기본적으로 @Slf4j는 클래스 이름을 로그 카테고리(Logger Name)로 사용하지만, topic을 지정하면 해당 값이 Logger Name이 됨. ex) [INFO] JwtUtil - JWT 토큰 생성

@RequiredArgsConstructor

  • final이 붙은 필드만 포함하는 생성자 자동 생성

@NoArgsConstructor

  • 기본 생성자를 자동 생성하며, 접근 제어자 설정 가능

@AllArgsConstructor

  • 모든 필드를 포함한 생성자 자동 생성

@Autowired

  • 스프링이 의존성을 자동으로 주입할 때 사용(단, 값 변경이 가능하니 주의해서 사용)

@Getter

  • 클래스의 속성 값을 반환

@Setter

  • 객체 속성 값을 설정하거나 변경

@Builder

  • Builder 패턴을 자동 생성

6. Jackson 관련 어노테이션

@JsonInclude(JsonInclude.Include.NON_NULL)

  • JSON 직렬화 시 null 값은 제외하고 변환