BLOG ARTICLE 프로그래밍 | 42 ARTICLE FOUND

  1. 2009.03.30 JDBC 드라이버를 이용한 JSP와 MySQL 연동
  2. 2009.03.30 JDBC 드라이버
  3. 2009.03.26 MySQL 기본
  4. 2009.03.24 웹프로그램의 개발 목적
  5. 2009.03.23 MySQL Server 설치

우리는 앞서 MySQL의 기본 사항에 대해 배울 때 "명령 프롬프트"를 통해 "mysql" 클라이언트 프로그램을 실행함으로써 데이터베이스 서버에 접속하고 몇몇 데이터 조작을 위한 명령을 실행하였다. 이 과정은 크게 네 가지 단계로 나누어 생각할 수 있다.

먼저 데이터베이스 서버로의 연결 단계이다. 이 단계는 "명령 프롬프트"에서 다음 명령을 실행하고 암호를 입력함으로써 이루어진다.

mysql  -u  jsp  -p

이 명령은  데이터베이스 사용자 "jsp"가 클라이언트 프로그램을 이용 서버에 연결 데이터 조작을 할 수 있도록 한다. 이 때 서버와의 연결을 위해 주어지는 정보는 세 가지다. 첫 째 사용자아이디, 둘 째 비밀번호, 그리고 데이터베이스 서버가 실행되고 있는 컴퓨터 정보다. 위 명령에서 컴퓨터 정보는 주어지지 않았지만 실제로는 "-h" 옵션 뒤에 도메인네임 또는 IP 주소와 같은 컴퓨터 이름을 줄 수 있으며 이 옵션이 생략되면 "-h localhost"가 주어진 것과 동일하다. 따라서 위 명령은

mysql  -u  jsp  -p  -h localhost

와 같다.

둘 째 데이터베이스 서버로의 연결이 완료되면 다음 명령을 이용 사용하고자 하는 데이터베이스를 선택해야 한다.

use  jsp ;


이 명령은 MySQL 서버가 관리하고 있는 데이터베이스 중 "jsp" 를 사용하겠다는 의미이다. 만약 데이터베이스를 선택하지 않고 쿼리를 실행할 때 많은 경우 데이터베이스가 선택되지 않았다는 오류 메세지를 출력한다.

데이터베이스를 선택한 후에는

SELECT, INSERT, DELETE, UPDATE, CREATE, DROP, ALTER
 

등과 같은 한 각종 SQL 명령을 실행 데이터를 조작한다.

마지막으로 원하는 데이터조작이 완료됐으면 데이터베이스 클라이언트와 서버 사이의 연결은 끊는다. 이 처럼 연결, 데이터베이스 선택, 쿼리실행, 연결종료 네 단계 과정이 하나의 주기로 이루어진다. JSP 프로그램에서도 이와 같이 네 단계의 과정을 통해 데이터베이스와의 연동이 이루어진다. 그러면 간단한 회원가입 폼과 프로그램을 통해 JSP와 데이터베이스를 연동하는 방법을 살펴보자.

아래 "MemberJoin.html"은 가입을 위해 회원정보를 입력하는 HTML 폼이다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="MemberJoin.jsp" method="post">
<table>
    <tr>
        <td>회원아이디</td>
        <td><input type="text" size="10" maxlength="16" name="userid"></td>
    </tr>
    <tr>
        <td>비밀번호</td>
        <td>
            <input type="password" size="10" maxlength="16" name="userpwd1">
            <input type="password" size="10" maxlength="16" name="userpwd2">
        </td>
    </tr>
    <tr>
        <td>이름</td>
        <td><input type="text" size="10" maxlength="20" name="username"></td>
    </tr>
    <tr>
        <td>주민등록번호</td>
        <td>
            <input type="text" size="6" maxlength="6" name="jumin1"> -
            <input type="password" size="7" maxlength="7" name="jumin2">
        </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td>
            <input type="submit" value="등록">
            <input type="reset" value="초기화">
        </td>
    </tr>
</table>
</form>
</body>
</html>

사용자 삽입 이미지

MemberView.html 실행결과


이 폼에서 회원 정보를 입력받는 창의 이름을 기억하자. 이 폼에 입력된 정보는 "등록" 버튼을 클릭하면 아래 "MemberJoin.jsp" 프로그램으로 전달한다. 그러면 "MemberJoin.jsp"는 데이서베이스 서버와 연결, 데이터베이스 선택의 단계를 거쳐 입력된 정보를 데이터베이스 테이블에 저장하기 위한 쿼리를 실행한 다음 데이터베이스 서버와의 연결을 종료하면 된다. 그러면 각 단계별로 JSP에서 어떻게 처리하는지 살펴보자.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import = "java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%

request.setCharacterEncoding("euc-kr");

String userId   = request.getParameter("userid");
String userPwd1 = request.getParameter("userpwd1");
String userPwd2 = request.getParameter("userpwd2");
String userName = request.getParameter("username");
String jumin1   = request.getParameter("jumin1");
String jumin2   = request.getParameter("jumin2");

Class.forName("com.mysql.jdbc.Driver");

