[SERVLET] ๐Ÿ—ƒ๏ธ CP(Connection Pool)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Connection ๊ฐ์ฒด ์–ป์–ด์˜ค๊ธฐ

์ž„๋‚™ํ˜„ยท2022๋…„ 9์›” 30์ผ
1

ServletBoardProject

๋ชฉ๋ก ๋ณด๊ธฐ
3/4
post-thumbnail

ย ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ JDBC Driver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PostgreSQL๊ณผ Eclipse๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ย ์ด๋ฒˆ์—๋Š” Connection Pool์„ ์‚ฌ์šฉํ•ด Connection๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๐Ÿ›€ Connection Pool์˜ ๊ฐœ์š”

ย ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” JDBC์™€์˜ ์—ฐ๋™์„ ๋‹ค๋ฃจ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. JDBC๋ฅผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•˜๊ณ  JDBC URL๋กœ ์ ‘์†ํ•˜์—ฌ Connection ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ค๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผํ•ฉ๋‹ˆ๋‹ค.

ย ์—ฌ๊ธฐ์„œ ์•Œ์•„๋ณผ ์ปค๋„ฅ์…˜ ํ’€์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ Connection ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ํ’€(Pool) ์†์— ์ €์žฅํ•ด๋‘๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ด ํ’€์— ์ ‘๊ทผํ•˜์—ฌ Connection ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

ย ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์š”์ฒญ์„ ํ•˜๋Š”๋ฐ ์ด ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ์— Connection ๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

ย ๋˜ํ•œ ํ˜„์žฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปค๋„ฅ์…˜์„ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ๊ณ„์†ํ•ด์„œ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ปค๋„ฅ์…˜ ํ’€์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ ํšจ์œจ๊ณผ ์„ฑ๋Šฅ์ด ์ „์ฒด์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ย ์œ„ ๊ทธ๋ฆผ์€ ์ปค๋„ฅ์…˜ ํ’€์ด ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ย ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ปค๋„ฅ์…˜ ํ’€์—์„œ ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์–ป์–ด์™€์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ย ์ˆ˜ํ–‰์„ ์™„๋ฃŒํ•˜์˜€๋‹ค๋ฉด ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ปค๋„ฅ์…˜ ํ’€๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฐ˜ํ™˜๋œ ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์š”์ฒญํ•œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย ์ปค๋„ฅ์…˜ ํ’€์€ ์ด ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›น ์‚ฌ์ดํŠธ ์ ‘์† ์‹œ ๋งค๋ฒˆ ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

ย CP(Connection Pool)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

ย ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ CP(Connection Pool)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ๋„ˆ๋ฌด ํฐ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์„œ๋ฒ„๋Š” ์–ผ๋งˆ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ•˜๊ณ  ์„œ๋น„์Šค๊ฐ€ ์ค‘์ง€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์กŒ๋‹ค๊ณ ๋„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.



2. ๐Ÿท๏ธ JNDI์˜ ๊ฐœ์š”

ย JNDI(Java Naming and Directory Interface)๋ž€ ๋ช…๋ช… ์„œ๋น„์Šค ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ API๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

ย ์ฆ‰ ํŠน์ • ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.



3. ๐Ÿ“ฆ Tomcat์˜ CP๋ฅผ ์œ„ํ•œ DBCP API๋กœ DB์‚ฌ์šฉ

ย Tomcat์—์„œ๋Š” ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Tomcat ์„ค์น˜ ๊ฒฝ๋กœ์˜ lib ๋””๋ ‰ํ† ๋ฆฌ์— CP(Connection Pool) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด DBCP API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


1) context.xml ์ƒ์„ฑ

ย postgreSQLconnect/src/main/webapp/META-INF ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ‘์— context.xml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์„œ๋ฒ„์— ๊ณต์œ ํ•  ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

META-INF ํŒŒ์ผ์—์„œ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ํด๋ฆญ ํ›„ NEW > Other...๋ฅผ ์„ ํƒํ•ด ์ค๋‹ˆ๋‹ค.

Wizards: ์นธ์— ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ xml ์„ ๊ฒ€์ƒ‰ํ•œ ํ›„ XML File ์„ ์„ ํƒํ•˜๊ณ  Next๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

File name: ์— context ๋ฅผ ์ž…๋ ฅ ํ›„ Finish๋ฅผ ๋ˆŒ๋Ÿฌ xmlํŒŒ์ผ ์ƒ์„ฑ์„ ๋งˆ๋ฌด๋ฆฌ ํ•ด ์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ์ด ๋œ context.xml ํŒŒ์ผ์ด ๋ณด์ธ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

context.xml ํŒŒ์ผ

<Context> 
	<Resource name="jdbc/postgres"
	auth="Container"
	type="javax.sql.DataSource"
	username="postgres"
	password="1234"
	driverClassName="org.postgresql.Driver"
	factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
	url="jdbc:postgresql://localhost/postgres"
	maxActive="500"
	maxIdle="100"/>  
</Context>

  • ์ฝ”๋“œ ๋ถ„์„
