이 페이지에서는 mvc 모델2 패턴을 이용하여
데이터베이스와 연동하여 간이 게시판을 만들것이다.
필요한 개발 환경은
오라클 데이터베이스
개발 툴(이클립스 또는 intellij 등)
아파치 톰캣과 같은 서버 구현 환경
이다
게시판이라고 부르기도 민망한 수준이지만
어느 게시판이나 뼈대는 이와 유사할 것이라고 생각한다.
이러한 방식으로 만들 것이다.
(모델은 화살표로 표시하면 너무 번잡해질 것 같아서 뺏다)
웹 프로젝트는 이렇게 된다.
1 은 먼저 컨트롤러이다. doGet과 doPost를 이용해
유저에게 적당한 jsp로 연결시켜주는 역할을 한다.
2는 모델 클래스이다.
게시판에 필요한 게시글 번호, 이름, 내용, 유저아이디, 게시날짜를 모델화한 클래스이다.
3은 서비스 인터페이스와, 그를 구현한 클래스이다.
이 페이지에서는 글 작성만 사용할 거지만, 기능이 확장된다면
댓글기능, 글 수정 등이 추가될 서비스 클래스이다.
4는 게시판에 게시판에 글을 추가할 기능과, 조회하는 기능을 구현할
DAO 인터페이스와 그 클래스이다.
조회와 삽입(insert)를 구현해야 하기에 데이터베이스와 직접 연결된다.
5는 Oracle 데이터베이스와 연결할 수 있도록
문자열을 기록하기 위한 인터페이스이다.
6의 context.xml과 8의 web.xml은 오라클 데이터베이스의 접속을 하게해줄
접속 코드를 기록하기 위한 xml이다.
======================================================
여기서 잠깐 서버환경, 데이터베이스에 대해서 설명하자면
이 게시판 구현에서는 데이터베이스 커넥션 풀을 사용할 것이다.
커넥션 풀에서는 DAO가 커넥션을 맺는 것이 아닌
웹서버가 미리 커넥션을 만들어두고
DAO가 요청 하면 웹서버가 커넥션을 빌려주고, 커넥션 사용이 끝나면
웹서버에 반환하는 형식이다.
커넥션이 적을 때는 DAO가 직접 커넥션을 맺어도 큰 문제가 없지만
게시판 같은 다수의 유저가 사용하여 커넥션이 동시다발적으로 발생할때
이러한 방식은 서버에 큰 부담이 되게 된다.
때문에 서버가 미리 풀에 커넥션을 만들어두고
커넥션을 빌려주고, 사용이 끝나는 커넥션은 반환받고
풀에 커넥션이 부족하게 될 때는
유저를 대기시키게 하는 방식이다.
이러한 커넥션 풀을 사용하기 위해서는 위에서 언급한
context.xml을 만들고 web.xml을 수정해 줄 필요가 있다.
이 두 xml에 적을 코드는 아파치톰캣 웹사이트에서 확인이 가능하다.
http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&_10g
위 웹사이트의 화면 상단 Oracle 8i, 9i & 10g 를 클릭하면
다음과 같은 화면으로 이동하는데
위의 내용이 context에 들어가고 아래 내용이 web.xml에 들어간다.
이를 자신의 개발환경에 맞추어 수정을 해주어 기록하도록 한다.
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="scott" password="tiger" maxTotal="100" maxIdle="10"
maxWaitMillis="-1"/>
여기서 maxTotal은 커넥션 풀의 최대 한계치를maxIdle는 여유분으로 만들어 둘 커넥션의 한계치를 말한다
web.xml에 기록한 내용은 수정없이 기록이 가능할 것이다.
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
앞으로 커넥션 풀을 이용하려면
다음과 같은 코트를 이용하면 된다
먼저 데이터 소스를 멤버변수로 선언해주고
private DataSource ds;
try {
Context initContext = new InitialContext();
Context appContext = (Context)
initContext.lookup("java:/comp/env");
ds = (DataSource) appContext.lookup("jdbc/myoracle");
} catch (NamingException e) {
e.printStackTrace();
}
이렇게 선언해주면 데이터소스 변수가 커넥션 풀 접근권한을 얻는다
conn = ds.getConnection();
다음에는 이렇게 커넥션을 빌리면 된다.
conn.close();
사용이 완료된 커넥션은 네트워크 환경 개선을 위해
종료해주는 습관을 들이도록 하자.
======================================================
다시 위로 돌아가서 7번은 컨트롤러에 의해 우회받을 jsp를 제작한 공간이며
8번은 오라클 데이터베이스와 JSTL을 이용하기 위한 jar파일이다.
내용이 길어지기에
구체적인 코드와 개발 흐름은 다음 페이지에서 설명하도록 하겠다.
'프로그래밍 > Web' 카테고리의 다른 글
MVC Model2 패턴 / 간이 게시판 제작 기록 (2/4) (0) | 2017.11.11 |
---|---|
MVC Model1 패턴을 적용한 JDBC 접근 방법 정리 (0) | 2017.11.11 |
JSTL 정리 (2/2) (0) | 2017.11.11 |