본문 바로가기
Lecture/JSP & Java

[본격 게시판짜기 Part1.6 Oracle > JSP] Database 접속 및 Select

by cusmaker 2012. 6. 26.
반응형

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.1 - 게시판도 HTML부터] 게시글 리스트

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 글입력폼

2012/06/13 - [Lecture/Javascript-기초] - [본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사

2012/06/13 - [Lecture/Jsp] - [본격 게시판짜기 Part1.4 - HTML-> JSP] form 파라미터 받기

2012/06/26 - [Lecture/SQL / Oracle] - [본격 게시판짜기 Part1.5 JSP > Oracle] 게시판 DB 테이블 생성


Cocy입니다.

지난 포스팅에서 데이터베이스 계정을 만들고 SQL Developer를 사용하여 데이터베이스에 접속하고

테이블을 만들고 테스트 데이터까지 넣어보았는데요,


이번시간에는 이전에 만든 JSP페이지를 가지고 해당 데이터베이스에 접속해보고 

폼에서 입력받은 데이터를 데이터베이스에 입력해보도록 하겠습니다.


그전에 write.jsp에서 폼의 action을 지금부터 만들 insert.jsp로 바꿔주시고,

insert.jsp파일을 새로 만들어서 추가해주세요

이때 추가해야할 내용으로는 jsp단의 유효성검증코드입니다.


예시를 위해 list.jsp에서 작성했던 코드들을 새로만들 insert.jsp파일에 넣어주시고

다음의 코드들을 하단에 추가해주세요.


try {
 
     String driverName = "oracle.jdbc.driver.OracleDriver"//데이터베이스에 접속하기위한 드라이버를 로드합니다.
 
     String url = "jdbc:oracle:thin:@localhost:1521:XE";            //접속 URL정보와 포트번호(oracle포트), sid(oracle버전)
 
 
 
     Class.forName(driverName);
 
     Connection con = DriverManager.getConnection(url,"board","board");    // getCo... : 계정정보 url, id, pw
 
     out.println("Oracle 데이터베이스 db에 성공적으로 접속했습니다");
 
     con.close();
 
catch (Exception e) {
 
     out.println("Oracle 데이터베이스 db 접속에 문제가 있습니다. <hr>");
 
     out.println(e.getMessage());
 
     e.printStackTrace();
 
}


어려운 코드는 없습니다. 추가한 oracle driver를 로드하고

접속할 데이터베이스의 url과 계정정보를 가지고 데이터베이스에 정상적으로 접속하면

해당하는 접속성공 메세지를 띄우고, 문제가있다면 문제가있다는 메세지와 에러메시지를 화면에 출력합니다.


그러면 최종 결과코드는 다음과 같은 코드가 되어야 합니다.




그전에 JSP에서 데이터베이스에 접속하기위해서는 오라클 드라이버가 필요합니다.

다음 파일을 WebContent > WEB-INF > lib 폴더안에 추가해주세요.


ojdbc14.jar



그럼 테스트를 위해 한번 실행시켜보시기 바랍니다. 실행순서는 다음과같습니다.

index.jsp > 글쓰기 버튼 클릭

write.jsp > 데이터 입력후 submit

insert.jsp > 확인


이제 데이터베이스 연결이 끝났으니

본격적으로 데이터베이스에 데이터를 넣어보겠습니다.


방금 추가한 db 커넥션 코드에서 커넥션을 끊기전에 다음의 코드를 추가합니다.


Statement stmt = con.createStatement();            // SQL 쿼리를 날리기위한 Statement 객체 생성
 
 String sql = "INSERT INTO BOARD "+
 
                "(IDX, TITLE, WRITER, REGDATE, COUNT, CONTENT) "+
 
                "VALUES (" 2 +", '"+title+"', '"+writer+"', '"+regdate+"', '1', '"+content+"')";
 
stmt.executeUpdate(sql);                                                // 쿼리를 실행합니다.

실행해서 제대로 돌아가는지 확인해보시기바랍니다.




성공적으로 수행했다면 SQL Developer로 테이블을 확인했을때 데이터가 들어간걸 확인 하실 수 있습니다.

지금까지 충실히 따라오셨다면

jsp에서 데이터베이스를 연동한것만으로도 

Model1게시판 만들기 반이상 해내셨습니다.

남은 포스팅 역시 이를 이용하여 게시글 조회, 수정, 삭제의 간단한 기능들만 추가하고

이부분에 대해서는 좀더 스피디하게 진행하도록 하겠습니다.


진행하면서 느끼신분도 있을테지만, 

지금만들고 있는 게시판은 기능상으로나, 

보안상으로 상당히 빈약하기 짝이없습니다.


이번포스팅을 보더라도 지금의 데이터 삽입방법은 

단순히 넘어온 파라미터를 스트링으로 연결하여 쿼리를 만들고 쿼리를 실행하여 데이터를 집어 넣었습니다.

이러한 방법은 보안상 매우 취약합니다. 

예를들어 파라미터의 값에 쿼리를 입력하여 해당 sql쿼리를 변조하고 

악의적으로 데이터베이스를 조작하는 구문을 넣어 공격이 가능하게 되는것입니다.

이때 데이터베이스 사용자의 권한을 DBA로 했을 경우, 데이터베이스를 복구하지 못하게 될 수도 있습니다.

이를 SQL 인젝션이라 하며, Web Application 의 대표적인 취약점 중 하나입니다.


그렇기때문에 자바스크립트에서 유효성 검증을 하고, jsp에서 한번더 하지만, 코드상으로 이를 막아줄 필요가 있습니다.

또한 매번 스트링을 이어붙이는 작업은 효율이 떨어지며, 

접속이 빈번히 일어나는 시스템에서는 성능상의 문제로도 이어질 수 있습니다.


이러한 이슈 이외에도 현재까지의 작업에선 많은 문제점을 야기할 수 있는 코드들이 내재되어있는데,

이를 해결하기위한 많은 오픈소스 라이브러리 혹은 프레임워크가 제공되어있습니다. 


Model1게시판은 아주 기초적인 내용을 바탕으로 

html, javascript 그리고 JSP와 데이터베이스와의 연동의 감을 잡기위한 포스팅이라고 생각하시고, 

두번째 내용 즉 Model2게시판 부터는 다양한 개발방법론과 오픈소스들을 사용하여, 개발을 진행 해 보도록 하겠습니다.


수고하셨습니다. 


다음글 : http://cusmaker.tistory.com/77