09009

[JSP] (1) VO, DAO, 프로젝트 설계 본문

JSP/회원 관리
[JSP] (1) VO, DAO, 프로젝트 설계
09009

member 테이블 생성


회원 정보를 저장하는 VO 클래스 생성

회원 테이블의 정보를 자바에서 얻어와 저장할 공간을 위한 준비과정으로 VO 클래스를 생성해야 한다.

 

이클립스 화면 왼쪽에 임의로 만든 web-study-practice 프로젝트에서 오른쪽 마우스 클릭 - [New - Class] 선택

패키지명 dto, 클래스 이름 MemberVO로 임의로 작성

이제 MemberVO 클래스에 회원 정보를 저장할 필드를 선언해야 한다.

외부에서 필드로 접근하지 못하게 하고 getter, setter로 접근하도록 필드 앞에 private 접근 제한자를 붙여 정의한다.

 

그리고 객체에 저장된 필드 값들을 보기 쉽게 출력하기 위하여 toString() 메서드를 오버라이딩한다.

✍ MemberVO.java

package dto;

public class MemberVO {
	private String name;
	private String userid;
	private String pwd;
	private String email;
	private String phone;
	private int admin;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public int getAdmin() {
		return admin;
	}
	public void setAdmin(int admin) {
		this.admin = admin;
	}
	@Override
	public String toString() {
		return "MemberVO [name=" + name + ", userid=" + userid + ", pwd=" + pwd + ", email=" + email + ", phone="
				+ phone + ", admin=" + admin + "]";
	}

}

DAO 클래스 생성

DAO : 데이터베이스 member 테이블과 연동해서 작업하는 회원 테이블에서 정보를 조회,추가,수정,삭제 작업을 위한 목적으로

만든 클래스

- 패키지명은 dao, 클래스명은 MemberDAO와 같이 임의로 작성

 

DAO는 데이터베이스 데이터를 VO 객체로 얻어오거나 VO 객체에 저장된 값을 데이터베이스에 추가하는 작업을 한다.

이러한 작업은 프로젝트 동안 수없이 많게 이루어질텐데 매번 이러한 작업을 할 때마다 객체를 여러 번 생성하는 것은 전체적인 시스템 성능의 저하를 가져온다.

→ 작업을 할 때마다 객체를 여러 번 생성하는 것보다는 싱글톤 패턴으로 클래스를 설계하는 것이 훨씬 효율적이다.

 

* 싱글톤 참고

 

[Java] Singleton

Singleton "인스턴스가 오로지 단 하나만 존재할 수 있도록 클래스를 설계하는 것" 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만

haaland09009.tistory.com

 

싱글톤 패턴 : 인스턴스가 단 하나만 존재할 수 있도록 클래스를 설계하는 것

데이터베이스에 SQL문을 처리하기 위한 클래스는 객체를 매번 생성하지 않고 하나의 객체로도 충분하다.

그러므로 객체를 여러 번 생성하는 것을 강제로 막게 하는 싱글톤 형태로 DAO 클래스를 설계한다.

 

✍ MemberDAO.java

package dao;

public class MemberDAO {
	// 생성자의 접근 제한자를 private으로 설정하여 다른 클래스에서 절대 인스턴스를 생성하지 못하도록 한다.
	private MemberDAO() {
		
	}
	
	 // 다른 클래스에서 인스턴스를 생성하지 못하도록 하고
	 // 자기 자신만 인스턴스를 생성할 수 있도록 하게 한다.
     // 생성된 인스턴스는 외부에서 접근할 수 없게 private 필드로 선언
	private static MemberDAO instance = new MemberDAO();
	
	// 생성된 인스턴스는 외부에서 수정을 못하도록 하고 값만 얻을 수 있게 한다. - getter 메서드만 생성
	public static MemberDAO getInstance() {
		return instance;
	}
}

싱글톤 패턴이 되기 위한 조건

- 생성자는 private이어야 한다. (생성자를 외부에서 호출하지 못하도록 private으로 설정)

대신 클래스 선언부 내부에서 자신이 객체를 생성한 후 이렇게 생성된 오로지 한 개의 객체를 getInstance() 메서드로 접근하여 사용할 수 있게 한다.

 