Connection conn = null;
Statement  stmt = null;

String url = "jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password";
String sql = "INSERT INTO members VALUES ('"
             + userId +"', md5('"+ userPwd1 +"'),'"+ userName +"','"+ jumin1 +"',md5('"+ jumin2 +"'))";
System.out.print(sql);
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
stmt.execute(sql);
stmt.close();
conn.close();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table>
    <tr>
        <td>회원아이디</td>
        <td><%= userId %></td>
    </tr>
    <tr>
        <td>비밀번호</td>
        <td><%= userPwd1 %></td>
    </tr>
    <tr>
        <td>이름</td>
        <td><%= userName %></td>
    </tr>
    <tr>
        <td>주민등록번호</td>
        <td><%= jumin1 %>-<%= jumin2 %></td>
    </tr>
</table>
</body>
</html>

먼저 데이터베이스와의 연동을 위해 JDBC 드라이버를 로딩해야 한다. 드라이버의 로딩은 "Class.forName" 메소드를 이용한다. 프로그램에서 보면

Class.forName("com.mysql.jdbc.Driver");

부분이 드라이버를 로딩하는 부분이다. 이 메소드를 실행하기 위해 필요한 파라메터는 값은 드라이버를 다운로드 할 때 매뉴얼에 함께 제공되며, MySQL 드라이버의 경우 "com.mysql.jdbc.Driver" 이다. 드라이버가 성공적으로 로딩되어야 JSP와 데이터베이스와 연동 프로그램을 작성할 수 있다.

드라이버가 로딩 됐으면 "DriverManager.getConnection" 메소드를 이용 JSP와 데이터베이스 서버와의 연결을 실행한다. 이 메소드를 실행하기 위해 필요한 파라메터 역시 드라이버 배포시 매뉴얼에 함께 제공되며 드라이버 별로 고유한 패턴을 가지는데 MySQL의 경우 다음과 같은 형식을 가진다.

"jdbc:mysql://hostname:3306/databasename?user=userid&password=userpassword"


이를 커넥션스트링이라 하는데 프로그램에서 사용된 커넥션스트링

"jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password"


를 살펴보면 "localhost"에 접속하라는 의미이며, 사용자 아이디는 "jsp", 비밀번호는 "your_password" 그리고 사용하려는 데이터베이스는 "jsp" 임을 알 수 있다. "DriverManager.getConnection" 메소드에 의해 연결된 결과는 Connection 클래스 객체를 생성한 후 저장한다.

conn = DriverManager.getConnection(url);


데이터베이스 선택과 함께 서버와의 연결이 이루어지면 쿼리실행 단계에 들어간다. 이 프로그램은 회원가입을 위한 프로그램이므로 만약 입력된 회원정보가 입력 창에

hong
1234
12345
Hong Gil Dong
123456
7654321

순으로 입력 됐다면 다음과 같은 SQL을 만들어 실행하여 회원정보를 테이블에 저장해야 한다.

INSERT INTO members VALUES
('hong', md5('1234'), 'Hong Gil Dong', '123456', md5('7654321'))

위 SQL 에서 md5('1234')와 md5('7654321')은 '1234', '7654321'을 암호화 알고리즘인 MD5 알고리즘을 사용하여 암호화 하라는 의미이다. 그러므로 members 테이블에 비밀번호와 주민등록번호 뒷 자리는 암호화되어 '1234', '7654321'이 아닌 전혀 다른 값으로 저장된다. 프로그램에서 회원 정보는 "request.getParameter" 메소드를 이용 전달받으며,

"INSERT INTO members VALUES ('"
+ userId +"', md5('"+ userPwd1 +"'),'"+ userName +"','"+ jumin1 +"',md5('"+ jumin2 +"'))"

부분이 회원정보를 테이블에 저장하기위한 "INSERT" 문을 만드는 부분이다. JSP 프로그램에서 데이터 조작을 위한 SQL 문을 만든 후에는 Connection 객체의 메소드 "createStatement"를 이용 Statement 객체를 생성한 후 이 객체의 "execute" 메소드를 이용 쿼리를 실행한다.

stmt = conn.createStatement();
stmt.execute(sql);

쿼리 실행 후 모든 데이터 조작이 마무리되면 Statment 객체와 Connection 객체의 "close" 메소드를 이용 할당된 자원을 돌려주고 연결을 끊는다.

stmt.close();
conn.close();

 
사용자 삽입 이미지

MemberJoin.jsp 실행결과


다음 프로그램 "MemberView.jsp"는 "members" 테이블에 저장된 레코드를 출력하는 JSP 프로그램이다. 테이블 검색을 위해서 사용하는 SQL은 "SELECT" 문이다. "SELECT" 문은 "INSERT", "DELETE","UPDATE" 문과는 달리 처리해야 하는 부분이 더 필요하다. "SELECT" 문을 실핼할 때도 서버연결, 데이터베이스 선택, 쿼리실행, 연결끊기의 네 단계가 필요하다. 그러나 "SELECT" 문의 경우 검색된 결과를 사용자에게 출력해야 하기 때문에 쿼리실행 후 검색된 레코드를 반복문을 통해 추출하고 출력하는 부분이 추가된다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import = "java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
Class.forName("com.mysql.jdbc.Driver");

