이미지 출처 : https://codevang.tistory.com/258
사용되는 라이브러리
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@SpringBootApplication: 스프링 부트 애플리케이션의 메인 클래스를 지정. 이 애노테이션은 @Configuration, @EnableAutoConfiguration, @ComponentScan을 포함.
@Configuration: 자바 기반의 설정 클래스를 지정.
@ComponentScan: 지정된 패키지에서 스프링 컴포넌트를 스캔.
@EnableAutoConfiguration: 스프링 부트의 자동 설정 기능을 활성화.
사용되는 라이브러리
import org.springframework.web.bind.annotation.RestController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.CrossOrigin;
@RestController: JSON 또는 XML 형태로 직접 응답을 반환하는 컨트롤러 클래스를 지정.
@Controller: 웹 요청을 처리하는 컨트롤러 클래스를 지정. 뷰(View)를 반환.
RestController 예시 참조 : https://kingchan223.tistory.com/57
Controller 예시 참조 : https://develop-log-sj.tistory.com/entry/Spring-Controller-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EA%B3%BC-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%ED%83%80%EC%9E%85
@RequestMapping: 클래스나 메서드에 요청 URL을 매핑.
@GetMapping: HTTP GET 요청을 매핑.
@PostMapping: HTTP POST 요청을 매핑.
@PutMapping: HTTP PUT 요청을 매핑.
@DeleteMapping: HTTP DELETE 요청을 매핑.
@PatchMapping: HTTP PATCH 요청을 매핑.
일반 mapping 예시 참조 : https://cordcat.tistory.com/88
requestmapping 및 crud 예시 참조 : https://velog.io/@zhyun/Spring-Boot-POST-Method-%EC%9A%94%EC%B2%AD-%EB%B0%9B%EA%B8%B0
@RequestParam: 요청 매개변수를 메서드 인수에 매핑.
@PathVariable: URL 경로의 일부를 메서드 인수에 매핑.
@RequestBody: 요청 본문을 메서드 인수에 매핑.
@ResponseBody: 메서드의 반환 값을 HTTP 응답 본문에 매핑.
@RequestHeader: 요청 헤더 값을 메서드 인수에 매핑.
@CrossOrigin: 다른 출처(도메인)에서의 요청을 허용.
사용되는 라이브러리
만약 javax.persistence.이 인식 못하면 jakarta.persistence.으로 변환
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import org.springframework.stereotype.Repository;
@Entity: JPA 엔터티 클래스를 지정.
@Table: 엔터티 클래스와 매핑될 테이블을 지정.
@Id: 엔터티의 기본 키 필드를 지정.
@GeneratedValue: 기본 키 생성 전략을 지정.
@Column: 테이블의 컬럼을 매핑.
GeneratedValue 참조 예제: https://mantaray.tistory.com/101
GeneratedValue 전략 예제: https://velog.io/@junsu1222/%EA%B8%B0%EB%B3%B8-%ED%82%A4-%EB%A7%A4%ED%95%91%EA%B3%BC-GeneratedValue%EC%A0%84%EB%9E%B5%EB%93%A4
@ManyToOne: 다대일 관계를 지정.
@OneToMany: 일대다 관계를 지정.
@ManyToMany: 다대다 관계를 지정.
@OneToOne: 일대일 관계를 지정.
@Repository: 데이터 접근 객체(DAO) 클래스를 지정.
@ManyToOne+@OneToMany 예시 참조 : https://stir.tistory.com/158
@ManyToOne+@OneToMany 기능들 설명 : https://velog.io/@goniieee/JPA-OneToMany-ManyToOne%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0
사용되는 라이브러리
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service: 서비스 클래스(비즈니스 로직을 처리하는 클래스)를 지정.
@Transactional: 메서드나 클래스에 트랜잭션 설정을 적용.
사용되는 라이브러리
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.Conditional;
@Value: 속성 값을 주입하는 데 사용. Spring의 환경 설정이나 프로퍼티 파일에서 값을 읽어와 필드에 주입.
@Value("${property.name}") private String propertyName;
@PropertySource: 외부 프로퍼티 파일을 로드하여 스프링 환경에 추가. 이는 @Configuration 클래스와 함께 사용되며, 다양한 형식의 프로퍼티 파일을 로드 가능.
@PropertySource("classpath:application.properties")
@Bean: 스프링 컨텍스트에 빈을 정의하는 데 사용. @Configuration 클래스의 메서드에 붙여서 사용하며, 메서드의 반환 값을 스프링 빈으로 등록. 이는 스프링이 애플리케이션을 구성하는 방법 중 하나로, 외부 라이브러리의 클래스나 복잡한 초기화가 필요한 클래스의 빈을 정의하는 데 유용.
configuration, bean, component 용도 차이 : https://mangkyu.tistory.com/75
@Scope: 빈의 범위를 지정합니다. 스프링은 다양한 범위를 지원하며, 기본은 싱글톤(singleton). 다른 범위로는 프로토타입(prototype), 요청(request), 세션(session), 애플리케이션(application) 등이 존재.
@Scope("prototype")
@Conditional: 특정 조건에 따라 빈을 정의. @Conditional 어노테이션은 특정 조건 클래스가 참을 반환하는 경우에만 빈을 생성. 이를 통해 애플리케이션의 설정이나 환경에 따라 빈의 생성 여부를 제어.
@Conditional(MyCondition.class)
사용되는 라이브러리
만약 javax.이 인식 못하면 jakarta.으로 변환
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import javax.annotation.Resource;
import javax.inject.Inject;
@Autowired: 의존성을 자동으로 주입. 스프링 컨텍스트에서 적절한 빈을 찾아 필드, 생성자, 또는 메서드에 주입합니다. 이를 통해 의존성 주입을 간편하게 처리할 수 있으며, 필요한 빈이 스프링 컨텍스트에 존재하지 않으면 애플리케이션이 실패.
@Autowired private MyRepository myRepository;
autowire 와 di 예제 : https://mooonstar.tistory.com/entry/SpringDI%EC%99%80-Autowired-%ED%99%95%EC%8B%A4%ED%9E%88-%EC%95%8C%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
@Qualifier: 주입할 빈을 특정. @Autowired와 함께 사용되어 여러 빈 중 하나를 명확하게 지정 가능. 이는 동일한 타입의 여러 빈이 존재할 때 어떤 빈을 주입할지 지정하는 데 유용.
@Autowired @Qualifier("specificBean") private MyService myService;
@Resource: JSR-250의 리소스를 주입합니다. @Autowired와 비슷하지만, 이름으로 빈을 주입하는 데 더 중점을 둡니다. 이 어노테이션은 스프링 빈뿐만 아니라 JNDI 리소스에도 사용.
@Resource(name="myBean") private MyService myService;
@Inject: JSR-330의 의존성을 주입합니다. @Autowired와 유사하게 동작하지만, 자바 표준 어노테이션입니다. 이는 자바 표준 의존성 주입 어노테이션으로, 스프링뿐만 아니라 다른 DI 프레임워크에서도 사용.
@Inject private MyRepository myRepository;
사용되는 라이브러리
만약 javax.이 인식 못하면 jakarta.으로 변환
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Min;
import javax.validation.constraints.Max;
import javax.validation.constraints.Size;
@Valid: 객체의 유효성을 검사하는 데 사용됩니다. 주로 메서드 파라미터 또는 멤버 변수에 붙여서 사용하며, 유효성 검사 애노테이션과 함께 사용됩니다. 스프링 MVC에서 컨트롤러 메서드의 파라미터에 붙여서 요청 데이터를 검증하는 데 자주 사용.
public void process(@Valid MyEntity entity) { ... }
@NotNull: 필드가 null이 아님을 명시. 이는 데이터베이스나 비즈니스 로직에서 필드가 반드시 존재해야 할 때 사용.
@NotNull private String name;
@NotEmpty: 문자열이나 컬렉션이 비어 있지 않음을 명시. null이 아니고, 길이가 0이 아니어야 합니다. 이는 사용자가 입력한 데이터가 비어 있지 않도록 하는 데 유용.
@NotEmpty private List items;
@NotBlank: 문자열이 공백이 아님을 명시. null, 빈 문자열, 공백만 있는 문자열은 유효하지 않음. 이는 사용자가 입력한 문자열이 실제로 유의미한 값을 가지도록 보장.
@NotBlank private String name;
@Min: 필드의 최소값을 지정.
@Max: 필드의 최대값을 지정.
@Size: 문자열이나 컬렉션의 크기를 지정.
사용되는 라이브러리
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.annotation.Async;
@Component: 스프링의 일반적인 컴포넌트를 지정. 서비스, 리포지토리, 컨트롤러와 같이 사용됩니다. 스프링이 자동으로 감지하고 빈으로 등록.
@ControllerAdvice: 전역 예외 처리를 제공.
@ExceptionHandler: 특정 예외를 처리하는 메서드를 지정. @ControllerAdvice나 특정 컨트롤러 내에서 사용.
@ExceptionHandler(NullPointerException.class) public String handleNullPointerException() { return "error"; }
@RestControllerAdvice: 전역 예외 처리를 제공하며 JSON/XML 형태로 응답을 반환.
@Scheduled: 메서드를 일정 시간 간격으로 실행. 주기적인 작업을 실행하는 데 사용.
@Async: 비동기적으로 메서드를 실행하도록 합니다. 비동기 작업을 간편하게 수행.
사용되는 라이브러리
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
@Aspect: @Aspect는 AspectJ 라이브러리에서 제공하는 어노테이션으로, 해당 클래스가 애스펙트(관점)임을 나타냄.
애스펙트는 AOP의 핵심 요소로, 특정 관심사를 모듈화하여 주된 비즈니스 로직과 분리. 예를 들어, 로깅, 보안, 트랜잭션 관리 등을 애스펙트로 구현 가능.
@Pointcut: @Pointcut은 AspectJ에서 제공하는 어노테이션으로, 특정 조인 포인트(Join Point)를 정의.
포인트컷은 어디에서 애스펙트가 적용될지를 결정. 메서드, 클래스, 패키지 등 특정 지점에 적용할 수 있습니다. 포인트컷 표현식을 사용하여 조인 포인트를 선택함.
@Before: @Before는 AspectJ에서 제공하는 어노테이션으로, 지정된 포인트컷의 조인 포인트 전에 실행될 어드바이스(Advice)를 정의.
주로 메서드 호출 전에 실행할 코드를 정의하는 데 사용. 예를 들어, 메서드 호출 전에 로깅하거나 인증을 확인하는 등의 작업을 수행 가능.
@After: @After는 AspectJ에서 제공하는 어노테이션으로, 지정된 포인트컷의 조인 포인트 후에 실행될 어드바이스를 정의.
메서드 실행 후에 실행할 코드를 정의하는 데 사용. 예를 들어, 리소스 정리나 메서드 실행 후 로깅을 수행 가능.
@AfterReturning: @AfterReturning은 AspectJ에서 제공하는 어노테이션으로, 포인트컷의 조인 포인트가 정상적으로 종료된 후 실행될 어드바이스를 정의.
메서드가 성공적으로 반환된 후 실행할 코드를 정의합니다. 반환된 값을 조작하거나 로깅할 때 유용.
@AfterThrowing: @AfterThrowing은 AspectJ에서 제공하는 어노테이션으로, 포인트컷의 조인 포인트가 예외를 던진 후 실행될 어드바이스를 정의.
메서드가 예외를 던진 후 실행할 코드를 정의. 예외 처리나 에러 로깅을 수행할 때 유용.
@Around: @Around는 AspectJ에서 제공하는 어노테이션으로, 포인트컷의 조인 포인트 전후에 실행될 어드바이스를 정의.
메서드 실행 전후에 실행할 코드를 정의. 주로 메서드 실행 시간을 측정하거나 메서드 실행 전후에 추가적인 작업을 수행할 때 사용.