Notice
Recent Posts
Recent Comments
ยซ   2024/12   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
In Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

A Joyful AI Research Journey๐ŸŒณ๐Ÿ˜Š

*[59] 230323 JSP Ch. 14 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ: JSP์—์„œ JDBC(Java DataBase Connectivity) ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 59์ผ] SQL ๋ณธ๋ฌธ

๐ŸŒณBootcamp Revision 2023โœจ/HTML5, CSS3, JSP

*[59] 230323 JSP Ch. 14 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ: JSP์—์„œ JDBC(Java DataBase Connectivity) ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 59์ผ] SQL

yjyuwisely 2023. 3. 23. 11:25

230323 Thu 59th class

Ch. 14 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ
์ง„๋„: p. 315~ (์ฃผ์ œ๋ณ„๋กœ ๋ฌถ๊ธฐ ์œ„ํ•ด ์•„๋žซ๊ธ€๋กœ ๊ธ€ ๋‚ด์šฉ ์˜ฎ๊น€.) 
์ง„๋„: p. 376 ~ (๊ต์žฌ: ์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€, ์ €์ž: ์ตœ๋ฒ”๊ท )
์ฑ… ์˜ˆ์ œ ์ฝ”๋“œ: https://github.com/madvirus/jsp23
์ €์ž ๋ธ”๋กœ๊ทธ: https://javacan.tistory.com/

 

์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€ | ์ตœ๋ฒ”๊ท  - ๊ต๋ณด๋ฌธ๊ณ 

์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€ | [์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€]๋Š” JSP 2.3์˜ ์ƒˆ๋กœ์šด ํŠน์ง• ๋ฐ˜์˜๊ณผ JSP๋ฅผ ์ง€์›ํ•˜๋Š” ์š”์†Œ์ธ ์„œ๋ธ”๋ฆฟ๊ณผ ํ‘œํ˜„ ์–ธ์–ด ๋“ฑ์˜ ์ƒˆ๋กœ์šด

product.kyobobook.co.kr


์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ ์ค‘ ๊ธฐ์–ตํ•  ๊ฒƒ์„ ์ •๋ฆฌํ–ˆ๋‹ค.


Ch. 14 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ

01 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ดˆ
1.1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ DBMS
1.2 ํ…Œ์ด๋ธ”๊ณผ ๋ ˆ์ฝ”๋“œ
1.3 ์ฃผ์š”ํ‚ค(Primary Key)์™€ ์ธ๋ฑ์Šค(Index)
1.4 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ผ๋ฐ˜์  ์ˆœ์„œ
1.5 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•„์ˆ˜ ์š”์†Œ

02 ์˜ˆ์ œ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

03 SQL ๊ธฐ์ดˆ
3.1 ์ฃผ์š” SQL ํƒ€์ž…
3.2 ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ฟผ๋ฆฌ
3.3 ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์ฟผ๋ฆฌ
3.4 ๋ฐ์ดํ„ฐ ์กฐํšŒ ์ฟผ๋ฆฌ - ์กฐํšŒ ๋ฐ ์กฐ๊ฑด
3.5 ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ์กฐํšŒ - ์ •๋ ฌ
3.6 ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ์กฐํšŒ - ์ง‘ํ•ฉ
3.7 ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์ฟผ๋ฆฌ
3.8 ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ฟผ๋ฆฌ
3.9 ์กฐ์ธ

04 ํ”„๋กœ์ ํŠธ ์ค€๋น„

05 JSP์—์„œ JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ
5.1 JDBC์˜ ๊ตฌ์กฐ
5.2 JDBC ๋“œ๋ผ์ด๋ฒ„ ์ค€๋น„ํ•˜๊ธฐ
5.3 JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ 
5.4 DBMS์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ JDBC ๋“œ๋ผ์ด๋ฒ„
5.5 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹๋ณ„์„ ์œ„ํ•œ JDBC URL
5.6 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜
5.7 Statement๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰
5.8 ResultSet์—์„œ ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ
5.9 ResetSet์—์„œ LONG VARCHAR ํƒ€์ž… ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ
5.10 Statement๋ฅผ ์ด์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ž‘์€๋”ฐ์˜ดํ‘œ ์ฒ˜๋ฆฌ
5.11 PreparedStatement๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰
5.12 PreparedStatement์—์„œ LONG VARCHAR ํƒ€์ž… ๊ฐ’ ์ •ํ•˜๊ธฐ
5.13 PreparedStatement ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