Connection conn = null;
Statement  stmt = null;
ResultSet  rs = null;

String url = "jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password";
String sql = "SELECT userid, username, jumin1 FROM members";
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();

rs = stmt.executeQuery(sql);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
while (rs.next()) {
%>
아이디 : <%= rs.getString("userid") %><br />
이름 : <%= rs.getString("username") %><br />
주민등록 : <%= rs.getString("jumin1") %><br />
<%
}
%>
</body>
</html>
<%
stmt.close();
conn.close();
%>

위 프로그램을 살펴보면 ResultSet 객체 rs를 선언하고 있다. 이 객체는 쿼리실행 단계에서 그 결과를 저장한다. 이 때 "SELECT" 문의 실행을 위해 stmt.execute가 아닌 stmt.executeQuery 메소드를 사용하고 있음에 주목하자. 저장된 결과는 ResultSet 형으로 검색된 모든 레코드를 가지고 있다. 여기서 각각의 레코드로 접근을 하기 위해서는 "next" 메소드를 이용한다. "next" 메소드가 호출되면 현 레코드에서 다음 레코드로 커서를 이동한다. 커서란 레코드를 가리키는 포인터를 의미한다. 만약 마지막 레코드인 경우 false를 돌려준다. 그러므로 반복문을 이용하면 모든 레코드를 읽을 수 있다.

현재 레코드에서 각 필드값을 얻기 위해서는 "rs.getString" 메소드를 사용한다. 파라메터로는 해당 테이블의 필드명을 준다. 다음은 "MemberView.jsp"를 실행한 결과이다.

사용자 삽입 이미지

MemberView.jsp 실행결과


'프로그래밍 > JSP' 카테고리의 다른 글

JDBC 드라이버와 한글 깨짐 해결  (0) 2009.06.09
NetBeans에서 JSP 개발하기  (0) 2009.06.07
웹프로그램의 개발 목적  (0) 2009.03.24
JSP에서 폼 데이터 처리  (0) 2009.03.23
쿼리스트링(Query String)  (2) 2009.03.18
AND

JSP와 MySQL을 연동하려면 우선 MySQL용 JDBC 드라이버를 다운 받아야 한다. MySQL용 JDBC 드라이버는 http://www.mysql.com 접속 후 Downloads 메뉴를 클릭하여 다운받을 수 있다.

사용자 삽입 이미지

http://www.mysql.com


Downloads 메뉴 클릭 후 나타나는 화면에서 좌측의 Connectors 항목을 클릭한다.

사용자 삽입 이미지

Connector 항목


Connector 항목을 클릭하면 서브 항목이 나타나는데 여기서 Connector/J 항목을 클릭한다.

사용자 삽입 이미지

Connector/J 항목


흰 바탕화면 우측에서 Source ans Binaries (zip) 의 Download를 클릭하면 MySQL 용 JDBC 드라이버를 받을 수 있다. 만약 Download 항목이 없다면 Pick a mirror 항목을 클릭한 후 태극기가 표시되는 미러사이트를 클릭하면 다운도드 받을 수 있다.

사용자 삽입 이미지

MySQL용 JDBC 드라이버


파일 다운로드 창이 뜨면 적당한 폴더를 지정한 후 저장을 한다음 압축프로그램을 이용 저장 파일을 연다. 여기서는 열기 버튼을 클릭하여 다운로드와 동시에 바로 압축프로그램(알집) 프로그램이 실행되도록 하였다.

사용자 삽입 이미지

mysql-connector-java-5.1.7-bin.jar 다운로드


다운로드가 완료되면 알집과 같은 압축프로그램이 실행된다. 여기서 좌측 메뉴를 클릭하여 "mysql-connector-java-5.1.7-bin.jar" 파일이 저장된 폴더를 찾는다.

사용자 삽입 이미지

알집으로 mysql-connector-java-5.1.7-bin.jar을 확인한 내용


이클립스를 이용 JSP 프로그램을 개발할 때 실행에 필요한 자바 클래스 파일들은 "프로젝트 - WEB-INF - lib"에 저장돼야 한다. 따라서 이클립스를 실행하여 프로젝트에서 "WebContent - WEB-INF" 폴더를 찾아 그 아래 "lib"라는 폴더를 만들어야 한다. 이를 위해 "WEB-INF" 위에서 마우스 오른쪽 버튼을 클릭하여 다음 그림과 같이 "New -> Folder" 항목을 선택한다.

사용자 삽입 이미지

JDBC 드라이버가 위치할 폴더 만들기


"New Folder" 창이 뜨면 "Folder Name"에 "lib"를 입력하고 "Finish" 메뉴를 클릭한다.

사용자 삽입 이미지

WEB-INF에 lib 폴더 만들기


이클립스에서 "lib" 폴더가 만들어진 것이 확인됐으면 알집에 압축된 "mysql-connector-java-5.1.7-bin.jar" 파일을 찾아 "lib" 폴더에 드래그앤드롭 등을 이용해 복사한다. 이로써 JSP와 MySQL 사이의 연동이 가능해졌다.
 
