공부하면서 어노테이션 설명 정리

한동훈·2022년 10월 26일
0

개인적인 공부

목록 보기
6/6

@RestController
컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다. 예전에는 @ResponseBody를 각 메소드마다 선언했던 것을 한번에 사용할 수 있게 해준다고 생각하면 됩니다.

@GetMapping
HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다.예전에는 @RequestMapping(method=RequestMethod.GET)으로 사용되었습니다. 이제 이 프로젝트는 /hello로 요청이 오면 문자열 hello를 반환하는 기능을 가지게 되었습니다.

@RunWith(SpringRunner.class)
테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
즉, 스프링 부트 테스트와 JUnit사이에 연결자 역할을 합니다.

@WebMvcTest
여러 스프링 테스트 어노테이션 중, Web(Spring Mvc)에 집중할 수 있는 어노테이션입니다.
선언할 경우 @Controller, @ControllerAdvice등을 사용할 수 있습니다.
단, @Service, @Component, @Repository등은 사용할 수 없습니다.
여기서는 컨트롤러만 사용하기 때문에 선언합니다.

@Autowired
스프링이 관리하는 빈(Bean)을 주입 받습니다.

private MockMvc mvc
웹 API를 테스트할 때 사용합니다
스프링 MVC테스트의 시작점입니다.
이 클래스를 통해 HTTP GET,POST등에 대한 API테스트를 할 수 있습니다.

mvc.perform(get("/hello"))
MockMvc를 통해 /hello 주소로 HTTP GET 요청을 합니다.
체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언할 수 있습니다.

.andExpect(status().isOk())
mvc.perform의 결과를 검증합니다.
HTTP Header의 Status를 검증합니다.
우리가 흔히 알고 있는 200,404,500등의 상태를 검증합니다.
여기선 OK 즉, 200인지 아닌지를 검증합니다.

.andExpect(content().string(hello))
mvc.perform의 결과를 검증합니다.
응답 본문의 내용을 검증합니다.
Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증합니다.

@Getter
선언된 모든 필드의 get 메소드를 생성해 줍니다.

@RequiredArgsConstructor
선언된 모든 final필드가 포함된 생성자를 생성해 줍니다.
final이 없는 필드는 생성자에 포함되지 않습니다.

@assertThat
assertj라는 테스트 검증 라이브러리리의 검증 메소드입니다.
검증하고 싶은 대상을 메소드 인자로 받습니다.
메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있습니다.

@isEqualTo
assertj의 동등 비교 메소드입니다
assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공입니다.

@RequestParam
외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.
여기서는 외부에서 name(@RequestParam("name"))이란 이름으로 넘긴 파라미터를 메소드 파라미터 name(String name)에 저장하게 됩니다.

param
API 테스트할떄 사용될 요청 파라미터를 설정합니다.
단, 값은 String만 허용됩니다.
그래서 숫자/날짜 등의 데이터도 등록할 때는 문자열로 변경해야만 가능합니다.

jsonPath
JSON 응답값을 필드별로 검증할 수 있는 메소드입니다.
$를 기준으로 필드명을 명시합니다.
여기서는 name과 amount를 검증하니 $.name, $.amount로 검증합니다.

spring-boot-starter-data-jpa
스프링 부트용 Spring Data Jpa 추상화 라이브러리입니다.
스프링 부트 버전에 맞춰 자동으로 JPA관련 라이브러리들의 버전을 관리해 줍니다.

h2
인메모리 관계형 데이터베이스입니다.
별도의 설치가 필요 없이 프로젝트 의존성만으로 관리할 수 있습니다.

@Entity
테이블과 링크될 클래스임을 나타냅니다.
기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭합니다.
ex) SalesManager.java -> sales_manager table

@Id
해당 테이블의 PK필드를 나타냅니다.

@GeneratedValue
PK의 생성 규칙을 나타냅니다.
스프링 부트2.0에서는 GenerationType.IDENTITY옵션을 추가해야만 auto_increment가 됩니다.

@Column
테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 칼럼이 됩니다.
사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용합니다.
ex, 문자열의 경우 VARCHAR(255)가 기본값인데, 사이즈를 500으로 느리고 싶거나, 타입을 TEXT로 변경하고 싶거나 등의 경우에 사용됩니다.

@NoArgsConstructor
기본 생성자 자동 추가
public Posts(){}와 같은 효과

@Builder
해당 클래스의 빌더 패턴 클래스를 생성
생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함

@After
Junit에서 단위 테스트가 끝날 때마다 수행되는 메소드를 지정
보통은 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용합니다
여러 테스트가 동시에 수행되면 테스트용 데이터베이스인 H2에 데이터가 그대로 남아 있어 다음 테스트 실행 시 테스트가 실패할 수 있습니다.

@Enumerated(EnumType.STRING)
JPA로 데이터베이스로 저장할 떄 Enum 값을 어떤 형태로 저장할지를 결정합니다.
기본적으로는 int로 된 숫자가 저장됩니다.
숫자로 저장되면 데이터베이스로 확인할 때 그 값이 무슨 코드를 의미하는지 알 수가 없습니다.
그래서 문자열(EnumType.STRING)로 저장될 수 있도록 선언합니다.

@EnableWebSecurity
Spring Security 설정들을 활성화시켜 줍니다.

csrf().disable().headers().frameOptions().disable()
- h2 console 화면을 사용하기 위해 해당 옵션들을 disable합니다.

authorizeRequests
- URL 별 권한 관리를 설정하는 옵션의 시작점입니다.
- authorizeRequests가 선언되어야만 antMatchers 옵션을 사용할 수 있습니다.

antMatchers
- 권한 관리 대상을 지정하는 옵션입니다.
- URl, HTTP메소드별로 관리가 가능합니다.
- "/"등 지정된 URL들은 permitAll()옵션을 통해 전체 열람 권한을 주었습니다.
- "/api/v1/**" 주소를 가진 API는 USER권한을 가진 사람만 가능하도록 했습니다.

anyRequest
- 설정된 값들 이외 나머지 URL들을 나타냅니다.
- authenticated()을 추가하여 나머지 URL들은 모두 인증된 사용자들에게 만 허용하게 합니다.
- 인증된 사용자 즉, 로그인한 사용자들을 이야기합니다.

logout().logoutSuccessUrl("/")
-로그아웃 기능에 대한 여러 설정의 진입점입니다.
- 로그아웃 성공시/주소로 이동합니다.

oauth2Login
- Oauth2로그인 기능에 대한 여러 설정의 진입점입니다.

userInfoEndpoint
- OAuth2로그인 성공 이후 사용자 정보를 가져올 때의 설정들을 담당합니다.

userService
- 소셜 로그인 성공시 후속 조치를 진행할 UserService인터페이스의 구현체를 등록합니다.

profile
돌덩이

0개의 댓글