"프레젠테이션 계층에서 사용자 요청을 검증한다"에 궁금한 점이 있습니다.
501
작성한 질문수 2
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
- 컨트롤러 계층에서 유저 기본키로 유저의 이메일을 찾아 반환하는 서비스 계층 메서드를 호출한다.
- 반환된 이메일이 새로운 패스워드에 포함되는지 검증한다.
- 포함되지 않았다면 유저의 패스워드를 변경하는 서비스 계층 메서드에 유저의 기본키와 새로운 패스워드를 담아서 호출한다.
- 유저의 패스워드를 변경하는 서비스 계층 메서드에서는 전달받은 유저의 기본키로 유저의 패스워드를 변경한다. 이 때는 패스워드에 유저의 이메일이 포함되어 있는지 검증하지 않는다.
답변 1
2
안녕하세요, 0xe82de 님! 공식 서포터즈 codesweaver 입니다.
제 생각엔 컨트롤러에서 여러 서비스를호출하는 것은 괜찮지만 (말 그대로 흐름을 컨트롤 하는 역할)
검증에 대한 부분을 컨트롤러에서 처리하는것은 좋지 않습니다.
차라리 회원을 관리하는 서비스 객체에 '패스워드 유휴성 체크' 메서드가 있어서 이곳에서 회원 조회와 유효성 검사를 진행하고 이 결과를 boolean으로 받은다음, 다시 '패스워드 변경' 메서드를 호출하는 방법이 어떨가 생각합니다.
컨트롤러 코드가 아래와 비슷한 형태가 될 것 같습니다.
if (memberService.isValidPassword(params)) {
memberService.changePassword(params);
}
유효하지 않은 이메일일 때 오류를 내고 싶다면 아래처럼 될 것 같습니다.
if (!memberService.isValidPassword(params) {
throw new SomeException();
}
memberService.changePassword(params);
return "viewFile";
코드에는 정답은 없고, 필요에 따라 해답이 있을뿐이긴 하지만,
요점은, 컨트롤러는 서비스를 호출하는 것 외에 기능은 갖지 않는것이 좋다고 생각합니다.
감사합니다.
0
답변 감사드립니다! 한 가지 질문이 있습니다.
컨트롤러에서 memberService.isValidPassword(params)로 검증을 하고 통과하면 memberService.changePassword(params) 메서드를 호출할텐데요. 이 때 changePassword 메서드 내부에서 패스워드 유효성을 한 번 더 체크하는 것은 필요가 없을까요?
0
이중체크가 되어 그 부분은 필요하지 않을 것 같습니다.
아니면 컨트롤러에서 changePassword() 하나만 호출하도록 하고,
서비스 내에서 유효성 체크와 변경을 처리하도록 묶는 방법도 있을것 같습니다.
<클린 코드> 에 의하면 예외처리도 기능의 하나 이므로
컨트롤러에서 직접 처리하는 것보단 서비스에 넘기도록 하고,
서비스에서 메서드를 잘 분리하여 가독성 있게 작성하면 어떨까요
spring initialiser 어떤걸 선택해야될지 모르겠어요
0
51
2
트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.
0
62
1
jdbc 학습하다 궁금해서 질문드려요
0
93
1
정상이체와 이체중 예외발생 차이
0
77
2
이번 강의부터가 JDBC 직접 사용 맞나요?
0
97
1
순수한 서비스 계층에 대한 의문???
0
86
2
3_4test, 4test 자동 리소스 안됨
0
62
2
데이터베이스 선택 관련 질문.
0
75
2
after 메서드 사용 유무
0
65
2
데이터베이스 접근 및 DB 락
0
62
1
@SpingBootTest, @TestConfiguration
0
62
1
Read Committed 격리 수준 사용 관련 질문
0
57
1
AopCheck Test 부분의 EnhancerBySpring 확인 법??
0
73
2
커리큘럼 관련 질문
0
80
1
서비서 계층 스프링 프레임워크 사용
0
96
1
validation(toMember)의 위치
0
88
2
데이터 계층에서 서비스 로직의 datasource를 인식하는 방법
0
171
2
member 상수 질문
0
131
2
ctrl + F6 이후로 con 인식이 안 됩니다
0
167
2
DrivenManager 와 Connection 반환에 대한 질문입니다!
0
115
1
섹션5 트랜잭션 템플릿관련 질문(이기종 DB)
0
122
1
세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?
0
105
1
트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?
0
100
1
강의 14분쯤 Exception 질문
0
119
2