사용자 삽입 이미지

WEB-INF 안의 lib 폴더에 JDBC 드라이버 복사하기


MySQL 사용자 및 데이터베이스 그리고 MySQL용 JDBC 드라이버가 올바르게 설치 되었는지를 확인하기 위해 다음 프로그램 "mysqlConn.jsp"를 입력하여 실행해 본다. 실행 결과 아무런 메세지도 출력되지 않았다면 올바르게 설치된 것이다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import = "java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");

Connection conn = null;

String url = "jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password";
conn = DriverManager.getConnection(url);
conn.close();
%>
</body>
</html>


사용자 삽입 이미지

mysqlConn.jsp 실행결과


'프로그래밍 > Java' 카테고리의 다른 글

Java SE 설치  (0) 2008.11.26
Java SE 다운로드  (0) 2008.11.24
AND

MySQL 기본

프로그래밍/MySQL 2009. 3. 26. 12:53
MySQL Server의 설치가 완료됐으면 이제 MySQL 사용법을 익혀보기 위해 Windows "명령 프롬프트"를 실행하자. "명령 프롬프트"는 XP의 경우 "시작 -> 모든프로그램 -> 보조프로그램 -> 명렬 프롬프트"를 통해 실행하거나 또는 "시작 -> 실행" 창에서 "cmd"를 입력하면 실행할 수 있다.

우리가 설치한 MySQL Server는 OS(Windows 또는 UNIX)가 부팅될 때 자동으로 시작되는 범용 DBMS이며, 서버와 클라이언트 구조로 나뉜다. 서버는 데이터를 터리하는 핵심이 되는 프로그램으로 명령 또는 쿼리를 받으면 그에 합당하게 데이터를 조작하는 역할을 한다. 서버는 사용자가 직접 조작할 수 없으며, 클라이언트 프로그램을 통해 서버에 명령을 전달하고 서버로부터 처리된 결과 역시 클라이언트를 통해 전달 받는다. 그러므로 서버를 설치할 때 문자 기반의 "mysql"이란 클라이언트 프로그램을 함께 설치한다. "mysql"을 이용 서버에 접속하는 방법은 여러가지가 있으나 일반적으로 다음과 같은 방법을 사용한다.

mysql   -u  사용자ID  -p


"-u" 옵션 뒤에는 데이터베이스 사용자 ID를 준다. 그리고 해당 사용자 ID로 데이터베이스 서버에 접속할 때 비밀번호가 필요하면 "-p" 옵션을 줘야 한다.

그러면 데이터베이스 서버에 관리자로 접속하기 위해 다음 명령을 입력해 보자.

mysql  -u  root  -p

위에서 사용자 ID로 주어진 "root"는 MySQL 에서 관리자 아이디를 의미한다. 그리고 "-p"옵션이 있으므로 비밀번호를 필요로한다. 비밀번호는 MySQL Server 설치시 설정한 관리자 비밀번호를 입력하면 된다. 접속에 성공하였다면 다음 그림과 같은 화면이 출력된다.

사용자 삽입 이미지

위 화면에서 메세지와 함께 프롬프트 "mysql>"이 출력되는데 이 것은 클라이언트가 새로운 명령을 기다리고 있음을 의미한다. 그러면 다음 명령을 입력해 보자.

show databases;

사용자 삽입 이미지

이 명령은 현재 서버가 관리하고 있는 데이터베이스의 목록을 나열해 준다. 출력 결과는 현재 서버가 총 세 개의 데이터베이스 "information_schema", "mysql", "test"를 관리하고 있음을 보여준다. 여기서 "mysql"이란 이름의 데이터베이스는 사용자, 접근권한 등과 같이 서버에 의해 특별하게 관리되는 정보를 위한 데이터베이스다.

현 시점에서는 세 개의 데이터베이스 중 어느 것도 사용할 수 없는 상태다. 그러므로 데이터베이스 중 사용하고자 하는 하나의 데이터베이스를 선택해야 한다. 데이터베이스 선택을 위한 명령은 다음과 같다.

use   데이터베이스이름 ;


그러면 다음 명령을 이용 서버과 특별하게 관리하는 데이터베이스인 "mysql"를 선택해 보자.

use  mysql ;

사용자 삽입 이미지

"Database changed"란 메세지가 출력되면 "use mysql;" 명령이 올바르게 처리된 것이다. 각 데이터베이스는 여러개의 테이블을 관리한다. 따라서 임의의 데이터베이스가 관리하는 테이블을 확인하려면 다음 명령으로 확인할 수 있다.

show tables ;

사용자 삽입 이미지

이 명령은 현재 사용 중인 데이터베이스가 관리하는 테이블 목록을 출력한다. 그러므로 "show tables;" 명령의 결과 화면은 "use mysql;"명령에 의해 현재 사용 중인 데이터베이스 "mysql"이 관리하는 테이블의 목록으로 "columns_priv" 부터 "user"까지 총 17 개의 테이블들을 관리하고 있음을 알 수 있다.