06 ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉํ•˜๊ธฐ

07 JDBC์—์„œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ

08 ์ปค๋„ฅ์…˜ ํ’€
8.1 ์ปค๋„ฅ์…˜ ํ’€์ด๋ž€
8.2 DBCP๋ฅผ ์ด์šฉํ•ด์„œ ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉํ•˜๊ธฐ

์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ฐ˜์ด๋ผ๊ณ  ํ•  ์ •๋„๋กœ ๊ฑฐ์˜ ๋ชจ๋“  JSP ํŽ˜์ด์ง€๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•œ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” JDBC API๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, JDBC API ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜€๋ณธ๋‹ค.


์‚ฌ์šฉ์ž ํ™”๋ฉด(front-end)
: ์ง์ ‘์ ์œผ๋กœ ๋ˆˆ์— ๋ณด์ธ๋‹ค.




์„œ๋น„์Šค(back-end)

ex) ํšŒ์›๊ฐ€์ž…: ํ™”๋ฉด์—์„œ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์„œ ์„œ๋ฒ„์— ๋„ฃ๋Š”๋‹ค.

์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์ด์œ : ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์„œ ๋ฐฑ์—”๋“œ ์ž‘์—…์„ ํ•œ๋‹ค. 
 

HTML



CSS



Javascript

+

Server

= ์ „์ฒด๊ฐ€ JSP๊ฐ€ ๋œ๋‹ค.
JAVA



Database 
(ํšŒ์› ๊ฐ€์ž… ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์˜ ํ•œ ํ–‰์— ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค. ์˜๊ตฌ ๋ณด๊ด€)

JDBC(Java Database Connectivity)๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค. (=ODBC)





 

14.4 ํ”„๋กœ์ ํŠธ ์ค€๋น„

14.5 JSP์—์„œ JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ

์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ์—๋Š” JDBC(Java DataBase Connectivity) API(Application Programming Interface)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” API์ด๋‹ค. 
์ž๋ฐ”๋Š” DBMS์˜ ์ข…๋ฅ˜์— ์ƒ๊ด€์—†์ด ํ•˜๋‚˜์˜ JDBC API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋‹จ ์ตํ˜€๋‘๋ฉด ๋ชจ๋“  DMBS์— ๋Œ€ํ•ด์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


1) JDBC์˜ ๊ตฌ์กฐ p. 378

JDBC API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋žต์ ์ธ ๊ตฌ์กฐ์ด๋‹ค.

JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ตฌ์กฐ

๊ทธ๋ฆผ ์ฐธ๊ณ 

๊ฐ๊ฐ์˜ DBMS๋Š” ์ž์‹ ์—๊ฒŒ ์•Œ๋งž์€ JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ex) ์˜ค๋ผํด, MySQL, MS-SQL ๋“ฑ 
JDBC API๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ์„ ํ•œ๋‹ค. 


2) JDBC ๋“œ๋ผ์ด๋ฒ„ ์ค€๋น„ํ•˜๊ธฐ

https://dev.mysql.com/downloads/ ์— ์ ‘์†ํ•œ๋‹ค.

์šฐ์ธก์˜ Connector/J๋ฅผ ๋‹ค์šด ๋ฐ›๋Š”๋‹ค. 

์••์ถ•์„ ํ’€๊ณ  ๋ณต์‚ฌํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ถ™์—ฌ ๋„ฃ๋Š”๋‹ค.


3) JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ 

JDBC ํ”„๋กœ๊ทธ๋žจ์˜ ์ „ํ˜•์ ์ธ ์‹คํ–‰ ์ˆœ์„œ
1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ๊ตฌํ•จ
3. ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์œ„ํ•œ Statement ๊ฐ์ฒด ์ƒ์„ฑ
4. ์ฟผ๋ฆฌ ์‹คํ–‰
5. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ์‚ฌ์šฉ
6. Statement ์ข…๋ฃŒ
7. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ข…๋ฃŒ


