일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 세션
- Spring Batch
- 미션
- CircuitBreaker
- Paging
- 스프링 부트
- 레벨2
- REDIS
- AWS
- 코드리뷰
- 자바
- 백준
- 우아한테크코스
- MSA
- 프로그래머스
- JUnit5
- 우아한세미나
- HTTP
- Docker
- AOP
- JPA
- 스프링부트
- 우테코
- 트랜잭션
- 서블릿
- mock
- Level2
- 프리코스
- 의존성
- yml
Archives
- Today
- Total
늘
레벨2 - 체스 본문
728x90
1. 의존성 주입 방법
- setter를 통한 주입
- 생성자를 통합 주입
- 필드를 통한 주입
스프링 공식 문서에서도 생성자를 통한 주입을 추천한다고 한다.
생성자를 통한 장점으로는 아래와 같다.
- setter를 통한 주입과 달리 필드에 final을 선언해줄 수 있고 불변으로 만들 수 있다는 장점이 있다.
- 결합도를 낮춰 테스트 코드 작성에 용이해지는 장점이 있고 null을 주입하지 않는 한 NPE가 발생하지 않도록 보장해준다.
- 순환 참조가 발생하면 애플리케이션 실행 시 미리 알려주기 때문에 예방할 수 있다.
- 왜냐하면 생성자 주입 방식은 객체가 생성되고 필요한 빈을 빈팩토리에서 생성해서 생성자를 찾아 주입하기 때문이다. 반면에 다른 2가지 방법들은 빈이 먼저 생성된 이후에 객체가 생성되고 주입이 되기 때문에 빈을 생성하는 시점에서는 미리 알 수가 없다. 즉, 빈 생성 시기가 다르기 때문이다.
2. 응답데이터엔 패스워드를 담지 말자
https://github.com/woowacourse/jwp-chess/pull/467#discussion_r862273670
비밀번호 검증은 서버에서 해주셔요. 방 비밀번호가 responseDto(응답)에 추가되고 그 응답 데이터를 기반으로 패스워드를 검증한다고 하신 거 같은데 이러면 이미 비밀번호가 노출이 되었기 때문에 비교가 의미가 없습니다
비밀번호 검증에 대해서 저는 서버에서도 검증하고 프론트에서도 검증해주려고 생각했다. 하지만 프론트에 로우한 비밀번호를 준다면 비밀번호가 노출될 이유가 있다! 따라서 검증은 서버에서만 해주고 발생한 에러에 대한 메시지만 프론트에서 처리해주면 된다.
Controller
@PostMapping("/new")
public ResponseEntity<Void> createGame(@RequestBody RoomRequest.TitleAndPassword request) {
Long id = roomService.createRoom(request.getTitle(), request.getPassword());
return ResponseEntity.created(URI.create("/room/" + id)).build();
}
JS
function createRoom() {
let title = document.getElementById("title").value;
let password = document.getElementById("password").value;
const request = {
title: title,
password: password
};
fetch('/api/chess/new', {
method: 'post',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(request)
}).then((response) => {
if (!response.ok) {
throw response
}
window.alert("방 생성에 성공했습니다.");
window.location.href = response.headers.get("Location");
}).catch(error => {
error.text().then(msg => alert(msg))
});
}
728x90
'우아한테크코스 4기 > 코드리뷰' 카테고리의 다른 글
[레벨2] 지하철 경로 (0) | 2022.05.28 |
---|---|
레벨2 - 지하철 노선도 (0) | 2022.05.16 |
[4주차] 체스 - level1 마지막 미션 (0) | 2022.04.08 |
[3주차] 블랙잭 (0) | 2022.03.18 |
[2주차] 로또 (0) | 2022.03.08 |
Comments