데이터베이스 테이블은 필드와 레코드들로 구성되어 있다. 따서서 테이블 필드의 구조를 확인하기 위한 명령은 다음과 같다.

desc 테이블명 ;


만약 "mysql"이 관리하고 있는 테이블 중 "host" 테이블의 필드 구조를 확인하고 싶으면 다음 명령을 입력한다.

desc  host ;

사용자 삽입 이미지

위 화면은 "host" 테이블의 구조를 보여주고 있다. 이 결과를 통해 "host" 테이블은 19 개의 필드로 구성되어 있음을 확인할 수 있으며, 각 필의의 타입과 속성 등도 함께 확인할 수 있다. 예를 들면 "Host" 필드의 경우 타입은 char(60)이고, null 값을 허용하지 않으며, 주키(Primary Key)로 설정돼 있다. 또 하나의 필드 "Index_priv"의 경우 타입 emun('N','Y')에 의해 가질 수 있는 값은 문자 'N' 또는 'Y'이며, null 값을 가질 수 없고, null 값이 주어지면 기본값 'N'을 갖게된다.

데이터베이스 "mysql"이 관리하는 테이블 중 "user"는 데이터베이스 사용자 정보를 저장 관리하는 테이블이다. 이 테이블은 사용자아이디와 비밀번호 및 MySQL Server가 관리하는 모든 데이터베이스에 대한 사용자의 접근권한 등의 정보를 가지고 있다. 이 테이블의 내용을 보기 위해서는 SQL 중 검색을 위한 "SELECT" 문을 이용해 확인할 수 있다. 다음 명령을 입력해 보자.

SELECT host, user from user ;

사용자 삽입 이미지

위 명령은 테이블 "user"에 저장된 사용자 정보 중 "host", "user" 필드의 내용을 보여주고 있다. 설치 옵션에 따라 다르겠지만 위 결과를 살펴보면 "user" 테이블은 세 개의 레코드를 가짐을 알 수 있다. 그리고 "user" 필드는 데이터베이스 사용자 아이디를 저장하는 필드로 "root"는 데이터베이스 관리자를 의미한다. "host" 필드는 데이터베이스서버로 접속할 수 있는 컴퓨터를 지정하는데, 이 값이 "%"이면 인터넷상의 모든 컴퓨터를 의미하며, "localhost"는 데이터베이스 서버 자신을 의미한다. 그러므로 "root" 즉 관리자는 데이터베이스 서버에 접속할 때 데이터베이스 서버가 실행 중인 컴퓨터에서만 접속이 가능하고 인터넷 상의 다른 컴퓨터에서는 접속이 불가능 하다. 이 외에도 기타 권한은 "user" 테이블의 다른 필드값에 의해 결정된다.

또 다른 테이블 "db"의 내용을 확인하기 위해 다음 SQL 문을 실행하자.

SELECT host, user, db from db ;

사용자 삽입 이미지

"db" 테이블은 특정 사용자와 특정 데이터베이스 사이의 접근권한 등의 관계 정보를 저장하는 테이블이다. 위 결과를 살펴보면 익명의 사용자와 "test"란 이름의 데이터베이스 또는 "test_"로 시작되는 모든 데이터베이스 사이의 관계된 정의를 하고 있다. 둘 사이의 정확한 관계는 "db" 테이블의 다른 필드에 정의되어 있지만 여기서는 생략하도록 한다.

자 그러면 실습을 위해 새로운 데이터베이스 "jsp"를 만들어보자. 새로운 데이터베이스를 만들기 위한 SQL 문은

CREATE DATABASE  database-name ;

이므로 database-name 부분을 jsp로 바꾸면 데이터베이스 "jsp"를 만들 수 있다.

CREATE  DATABASE  jsp ;

사용자 삽입 이미지

"Query OK, 1 row affected (0.00 sec)" 메세지가 나오면 데이터베이스 "jsp"가 만들어진 것이다. 확인을 위해 앞에서 배웠던 "show databases ;"를 입력해 보자.

사용자 삽입 이미지

결과를 확인해 보면 데이터베이스 "jsp"가 추가되었음을 알 수 있다. 실습을 위한 데이터베이스 "jsp"를 추가했으면 다음 쿼리를 이용하여 실습을 위한 새로운 사용자를 추가해 보자. 여기서 기울임체로 된 your_password 부분은 자신이 원하는 비밀번호로 대치한다.

GRANT SELECT, UPDATE, INSERT, DELETE, CREATE, DROP, ALTER
ON jsp.* TO 'jsp'@'localhost'
IDENTIFIED BY 'your_password' ;

사용자 삽입 이미지

위 쿼리는 "localhost"에서 접근 가능한 데이터베이스 사용자 "jsp"를 등록하였다. 이 사용자 "jsp"는 데이터베이스 서버에 접속할 때 "your_password"를 사용해 접속해야 하며, 접속 후 데이터베이스 "jsp"에 대한 접근권한과 연관된 관계를 정의하고 있다. 이 쿼리에서 데이터베이스 사용자 "jsp"는 데이터베이스 "jsp"에 대해 "SELECT", "UPDATE", "INSERT", "DELETE", "CREATE", "DROP", "ALTER" 등의 쿼리를 실행할 수 있도록 권한이 설정되었다.

