일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 부트
- 백준
- Spring Batch
- 세션
- JPA
- JUnit5
- mock
- HTTP
- yml
- CircuitBreaker
- Docker
- REDIS
- AWS
- 우아한테크코스
- 프로그래머스
- 미션
- 코드리뷰
- 자바
- Paging
- 트랜잭션
- 우테코
- 레벨2
- 프리코스
- Level2
- AOP
- 우아한세미나
- MSA
- 서블릿
- 의존성
- 스프링부트
- Today
- Total
늘
레벨2를 하면서 생각해봤던 내용들 본문
1. static vs bean
utils와 관련되면 static을 사용할 것이다. 어디서든 재사용 가능하고 도메인 로직에 포함이 되지 않는 기능, 상태를 갖지 않는 클래스 ex) 날짜를 스트링포멧으로 변경
즉, 상태를 갖지않고, 외부 자원에 의존하지 않고 단순히 변환하는 일만을 담당하면 bean으로 등록할 필요가 없다.
의존성관계가 맺어지고 의존성이 필요하다면 bean
static 함수 모음 클래스의 모든 함수는 인자가 동일할 경우 항상 동일한 결과를 리턴해야 한다. 이 규칙을 지킬 수 없으면 POJO Bean으로 만들라.
이것이 이뤄지려면 함수 안에서는 외부 자원(Resource)에 대해 하나도 의존하면 안된다는 선결 조건을 충족해야 한다.
싱글톤과 정적 클래스 차이
싱글톤은 인터페이스를 만들수 있어서 다형성 활용가능하다.
출처: http://kwon37xi.egloos.com/4844149 bclid=IwAR3bcsE7eAFI4xCk2kPai3tHU72JOauhS4kWYTEcwzyeHekUj_GNWQ1Cfao
2. service layer에서 dto반환
service layer에서 dto를 반환하면 controller에 도메인을 반환하지 않으므로 도메인에 대한 변경 가능성이 줄어들어서 더 안정적이다.
3. service layer에서 service참조 or repository 참조
service 참조
- 순환 참조가 발생할 가능성이 있다.
- A라는 서비스에서 B라는 서비스를 불러올 때, B의 레포지토리에서 B의 서비스를 만들어줘야하는데 이 때, A서비스를 위한 B서비스가 만들어지는 게 아닌가 라는 생각을 해볼 수도 있다.
- 데이터가 분산되지 않고 관리하기 편할수있다.
Repository 참조
- service -> repo 라는 단방향 계층으로 순환 참조같은 상황을 걱정하지 않아도 된다.
- 여러 서비스에서 데이터를 쉽게 불러올수있어서 유연하다.
- 데이터를 가져오는 로직이 여러 서비스에 분산되어서 관리하기 어려울 수 있다.
4. 스프링쓰는 이유
자바는 JVM이 안정적이다, 많은 회사에서 쓸만큼 대규모, 그리고 노드는 레퍼런스가 많이 없다.
5. IOC 컨테이너에 SOLID원칙
크게 ocp, dip와 관련있다. ocp는 확장에 열려있는 구조로써 ioc컨테이너를 사용하면 인터페이스를 사용하므로 다형성을 확보할수 있기 때문에 ocp와 관련이 있다.
dip는 의존 관계 역전 원칙으로 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다.
6. mock을 사용 이유
+ 명확한 단위 테스트가 가능하다.
+ controller부분만 테스트하고 싶다면 mock을 사용하여 테스트가 가능하다.
- 대신 내부 구조를 들춰내야하는 단점이 있다.
Controller에서만 mock을 사용했다.
controller에서만 mock을 사용했는데 이유는 restDocs를 사용하기 위해서 컨트롤러 테스트가 필요했고, restAsurred로 통합테스트 관점보다는 api문서화가 주 목적이므로 mock을 사용한 단위 테스트를 통해서 문서화를 구현했다. 그렇기 때문에 controller에서 mock을 사용했다.
엄밀히 컨트롤러를 테스트하기 보다는 문서화를 위한 테스트였는데, 이것이 모든 controller에 대해서 테스트한다고 생각하지 않는다.
하지만 컨트롤러가 단순히 외부 요청을 받고 서버에서 처리된 응답을 보내는 역할을 하므로 문서화를 사용한다면 기본적인(정상적인) 요청을 주고 받는 처리가 잘 작동한다고 확신할 수 있다.
7.트랜잭션
트랜잭션이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
DB 트랜잭션과 Applicaiton 트랜잭션중 DB트랜잭션에 의존되어 있어서
실패하면 application에 타임아웃 일어나면 디비에서 에러
트랜잭션과 Synchronized차이
적용되는 위치 차이: tansacional은 디비단에서 사용, file단위 로그를 남겨서 되돌린다.
synchronized는 어플리케이션 단에서 사용하여 느림
'우아한테크코스 4기' 카테고리의 다른 글
[Transactional]Spring 프레임워크는 트랜잭션을 어떻게 구현하였는가? (0) | 2022.07.10 |
---|---|
UX 워크샵 (0) | 2022.07.01 |
level 2 스프링 (0) | 2022.06.10 |
리눅스 명령어와 권한 설정 chmod (0) | 2022.06.01 |
Junit5 테스트 동작 방식과 빈 주입 (0) | 2022.05.10 |