<Context>
: context.xml ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ๋Š” <Context>๋กœ ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  
<Resource>
: ๊ณต์œ ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ •์˜ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด๊ฐˆ ๋•Œ๋Š” ์—ฌ๊ธฐ์„œ name ์†์„ฑ์œผ๋กœ ์ •์˜ํ•œ ๋ฆฌ์†Œ์Šค๋ช…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  
auth="Container"
: ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด๊ฐˆ ๋•Œ ์ธ์ฆ์€ ํ†ฐ์บฃ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

type="javax.sql.DataSource"
: ๊ณต์œ ํ•  ๋ฆฌ์†Œ์Šค์˜ ํƒ€์ž…์„ DataSource๋กœ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š”
  ๊ณต์œ ๋œ DataSource์˜ getConnection() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Connection ๊ฐ์ฒด๋ฅผ ์–ป์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

username="postgres"
password="1234"
: ์—ฐ๋™ํ•  PostgreSQL ์˜ ๊ณ„์ •๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
: DBCP API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ๊ณต์œ ํ•  DataSource๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” API ํด๋ž˜์Šค ์ค‘
  ์ด๋ฆ„์ด Factory๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค๋“ค์€ ํŠน์ • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋“ค์ž…๋‹ˆ๋‹ค.
  
url="jdbc:postgresql://localhost/postgres"
: ์—ฐ๋™ํ•  PostgreSQL url์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  
maxActive="500"
: ๋™์‹œ์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ Connection ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

maxIdle="100"
: ํ˜„์žฌ ์„œ๋น„์Šค๋˜๊ณ  ์žˆ๋Š” Connection ๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•œ CP(Connection Pool)์— ์—ฌ์œ ๋กœ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋Š”
  ์ตœ๋Œ€ Connection ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

2) dbcpAPITest.jsp ์ฝ”๋“œ ์ž‘์„ฑ

ย ์•„๋ž˜์™€ ๊ฐ™์ด webapp์•„๋ž˜ ๊ฒฝ๋กœ์— dbcpAPITest.jspํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

WEB-INF ํŒŒ์ผ ๋ฐ‘์— ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ์กฐ์‹ฌ!

dbcpAPITest.jsp ํŒŒ์ผ

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>

<%
 	Connection conn = null; 
	
	try {
  		Context init = new InitialContext();
        //dpcpAPITest.jsp ํŽ˜์ด์ง€๊ฐ€ ์‹คํ–‰๋˜๋Š” Tomcat ์ž์ฒด์˜ Context๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ถ€๋ถ„
        //Context๋ž€ ๊ฐ์ข… ํ™˜๊ฒฝ ์„ค์ • ์ •๋ณด๋ฅผ ์˜๋ฏธํ•จ
        
  		DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/postgres");
        //Tomcat ์„œ๋ฒ„์— ๊ณต์œ ๋˜์–ด ์žˆ๋Š” DataSource ๊ฐ์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ถ€๋ถ„
        //java:comp/env JNDI๋Š” ์ •ํ•ด์ ธ์žˆ๋Š” ์ด๋ฆ„์ด๋ฉฐ Resource ์ •์˜ Context๊นŒ์ง€ ์ ‘๊ทผํ•˜๋Š” JNDI์ž„
        //์ฆ‰, context.xml์— ์ •์˜๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค๋ฉด java.comp/env๋ผ๋Š” ์ด๋ฆ„์˜ Context๊นŒ์ง€๋Š”
        //๋ฐ˜๋“œ์‹œ ์ ‘๊ทผํ•ด์•ผ ํ•จ
        //jdbc/postgres JNDI ์ด๋ฆ„์€ context.xml์—์„œ ๋ฆฌ์†Œ์Šค๋ช…์œผ๋กœ ์ •์˜ํ•œ ์ด๋ฆ„
        
  		conn = ds.getConnection();
        //DataSource์—์„œ ์ œ๊ณตํ•˜๋Š” getConnection() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
        //Tomcat ์„œ๋ฒ„์˜ CP(Connection Pool)์—์„œ ์ œ๊ณตํ•˜๋Š” Connection ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
  		
  		out.println("<h3>์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</h3>");
	}catch(Exception e){
		out.println("<h3>์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.</h3>");
		e.printStackTrace();
 	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

3) dbcpAPITest.jsp ์‹คํ–‰

ย ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค๋ฉด PostgreSQL๊ฐ€ ์ œ๋Œ€๋กœ ์—ฐ๋™๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฐ๊ฒฐ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด, ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ™•์ธํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

ย context.xml ํŒŒ์ผ์— ์ž…๋ ฅํ•œ PostgreSQL ๋“œ๋ผ์ด๋ฒ„ ์ด๋ฆ„๊ณผ ์ ‘์† ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ ๋ฒˆํ˜ธ, SID๋ช…์„ ํ™•์ธํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