그러면 올바르게 데이터베이스 사용자가 추가 되었는지 "user" 테이블을 살펴보자.

SELECT host, user FROM user ;

사용자 삽입 이미지

결과를 살펴보면 "LOCALHOST"에서 접속 가능한 사용자 "jsp"가 등록되었음을 확인할 수 있다. 또한 사용자와 데이터베이스와의 관계를 정의하고 있는 "db" 테이블을 살펴보자.

SELECT host, user, db FROM db ;

사용자 삽입 이미지

결과를 살펴보면 데이터베이스 사용자 "jsp"가 "localhost"에서 접속했을 때 데이터베이스 "jsp"에 대한 관계를 정의하고 있다. 결과에서는 관계를 알 수 없지만 이 관계는 "db" 테이블의 다른 필드에 정의되어 있으므로

SELECT * FROM db ;


쿼리를 통해 확인할 수 있다. 관계를 확인했으면

exit ;


명령을 통해 MySQL Client 프로그램을 종료하자.

사용자 삽입 이미지

이제 새롭게 등록한 사용자로 "명령 프롬프트" 상에서 다음 명령을 이용 재 접속을 시도해 보자.

mysql  -u  jsp  -p

이 때 비밀번호는 "GRANT"를 이용 사용자 "jsp"를 등록할 때 주어진 비밀번호를 입력한다.

사용자 삽입 이미지

접속에 성공하면 다음 명령을 순서대로 입력하여 그 결과를 확인해 보자.

show  databases ;
use  jsp
show tables ;

사용자 삽입 이미지

MySQL과 관련된 더 자세한 내용을 공부하고 싶다면 다른 참고서적을 찾아보도록 하자.

'프로그래밍 > MySQL' 카테고리의 다른 글

MySQL Server 설치  (0) 2009.03.23
MySQL 커뮤니티 서버 다운로드  (0) 2008.11.24
AND

웹프로그램을 배우는 목적은 여러가지가 있을 수 있다. 여기서는 두 가지 정도의 목적을 살펴보겠다. 먼저 다음 그림과 같은 구구단표를 웹브라우저에서 보기위한 html 코드를 작성한다고 생각해 보자.

사용자 삽입 이미지

구구단표 만들기

위 그림을 출력하려면 아래 "mux.html"과 같은 HTML 코드를 작성해야 한다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<CENTER>
구구단
<TABLE BORDER="1">
   <TR>
      <TD>1*1=1</TD>
      <TD>1*2=2</TD>
      <TD>1*3=3</TD>
      <TD>1*4=4</TD>
      <TD>1*5=5</TD>
      <TD>1*6=6</TD>
      <TD>1*7=7</TD>
      <TD>1*8=8</TD>
      <TD>1*9=9</TD>
   </TR>
   <TR>
      <TD>2*1=2</TD>
      <TD>2*2=4</TD>
      <TD>2*3=6</TD>
      <TD>2*4=8</TD>
      <TD>2*5=10</TD>
      <TD>2*6=12</TD>
      <TD>2*7=14</TD>
      <TD>2*8=16</TD>
      <TD>2*9=18</TD>
   </TR>
   <TR>
      <TD>3*1=3</TD>
      <TD>3*2=6</TD>
      <TD>3*3=9</TD>
      <TD>3*4=12</TD>
      <TD>3*5=15</TD>
      <TD>3*6=18</TD>
      <TD>3*7=21</TD>
      <TD>3*8=24</TD>
      <TD>3*9=27</TD>
   </TR>
   <TR>
      <TD>4*1=4</TD>
      <TD>4*2=8</TD>
      <TD>4*3=12</TD>
      <TD>4*4=16</TD>
      <TD>4*5=20</TD>
      <TD>4*6=24</TD>
      <TD>4*7=28</TD>
      <TD>4*8=32</TD>
      <TD>4*9=36</TD>
   </TR>
   <TR>
      <TD>5*1=5</TD>
      <TD>5*2=10</TD>
      <TD>5*3=15</TD>
      <TD>5*4=20</TD>
      <TD>5*5=25</TD>
      <TD>5*6=30</TD>
      <TD>5*7=35</TD>
      <TD>5*8=40</TD>
      <TD>5*9=45</TD>
   </TR>
   <TR>
      <TD>6*1=6</TD>
      <TD>6*2=12</TD>
      <TD>6*3=18</TD>
      <TD>6*4=24</TD>
      <TD>6*5=30</TD>
      <TD>6*6=36</TD>
      <TD>6*7=42</TD>
      <TD>6*8=48</TD>
      <TD>6*9=54</TD>
   </TR>
   <TR>
      <TD>7*1=7</TD>
      <TD>7*2=14</TD>
      <TD>7*3=21</TD>
      <TD>7*4=28</TD>
      <TD>7*5=35</TD>
      <TD>7*6=42</TD>
      <TD>7*7=49</TD>
      <TD>7*8=56</TD>
      <TD>7*9=63</TD>
   </TR>
   <TR>
      <TD>8*1=8</TD>
      <TD>8*2=16</TD>
      <TD>8*3=24</TD>
      <TD>8*4=32</TD>
      <TD>8*5=40</TD>
      <TD>8*6=48</TD>
      <TD>8*7=56</TD>
      <TD>8*8=64</TD>
      <TD>8*9=72</TD>
   </TR>
   <TR>
      <TD>9*1=9</TD>
      <TD>9*2=18</TD>
      <TD>9*3=27</TD>
      <TD>9*4=36</TD>
      <TD>9*5=45</TD>
      <TD>9*6=54</TD>
      <TD>9*7=63</TD>
      <TD>9*8=72</TD>
      <TD>9*9=81</TD>
   </TR>
