티스토리 뷰
스프링 공부하며 공부한 내용을 정리합니다 ···
1. @Controller vs @RestController
- @Controller는 주로 view를 반환하기 위해 사용하지만 @RestController는 Json(xml 등..) 형태로 객체 데이터를 반환합니다. 즉, RestController는 @Controller의 역할에 @Responsebody가 추가된 것입니다.
2. Mockmvc VS TestRestTemplate
두 개 모두 처음 접해 무슨 역할을 하는지 몰랐지만 정리하자면 아래와 같습니다.
- MockMvc는 서버 입장에서 구현한 API를 통해 비즈니스 로직이 문제없이 수행되는지 테스트를 할 수 있다면, TestRestTemplate은 클라이언트 입장에서 RestTemplate을 사용하듯이 테스트를 수행할 수 있습니다.
[출처] TestRestTemplate vs MockMvc
3. JPA란?
- 인터페이스로서 자바 표준 명세서입니다. 따라서 구현체가 필요한데 대표적으로 Hibernate ...등 많이 쓰이는 것들이 있지만 스프링에서는 주로 SpringData JPA라는 모듈을 이용하여 JPA기술을 다룹니다.
4. 어노테이션
@Entity
- 테이블과 링크될 클래스
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 테이블 이름을 매칭 합니다. (가급적이면 Entity 클래스에서 절대 Setter메서드를 만들지 x)
@id
- 해당 테이블의 PK필드를 나타냅니다. ( PK는 Long타입의 Auto_increment 사용하는게 좋다..)
@NoArgsConstructor
- 기본 생성자를 자동 추가합니다.
@Data
- 롬복 어노테이션으로서 Getter, Setter, 기본 생성자 등을 자동으로 적용합니다.
@Getter
- 클래스 내 모든 필드의 Getter메소드를 자동 생성합니다.
@After (Junit4) = @Aftereach (Junit5)
- Junit에서 단위 테스트가 끝날 때마다 수행되는 메서드를 지정합니다.
@Transactional
- Transaction이란 DB에서 상태 변화의 한 주기를 의미하고, @Transactional 어노테이션은 해당 어노테이션이 적용되는 메서드를 하나의 트랙젝션으로 묶어주는 역할을 합니다.
- 아래와 같이 트랙잭션의 개념을 적용한다면 실행 순서를 크게 두 가지 단계로 구분할 수 있고, 이를 어노테이션을 사용하여 간단하게 줄일 수 있습니다.
- (1) Do something.. : 해당 메서드에서 하고자 하는 작업을 실행한 후, 상태를 commit 하는 단계
- (2) rollback(status) : 앞서 Do something을 진행하는 과정에서 에러가 터진 경우 그 전의 상태로 롤백하는 단계
// 1. 트랜잭션 개녕을 적용하지 않은 경우
public void f(){
do something..
}
// 2. 트랜잭션 개녕을 적용한 경우
public void f() {
try {
do something..
} catch (Exception e){
rollback(status);
}
}
// 3. @Transactional을 사용한 경우
@Transactional
public void f() {
do something..
}
@EntityListeners(AuditingEntityListener.class)
- BaseTimeEntity 클래스에 Auditing 기능을 포함시킴
@CreatedDate
- Entity가 생성되어 저장될 때 시간이 저장됨.
@Builder
- 해당 클래스의 빌더 패턴 클래스를 생성
→ 사용시 이점은 전달하고자 하는 변수를 명확히 전달할 수 있습니다.
public class Example{
private String a;
private String b;
}
public Example(String a, String b){
this.a = a;
this.b = b;
}
// #1. 생성자 이용
Example ex = new Example(b, a); // b, a의 위치가 바뀌어도 알기힘듬
// #2. builder 이용
Example ex = Example.builder().a(a).b(b).build(); // 정확하게 명시 가능
5. Spring Web 계층
(1) Web Layer (controllers, exception handlers, filters, view templates ...) → 외부요청과 응답에 대한 전반적인 영역
(2) Service Layer (application services, infrastructure services) → 컨트롤러와 Dao의 중간 영역, 트랜잭션 처리
(3) Repository Layer (repository interfaces - implementations) → DB에 접근하는 영역 (Dao)
(4) Dtos → 계층 간에 데이터 교환을 위한 객체
(5) Domain Model (domain services, entities, value objects) → 비지니스 로직을 처리하는 영역
6. 스프링에서 Bean을 주입받는 방식
- (1) @Autowired (2) setter (3) 생성자
- → 이 중 생성자를 주입받는 방식이 가장 권장됨 ⇒ @RequiredArgsConstructor을 통해서 해결
- @RequiredArgsConstructor : 초기화되지 않은 @final 필드나 @NotNull이 붙은 필드에 생성자를 생성해줌
7. JPA Auditing
- 엔티티에는 데이터의 생성시간과 수정시간을 포함해야 합니다. 따라서 매번 db에 삽입하기 전 날짜 데이터를 생성, 수정하는 코드를 작성해야 했는데 JPA Auditing 기능을 사용하면 여러 테이블에 있는 공통된 날짜, 시간과 관련된 칼럼들을 자동으로 매핑할 수 있습니다.
'Study > Spring' 카테고리의 다른 글
스프링 정리(3) (0) | 2021.08.13 |
---|---|
스프링 정리(2) (0) | 2021.08.08 |
IOC, DI, 컨테이너 (0) | 2021.01.14 |
회원 도메인 개발 (순수 자바코드로) (0) | 2021.01.14 |
좋은 객체 지향 설계의 5원칙 (0) | 2021.01.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구현
- 표 편집
- 프로그래머스 월간코드챌린지
- 투포인터
- 게임이론
- 카카오 2020 인턴십
- 유니온파인드
- 카카오 2021
- 2022 KAKAO BLIND RECRUITMENT
- 2022 카카오 블라인드 코딩테스트
- 트리
- 파싱
- BFS
- 카카오 표 편집
- 2022 카카오블라인드
- 프로그래머스 위클리 9주차
- 누적합
- 동적계획법
- DP
- 카카오 2차코딩테스트
- 위클리 챌린지
- 프로그래머스
- 백준
- 카카오 인턴십
- 2021 카카오 블라인드
- Kakaoblind
- 2020 KAKAO BLIND RECRUITMENT
- 시뮬레이션
- 2021 KAKAO BLIND
- 이분탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함