로그인 비즈니스 로직을 원 쿼리로 하지 않는 이유
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. 스프링 MVC 2편 - 섹션6. 로그인 처리1 중 로그인 기능 강의를 수강하다가 구현 방법에 대해 궁금한 점이 생겨 질문 드립니다. 강의 3:49초 부분에서 로그인 핵심 비즈니스 로직을 2단계의 과정으로 나누고 이를 코드로 작성하는 것을 학습했습니다. 입력 받은 loginId와 일치하는 회원 정보가 있는 지 DB에서 조회한다 loginId로 DB에서 조회한 회원 정보의 password와 입력 받은 password를 비교하여, 일치하는 회원 정보를 찾는다 public Member login(String loginId, String password) { return memberRepository.findByLoginId(loginId) .filter(m -> m.getPassword().equals(password)) .orElse(null); } 강의의 로직은 잘 이해하였지만, 일종의 원 쿼리 라고 부르는 방식으로, 한 번에 해결할 수 있을텐데 , 왜 2단계로 나누어 해결하는 지 이유 가 궁금합니다. 강의에서는 메모리를 DB로 사용했지만 일반적인 DB를 사용한다고 가정했을 때, 제가 생각한 방법 은 MemberRepository에 public Optional findByLoginIdAndPassword(String loginId, String password) 메서드를 정의하고 loginId와 password가 모두 일치하는 (AND 조건) 회원 정보가 있으면, 그 회원 정보(Member)를 반환 일치하는 회원 정보가 없으면 null 반환 LoginService에서 리포지토리의 findByLoginIdAndPassword 를 호출하기만 하면 되지않을까 생각했습니다. public Member login(String loginId, String password){ return memberRepository.findByLoginIdAndPassword(loginId, password); } 이렇게 생각한 이유 는 입력한 정보와 일치하는 데이터가 DB에 있는 지 확인하기 위해 어차피 DB에 접근이 필요한 상황이고, 그렇다면 자바에서 루프를 돌면서 비교하는 것보다 DB에서 WHERE 절을 통해 조건을 비교하는 것이 빠르지 않을까 싶어서 입니다. 정답이 있는 건 아니겠지만, 영한님께서 로직을 2단계로 나누어 작성하신 데에는 이유가 있을 것이라 생각해서, 그 이유가 궁금합니다. 저는 SI에서 근무를 했었는데, 비즈니스 로직을 모두 쿼리에 녹여내고, 대부분을 원 쿼리로 해결하는 방식의 개발 방법을 익혔었습니다. 영한님 강의를 들으면서 이게 좋지 않은 방법이란 것을 알게 되었고, 보다 객체지향적으로 설계하고 개발할 수 있도록 노력하고 있습니다. 그래서 로그인 로직에서도 원 쿼리보다는, 강의에서와 같이 2단계로 작성하는 것이 더 좋은 방법인 건지 궁금합니다. 긴 질문 읽어주셔서 감사합니다. ^^
- spring
- mvc
- 로그인
- 원쿼리





