일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- list
- pds
- 머신러닝
- ensemble
- Req
- request
- Intellij
- BS
- 비전공자
- 웹앱
- pandas
- BeautifulSoup
- 자바스크립트
- java
- 정보처리기사필기
- dataframe
- springboot
- javascript
- 백준
- 자바
- regressor
- 정처기
- lombok
- crawling
- sklearn
- 크롤링
- APPEND
- AWS
- 정보처리기사
- SOUP
- Today
- Total
No sweet without sweat
Annotation 정리 본문
2022-06-26
1. Entity
- Entity는 JPA의 어노테이션이며, @Getter, @NoArgsConstrucotr는 롬복의 어노테이션
- 롬복은 코드를 단수화시켜 주지면 필수 어노테이션은 아님
- 그래서 주요 어노테이션 @Entity를 클래스에 가깝게 두고 롬복 어노테이션을 위로
- 이렇게 하면 이후에 코틀린 등의 새 언어 전ㄹ환으로 롬복이 더이상 필요 없을 경우 쉽게 삭제 가능
- Posts 클래스는 보통 Entity 클래스라고도 함
- Entity 클래스를 Request/Response 클래스로 사용해서는 안됨
그리고 꼭 Entity 클래스와 Controller에서 쓸 DTo는 분리해서 사용
그리고 View Layer와 db Layer의 역할 분리를 철저하게 하는게 좋음
@Entity
- 테이블과 링크될 클래스임을 나타냅니다.
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭
EX) SalesManager.java -> slaes_manager table
2. @ Id
- 해당 테이블의 PK 필드를 나타냅니다.
3. @GeneratedValue
- PK의 생성 규칙을 나타냅니다.
- 스프링 부트 2.0 에서는 GenerationType.IDENTIIY 옵션을 추가해야만 auto_increment가 됨
4. @Column
- 테이블의 칼럼을 나타내며 굳이 선언하지 않더라고 해당 클래스의 필드는 모두 칼럼
- 사용하는 이유는, 기본값 외에 추가로 변경이 필요할때, 문자열의 결우 Varchar(255)가 기본값
참고
- 웬만하면 Entity의 PK는 Long 타입의 Auto_incrementㄹㄹ 추천
- 주민등록번호와 같이 비즈니스상 유니크 키나, 여러키를 조합한 복합키로 PK를 잡을 경우 난간함 상황 종종 발생
1) FK를 맺을 때 다른 테이블에서 복합키 전부를 갖고 있거나, 중간 테이블을 하나 더 둬야 하는 상황이 발생
2) 인덱스에 좋은 영향을 끼치지 못합니다.
3) 유니크한 조건이 변경될 경우 PK 전체를 수정해야 하는 일이 밠ㅇ
- 주민등록번호, 복합키 등은 유니크 키로 별도로 추가하시는것을 추천 *
5. @ NoArgsConstructor
- 기본 생성자 자동 추가
- public Posts(){}와 같은 효과
6. @Getter
- 클래스 내 모든 필드의 Getter 메소드를 자동 생성
7. @Builder
- 해당 클래스의 빌더 패턴 클래스를 생성
- 생성자 상단 선언 시 생성자에 포함된 필드만 빌더에 포함함\
- Setter 메소드가 없는데, 언제 어디서 변해야하는지 코드상으로 명확하게 구분할 수가 없어, 차후 기능 변경 시 복잡
그래서 절대 생성 X
8. RequiredArgsConsturctor
- 선언된 모든 final 필드가 포함된 생서자를 생성해 줍니다.
- final이 없는 필드는 생성자에 포함되지 않습니다.
- final 선언된 모든 필드를 인자값으로 하는 생성자 롬복을 대신 생성
-> 생성자를 직접 안쓰고 롬복 어노테이션을 사용하는 이유는 해당 클래스의 의존성 관계가 변경될 떄마다 생성자 코드를 계쏙해서 수정해야하는 번거러움을 해소하기 위해
9. RestController
- 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
- 예전에는 @ResponseBody를 각 메소드마다 선언했던 것을 한번에 사용할 수 있게 해준다고 생각
10. GetMapping
- HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다.
11. @RequestParam
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
- 여기서는 외부에서 name 이란 이름으로 넘긴 파라미터를 메소드 파라미터 name에 저장하게 됨.
12. After
- Junit* */에서 단테가 끝날 때마다 수행되는 메소드를 지정
- 보통은 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용
- 여러 테스트가 통시에 수행되면 테스트용 DB인 H2에 데이터가 그대로 남아 있어 다음 테스트 실행시 실패 할 수 ㅣㅇ씅ㅁ
13. postsRepository.save
- 테이블에 posts에 insert/update 쿼리를 실행
- id 값이 있따면 update, 없으면 insert
14. findAll
- 테이블 posts에 있는 모든 데이터를 조회해오는 메소드
15. @SpringBootTest
- 사용할 경우 H2 DB를 자동으로 실행해줌
16. AssertThat
- assertj라는 테스트 검증 라이브러리의 검증 메소드
- 검증하고 싶은 대상을 메소드 인자로 받습니다.
- 메소드 체이닝이 지원되어 isEquaTo와 같이 메소드를 이어서 사용할 수 있습니다.
* Junit과 비교하여 assertj의 장점
1. CoreMatchers와 달리 추가적으로 라이브러리가 필요하 지 않습니다.
- Junit의 assertThat을 쓰게 되면 is()와 같이 CoreMathcers 라이브러리가 필요합니다.
2. 자동완성이 좀 더 확실하게 지원됩니다.
- IDE에서는 CoreMatchers와 같은 matcher 라이브러리의 자동완성 지원이 약합니다.
17. @RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른ㅅ 맇애자를 실행시킵니다.
- 여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
- 즉 스프링 부트 테스트와 Junit 사이에 연결자 역할을 합니다.
18. @WebMvcTest
- 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 입니다.
- 선언할 경우 @COntroller, @ControllerAdvice 등을 사용할 수 있습니다.
- 단 @Service, @Component, @Repository 등은 사용할 수 없습니다.
- 여기서는 컨트롤러만 사용하기 떄문에 선언
19. @ Autuwired
- 스프링이 관리하는 빈(Bean)을 주입 받습니다.
20. private MockMvc mvc
- 웹 API를 테스트할 때 사용합니다.
- 스프링 MVC 테스트의 시작점입니다.
- 이 클래스를 통해 HTTP GET, POST등에 대한 API 테스트를 할 수 있습니다.
21. mvc.perform(get("/hello"))
- MockMvc를 통해 /hello 주소로 HTTP GET 요청을 합니다.
- 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언할 수 있습니다.
22 .andEXpect(status().isOk())
- mvc.perform의 결과를 검증
- HTTP Header의 Status를 검증
- 우리가 흔히 알고 있는 200, 404, 500 등의 상태 검증
23. param
- API 테스트할 때 사용될 요청 파라미터를 설정
- 단, 값은 String만 허용
- 그래서 숫자/날짜 등의 데이터도 등록할 때는 문자열로 변경해야만 사용 가능
24.jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메소드
- $를 기준으로 필드명을 명시
- 여기서는 name과 amount를 검증하니 $.name, $.amount로 검증
'SpringBoot + AWS 프로젝트' 카테고리의 다른 글
JPA - API를 만들기 (0) | 2022.06.26 |
---|---|
[DAY 5] SpringBoot, AWS로 웹서비스 구현 <롬복 설치> (0) | 2022.04.26 |
[DAY 4] SpringBoot, AWS로 웹서비스 구현 <그 전 코드 롬복으로 전환> (0) | 2022.04.25 |
[DAY 3] SpringBoot, AWS로 웹서비스 구현 <TOD, 단위테스트 차이, API작성> (0) | 2022.04.24 |
[DAY 2] SpringBoot, AWS로 웹서비스 구현 <깃 커밋을 위한 환경 설정> (0) | 2022.04.04 |