520 likes | 1.24k Views
13 장 . 데이터베이스와 JSP. 1. MySQL 설치 및 구성. MySQL 설치 MySQL Community Server 5.1 다운로드 URL: http://dev.mysql.com/downloads/mysql/5.1.html. MySQL 5.1 설치시작 화면. 설치유형 선택 화면. 설치완료 화면. 1. MySQL 설치 및 구성. MySQL 설치 MySQL 서버 설정 (1/2). 윈도우즈 서비스 등록 및 PATH 환경변수 설정. 서버설정 시작 화면. 서버설정의 첫 화면.
E N D
13장. 데이터베이스와 JSP 제13장
1. MySQL 설치 및 구성 • MySQL 설치 • MySQL Community Server 5.1 • 다운로드 URL: http://dev.mysql.com/downloads/mysql/5.1.html MySQL 5.1 설치시작 화면 설치유형 선택 화면 설치완료 화면 제13장
1. MySQL 설치 및 구성 • MySQL 설치 • MySQL 서버 설정 (1/2) 윈도우즈 서비스 등록 및 PATH 환경변수 설정 서버설정 시작 화면 서버설정의 첫 화면 • MySQL 서버는 윈도우즈 OS의 기본 서버 프로그램 중 하나로 등록 • PATH 환경변수에 MySQL 실행파일이 모여 있는 폴더를 등록하여 윈도우즈의 커맨드 창내의 어느 폴더에서나 MySQL 관련 명령어들을 실행할 수 있도록 함 제13장
1. MySQL 설치 및 구성 • MySQL 설치 • MySQL 서버 설정 (2/2) 관리자 비밀번호 설정 MySQL 설치 및 설정 완료 - 비밀번호를 입력하는 창에 자신만이 관리할 값을 입력하면 되지만 본 책에서는 "jspbook" 이라는 비밀번호를 입력 제13장
1. MySQL 설치 및 구성 • MySQL 접속 및 테스트 • cmd 창을열어서 다음 명령어로 접속 • 관리자 패스워드 (본 책에서는 “jspbook”)을 입력 • 오른쪽 화면이 보이면 접속 성공 • 현재 등록된 데이터베이스 목록출력하기 위해 접속상태에서다음 명령어 입력 제13장
1. MySQL 설치 및 구성 • 새로운 데이터베이스 “jspbookdb” 생성 • 접속 상태에서 다음 명령어 실행 • 데이터베이스 목록 다시 보기 제13장
1. MySQL 설치 및 구성 • MySQL GUI Tools 설치 • 다운로드 URL: http://dev.mysql.com/downloads/gui-tools/5.0.html Database 선택 // use db_name MySQL Query Browser의 사용 • show databases; • show tables; 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • JDBC의 정의 및 필요성 • JDBC(Java DataBase Connectivity) • Java를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 그 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 대한 규약 • 개발자는 MySQL, Oracle, MS-SQL Server 데이터베이스 등에 독립적으로 표준화된 하나의 API 사용방법만 숙지하면 된다. • DB 벤더 또는 써드 파티(third party)에서 제공하는 JDBC 드라이버가 필요 • JNDI (Java Naming and Directory Interface)를 사용하여 JDBC 설정 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • MySQL JDBC의 설치 및 설정 • MySQL 데이터베이스 처리용 JDBC인 "MySQL Connector/J" 다운로드 • 다운로드 URL: http://dev.mysql.com/downloads/connector/j • 압축을 풀면 나오는 폴더 안에 mysql-connector-java-5.1.7-bin.jar 파일을 Tomcat의 설치폴더 바로 밑의 lib 폴더에 복사 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • JNDI (Java Naming and Directory Interface) • JSP 및 Servlet으로부터 MySQL을 접근하기 위하여 MySQL을 자원(Resource)으로 간주하여 이 자원을 Tomcat에 등록하여 사용하는 최신 방법 • 현재의 c:\apache-tomcat-*.*.*\conf\server.xml 내용 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • JNDI (Java Naming and Directory Interface) 설정 • server.xml에 mysql을 전역자원(global resource)으로 등록 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 커넥션 풀 (Connection Pool) • 데이터베이스와 연결된 커넥션을 미리 만들어 놓고 풀(Pool)에 저장해 두었다가 필요시에 커넥션 풀에서 커넥션을 가져다 이용하고 이용이 완료되면 다시 풀에 반환하는 기법 • 좀 더 빠른 시간 내에 데이터베이스 작업을 끝낼 수 있다는 장점이 있음 • 또한, 커넥션 풀은 동시에 생성될 수 있는 커넥션 수를 관리하므로 동시 접속자수가 갑자기 증가하여도 이상을 방지할 수 있다. • JNDI를 통한 DB 접속 방법에는 기본적으로 커넥션 풀 기법이 내장 Connection Pool 설명 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 커넥션 풀 (Connection Pool) 관련 속성 설명 • maxActive • 사용이 되고 있는(active) 최대 커넥션의 개수를 의미 • maxActive="100"으로 설정하면 총 100개의 커넥션까지는 동시 데이터베이스 접속을 허용하겠다는 의미 (maxActive="-1": 제한 없음) • maxIdle • 사용되지 않는(idle) 커넥션을 커넥션 풀에 저장해 둘 수 있는 최대 수 • maxIdle="30"으로 설정하면 사용되지 않는 커넥션이 풀에 최대 30개 까지만 존재함 • 일반적으로 커넥션 풀이 초기화되면 maxIdle에 지정된 수 이상은 생성되지 않는다. (minActive="-1": 제한 없음) • maxWait (단위: ms) • 동시 접속자수가 많아져서 사용가능한 커넥션이 없을 때 maxWait 에 지정된 시간만큼 기다린다. • 이 시간이 지나도 사용가능한 커넥션이 발견되지 않을 시에는 Exception이 발생된다. • maxWait="3000"는 사용가능한 커넥션이 커넥션 풀에 없을 때 사용가능한 것이 나타날 때까지 3초간 기다린다는 의미 (maxWait="-1": 제한 없음) 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 설정 내용을 포함한 server.xml 예제 server.xml에 mysql을 전역자원(global resource)으로 등록 [예제 13.1] Tomcat 설치 폴더\conf\server.xml 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 설정 내용을 포함한 server.xml 예제 [예제 13.1] Tomcat 설치 폴더\conf\server.xml 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 설정 내용을 포함한 context.xml 예제 [예제 13.2] Tomcat 설치 폴더\conf\context.xml name과 global 속성의 값은 server.xml의 <Resource> 태그의 name 속성 값과 동일하고 type 속성 값도 <Resource> 태그의 type 속성 값과 동일하다. 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • 설정 내용을 포함한 web.xml 예제 • jspbook 웹 애플리케이션들이 전역자원을 사용할 수 있도록 설정 [예제 12.3] jspbook\WEB-INF\web.xml <res-ref-name>태그의 값으로 적힌 "jdbc/mysql”은 반드시 server.xml 및 context.xml 내의 <Resource> 태그 및 <ResourceLink> 태그의 name 속성 값과 동일. 한편 <res-type>태그의 값도 server.xml 및 contex..xml에서 type속성에 설정한 값과 동일. 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • MySQL 접속 유틸리티인 ConnectionContext 작성 (sjc로 compile) [예제 12.4] jspbook\WEB-INF\java_sources\ConnectionContext.java getConnection() 메소드 만약 이미 생성된 java.sql.Connection 객체가 있다면 새롭게 생성하지 않고 이미 생성되어 있는 것을 바로 리턴한다. Tomcat 컨테이너 설정 정보(server.xml) 및 jspbook 웹 어플리케이션의 설정 정보(web.xml)의 MySQL 설정 내용을 참조하여 java.sql.Connection객체를 새롭게 생성하고 메소드를 호출한 측으로 그 객체를 리턴한다. 제13장
2. JNDI를 활용한 DB 커넥션 풀 (Connection Pool) 설정 • JSP에서 MySQL 접속 테스트하기 [예제 13.5] jspbook\ch13\hellodb.jsp 제13장
3. 데이터베이스와 SQL • 데이터베이스란? • 데이터베이스(Database) • 검색과 변경이 쉽도록 조직화되어 있는 자료의 집합 • 관계형 데이터베이스 (Relational Database) • 일련의 정형화된 테이블로 구성된 데이터 항목들의 집합체로서 그 데이터들은 다양한 방법으로 접근하거나 조합될 수 있다. • 관계형 데이터베이스 관리 시스템(Relational Database Management System, RDBMS) • 자료를 관계형 데이터베이스의 테이블들에 체계적으로 정리하여 모아두기 위해서 데이터베이스를 관리하여 주는 시스템 • 데이터를 저장하고 이 데이터로부터 유용한 정보를 얻어내기 위한 효율적이면서도 편리한 방법(SQL)을 사용자에게 제공 • 예 • 상용 RDBMS: 오라클(Oracle), MS-SQL Server • 무료 RDBMS: MySQL 제13장
3. 데이터베이스와 SQL • RDBMS에서 사용되는 주요 용어 • 테이블 • 여러 개의 레코드를 담고 있는 논리적인 구조로서 행과 열로 구성된 데이터의 모임 • 필드(컬럼) • 테이블의 열에 해당되는 것으로 데이터의 자료형태, 데이터의 길이 등과 같은 특성을 나타낸다. • 위 예에서 ‘학번’, ‘이름’, ‘나이’, ‘학과’는 필드(컬럼)명이 되고 필드명에 속하는 자료가 필드값이 된다. • 레코드(튜플) • 컬럼들의 집합으로 테이블의 각 행을 레코드라고 한다. • 위 예에서 ‘200010001 김송이 20 컴퓨터학과’가 하나의 레코드가 된다. • 하나의 테이블에 동일한 레코드가 중복되어서는 안된다. • 기본키 (Primary Key) • 단일 레코드의 식별자 역할을 하는 필드를 지칭한다. • 그러므로 두 개 이상의 레코드가 동일한 기본키 값을 가질 수 없다. • 위 예에서 ‘학번’ 필드가 기본키 역할을 하며 ‘김송이’ 이름을 지닌 레코드는 기본키 값으로서 200910001을 지닌다. 제13장
3. 데이터베이스와 SQL • SQL 소개 및 문법 • SQL(Structured Query Language) • 사용자가 데이터베이스 관리 시스템에게 어떤 일을 하라고 지시하기 위한 언어 • 데이터베이스에 저장된 자료를 조직, 관리, 검색하기 위한 언어 • SQL의 주요 기능 • 데이터 정의 기능: 데이터베이스와 테이블의 생성, 소멸, 변경 등을 할 수 있게 한다. • 데이터 검색 기능: 데이터베이스에 저장된 자료를 검색하여 보여 줄 수 있게 한다. • 데이터 조작 기능: 테이블에 자료를 삽입하거나 수정, 삭제할 수 있게 한다. • SQL 작성시 주의 사항 • SQL 문은 대소문자 구별을 하지 않는다 • 세미콜론(;)을 명령문 맨 마지막에 반드시 붙인다. 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 정의 기능 SQL (DDL) • 데이터베이스 및 테이블 생성 • JSP내에서 직접 수행하는 일은 그리 많지 않다. • 대신에 콘솔창이나 “MySQL Query Browser" 내에서 해당 명령어를 대부분 수행한다. • 문법 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • MySQL Query Browser를 사용하여 실습 • 데이터 정의 기능 SQL • 이미 jspbookdb가 생성되어 있다면 다음 명령어를 통해 사용할 데이터베이스를 변경 • use jspbookdb; • jspbookdb가 생성되어 있지 않다면 다음 명령어를 통해 생성 • CREATE DATABASE jspbookdb; 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 정의 기능 SQL • 다음 명령문를 통해 "Student" 테이블을 생성 • CREATE TABLE Student(ID char(10) PRIMARY KEY, Name char(10), Age int, Major char(30)); • 오른쪽 위 Schemata 창에서 마우스 오른쪽 버튼 -> ‘Refresh’로 확인 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 정의 기능 SQL • 이미 만든 데이터베이스 및 테이블을 삭제하는 명령문 • 문법 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 정의 기능 SQL • 이미 테이블을 변경하는 명령문 • 테이블에 새로운 컬럼을 추가하거나 삭제하는 기능등을 수행 • 문법 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 검색 기능 SQL (DML) • Asc: 오름차순, Desc: 내림차순 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 조작 기능 SQL • 테이블에 새로운 자료를 삽입 • 테이블에 있는 레코드 삭제 제13장
3. 데이터베이스와 SQL • SQL의 명령문과 문법 • 데이터 조작 기능 SQL • 테이블에 이미 입력되어있는 값을 갱신 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • JSP와 Servlet에서 데이터베이스 접근 프로그래밍 순서 • 1) Connection 객체를 생성한다. • 2) Statement 객체를 생성한다. • 3) SQL 질의를 수행한다. • 4) 데이터를 얻어오는 것과 관련된 경우 데이터를 ResultSet으로부터 가져온다. 만약 SQL문이 데이터 추출과 무관한 경우는 ResultSet에서의 데이터 추출은 생략된다. (e.g., CREATE, INSERT, UPDATE, DELETE 등) • 5) 생성되어 있는 ResultSet 객체 및 Statement 객체를 닫는다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 1. Connection 객체 얻어오기 • 13.2.5절에서 소개한 thinkonweb.util.ConnectionContext를 활용하여 커넥션풀에서 java.sql.Connection 객체를 받아오는 방법을 사용 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 2. Statement 객체 생성 및 SQL 질의 수행 • java.sql.Statement 객체 • SQL 구문을 입력받아 질의를 수행하고 결과값을 가져올 수 있는 작업을 지원 • Connection객체의 createStatement() 메소드를 이용해서 얻는다. • Statement 객체를 얻으면 이 객체를 활용하여 직접 SQL 문을 수행시킬 수 있다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 3. Statement 객체 생성 및 SQL 질의 수행 • java.sql.Statement 객체 • 이 객체에게 호출할 수 있는 메소드 종류 • http://download.oracle.com/javase/6/docs/api/index.html참조 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 4. ResultSet에서의 데이터 추출 • java.sql. ResultSet 객체 • ResultSet 객체에 데이터를 가져온 후 이 객체로부터 실제 데이터를 추출해 내는 작업 수행 • ResultSet 객체 구조 및 커서 이동 • 한번의 next() 메소드 호출은 레코드 행을 한 행씩 이동하게 해준다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet에서의 데이터 추출 • java.sql. ResultSet 객체 • next() 메소드의 반환값은 Boolean 형 • java.sql. ResultSet 객체에 호출할 수 있는 메소드 • getString(String columnName) • getInt(String columnName) • getFloat(String columnName) • getLong(String columnName) • getDate(String columnName) http://download.oracle.com/javase/6/docs/api/index.html 참조 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet에서의 데이터 추출 • java.sql. ResultSet 객체 사용 법 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 5. ResultSet 객체 및 Statement 객체 닫기 • 데이터베이스 작업이 끝나면 자원을 회수하고 가용자원을 늘리기 위해서 ResultSet 객체 및 Statement 객체를 닫아주어야 한다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • 데이터베이스 활용 예제 [예제 13.6] jspbook\ch13\student-1.jsp 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • 데이터베이스 활용 예제 [예제 13.6] jspbook\ch13\student-1.jsp 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 • 메타데이터(metadata) • 일반적으로 "데이터에 관한 데이터"라고 정의되며 SQL 질의 수행 이후에 얻어온 정보자원의 속성을 기술하는 데이터 • 실제 얻고자 하는 학생 이름, 나이 등의 데이터는 아니지만 이 데이터와 직접적으로 혹은 간접적으로 연관된 정보를 제공하는 데이터 • 메타데이터 사용 이유 • 데이터를 소유하고 있는 측면에서는 관리의 용이성을, 데이터를 사용하고 있는 측면에서는 검색의 용이성 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 • 메타데이터(metadata) • ResultSet 객체로부터 getMetaData() 라는 메소드를 통해서 ResultSetMetaData 객체를 얻어올 수 있다. • http://download.oracle.com/javase/6/docs/api/index.html참조 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 • ResultSetMetaData 객체에 호출할 수 있는 메소드 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 • getColumnLabel(int column)과 getColumnName(int column)의 차이 • 위 예와 같이 AS 절을 사용하면 getColumnLabel(int column)이 돌려주는 값은 AS 절 이후에 지정한 단어가 리턴된다. • AS 절을 사용하지 않으면 getColumnLabel(int column)과 getColumnName(int column)가 리턴하는 값에 차이가 없다. • 주로 ResultSetMetaData 객체와 함께 사용하면서 ResultSet 객체에 호출할 수 있는 메소드 • getString(int columnIndex) • getInt(int columnIndex) • getFloat(int columnIndex) • getLong(int columnIndex) • getDate(int columnIndex) 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 • ResultSetMetaData 객체와 함께 사용하면서 ResultSet 객체를 활용하는 방법 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 예제 [예제 13.7] jspbook\ch13\student-2.jsp 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • ResultSet 메타데이터 활용하기 예제 [예제 13.7] jspbook\ch13\student-2.jsp // 컬럼의 메타정보 출력 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • PreparedStatement 활용하기 • java.sql.PreparedStatement 클래스 • java.sql.Statement 클래스를 확장한 것으로서 SQL 문을 미리 컴파일하여 기존의 java.sql.Statement 객체 보다 더욱 효율적으로 SQL 질의문을 처리하도록 지원 • PreparedStatement 객체 • Connection 객체의 prepareStatement() 메소드를 통해서 얻을 수 있다. • 추가적으로 입력 파라미터의 위치를 지정할 수 있도록 prepareStatement() 메소드에 넣어주는 SQL 문에 물음표(?)를 사용할 수 있다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • PreparedStatement 활용하기 • PreparedStatement 객체 • PreparedStatement 객체에게 setString(), setInt(), setDate() 등의 메소드를 다음과 같이 호출하여 물음표(?)가 있는 위치에 실제 파라미터 값을 넣어줄 수 있다. • 파라미터 값을 모두 셋팅하면 바로 pstmt 객체에게 executeQuery() 메소드를 호출하여 ResultSet 객체를 얻어올 수 있다. 제13장
4. JSP 및 Servlet에서 SQL 처리 프로그래밍 • PreparedStatement 활용하기 • PreparedStatement 객체 • INSERT 구문을 처리하는 PreparedStatement 객체활용 법 제13장