์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

<%@ page import="java.sql.*" %>

MySQL80 ์•„์ด๋””: root

์˜ˆ์ œ 14-1) veiwMemberList.jsp
๊ณ„์† ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์„  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช… = sample

mySQL์˜ sample๋กœ ์ง€์ •

		String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํšŒ์› ๋ชฉ๋ก</title></head>
<body>
<%
	// 1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ(mysql)
	Class.forName("com.mysql.jdbc.Driver");
	Connection conn = null;
	//์—ฐ๊ฒฐํ•˜๊ธฐ
	//๋“œ๋ผ์ด๋ธŒ ๋งค๋‹ˆ์ €์—๊ฒŒ Connection๊ฐ์ฒด๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค.
	//Connection์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(url,id,๋น„๋ฐ€๋ฒˆํ˜ธ)
	try{
		String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
		String dbUser = "root";
		String dbPass = "1234";
	
		DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
	
		out.println("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต");
	}catch(SQLException ex){
		out.println("DB ์—ฐ๊ฒฐ ์‹คํŒจ");
	}finally{
		if(conn!=null){conn.close();}
	}
%>
</body>
</html>

์ž๋ฐ”์˜ 2์ฐจํ˜• ๋ฐฐ์—ด์€ ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ ์ž๋ฐ”๋ฅผ ์“ฐ๊ธฐ ์• ๋งคํ•˜๋‹ค.
์ž๋ฐ”๊ฐ€ ํ…Œ์ด๋ธ” ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด (ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์„œ ์ €์žฅ)

Resultset: select์˜ ๊ฒฐ๊ณผ๋ฅผ DBMS์—์„œ java๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
selectํ•œ ๊ฒƒ(ํ…Œ์ด๋ธ” ํ˜•ํƒœ)์„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ž๋ฐ”์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด

์˜ˆ์ œ 14-1) mySQL์˜ board ํ…Œ์ด๋ธ”์˜ DB๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. viewBoardList.jsp
์กฐ๊ฑด์‹์— ๊ณต์‹์ด ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๊ณ  true๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค. 
while์˜ ์กฐ๊ฑด๋ฌธ์ด true ์ด๋ฏ€๋กœ ์กฐ๊ฑด๋ฌธ์€ ํ•ญ์ƒ ์ฐธ์ด ๋œ๋‹ค. while์€ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ธ ๋™์•ˆ์— while์— ์†ํ•ด ์žˆ๋Š” ๋ฌธ์žฅ๋“ค์„ ๊ณ„์†ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์œ„์˜ ์˜ˆ๋Š” ๋ฌดํ•œํ•˜๊ฒŒ while๋ฌธ ๋‚ด์˜ ๋ฌธ์žฅ๋“ค์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

2023.02.03 - [๐ŸŒณK-Digital Revision 2023โœจ/Java] - [26] 230204 Java Ch. 4 ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ: 2. ๋ฐ˜๋ณต๋ฌธ: for๋ฌธ, while๋ฌธ, do-while๋ฌธ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 26์ผ]

mySQL์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•œ๋‹ค.

