JAVA/JSP

01. 방명록 게시판 만들기 : GuestbookDAO 설정

우아개발자 2023. 12. 26.

DAO란, DAO(Data Transfer Object) 을 줄인 약자로, Service와 DB를 연결하는 역할을 하며, 실제로 DB에 접근하여 data를 삽입, 삭제, 조회 , 수정 CRUD 기능을 수행하는 것을 말합니다. 조금 더 간단히 풀어보면, 데이터의 "객체"라고 표현을 할 수 있는데, 데이터베이스와 관련된 모든 작업을 하는 것이라고 생각하면 됩니다.

이번 실습예제는 방명록 게시판 만들기입니다. 이때까지 각각의 파일에 데이터베이스를 연결하고 호출함을 반복했다면, 이제부터 JSP에서는 XML 파일을 새로 만들기 시작할 것인데요. 각각의 파일의 역할을 정리하며 포스팅을 시작해봅니다.

 

1. 생성할 파일의 목록

지금부터 생성할 파일의 목록들은 아래와 같습니다. 자바 소스 파일에는 패키지 1 (com.kh.dao) 에는, GuestbookDAO.java 파일을, 패키지 2에는 ibatis 패키지로 4개의 파일을 생성할 것인데요. 하나는 MyAppSqlConfig.java 파일을, 그리고 나머지는 xml 파일들과 db 파일들을 생성할 것입니다. 그리고 패키지3에는 insertServcie.java를, 패키지4에는 GuestbookVO.java파일을 생성할 예정입니다.

 

1-1. 생성 파일의 역할

(1) GuestbookDAO : 데이터베이스 연결하는 메서드의 위치

(2) MyAppSqlConfig.java : 데이터베이스에 연결하는 클라이언트의 역할을 합니다. xml 파일을 Java로 읽어올 수 있도록 메모리 공간을 만들어 SqlMapClient 형태로 올라가는 것을 말합니다.

(3) db.properties.xml : 데이터베이스의 드라이버, url, 사용자 인증에 대한 내용을 저장하는 역할을 합니다.

(4) SqlMapConfig.xml : 데이터베이스를 연결하는 getConnection 역할을 의미합니다. 인증 정보를 저장하는 역할을합니다.

2. GuestbookDAO 클래스

DAO클래스는 데이터를 연결하는 메서드의 위치가 저장되어있는 클래스인데, DAO 클래스를 만든 후 설정해줘야할 것은 싱글톤(Singleton) 디자인 패턴을 구현하는 것입니다. 아래와 같이 말이죠.

더보기

싱글톤 패턴의 경우에는 어떠한 클래스가 최대 한 번만 메모리에 인스턴스화되도록 보장하는 디자인 패턴 중 하나인데, 이 패턴을 사용하면 애플리케이션 내에서 해당 클래스의 단일 인스턴스에 접근할 수 있습니다.

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

 

위의 내용을 자세히 살펴보면 'GuestbookDAO' 클래스에서 'instance는 클래스 내부에서 유일한 객체를 가리키는 정적(private static)멤버 변수입니다.

 

그렇기 때문에, getInstance 메서드를 통해 인스턴스에 접근할 수 있는데, 결국 이 메서드는 이미 생성된 인스턴스가 있다면 그 인스턴스를 반환하고 없으면 새로운 인스턴스를 생성해서 반환하도록 코드를 작성한 것으로 볼 수 있습니다.

 

2-1. DAO에 추가하는 insert 메서드

InsertService 클래스에서 설정파일(mapper)와 테이블에 저장할 데이터가 객체를 넘겨받고, guestbook.xml파일의 insert sql명령문을 작성하고 실행하는 메서드를 만듭니다.

public void insert(SqlMapClient mapper
						,GuestbookVO vo) throws SQLException{
		System.out.println("GuestbookDAO 의 insert메서드 실행");
		mapper.insert("insert",vo);
		
	}
}

 

 

2-2. mapper의 역할

이 코드에서 mapper가 왜 사용이 되는지, 그리고 갑자기 나타나는 insert는 무엇인지, vo는 누구의 변수인지 정리해본다면,

mapper는 데이터베이스에 접근하기 위해서 SqlMapClient의 정보를 얻어올 때 사용된 변수의 이름입니다.

 

즉, 다시 말해 mapper는 MyBatis와 관련된 객체로, 데이터베이스의 상호작용을 담당하는데, sql 매핑 프레임워크로, 자바 객체와 Sql 쿼리 사이의 매핑을 간편하게 처리하고자 설계된 객체입니다.

 

MyAppSqlconfig.getSqlMapInstacne()를 통해 얻은 mapper는 My Batis 설정 파일에서 정의된 데이터베이스 연결 정보 및 SQL 매핑 정보를 활용하여 데이터베이스에 접근하고, GuestbookVO 객체를 데이터베이스에 삽입하는 역할을 수행합니다. 즉 Mapper는 GuestbookDAO 클래스를 통해 구체적인 SQL 매핑을 실행하며 데이터베이스에 삽입하는 데 사용합니다.

 

MAPPER를 설명하기 위한 참고자료 :  타파일(insertService 파일의 일부)

 2-3. insert의 역할

DAO에서의 insert메서드는 MyBatis를 활용해서 전달받은 GuestbookVO 객체를 데이터베이스에 삽입하는 역할을 수행하고 이 과정에서 발생할 수 있는 예외를 잡아냅니다.

더보기

위의 코드에서 insert 메서드의 역할

간편정리 : insert메서드는 MyBatis를 활용하여 전달받은 GuestbookVO 객체를 데이터베이스에 삽입하는 역할을 수행하고, 이 과정에서 발생할 수 있는 예외를 잡아냅니다.

-

(1) GuestbookVO 객체 출력 : syso.println(vo)를 통해서 전달받은 객체 내용을 콘솔 창에 출력시킵니다.

(2) SqlMapClient 객체 획득 : MyAppSqlConfig.getSqlMapInstance()를 통해서, MyBatis 설정 파일에 정의된 정보를 활용하여, SqlMapClient 객체를 획득합니다.

(3) GuestbookDAO의 insert 메서드 호출 : 획득한 sqlMapCilnet 객체와 전달받은 GuestbookVO 객체를 이용해서, GuestbookDAO 클래스의 insert 메서드를 호출합니다. 이 메서드는 MyBatis를 사용하여 데이터베이스에 데이터를

삽입하는 역할을 합니다.

 

댓글