</TABLE>
</CENTER>
</body>
</html>

이 HTML 코드의 길이는 그리 길지 않지만 다음 "mux.jsp"와 같은 JSP 프로그램으로 다시 작성하면 동일한 결과를 보임과 동시에 더 짧은 코드로 쓸 수 있다.
 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<CENTER>
구구단
<TABLE BORDER="1">
<%
int i, j;

for(i = 1; i <= 9; i ++) {
    out.println("   <TR>");
    for(j = 1; j <= 9; j ++) {
        out.print("      <TD>");
        out.print(i + "*" + j + "=" + i*j);
        out.println("</TD>");
    }
    out.println("   </TR>");
}
%>
</TABLE>
</CENTER>
</body>
</html>

 

사용자 삽입 이미지

mux.jsp 실행결과


물론 "mux.html"의 길이가 그리 긴 편은 아니지만 만약 "9 x 9" 단이 아닌 "9999 x 9999" 단이라면 어떨까. HTML 코드로 작성한다면 상당한 수고를 해야 작성할 수 있을 것이다. 코드의 길이도 길이지만 곱셈의 결과 또한 하나하나 확인해야 하기 때문이다. 그러나 JSP 프로그램으로 다시 작성한다면 "mux.jsp"에서 for 문 안에 사용된 두 개의 9 만 바꾸면 큰 수고를 들이지 않고 작성할 수 있다. 따라서 HTML의 반복적인 부분을 프로그램화 함으로써 코드의 효율성을 증가시킬 수 있다.

또 다른 경우를 생각해 보자. 다음 그림과 같이 서버 접속 시 브라우저에 접속 당시의 날짜와 시각을 출력하는 페이지를 만들려고 한다.

사용자 삽입 이미지

접속 날짜 및 시각 출력하기


브라우저 출력결과만을 고려한다면 다음과 같은 코드 "today.html"로 작성할 수 있다. 그러나 시간이 지난 후 다시 "today.html"로 접속한다면 여전히 출력되는 결과는 변하지 않으며, 원래 의도인 접속 당시의 날짜와 시각을 출력할 수 없다. 물론 일정 시간을 간격으로 관리자가 "today.html"의 내용을 갱신한다면 가능할 수도 있으나 그 간격이 1분 아니 1초라면 갱신은 불가능할 것이다. 그러나 웹프로그램으로 구현한다면 이런 문제를 해결할 수 있다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
현재 시간은 Tue Mar 24 23:12:25 KST 2009 입니다.
</body>
</html>

다음 프로그램 "today.jsp"는 접속 당시의 날짜와 시각을 출력하는 프로그램이다. 이 프로그램은 프로그램이 자동으로 서버의 날짜와 시각을 읽어와 접속을 요구한 브라우저로 결과를 돌려준다. 따라서 프로그램을 한 번 작성하면 내용을 수정하지 않아도 자동으로 날짜와 시각을 변경하며 출력해 준다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Date toDay = new Date();
%>
현재 시간은 <%= toDay %> 입니다.
</body>
</html>


사용자 삽입 이미지

today.jsp 실행결과


이처럼 웹프로그램을 이용하면 자동으로 변하는 동적인 페이지를 생성할 수 있다.
AND

MySQL Server 설치를 위해 Setup 파일을 실행한 후 "Next" 버튼을 클릭한다.

사용자 삽입 이미지

MySQL Server 설치 첫 화면


MySQL Server의 구성요소 중 무엇을 설치할 것인지를 결정한다. "Typical"은 기본으로 설치함을 의미하며, "Complete"는 모든 구성요소를 설치함을 마지막 "Custom"은 사용자가 원하는 항목만의 설치를 의미한다. 여기서는 기본 설치를 위해 "Typical" 항목을 선택한다.

사용자 삽입 이미지

구성요소 선택 화면


설치를 위한 모든 선택을 마친 후 나타나는 화면으로 "Install" 버튼을 클릭하면 설치가 진행된다.

사용자 삽입 이미지

설치를 위한 모든 준비가 됐음을 나타내는 화면


설치가 진행 중임을 나타나는 화면이다.

사용자 삽입 이미지

설치 중 화면


설치가 끝나면 MySQL과 관련된 소개의 화면이 두 번 나타난다.

사용자 삽입 이미지