ย context.xml ํŒŒ์ผ์„ ๋ฌธ์ œ์—†์ด ์ž‘์„ฑํ•˜์˜€๋‹ค๋ฉด JSP ํŒŒ์ผ์—์„œ๋„ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ด ์ œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ย ๋˜ํ•œ, ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋”ฉํ•˜์ง€ ๋ชปํ•˜๋ฉด PostgreSQL ๋“œ๋ผ์ด๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(postgresql-42.5.0.jar) ํŒŒ์ผ์ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ WEB-INF ์•ˆ์— ์žˆ๋Š” lib ๋””๋ ‰ํ† ๋ฆฌ์— ์ œ๋Œ€๋กœ ๋ณต์‚ฌ๋˜์–ด ์žˆ๋Š” ์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ย CP(Connection Pool) ๊ธฐ๋Šฅ์€ ํ†ฐ์บฃ ์ž์ฒด์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋“œ๋ผ์ด๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(postgresql-42.5.0.jar) ํŒŒ์ผ์ด ํ”„๋กœ์ ํŠธ์˜ lib ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



4. ๐ŸŒ€ Transaction

ย Transaction์ด๋ž€ ์ผ ์ฒ˜๋ฆฌ์˜ ์ตœ์†Œ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Transaction์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ผ๊ด€๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ย ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— 2๊ฐ€์ง€์˜ ๋ช…๋ น์„ ์ฃผ์—ˆ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์˜ ์ฒ˜๋ฆฌ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•˜๋‹ค๋ฉด ์ด๊ฒƒ์€ ์ผ๊ด€๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ย 2๊ฐ€์ง€ ๋ช…๋ น ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์›์ ์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ๊ฐ€์ง„๊ฒƒ์ด Transaction์ž…๋‹ˆ๋‹ค.

ย ํ…Œ์ด๋ธ”์— 10000๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ , 10000๊ฐœ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์ˆ˜์ • ์ž‘์—…์„ ํ•˜๋Š”๋ฐ 5000๊ฐœ์˜ ๋ฐ์ดํ„ฐ์— ์ˆ˜์ • ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹œ์Šคํ…œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ 5000๊ฐœ๋งŒ ์ˆ˜์ •๋œ ์ƒํƒœ์—์„œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ์™„๋ฃŒ๋œ 5000๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…๋„ ์ทจ์†Œ์‹œ์ผœ์„œ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋กœ ๋˜๋Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ย ๋˜ํ•œ, ๊ณ„์ขŒ์ด์ฒด ์š”์ฒญ ์‹œ ์ธ์ถœ ๊ณ„์ขŒ์—์„œ ๊ธˆ์•ก์„ ์ฐจ๊ฐํ•˜๋Š” ์ž‘์—…์€ ์„ฑ๊ณตํ•˜๊ณ , ์ด์ฒด๋Œ€์ƒ ๊ณ„์ขŒ์˜ ๊ธˆ์•ก์„ ์ฆ๊ฐ€ํ•˜๋Š” ์ž‘์—…์€ ์‹คํŒจํ•œ ์ƒํ™ฉ์—์„œ ๊ณ„์ขŒ์ด์ฒด๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ ์ž‘์—…์ด ๋ชจ๋‘ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋งŒ ๊ณ„์ขŒ์ด์ฒด ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ย ์œ„์˜ ๊ทธ๋ฆผ์€ Transaction์˜ ๊ธฐ๋ณธ ํ๋ฆ„๋„์ž…๋‹ˆ๋‹ค.

ย ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—๋Š” Begin ์œผ๋กœ ์ž‘์—…์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

ย Process ๋‹จ๊ณ„์—์„œ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด ์ž‘์—…๋“ค์ด ์˜ค๋ฅ˜ ์—†์ด ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด Commit์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ย ์ด๋กœ์จ Transaction ์ฒ˜๋ฆฌ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ย ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…๋“ค ์ค‘ ํ•˜๋‚˜์˜ ์ž‘์—…์ด๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด Rollback์„ ์‹คํ–‰ํ•˜์—ฌ Begin ์ดํ›„์— ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์€ ๋ชจ๋‘ ๋ฌดํšจ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

ย Process ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ์ž‘์—…๋“ค์€ Commit์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ•œ, ์‹ค์ œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์— ์—…๋ฐ์ดํŠธ ์ž‘์—…์ด ์ ˆ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ย ์ด์ฒ˜๋Ÿผ Transaction์„ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ Transaction์œผ๋กœ ๋ฌถ์ธ ์ž‘์—…๋“ค์„ ์ „๋ถ€ ์‹คํ–‰๋˜๋“ ์ง€ ์ „๋ถ€ ์ทจ์†Œ๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย Transaction ๋‚ด์šฉ์€ ์ถ”ํ›„ ํฌ์ŠคํŒ…์—์„œ Transaction ๊ด€๋ฆฌ ๋ถ€๋ถ„์—์„œ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


ย ์—ฌ๊ธฐ๊นŒ์ง€ CP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Connection ๊ฐ์ฒด๋ฅผ ์–ป์–ด์™€ ๋ณด๋Š” ํฌ์ŠคํŒ…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ย ๋‹ค์Œ์—๋Š” JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Eclipse์—์„œ DB์ž‘์—…์„ ํ•ด ๋ณด๋Š” ํฌ์ŠคํŒ…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

profile
์ฝ”๋”ฉํ•˜๋Š” ์ˆ˜ํ•™๊ณผ

0๊ฐœ์˜ ๋Œ“๊ธ€