2023.03.17 - [๐ŸŒณK-Digital Revision 2023โœจ/SQL] - [54~55] 230316, 230317 SQL ๋ฌธ์ œ ํ’€์ด (member, board ํ…Œ์ด๋ธ”) [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 54~55์ผ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํšŒ์› ๋ชฉ๋ก</title></head>
<body>
<table border="1">
<tr>
	<td>๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ</td><td>์ œ๋ชฉ</td><td>์ž‘์„ฑ์ž</td><td>์ž‘์„ฑ์ผ</td><td>์กฐํšŒ</td><td>์ข‹์•„์š”</td>
</tr>

<%
	// 1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ(mysql)
	Class.forName("com.mysql.jdbc.Driver");
	//java api์— db์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	Connection conn = null;
	
	//workbench sql์„ ์ž‘์„ฑํ•œ ํ›„ ctrl+enter(๊ฒฐ๊ณผ๋„์ถœ)
	//sql๋ฌธ์žฅ์„ ์ž‘์„ฑ์„ ํ•˜๊ณ , ๊ทธ sql๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	Statement stmt = null;
	
	//select์˜ ๊ฒฐ๊ณผ๋ฅผ DBMS์—์„œ java๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	ResultSet rs = null;
	
	//์—ฐ๊ฒฐํ•˜๊ธฐ
	//๋“œ๋ผ์ด๋ธŒ ๋งค๋‹ˆ์ €์—๊ฒŒ Connection๊ฐ์ฒด๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค.
	//Connection์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(url,id,๋น„๋ฐ€๋ฒˆํ˜ธ)
	try{
		String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
		String dbUser = "root";
		String dbPass = "1234";
		
		String query = "select * from board";
		
		//2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
		conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
	
		//3. Statement ์ƒ์„ฑ
		stmt = conn.createStatement();
		
		//4. ์ฟผ๋ฆฌ ์‹คํ–‰
		//workbench์—์„œ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์žฅ์„ ์‹คํ–‰)๋ฅผ ํ†ตํ•ด ๋„์ถœ๋œ select๊ฒฐ๊ณผ๋ฅผ Resultset์— ์ €์žฅ 
		rs = stmt.executeQuery(query);
		
		//5. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ: ๋‹ค์Œ ํ–‰(์ฒซ ๋ฒˆ์งธ ํ–‰)์ด ์กด์žฌํ•˜๋ฉด rs.next()๋Š” true๋ฅผ ๋ฆฌํ„ด
		//rs.next: ํ…Œ์ด๋ธ”์—์„œ ๋ฐ‘ ํ–‰์œผ๋กœ ๋‚ด๋ ค์˜จ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ true (while๋ฌธ์ด true)์ด๋ฏ€๋กœ ๋ฐ˜๋ณตํ•œ๋‹ค.
		//while๋ฌธ์ด false์ด๋ฉด ์ข…๋ฃŒ
		while(rs.next()){	
%>
<tr>
	<td><%=rs.getInt("no") %>
	</td>
	<td><%=rs.getString("title") %>
	</td>
	<td><%=rs.getString("id") %>
	</td>
	<td><%=rs.getString("regdate") %>
	</td>
	<td><%=rs.getInt("count") %>
	</td>
	<td><%=rs.getInt("good") %>
	</td>
</tr>
<% 		
		}
			
		out.println("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต");
	}catch(SQLException ex){
		out.println("DB ์—ฐ๊ฒฐ ์‹คํŒจ");
	}finally{
		if(conn!=null){conn.close();}
	}
%>
</table>
</body>
</html>

๊ฒฐ๊ณผ)


๊ต์žฌ์˜ ์˜ˆ์ œ 14-1) viewMemberListbook.jsp p. 380

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํšŒ์› ๋ชฉ๋ก</title></head>
<body>

MEMBER ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ
<table border="1">
<tr>
	<td>์ด๋ฆ„</td><td>์•„์ด๋””</td><td>์ด๋ฉ”์ผ</td>
</tr>
<%
	// 1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ(mysql)
	Class.forName("com.mysql.jdbc.Driver");

	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	
	try {
		String jdbcDriver = "jdbc:mysql://localhost:3306/chap14?" +
							"useUnicode=true&characterEncoding=utf8";
		String dbUser = "jspexam";
		String dbPass = "jsppw";
		
		String query = "select * from MEMBER order by MEMBERID";
		
		// 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
		conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
		
		// 3. Statement ์ƒ์„ฑ
		stmt = conn.createStatement();
		
		// 4. ์ฟผ๋ฆฌ ์‹คํ–‰
		rs = stmt.executeQuery(query);
		
		// 5. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
		while(rs.next()) {
%>
<tr>
	<td><%= rs.getString("NAME") %></td>
	<td><%= rs.getString("MEMBERID") %></td>
	<td><%= rs.getString("EMAIL") %></td>
</tr>
<%
		}
	} catch(SQLException ex) {
		out.println(ex.getMessage());
		ex.printStackTrace();
	} finally {
		// 6. ์‚ฌ์šฉํ•œ Statement ์ข…๋ฃŒ
		if (rs != null) try { rs.close(); } catch(SQLException ex) {}
		if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
		
		// 7. ์ปค๋„ฅ์…˜ ์ข…๋ฃŒ
		if (conn != null) try { conn.close(); } catch(SQLException ex) {}
	}
