1. DAO : 데이터 접근하기 위한 객체 (Data Access Object)
2. 데이터 CRUD 위해 사용
3. DB 테이블당 한개씩 작성
로그인컨트롤러에서 id,pwd를 UserDao에 주면, UserDao에서selectUser 로 DB(user_info)에 있는지 확인하고
UserDao가 User정보를 돌려주면, id,pwd가 일치하는지 확인할 수 있다.
* 컨트롤러가 직접 DB에 접근할 수 있다.
그러면 DB접근 메서드 (selectUser, insertUser,updateUser..등을 모든 컨트롤러가 다 가지고 있어야 한다.
--> 중복 발생 !
중복제거 -> 분리 -> DAO작성
DAO는 테이블 다루는 메서드를 가지고 있다.
분리의 세가지 1.관심사 2.변하는것과 변하지 않는것 3. 중복 에서
1. 관심사 -> data 보여주는계층 (Presentation Layer - 컨트롤러) 와 data 접근계층(DAO)
3. 중복 -> 컨트롤러가 데이터 접근 메서드를 가지고 있는것이 중복됨 - > 분리
두가지 경우에 해당한다.
UserDaoImpl -> UserDao 인터페이스
만드는 이유 : 데이터베이스가 달라지면 UserDao를 바꿔야함. 근데 인터페이스를 만들면 변경 후에도 Dao 변경 없이 그냥 사용 가능
Impl을 사용하도록 해놓고 실제 구현체만 바꾸면 된다. 실제 Datasource는 우리가 필요한것을 빈으로 등록만 해놓으면 됨
실제 구현체에서는 impl사용이 아니고 @AutoWired / UserDao userdao; 라고 해서 사용하면 된다. --> 컨트롤러에 적용할때
테스트를 만들었을 때는 (userdaoimpl 에서 우클릭 ->goto-> test)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
이걸 맨 위에 적어주어서 가져올 데이터소스를 가져온다.
그 다음에 주입 @AutoWired UserDao userdao; 작성
그러면 @AutoWired에 빨간줄이 뜨는데
userDaoImpl을 component로 등록해주어야 한다. (자동으로 bean등록)
그런데 보통 @Repository 사용함.
@Component -> @Controller, @Repository, @Service, @ControllerAdvice 가 있는데 컴포넌트 스캔에 의해서 자동으로 가능한 애너테이션들이다.
그다음 UserDaoImpl에서 테스트 코드를 작성하고 그 테스트만 돌려본다.
에러나는 이유 : root-context.xml을 사용하기 때문
root-context.xml에 들어가서
이렇게 변경해주면 된다/
그럼 UserDaoImplTest에 빨간줄 없어짐
updateUser를 테스트 해보면
성공
이제 내가 작성한 UserDao를 컨트롤러에 적용해본다.
깃허브의 LoginController, RegisterController, UserValidator클래스 가져와서 저장하기.
(@Valid 사용 위해서 maven repository 에서 bean validation api 다운받고 dependency를 pom에 추가하고 update하기 )
깃허브의 loginForm.jsp, index.jsp, registerForm.jsp, registerInfo.jsp -> views 아래에 만들기
깃허브의 menu.css -> Webapp 아래 resources 우클릭 -> new Directory 로 css 폴더 만들고 저장
그 후 LoginController에 적용해본다. 아래 두 가지를 수정해준다.
그 다음 RegisterController를 수정해준다.
이렇게 하면 되는데 그냥 깔끔하게 수정하면
에러가 있을때만 가입정보를 저장하고,
실패가 아니면 info보여주고
에러가 있거나 fail시에는 form보여주어 에러를 보여준다.
그럼 이제 확인해보는데 ( 서버 돌려보기)
login/login 입력