1. Spring Security 관련
- @Configuration: 스프링 설정 클래스임을 나타내는 어노테이션입니다. XML 설정 파일을 사용하지 않고 자바 기반 설정을 할 때 사용합니다.
- @EnableWebSecurity: Spring Security를 활성화하고 보안 설정을 적용하기 위해 사용합니다. 보안 필터 체인을 구성하고 사용자 인증 및 권한 부여와 관련된 보안 규칙을 정의할 수 있습니다.
2. Spring Bean 등록 및 의존성 주입 관련
- @Bean: 메서드 수준에서 사용되며, 스프링 컨테이너에 빈(Bean)을 등록하는 역할을 합니다. 등록된 빈은 스프링 컨테이너에 의해 관리되며 필요한 곳에 의존성 주입이 가능합니다.
- @Service: 비즈니스 로직을 처리하는 서비스 계층을 정의할 때 사용하며, 해당 클래스를 스프링 컨테이너의 빈으로 등록합니다.
- @Autowired: 스프링 컨테이너에서 관리하는 빈을 자동으로 주입하는 어노테이션입니다. 생성자, 필드, 메서드 레벨에 사용 가능하며, 타입을 기준으로 의존성을 주입합니다.
- @RequiredArgsConstructor: Lombok에서 제공하는 어노테이션으로,
final
이나 @NonNull
이 붙은 필드에 대해 생성자를 자동으로 생성합니다.
3. Spring MVC 관련
- @ResponseBody: 컨트롤러 메서드가 반환하는 값을 HTTP 응답 본문에 직접 작성하도록 합니다. JSON 또는 XML 형태의 데이터를 반환할 때 사용합니다.
- @GetMapping, @PostMapping, @DeleteMapping: 각각 HTTP GET, POST, DELETE 요청에 매핑되는 메서드를 정의합니다.
- @ModelAttribute: HTTP 요청 파라미터를 객체로 바인딩하여 컨트롤러 메서드에 전달합니다.
- @PathVariable: URL 경로의 일부를 변수로 받아 컨트롤러 메서드의 파라미터로 전달합니다. 예:
/user/{id}
.
- @RequestParam: HTTP 요청의 쿼리 파라미터를 메서드 인자로 바인딩합니다.
4. JPA 관련
- @Entity: 클래스가 JPA 엔티티임을 나타내며, 데이터베이스의 테이블에 매핑됩니다. 각
@Entity
클래스는 반드시 @Id
로 정의된 식별자를 가져야 합니다.
- @Table: 엔티티 클래스와 데이터베이스 테이블의 매핑 정보를 제공합니다.
name
속성으로 테이블 이름을 설정할 수 있습니다.
- @Id: 엔티티의 기본 키를 나타냅니다.
- @GeneratedValue(strategy = GenerationType.IDENTITY): 기본 키의 자동 생성 전략을 정의합니다.
- @Column: 엔티티의 필드와 테이블의 열을 매핑합니다.
name
, nullable
, length
등의 속성을 설정할 수 있습니다.
- @OneToMany, @ManyToOne: 엔티티 간의 관계를 정의합니다.
@OneToMany
는 한 엔티티가 여러 엔티티와 연관될 때, @ManyToOne
은 여러 엔티티가 하나의 엔티티와 연관될 때 사용합니다.
- @JoinColumn: 연관관계에서 외래 키를 지정할 때 사용합니다.
- @FetchType: 연관된 엔티티를 로드하는 방식을 설정합니다.
FetchType.LAZY
는 지연 로딩, FetchType.EAGER
는 즉시 로딩을 의미합니다.
- @CreationTimestamp: 엔티티가 생성될 때의 타임스탬프를 자동으로 기록합니다.
- @ForeignKey: 외래 키 제약 조건을 명시적으로 지정할 수 있습니다.
- @Index: 데이터베이스 인덱스를 설정할 때 사용하며, 테이블의 검색 성능을 향상시킵니다.
- @Query: 리포지토리 인터페이스에서 직접 쿼리를 작성하여 엔티티를 검색할 때 사용합니다.
5. Lombok 관련
- @ToString: 클래스의 모든 필드를 포함하는
toString()
메서드를 자동으로 생성합니다.
- @Getter, @Setter: 각 필드에 대한 getter와 setter 메서드를 자동으로 생성합니다.
- @ToString.Exclude:
toString()
메서드에서 특정 필드를 제외할 때 사용합니다.
- @Contract: 코드의 예상 동작을 문서화할 수 있는 어노테이션으로, 메서드의 계약을 명시합니다.
6. Override 관련
- @Override: 상위 클래스나 인터페이스의 메서드를 재정의할 때 사용합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. Spring Framework 관련 어노테이션
- @RestController:
@Controller
와 @ResponseBody
의 조합으로, RESTful 웹 서비스를 구현하는 컨트롤러임을 나타냅니다.
- @RequestMapping: 모든 HTTP 메서드(GET, POST, PUT, DELETE 등)에 매핑할 수 있는 어노테이션입니다. 클래스 또는 메서드 레벨에서 사용 가능합니다.
- @Component: 스프링 컨테이너에 등록되는 일반 빈을 정의할 때 사용하며,
@Service
, @Repository
, @Controller
와 같은 어노테이션의 부모 클래스입니다.
- @Repository: 데이터 액세스 계층(DAO)을 나타내는 어노테이션으로, 데이터베이스 관련 예외를
DataAccessException
으로 변환합니다.
- @RequestBody: HTTP 요청 본문을 자바 객체로 변환하고자 할 때 사용됩니다. 주로 JSON 데이터를 받아올 때 사용됩니다.
- @ResponseStatus: 컨트롤러 메서드가 특정 HTTP 상태 코드를 반환하도록 지정합니다. 예:
@ResponseStatus(HttpStatus.NOT_FOUND)
.
- @ExceptionHandler: 특정 예외가 발생할 때 이를 처리하는 메서드를 지정하는 어노테이션입니다.
- @CrossOrigin: CORS(Cross-Origin Resource Sharing)를 허용하도록 설정하는 어노테이션입니다.
2. JPA 관련 어노테이션
- @Transient: 데이터베이스에 매핑하지 않을 필드를 나타냅니다.
- @Enumerated: Enum 타입 필드를 데이터베이스 컬럼에 매핑할 때 사용합니다.
EnumType.ORDINAL
과 EnumType.STRING
중 하나로 지정할 수 있습니다.
- @Lob: 데이터베이스에 큰 객체(텍스트 또는 바이너리 데이터)를 저장할 때 사용됩니다.
- @Temporal: 날짜와 시간을 매핑할 때 사용합니다.
TemporalType.DATE
, TemporalType.TIME
, TemporalType.TIMESTAMP
중 하나로 지정할 수 있습니다.
- @ElementCollection: 기본 엔티티에 포함된 컬렉션 필드를 매핑할 때 사용합니다.
- @Embeddable / @Embedded:
@Embeddable
은 임베디드 타입을 정의할 때, @Embedded
는 엔티티에 임베디드 타입을 포함시킬 때 사용됩니다.
- @OrderBy: 컬렉션 필드를 정렬할 때 사용됩니다. 예:
@OrderBy("name ASC")
.
3. Validation 관련 어노테이션
- @NotNull, @NotEmpty, @NotBlank:
- @NotNull: 필드가
null
이 아니어야 합니다.
- @NotEmpty: 문자열, 컬렉션, 맵 또는 배열이
null
이 아니고 비어 있지 않아야 합니다.
- @NotBlank: 문자열이
null
이 아니고 공백이 아닌 문자를 포함해야 합니다.
- @Size: 문자열, 컬렉션, 배열 또는 맵의 크기를 제한할 때 사용합니다. 예:
@Size(min = 1, max = 100)
.
- @Min, @Max: 숫자 필드의 최소, 최대 값을 지정할 때 사용됩니다. 예:
@Min(1)
, @Max(100)
.
- @Pattern: 문자열 필드의 값이 특정 정규 표현식과 일치하는지 검증할 때 사용합니다. 예:
@Pattern(regexp = "^[a-zA-Z0-9]+$")
.
- @Valid: 객체의 유효성 검증을 트리거하는 어노테이션입니다. 컨트롤러 메서드의 매개변수에 적용하여 내부 필드의 유효성을 검증합니다.