%>
</table>

</body>
</html>

4) DBMS์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ JDBC ๋“œ๋ผ์ด๋ฒ„ p. 383

5) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹๋ณ„์„ ์œ„ํ•œ JDBC URL

6) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜


7) Statement๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰ (executeQuery, executeUpdate) p. 387

Statement stmt = conn.createStatement();

Statement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


- ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ (executeQuery, executeUpdate)

ResultSet executeQuery(String query)

SELECT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. SELECT ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ด๊ฐ’์„ java.sql.ResultSet ๊ฐ์ฒด์— ์ €์žฅํ•ด์„œ ๋ฆฌํ„ดํ•œ๋‹ค.

int executeUpdate(String query)

INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋กœ ๋ณ€๊ฒฝ๋œ (๋˜๋Š” ์‚ฝ์ž…๋œ) ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. 
๊ฑด์ˆ˜๋งŒ ์•Œ๋ ค์ค€๋‹ค. (ex. MySQL)

MySQL์˜ ์˜ˆ์‹œ


8) ResultSet์—์„œ ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ p. 391

9) ResetSet์—์„œ LONG VARCHAR ํƒ€์ž… ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ

10) Statement๋ฅผ ์ด์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ž‘์€๋”ฐ์˜ดํ‘œ ์ฒ˜๋ฆฌ

11) PreparedStatement๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰

๊ฒŒ์‹œํŒ ์ œ๋ชฉ ํด๋ฆญ์‹œ URL์— ๊ฒŒ์‹œํŒ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜จ๋‹ค.

์˜ˆ์ œ) viewBorderList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>๊ฒŒ์‹œํŒ</title></head>
<body>
<table border="1">
<tr>
	<td>๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ</td><td>์ œ๋ชฉ</td><td>์ž‘์„ฑ์ž</td><td>์ž‘์„ฑ์ผ</td><td>์กฐํšŒ</td><td>์ข‹์•„์š”</td>
</tr>

<%
	// 1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ(mysql)
	Class.forName("com.mysql.jdbc.Driver");
	//java api์— db์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	Connection conn = null;
	
	//workbench sql์„ ์ž‘์„ฑํ•œ ํ›„ ctrl+enter(๊ฒฐ๊ณผ๋„์ถœ)
	//sql๋ฌธ์žฅ์„ ์ž‘์„ฑ์„ ํ•˜๊ณ , ๊ทธ sql๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	Statement stmt = null;
	
	//select์˜ ๊ฒฐ๊ณผ๋ฅผ DBMS์—์„œ java๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	ResultSet rs = null;
	
	//String title="๊ฐ€๋‚˜๋‹ค";
	
	//์—ฐ๊ฒฐํ•˜๊ธฐ
	//๋“œ๋ผ์ด๋ธŒ ๋งค๋‹ˆ์ €์—๊ฒŒ Connection๊ฐ์ฒด๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค.
	//Connection์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(url,id,๋น„๋ฐ€๋ฒˆํ˜ธ)
	try{
		String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
		String dbUser = "root";
		String dbPass = "1234";
		
		String query = "select * from board"; //executeQuery
		
		//String query = "select * from board where title = '"+"title"+"'";
		
		//String query = "update board set title='๊ฐ€๋‚˜๋‹ค' where no = 1"; //executeUpdate
		//String query = "insert into board(title, content)" values('์ œ๋ชฉ์ž…๋‹ˆ๋‹ค.','๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—...')"; //executeUpdate
		//String query = "delete from board where no = 1"; // executeUpdate
		
		//2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
		conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
	
		//3. Statement ์ƒ์„ฑ
		stmt = conn.createStatement();
		
		//4. ์ฟผ๋ฆฌ ์‹คํ–‰
		//workbench์—์„œ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์žฅ์„ ์‹คํ–‰)๋ฅผ ํ†ตํ•ด ๋„์ถœ๋œ select๊ฒฐ๊ณผ๋ฅผ Resultset์— ์ €์žฅ 
		rs = stmt.executeQuery(query);
		//stmt.executeq
		
		//5. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
		//rs.next: ํ…Œ์ด๋ธ”์—์„œ ๋ฐ‘ ํ–‰์œผ๋กœ ๋‚ด๋ ค์˜จ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ true (while๋ฌธ์ด true)์ด๋ฏ€๋กœ ๋ฐ˜๋ณตํ•œ๋‹ค.
		//while๋ฌธ์ด false์ด๋ฉด ์ข…๋ฃŒ
		while(rs.next()){	
%>
<tr>
	<td><%=rs.getInt("no") %>
	</td>
	<td><a href="viewBoardDetail.jsp?no=<%=rs.getInt("no")%>"><%=rs.getString("title") %></a>
	</td>
	<td><%=rs.getString("id") %>
	</td>
	<td><%=rs.getString("regdate") %>
	</td>
	<td><%=rs.getInt("count") %>
	</td>
	<td><%=rs.getInt("good") %>
	</td>
</tr>
<% 		
		}
			
		out.println("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต");
	}catch(SQLException ex){
		out.println("DB ์—ฐ๊ฒฐ ์‹คํŒจ");
	}finally{
		if(conn!=null){conn.close();}
	}