- 다른 클래스에서 절대 인스턴스를 생성하지 못하게 하고 자기 자신만 인스턴스를 생성할 수 있도록 설계한다.

 

- 위와 같이 생성된 인스턴스는 외부에서 수정할 수 없게 하고, 값만 얻을 수 있도록 setter는 정의하지 않고

getter 메서드만 정의한다.

 

 

즉, 싱글톤 형태의 클래스 객체를 생성하려면

private 접근 제한자로 생성자를 선언하여 다른 클래스에서 이 싱글톤 클래스에 대한 new 연산자를 사용하지 못하게 한다.

getInstance() 메서드로 클래스 선언부 내부에서 자신이 생성한 객체를 얻어 오게 한다.


회원 테이블에 접근하는 DAO 클래스 생성

package dao;

public class MemberDAO {
	private MemberDAO() {
		
	}
	private static MemberDAO instance = new MemberDAO();
	
	public static MemberDAO getInstance() {
		return instance;
	}
}

 

DAO 클래스는 데이터베이스에 저장된 회원 정보는 새롭게 추가되거나 조회되고 수정하는 등의 작업을 수행하기 위해 커넥션 객체를 자주 얻어와야 한다.

그러므로 DAO 클래스에서 DBCP로 커넥션 객체를 얻어오는 메서드를 아래와 같이 추가해야 한다.

 

DAO 클래스에 커넥션을 얻어오는 메서드 추가

 

✍ MemberDAO.java

package dao;

import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class MemberDAO {
	private MemberDAO() {
		
	}
	private static MemberDAO instance = new MemberDAO();
	
	public static MemberDAO getInstance() {
		return instance;
	}
	
	public Connection getConnection() throws Exception {
		Connection conn = null;
		Context initContext = new InitialContext();
		Context envContext = (Context) initContext.lookup("java:/comp/env");
		DataSource ds = (DataSource) envContext.lookup("jdbc/myoracle");
		conn = ds.getConnection();
		return conn;
	}
}

 

DAO 클래스에 선언한 메서드로 커넥션 객체를 제대로 얻어내는지 테스트

이클립스 화면 왼쪽에 임의로 만든 web-study-practice 프로젝트에서 오른쪽 마우스 클릭 -[New - JSP File] 클릭

→ 02_test.jsp와 같은 파일명을 임의로 작성하여 jsp 페이지 추가하여 아래와 같이 파일 작성

<%@page import="java.sql.Connection"%>
<%@page import="dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	MemberDAO memDao = MemberDAO.getInstance();
	Connection conn = memDao.getConnection();
	out.println("DBCP 연동에 성공하였습니다!");
%>

</body>
</html>

 

02_test.jsp를 실행한 후 아래와 같이 화면이 출력되면 DBCP 연동에 성공한 것이다.

 

DAO는 데이터 접근이 주 목적이다. 

DAO는 데이터베이스에 저장된 정보를 얻어오거나 전달하기 위하여 테이블에 저장된 데이터를 VO 객체 단위로 저장해서 사용한다.

데이터베이스에 저장된 회원 정보는 새롭게 추가되거나 조회되고 수정되어야 한다. 이 작업을 모두 DAO 클래스에서 수행하는 것이다.


 

전체적인 프로젝트 설계

JSP 파일: 사용자가 웹 애플리케이션을 사용할 수 있도록 해주는 화면 설계(뷰) 담당

서블릿 파일: 위와 같이 설계된 JSP에서 입력된 데이터를 얻어와 데이터베이스를 조작할 수 있도록 하게 하는 것

 

member 폴더 : 회원 관리를 위한 JSP 파일을 member라는 폴더를 임의로 생성하여 넣는다.

 

위와 같은 형태로 파일을 작성하여 프로젝트를 설계한다.

'JSP > 회원 관리' 카테고리의 다른 글

[JSP] (4) 회원 가입 - 1  (1) 2023.04.15
[JSP] (3) 로그인 - 2  (0) 2023.04.15
[JSP] (2) 로그인 - 1  (0) 2023.04.15
[JSP] DB를 연동한 회원 관리 시스템  (0) 2023.04.15
[JSP] DBCP 설정  (0) 2023.04.15