사용자 삽입 이미지

MySQL과 관련된 간단한 소개


MySQL과 관련된 소개 화면이 나타난 후 MySQL Server의 환경 설정을 위해 "Configure the MySQL Server now" 항목을 선택한 다음 "Finish" 버튼을 클릭한다.

사용자 삽입 이미지

모든 설치를 마친 후 화면


설치된 MySQL Server의 환경 설정을 위한 화면으로 "Next" 버튼을 클릭한다.

사용자 삽입 이미지

MySQL Server 환경설정 화면


문자셋, 관리자 암호 등을 세부 설정이 필요하므로 "Detailed Configuration"을 선택하고 "Next" 버튼을 클릭한다.

사용자 삽입 이미지

설정방법 결정을 위한 화면


MySQL Server가 어떤 목적으로 사용될 것인지를 정하는 화면으로 개발환경에 맞도록 "Developer Machine" 항목을 선택한 후 "Next" 버튼을 클릭한다.

사용자 삽입 이미지

서버의 주된 사용 목적을 지정하는 화면


MySQL Server가 사용할 엔진을 설정하는 부분으로 MyISAM, InnoDB 두 엔진 모두를 사용하도록 "Multifunctional Database"를 선택한다. MyISAM 엔진은 빠른 처리속도를 보이지만 트랙잭션 처리가 불가능하고, MyISAM 엔진은 처리 속도가 느린 반면 트랜잭션을 처리할 수 있다는 장점이 있다. 따라서 InnoDB 엔진 만을 사용하려면 "Transational Database Only" 항목을 선택하고 MyISAM 엔진 만을 사용하려면 "Non-Transational Database Only" 항목을 선택한다.

사용자 삽입 이미지

Database 엔진 설정 화면


데이터가 저장될 디스크 드라이브 및 폴더를 지정한다. 여기서는 기본 값으로 설정하지만 "..." 부분을 클릭하여 다른 경로로도 변경할 수 있다.

사용자 삽입 이미지

데이터가 저장될 위치 지정


MySQL Server에 동시 연결 가능한 접속 수를 지정한다. 기본값 "Decision Support(DSS)/OLAP" 항목을 선댁하고 이는 최대 20 개의 동시 접속을 허용한다. "Online Transaction Processing(OLTP)" 항목은 최대 500 개 까지의 동시 접속 처리가 가능하며, 수동으로 동시 접속 수를 지정하려면 "Manual Setting"을 선택한다.

사용자 삽입 이미지

서버로의 최대 접속 수 설정 화면


TCP/IP를 이용 MySQL Server로의 접속을 허용할 경우 서버가 사용하는 TCP/IP Socket의 Port 번호를 지정한다. 기본값은 3306 이다.

사용자 삽입 이미지

TCP/IP 연결 설정 화면


MySQL Server의 기본 문자셋을 설정하는 화면으로 한글을 포함한 다국어 지원을 위해 "Manual Selected Default Charset / Collation"을 선택한 후 "Character Set" 항목을 "utf8"로 선택한다.

사용자 삽입 이미지

문자셋 설정 화면


MySQL Server를 Windows NT 계열(NT, 2000, 2003, XP, Vista)의 서비스로 실행하도록 "Install As Windows Service" 항목을 선택한다. Windows 95, 98, Me 는 NT 계열이 아니므로 이 항목을 선택할 수 없다. 또한 Windows의 명령어 프롬프트를 통하여 어느 폴더에서나 MySQL 관련 명령어(프로그램)를 실행할 수 있도록 "Include Bin Directory in Windows PATH" 항목을 선택한다.

사용자 삽입 이미지

서버 시작환경 및 PATH 변수 설정 화면


MySQL 서버의 관리자 암호를 설정하는 화면으로 "New root password:" 항목에 원하는 관리자 암호를 입력하고 "Confirm:" 항목에 확인을 위해 동일한 암호를 한번 더 입력함으로써 관리자 암호를 지정한다. "Current root password" 항목은 버전 업그레이드 등을 위해 이미 MySQL Server를 설치 운영하고 있던 컴퓨터에 재 설치할 경우 기존의 관리자 비밀번호를 입력하는 항목이며, MySQL Server를 처음 설치하는 경우라면 나타나지 않는다.

사용자 삽입 이미지

관리자 비밀번호 설정 화면


관리자 암호까지 모두 마쳤으면 MySQL Server를 실행하기 위한 화면이 나타난다. 여기서 "Execute" 버튼을 클릭하면 MySQL Server를 설정한 내용으로 실행한다.

사용자 삽입 이미지

설정된 값으로 서버 실행


MySQL Server의 실행이 정상적으로 이루어지면 다음과 같이 네 가지 항목 모두가 체크되고 메세지를 출력한다. 여기서 "Finish" 버튼을 클릭하면 모든 설치가 완료된다.

사용자 삽입 이미지

서버의 성공적 실행 후 나타나는 화면


'프로그래밍 > MySQL' 카테고리의 다른 글

MySQL 기본  (0) 2009.03.26
MySQL 커뮤니티 서버 다운로드  (0) 2008.11.24
AND