Java
Annotation | Detail | ||
@interface |
- 어노테이션 클래스에 선언 - 이 파일을 어노테이션 클래스로 선언 - 해당 클래스명을 가진 어노테이션이 생성되었다고 보면 됨!
|
||
@Target |
- 어노테이션 클래스에 선언 - 이 어노테이션이 위치할 수 있는 곳을 결정한다 - ElementType.PARAMETER의 경우, 메소드의 파라미터로 선언된 객체에서만 사용가능 |
||
@Retention |
- 어노테이션 클래스에 선언 - 이 어노테이션이 어떤 시점까지 유지될 수 있는지 결정한다 - 값 미지정 시 default = RetentionPolicy.CLASS - 종류 = CLASS / RUNTIME / SOURCE
|
||
@Override |
- 오버라이딩하는 메소드에 선언 - 어노테이션이 없는 오버라이딩과의 유일한 차이: 안전장치 (실수방지) |
||
@Aspect |
- Aspect로 사용할 클래스에 선언 - AspectJ에 의해 Aspect로 사용될 것임을 의미 |
||
|
Spring & Spring Boot
Annotation | Detail | |
@SpringBootApplication |
- 프로젝트의 최상위 Application 클래스에 선언 - React의 최상단에서 ReactDOM이 최상위 컴포넌트를 렌더링하는 것을 생각 - @SpringBootApplication이 있는 위치부터 설정을 읽어가므로 프로젝트의 최상단에 위치 - 스프링부트의 자동설정, 스프링Bean읽기와 생성을 모두 자동으로 설정 - 어노테이션이 붙은 클래스의 main 메소드에서 실행하는 SpringApplication.run으로 내장 WAS 실행 |
|
@RestController |
- 컨트롤러 클래스에 선언 - JSON을 반환하는 컨트롤러 생성 - 과거에는 @Controller를 사용 시, JSON를 반환하는 메소드마다 @ResponsBody를 선언해야 했다고 함 |
|
@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping |
- HTTP Method에 매칭되는 메소드에 선언 - for standard Spring MVC controller methods - 과거에는 @RequestMappng(method = RequestMethod.GET)이었다고 함 |
|
@RequestBody @ResponseBody |
- @RequestBody는 메소드의 인자 앞에 선언 |
|
@WebMvcTest |
- 테스트 클래스에 선언 - Web(Spring MVC)에 집중할 수 있는 어노테이션 - 모든 자동설정을 비활성화시키고, MVC테스트에 관련된 설정만 적용한다 - 이를 명시하고, MockMvc를 @Autowired하면 해당 객체를 통해 MVC테스트 가능 - 함께 사용가능: @Controller / @ControllerAdvice / @JsonComponent 등 - 함께 사용불가능: @Service / @Component / @Repository / @SpringBootTest 등 |
|
@Autowired |
- 멤버 필드에 선언 - 스프링 컨테이너가 관리하는 Bean을 주입받도록 한다. |
|
@MockBean @MockBean("덮어쓸 기존 Bean의 이름") |
- 테스트 코드에서, 필요한 인스턴스에 선언 - 기존에 사용되던 Bean의 껍데기만 가져오고, 내부의 구현부는 사용자에게 위임한다. - 해당 Bean의 어떤 메소드 Arguments / Return 을 조작할 수 있다. - MockBean을 선언한 인스턴스의 메소드를 사용하고, thenReturn(개발자 지정 리턴값) 메소드를 체이닝함으로써 반환값을 조작할 수 있다. |
|
MockMvc |
- org.springframework.test.web.servlet.MockMvc - Web Application을 서버에 배포하지 않고도 Web API를 테스트할 수 있음 - 이 클래스를 통해 HTTP GET, POST 등에 대한 테스트 가능 |
|
perform( ) |
- MockMvc 객체의 perfomr( ) 메소드를 이용하여 HTTP Request에 대한 요청 진행 |
|
param( ) |
- import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders - MockMvc 객체의 perform 메소드 안에서, http method 메소드에 체이닝되어 사용 - API 테스트에서 사용될 요청 파라미터를 설정 - String 값만 허용 - 따라서, 숫자/날짜 등의 데이터를 등록할 때 문자열 변환 메소드를 사용 ex) String.valueOf(1000) |
|
jsonPath( ) |
- import static org.springframework.test.web.servlet.result.MockMvcResultMatchers - JSON 응답값을 필드별로 검증할 수 있는 메소드 - $를 기준으로 필드명 명시
|
|
@RequestParam |
- 메소드의 파라미터 부분에 선언 - 외부에서 API를 호출할 때 입력한 쿼리스트링을 가져오는 어노테이션 |
|
@PathVariable |
- 메소드의 파라미터 부분에 선언 - 외부에서 API를 호출할 때 Mapping Annotation에서 지정한 변수를 가져오는 어노테이션 |
|
@Transactional |
- org.springframework.transaction.annotation - 메소드 상단에 선언 - 트랜잭션 기능이 적용된 프록시 객체가 생성 - @Transactional이 포함된 메소드가 호출 될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback - proxy를 사용할 때 반드시 public 메소드에 사용 - (readOnly = true) 옵션을 통해 조회 전용 + 조회 속도의 개선 |
|
Model |
- org.springframework.ui.Model; - 서버 템플릿 엔진에서 사용할 수 있는 객체 저장 - GetMapping이 이루어지는 인덱스 컨트롤러의 라우팅 메소드에서 파라미터로 받고, 템플릿에서 불러오는 이름으로 속성을 추가해주면 된다. - ex) postsService.findAll( ) 에서 가져온 결과를 mustache에 전달하는 매개체
|
|
@Bean / @Component |
- IOC Container에 등록할 자바 객체들에 선언 - @Bean: 개발자가 컨트롤할 수 없는 외부 클래스를 Bean으로 등록할 때
- @Component: 개발자가 컨트롤할 수 있는 클래스(직접 작성한 클래스)를 등록할 때
|
|
|
||
|
Lombok
- AccessLevel.PRIVATE / PROTECTED / PUBLIC / NONE을 사용하여 접근지정자를 설정할 수 있다.
Annotation | Detail |
@Getter / @Setter |
- DTO 클래스에 선언 - 멤버 필드에 개별적으로 선언할 수도 있음 |
@RequiredArgsConstructor |
- 클래스에 선언 - 선언된 모든 final 필드 / @NonNull 필드를 파라미터로 받는 생성자 추가 - final / @NonNull이 없는 필드는 생성자에 포함되지 않음 |
@NoArgsConstructor |
- 클래스에 선언 - 기본 생성자 자동 추가 (public) - public Posts( ) { } 를 자동으로 추가한다고 생각! cf) builder 패턴을 생성하는 @Builder를 생성자에 선언한다면, 기본 생성자가 필요하기에@NoArgsConstructor는 찰떡궁합! |
@Builder |
- 생성자 / 클래스에 선언 - 해당 생성자를 빌더 패턴으로 사용할 수 있도록 빌더 메소드 자동 추가 - 클래스에 선언 시, 모든 멤버 필드에 대해 빌드를 허용하는 문제점 발생! - 생성자에 선언 시, 이 생성자에 포함된 필드만 빌더에 포함된다. |
JUnit & AssertJ
Category |
Annotation | Detail |
JUnit | @RunWith(연결자) |
- 테스트 클래스에 선언 - 테스트 진행 시 JUnit에 내장된 실행자 외에 다른 실행자를 설정가능 - 책에서는 SpringRunner.class 사용 (SpringJUnit4ClassRunner와 동일) - 스프링부트 테스트와 Junit 사이의 연결자 역할 |
JUnit | @Test |
- 테스트 메소드에 선언 - 단위 테스트를 위한 라이브러리 JUnit이므로, 각 테스트가 독립적으로 실행 - @Test마다 객체를 생성하여 내부적으로 실행 |
AssertJ | assertThat |
- assertj라는 테스트 검증 라이브러리의 검증 메소드 - 검증하고 싶은 대상을 메소드 인자로 입력 - 메소드 체이닝 지원 (isEqualTo, ...) |
AssertJ | isEqualTo |
- asserj의 동등 비교 메소드 - assertThat(A).isEqualTo(B)일 때, A == B 이면 성공 |
JUnit | @After |
- JUnit에서 단위 테스트가 끝날 때마다 수행되는 메소드에 선언 - 용도
|
JPA(Java Persistence API)
Annotation | Detail |
@Entity |
- 테이블과 링크될 클래스에 선언 (객체로 사용할 테이블) - 클래스의 카멜케이스를 언더스코어 네이밍으로 하여 테이블을 생성 ex) SalesManager.java -> sales_manager tb |
@Id | - 해당 테이블의 id 필드에 선언 |
@GeneratedValue |
- 해당 필드의 자동 생성 전략을 설정가능 - auto_increment를 위해선 strategy = GenerationType.IDENTITY 인자를 추가해야 함 (boot 2.0 이상)
|
@Column |
- 테이블의 칼럼이 될 멤버 필드에 선언 - 선언하지 않아도 @Entity Class의 필드는 모두 칼럼이 된다 - 선언하면, 기본값 외의 추가 옵션을 설정할 수 있다. ex) 문자열의 경우 VARCHAR(255)의 기본값 사이즈를 바꿀 수 있다. ex) 문자열 기본 타입을 TEXT로 변경할 수 있다. |
@Query("SQL Query") |
- 메소드에 선언 - 필요한 쿼리메소드를 SpringDataJPA에서 제공하지 않을 때, 직접 SQL쿼리를 메소드에 할당할 수 있음
|
@Enumerated( TYPE ) |
- 테이블의 칼럼이 될 멤버 필드에 선언 - Enum 값을 어떤 형태로 저장할지 결정 - 기본 = int로 된 숫자 - 숫자로 저장되면 DB확인 시, 그 값이 어떤 의미인지 알 수 없으므로 @Enumerated(EnumType.STRING)을 애용하자! |
Spring Security
Annotation | Detail |
@EnableWebSecurity + extends WebSecurityConfigureAdapter |
- 보안 설정이 필요한 클래스에 선언 - Spring Security 설정들을 활성화 - 함께 사용 - 인증 / 권한부여 / 로그인, 로그아웃 페이지의 렌더링 등 |
@WithMockUser |
- 모의 사용자가 필요한 테스트 메소드에 선언 - 인증된 모의 사용자 설정 가능 - roles="권한이름" |
<참고>
스프링 부트와 AWS로 혼자 구현하는 웹 서비스_이동욱
https://goddaehee.tistory.com/167
https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링 부트에서 Redis 사용하기 (0) | 2020.05.18 |
---|---|
[spring] 데이터베이스 초기화 및 마이그레이션 (0) | 2020.05.17 |
[spring] 스프링 부트에서 Spring Data JPA 사용하기 (0) | 2020.05.07 |
[spring] 스프링 부트에서 MySQL과 PostgreSQL 사용하기 (0) | 2020.05.06 |
[spring] 스프링 부트에서 JDBC와 In-memory DB 사용하기 (0) | 2020.05.05 |
댓글