%>
</table>
</body>
</html>

๊ฒฐ๊ณผ)


์˜ˆ์ œ) ViewBoardDetail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>๊ฒŒ์‹œํŒ ๋‚ด์šฉ</title></head>
<body>
<table border="1">
<tr>
	<td>๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ</td><td>์ œ๋ชฉ</td><td>๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ</td><td>์ž‘์„ฑ์ž</td><td>์ž‘์„ฑ์ผ</td><td>์กฐํšŒ</td><td>์ข‹์•„์š”</td>
</tr>
<%
	int no = Integer.parseInt(request.getParameter("no"));
	// 1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ(mysql)
	Class.forName("com.mysql.jdbc.Driver");
	//java api์— db์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	Connection conn = null;
	
	//workbench sql์„ ์ž‘์„ฑํ•œ ํ›„ ctrl+enter(๊ฒฐ๊ณผ๋„์ถœ)
	//sql๋ฌธ์žฅ์„ ์ž‘์„ฑ์„ ํ•˜๊ณ , ๊ทธ sql๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	//Statement stmt = null;
	PreparedStatement pstmt = null;
	
	//select์˜ ๊ฒฐ๊ณผ๋ฅผ DBMS์—์„œ java๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
	ResultSet rs = null;
	
	//์—ฐ๊ฒฐํ•˜๊ธฐ
	//๋“œ๋ผ์ด๋ธŒ ๋งค๋‹ˆ์ €์—๊ฒŒ Connection๊ฐ์ฒด๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค.
	//Connection์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(url,id,๋น„๋ฐ€๋ฒˆํ˜ธ)
	try{
		String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
		String dbUser = "root";
		String dbPass = "1234";
		
		//2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
		conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
		
		String query = "select * from board where no =?"; //executeQuery
		//3. Statement ์ƒ์„ฑ
		pstmt = conn.prepareStatement(query);
		pstmt.setInt(1, no); //์ฒซ๋ฒˆ์งธ ๋ฌผ์Œํ‘œ์—๋Š” no๊ฐ’์„ ๋„ฃ์–ด๋ผ.
		
		//4. ์ฟผ๋ฆฌ ์‹คํ–‰
		//workbench์—์„œ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์žฅ์„ ์‹คํ–‰)๋ฅผ ํ†ตํ•ด ๋„์ถœ๋œ select๊ฒฐ๊ณผ๋ฅผ Resultset์— ์ €์žฅ 
		rs = pstmt.executeQuery();
		//stmt.executeq
		
		//5. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
		//rs.next: ํ…Œ์ด๋ธ”์—์„œ ๋ฐ‘ ํ–‰์œผ๋กœ ๋‚ด๋ ค์˜จ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ true (while๋ฌธ์ด true)์ด๋ฏ€๋กœ ๋ฐ˜๋ณตํ•œ๋‹ค.
		//while๋ฌธ์ด false์ด๋ฉด ์ข…๋ฃŒ
		if(rs.next()){	
%>
<!-- ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํŒ ๊ธ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ ๋‹ค. -->
<tr>
	<td><%=rs.getInt("no") %>
	</td>
	<td><a href="viewBoardDetail.jsp?no=<%=rs.getInt("no")%>"><%=rs.getString("title") %></a>
	</td>
	<td><%=rs.getString("content") %>
	</td>
	<td><%=rs.getString("id") %>
	</td>
	<td><%=rs.getString("regdate") %>
	</td>
	<td><%=rs.getInt("count") %>
	</td>
	<td><%=rs.getInt("good") %>
	</td>
</tr>
<% 		
		}
			
		out.println("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต");
	}catch(SQLException ex){
		out.println("DB ์—ฐ๊ฒฐ ์‹คํŒจ");
	}finally{
		if(conn!=null){conn.close();}
	}
