일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코테관련공부
- oracle vm virtualbox
- javascript
- Spring
- react
- Disk추가
- SpringBoot개발환경
- html템플릿
- insert안됨
- EaaS
- Github
- 코딩애플
- Linux
- Biling and Cost Manager
- OracleVMVirtualBox
- linux Xshell
- java.sql.SQLException: Incorrect string value: #RDS #AWS #mariadb #springboot
- 명령어 모음
- Push
- 구성파일
- GiyHub
- VSCode
- VSCode업로드
- Function
- react-dom
- 사용자 권한 부여
- 공동작업자
- AWS #AWS장단점 #AWS차별화 # AWS서비스
- aws
- 편집모드
- Today
- Total
귀농 전까지 쓰는 개발 일지
<Spring> Annotation 정리 본문
@PostConstruct
패키지 이름 변경
javax.annotation.PostConstruct -> jakarta.annotation.PostConstruct
@Controller
스프링이 해당 클래스를 컨트롤러로 지정함 (웹 애플리케이션에서 요청을 처리하기 위한 메소드들 작성)
@GetMapping
HTTP GET 요청 처리, 메소드에서 처리할 URL 패턴 지정 가능
@GetMapping("/hello")
@ResponseBody
컨트롤러 메소드가 반환하는 데이터를 HTTP 응답 본문으로 전송하기 위한 어노테이션
@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, World!";
}
* 객체 반환시 JSON or XML 형태로 변환됨
@RequestParam
HTTP 요청 파라미터를 컨트롤러 메소드의 매개변수로 전달하기 위한 어노테이션
@GetMapping("/search")
public String search(@RequestParam("query") String query) {
...
}
* 필수 파라미터 여부, 기본값, 데이터 타입 등 설정 가능
@Test
JUnit 테스트를 실행하기 위한 어노테이션
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class MyTest {
@Test
public void myTest() {
...
}
}
* @Test(expected = Exception.class) 과 같이 해당 테스트 메소드가 지정한 예외를 발생시켜야 성공하는지도 검증 가능
@AfterEach
테스트 메소드 중 하나가 실행된 후 특정 동작을 수행하도록 지정 (==후 처리)
매개변수가 없으며 리턴타입도 void로 지정
@AfterEach
public void afterEach(){
//테스트 끝날떄마다 repository 초기화
repository.clearStore();
}
*JUnit4: @After
JUnit5: @AfterEach
@Autowired
의존성 주입(Dependency Injection)위해 사용, Spring이 자동으로 해당 타입의 빈을 찾아 주입
Ex) Service 객체를 주입받는 Controller 클래스 작성시, Controller 클래스 객체 생성시 자동으로 Service 객체를 생성하여 주입해줌
*생성자가 1개만 있을시 생략가능
@Component
해당 클래스가 Spring의 IoC 컨테이너에 빈으로 등록됨을 나타냄, 클래스를 스캔하여 자동으로 빈 등록
Ex) MemberService클래스 등록시 빈 이름은 memberService가 됨
* @Service @Repository @Controller는 @Component 기능을 상속받음
@Bean
정형화 되지 않거나 구현 클래스를 변경해야 한다면 자바코드를 통해 Spring Bean으로 등록함
*@Qualifier로 빈 이름 지정 가능
@Configuration
Configuation 클래스 (여러 빈을 생성하고 구성하는 역할)를 정의함
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
}
* @Profile 사용하여 환경별로 다른 빈 설정 가능
@SpringBootTest
스프링 컨테이너와 테스트를 함께 실행한다. Spring Boot 애플리케이션의 전체 구성을 로드하여 실제 실행되는 애플리케이션과 동일한 환경에서 테스트 수행이 가능함
@Transactional
데이터베이스 트랜잭션 범위를 설정함, 격리 수준/제한시간/롤백 조건등 지정 가능
Ex) 테스트 케이스에 존재시, 테스트 시작 전 트랜잭션을 시작하고 완료 후 항상 롤백 (DB에 데이터가 남지 않음)
*JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 함
@Aspect
AOP (Aspect Oriented Programming: 프로그램의 횡단 관심사를 모듈화 하여 코드의 중복을 줄이고 유지 보수성을 높히기 위함) 모듈에서 사용.
*@Before @After @Around등을 통해 메소드 호출 전/후 예외발생 시점등의 횡단 관심사에 대한 처리를 구현할 수 있음
@Around
AOP 횡단 관심사를 처리하기 위한 로직, 메소드 실행 전과 후에 처리해야 할 로직을 포함함
* ProceedingJoinPoint 객체를 받아 proceed()메소드를 호출하여 해당 메소드를 실행 함
@Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs + "ms");
}
}
} //시간 측정 AOP