관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스를 이용한 회원 관리시스템 구축하기 3 - 회원 관리 member 테이블과 연동하는 DAO 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스를 이용한 회원 관리시스템 구축하기 3 - 회원 관리 member 테이블과 연동하는 DAO

huenuri 2024. 12. 15. 17:08

늦은 점심을 먹고 이제 다시 공부를 시작해보려고 한다. 이번에는 회원 관리 시스템을 만들어보는 실습이 진행되어 있다.


 

 

 

 

 

회원 관리 member 테이블과 연동하는 DAO

이번 장에서 학습할 내용은 데이터베이스에 저장된 데이터를 어떻게 조회할 것인가에 관한 것이다. 이러한 일을 담당하는 클래스를 자바에서는 DAO라고 한다. DAO는 모든 데이터베이스 관련 애플리케이션에서 반드시 존재하는 클래스이다.

DAO(Data Acess Object)는 데이터베이스의 데이터에 접근하기 위한 객체이다. 데이터베이스 레코드의 조회, 추가, 수정, 삭제 역할을 한다. 데이터베이스 접근을 담당하기에 이 클래스에 DAO란 명칭을 붙이게 된 것이다. DAO는 데이터베이스에서 얻은 데이터를 VO에 저장한다.

 

 

 

 

 

member 테이블은 MemberVO 클래스에 매핑되고 테이블 내의 컬럼은 클래스 내의 필드로 매핑된다. 각 필드의 자료형도 컬럼의 데이터 타입에 따라 정해지는데 number로 선언된 컬럼과 연결된 필드는 Integer로 varchar2로 선언된 컬럼과 연결된 필드는 String 형으로 선언해야 한다.

오라클의 number는 수치 데이터를 저장하는 자료형이기 때문에 Integer로 varchar2에는 문자 데이터를 저장하기 때문에 String 형으로 선언한다.

 

회원 정보를 하나의  묶음으로 관리하기 위해 나온 매커니즘이 자바 빈이라고 하였지만 이를 데이터베이스와 접목할 경우에는 VO라고 한다.

회원 관리를 위한 VO 클래스를 구현해보겠다. MemberVO.java 파일로 패키지명은 com.dto로 하겠다.


 

 

 

 

 

 

[직접 해보기] 이클립스에서 회원 정보를 저장하는 VO 클래스 만들기

 

1. 패키지안에 MemberVO 클래스를 만들기


 

 

 

 

2. 클래스에 필드 선언하기

 

필드 앞에 private 접근자를 붙여서 getter, setter로 접근하도록 했다.


 

 

 

 

 

3. getter와 setter 생성하기

 

 

 

 


 

 

 

 

 

4. toString() 메서드 오버라이딩하기

 

 

 

이제 본격적으로 회원 테이블에서 회원 정보를 얻어와 VO에 저장해 보자.

 

 

 

 

8장을 학습하면서 데이터베이스에 접근하기 위해 객체를 여러 번 생성해 왔다. 이렇게 개발하게 되면 전체적인 시스템의 성능이 저하되기 때문에 데이터베이스에 SQL문을 처리하기 위한 클래스는 객체를 매번 생성하지 않고 하나의 객체로도 충분하기 때문에 객체 생성을 여러 번하는 것을 강제로 각기 위한 싱글톤 패턴 형태로 DAO를 만든다.

 

 

 

 

MemberDAO mDao = MemberDAO.getInstance();

 

 

 

 

[직접 해보기] 이클립스에서 회원 테이블을 액세스하는 DAO 클래스 만들기

 

1. 패키지에 MemberDAO 클래스 만들기


 

 

 

 

2. 생성된 클래스에 코드 작성하기

 

여기에 DPCP로 커넥션 객체를 얻어오는 메서드를 추가한다. DAO 클래스는 데이터베이스에 저장된 회원 정보를 새롭게 추가하거나 조회, 수정하는 등의 작업을 위해 커넥션 객체를 자주 얻어와야 하기 때문에 01_dbcp.jsp 페이지의 내용을 하나의 메서드로 정의해 두고 필요할 때마다 이 메서드를 호출해서 사용하도록 하겠다.


 

 

 

 

[직접 해보기] 커넥션을 얻어오는 메서드

 

1. MemberDAO.java 파일에 커넥션을 얻어오는 getConnection() 메서드 추가하기

DAO 클래스를 작성하면서 다양한 클래스들이 사용되기에 이를 위한 import 구문이 필요하다.

 


 

 

코드 설명

  1. import
    • 데이터베이스 연결 및 JNDI(Java Naming and Directory Interface)와 관련된 클래스들을 가져온다.
      • Connection : 데이터베이스 연결을 나타냄
      • Context & InitialContext : JNDI를 통해 리소스를 찾을 때 사용
      • DataSource : 데이터베이스 풀링을 지원하는 객체
  2. private MemberDAO() {}
    • MemberDAO 클래스의 생성자를 private으로 선언하여 외부에서 객체를 생성하지 못하도록 막는다. 이는 싱글톤 패턴의 핵심이다.
  3. private static MemberDAO instance = new MemberDAO();
    • 클래스 내부에 MemberDAO 객체를 하나만 생성한다. 외부에서 이 객체를 공유하도록 보장한다.
  4. public static MemberDAO getInstance()
    • 외부에서 MemberDAO 객체를 가져오는 메서드이다. 항상 동일한 instance를 반환한다.
  5. public Connection getConnection() throws Exception
    • 데이터베이스 연결 객체(Connection)를 반환하는 메서드이다.
    • 구현 흐름
      1. InitialContext를 생성하여 JNDI 초기 컨텍스트를 가져옴
      2. envContext를 통해 환경 설정(java:/comp/env)을 탐색
      3. DataSource를 찾고 데이터베이스 풀링 연결을 설정
      4. DataSource에서 Connection 객체를 반환
  6. return conn
    • 연결된 Connection 객체를 호출자에게 반환한다.

 

 

 

 

2. getConnection 메서드로 커넥션 객체를 얻어내는지 확인하기 위한 페이지 작성하기


 

 

 

 

3. 코드 실행하기

 

두 가지 문제점이 있었다. 하나는 책과 패키지 이름을 다르게 써서 발생한 것이고, 다른 하나는 오타였다. getConnection이라고 써야 하는데 여기서 e를 빠뜨린 것 같다.


 

 

 

4. 코드 다시 수정하기

 

 

이제 잘 출력되고 있다.

 

DAO는 데이터 접근이 목적인 객체이다. 즉, 데이터베이스에 들어있는 데이터를 어떻게 이용할지에 초점을 맞추어 설계하는 클래스이다. 데이터베이스에 저장된 정보를 얻어 오거나 전달하기 위해서 테이블에 저장된 데이터를 VO 객체 단위로 저장해서 사용한다.

데이터베이스에 저장된 회원 정보는 새롭게 추가되거나 조회되고 수정되어야 하는데, 이러한 작업을 모두 DAO 클래스에서 한다. 다음은 이러한 작업을 원활하게 이루어지도록 하기 위한 메서드를 정리해 놓은 표이다.

 


 

 

 

 

학습을 마치고

이번 실습도 쉽지 않았지만 그래도 잘 완수했다. 자바 수업을 들을 때 DAO, DTO가 무엇인지 잘 몰랐었는데 이번에 이 개념을 어느 정도 짚고 넘어갈 수 있게 되었다.

다음 포스트에서는 로그인 인증 처리에 대해서 공부해 보겠다.