본문 바로가기

Study/JSP

[JSP]자바빈(JavaBean) - 이클립스와 MySQL 연결

자바빈(JavaBean)

자바빈(JavaBean)은 관련된 데이터들을 하나의 클래스에 설계하여 한번에 사용하게 해 주는 객체다. 한 소스코드에 html, css, jsp 등이 모두 같이 있으면 너무 복잡해지고, 웹 디자이너의 경우 jsp를 모를 수 있기 때문에 코드를 잘못 건드릴 위험이 생긴다. 그런 비즈니스 로직 부분과 디자인 부분을 분리하게 해 주는 것이 바로 자바빈이다.

 

자바빈은 클래스를 쓰기 때문에 java 페이지로 만든다. 자바빈을 사용할 때 지켜야 하는 설계 규약은 다음과 같다.

1. 기본 패키지(default)를 제외한 특정 패키지 내에 생성한다.

2. 기본 생성자가 있어야 한다.

3. 필드(멤버 변수)는 private로 생성한다.

4. 필드에 접근하기 위한 public getter/setter 메서드가 있어야 한다.

package javabean;

public class JavaBean {

	private String id;
	private String pass;    //필드

//기본 생성자 자동 생성 및 getter/setter 메서드 선언
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPass() {
		return id;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
}

 

자바빈 객체는 jsp 페이지에서 2가지 방법으로 호출하여 사용한다. 첫 번째는 자바빈 클래스의 인스턴스를 생성하여 set 메서드를 사용하는 방법이다.

<!-- beanForm.jsp 페이지 -->

<form action="beanPro.jsp" method="post">
	아이디 : <input type="text" name="id">
	비밀번호 : <input type="password" name="pass">
	<input type="submit" value="전송">
</form>



<!-- beanPro.jsp 페이지 -->

<%
JavaBean jb = new JavaBean();

jb.setId(request.getParameter("id"));
jb.setPass(request.getParameter("pass"));
%>

이 방법을 사용하여 필드에 정보를 저장하면, set 메서드로 하나하나 전부 넣어야 하기 때문에 매우 귀찮고 긴 코드가 된다. 그래서 두 번째로 좀 더 간편하게 액션태그를 이용하는 방법이 있다.

액션태그를 이용할 때도 인스턴스 생성이 먼저다. <jsp:useBean id="인스턴스명" class="클래스명"/> 식으로 작성하는데, 클래스의 상위 패키지도 적어야 한다. 다음으로 파라미터값 세팅은 <jsp:setProperty property="필드명" name="인스턴스명" param="파라미터명"/> 이다. 만약 필드명과 파라미터명이 같으면 param을 생략해도 되고, 모든 필드에 정보를 저장할 경우 필드명 대신 *를 넣을 수 있다. 마지막으로 정보를 출력할 땐 <jsp:getProperty property="필드명" name="인스턴스명"/> 으로 작성한다.

<!-- beanPro.jsp 페이지 -->

<jsp:useBean id="jb" class="javabean.JavaBean"/>    <!-- 인스턴스 생성 -->
<jsp:setProperty property="*" name="jb"/>    <!-- 모든 필드(id,pass)에 정보 저장, param 생략 -->

<jsp:getProperty property="id" name="jb"/>
<jsp:getProperty property="pass" name="jb"/>    <!-- 정보 출력 -->

 

액션태그로 자바빈을 사용하면 html 코드를 해치지 않으면서 코드를 직관적으로 만들 수 있다. 이런 자바빈 객체를 JDBC로 DB에 접근할 때 사용하면 작업이 수월해진다. 이전에 Form 페이지에서 입력값을 넘기면 Pro 페이지에서 파라미터로 받고, DB를 연결하고, SQL문에 파라미터값을 포함시켜 DB 데이터를 수정하거나 조회하는 과정이 계속 반복됐었다. 그래서 애초에 필요한 과정들을 아예 자바빈 객체에 미리 담아놓자는 것이다.

 

DTO(Data Transfer Object) / DAO(Data Access Object)

위의 코드처럼 DB에 넘길 데이터들을 한 번에 저장하기 위해 객체 내의 필드로 선언해놓은 클래스를 memberDTO (또는 memberVO, memberBean) 라고 하고 DB와 관련된 동작(메서드)들을 정의해놓은 클래스를 memberDAO 라고 부른다. 로그인과 회원가입을 예로 들면 DTO 객체에 아이디, 비밀번호, 이름, 나이, 성별, 이메일, 가입일 정보가 들어가고, DAO 객체에 DB 연결, 연결 해제, 로그인, 회원가입 메서드가 들어간다.

 

로그인과 회원가입 예시

자바빈 객체를 사용하여 로그인과 회원가입 동작을 진행하기 전에, 일단 데이터가 들어갈 테이블이 필요하기 때문에 MySQL Workbench에서 member 테이블을 생성한다.

그리고 memberBean(DTO) 객체에 필드 정보를 저장한다.

다음으로 memberDTO 객체에 DB 연결/해제 메서드, 로그인과 회원가입 메서드를 정의한다. DB연결만 하고 해제를 하지 않으면 사용한 자원이 반환되지 못해 시스템 부하가 일어나거나, 다른 곳에 할당할 자원이 없을 수 있다. 자원을 해제할 때는 연결 시 작성했던 코드의 역순으로 해제한다. 또한 try ~ catch 구문으로 예외 처리를 해줘야, 혹시 예외 상황이 발생해도 시스템이 정상적으로 종료될 수 있다.

아래 회원가입과 로그인 코드에서는 finally 구문에 DB연결 해제 메서드를 작성하여, 문제가 생겨도 자원은 꼭 해제될 수 있게 만들어준다.

참고로 로그인 메서드에서 result를 -1, 0, 1로 설정한 것은 단순히 서로 구분하기 위한 임의의 방식이다.

 

이제 Form 페이지와 Pro 페이지를 생성하여 코드를 작성한다.

여기서 regdate 값은 현재시간이어야 하기 때문에 따로 저장해준다.

로그인 시 아까 구분해놨던 result 값을 판단하여 해당하는 결과를 보여주게 된다.