카테고리 없음

DAO

다름임 2025. 3. 19. 16:12

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 입력