%>
</table>
</body>
</html>

๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ ๋ˆ„๋ฅด๋ฉด ๋‚ด์šฉ์ด ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ œ๋ชฉ ๋ˆ„๋ฅด๋‹ˆ๊นŒ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์ด ๋‚˜์˜จ๋‹ค.

 


 

12) PreparedStatement์—์„œ LONG VARCHAR ํƒ€์ž… ๊ฐ’ ์ •ํ•˜๊ธฐ

13) PreparedStatement ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 


14.6 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉํ•˜๊ธฐ


14.7 JDBC์—์„œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ


14.8 ์ปค๋„ฅ์…˜ ํ’€ p. 416

์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์€ ์ปค๋„ฅ์…˜ ํ’€ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋œ ์ผ์–ด๋‚˜๊ฒŒ ํ•œ๋‹ค.


1) ์ปค๋„ฅ์…˜ ํ’€์ด๋ž€

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ปค๋„ฅ์…˜์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ํ’€(pool) ์†์— ์ €์žฅํ•ด ๋‘๊ณ  ์žˆ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ์— ์ปค๋„ฅ์…˜์„ ํ’€์—์„œ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ๋‹ค์‹œ ํ’€์— ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

๊ทธ๋ฆผ 14-24) ์ปค๋„ฅ์…˜ ํ’€ ๊ธฐ๋ฒ•

๊ทธ๋ฆผ ์ฐธ๊ณ : https://owin2828.github.io/devlog/2020/01/06/java-4.html

ํŠน์ง•
- ํ’€ ์†์— ๋ฏธ๋ฆฌ ์ปค๋„ฅ์…˜์ด ์ƒ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋“œ๋Š” ์—ฐ๊ฒฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
- ์ปค๋„ฅ์…˜์„ ๊ณ„์†ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ๋˜๋Š” ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€๋œ๋‹ค.


2) DBCP๋ฅผ ์ด์šฉํ•ด์„œ ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉํ•˜๊ธฐ

2.1) ํ•„์š”ํ•œ jar ํŒŒ์ผ ๋ณต์‚ฌํ•˜๊ธฐ
2.2) ์ปค๋„ฅ์…˜ ํ’€ ์ดˆ๊ธฐํ™” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค
3.3) ์ปค๋„ฅ์…˜ ํ’€ ์ดˆ๊ธฐํ™” ์„œ๋ธ”๋ฆฟ ์„ค์ •
3.4) ์ปค๋„ฅ์…˜ ํ’€๋กœ๋ถ€ํ„ฐ ์ปค๋„ฅ์…˜ ์‚ฌ์šฉํ•˜๊ธฐ
3.5) ์ปค๋„ฅ์…˜ ํ’€ ์†์„ฑ ์„ค๋ช…


728x90
๋ฐ˜์‘ํ˜•
Comments