๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java·๏ปฟServlet·๏ปฟJSP

ServletContext๋กœ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด ๊ด€๋ฆฌํ•˜๊ธฐ

by Leica 2020. 2. 12.
๋ฐ˜์‘ํ˜•

ServletContext๋กœ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด ๊ด€๋ฆฌํ•˜๊ธฐ

 

DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธ”๋ฆฟ๋“ค์ด ํ˜ธ์ถœ๋ ๋•Œ๋งˆ๋‹ค DB ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑํ•ด์„œ ServletContext์— ์ €์žฅํ•˜๋ฉด ํ•„์š”ํ•œ ์„œ๋ธ”๋ฆฟ์—์„œ ์ปค๋„ฅ์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

1. ๊ณต์œ  ์ž์›์„ ์ค€๋น„ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ์ž‘์„ฑ

๋จผ์ € ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์ค€๋น„ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ž‘์„ฑํ•œ๋‹ค.

 

AppInitServlet.java

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
32
33
34
35
36
37
38
39
public class AppInitServlet extends HttpServlet {
    // init() : ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ์ตœ์ดˆ๋กœ ํ˜ธ์ถœ
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("AppInitServlet.init() called");
        super.init(config);
 
        // ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ServletContext ์ธ์Šคํ„ด์Šค์— ์ €์žฅ
        ServletContext sc = this.getServletContext();
 
        try {
            Class.forName(sc.getInitParameter("driver"));
            Connection conn = DriverManager.getConnection(
                    sc.getInitParameter("url"),
                    sc.getInitParameter("username"),
                    sc.getInitParameter("password")
            );
 
            sc.setAttribute("conn", conn);
        } catch (Throwable e) {
            throw new ServletException(e);
        }
    }
 
    // destroy() : ์„œ๋ธ”๋ฆฟ์ด ์–ธ๋กœ๋“œ๋ ๋•Œ(์„œ๋ฒ„ ์ข…๋ฃŒ, ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ, ์„œ๋ธ”๋ฆฟ ์žฌ๋กœ๋”ฉ) ํ˜ธ์ถœ
    @Override
    public void destroy() {
        System.out.println("AppInitServlet.destroy() called");
        super.destroy();
        
        Connection conn = (Connection) this.getServletContext().getAttribute("conn");
 
        try {
            if(conn != null && !conn.isClosed()) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
cs

๊ณต์œ  ์ž์›(DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด)์„ ์ค€๋น„ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด service()๋ฅผ overrideํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์„œ๋ธ”๋ฆฟ์ด ์–ธ๋กœ๋“œ๋  ๋•Œ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ํ•ด์ œ์‹œํ‚ค๊ธฐ ์œ„ํ•ด(DB ์—ฐ๊ฒฐ ์ข…๋ฃŒ) destory()๋ฅผ overrideํ•œ๋‹ค.

๊ธฐ์กด์˜ ์ดˆ๊ธฐํ™”, ๋งˆ๋ฌด๋ฆฌ ์ž‘์—…์„ ๊ทธ๋Œ€๋กœ ์“ฐ๊ธฐ ์œ„ํ•ด ์Šˆํผ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋ถ€ ๋‹ค์Œ์— ๊ฐ๊ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 

2. ์„œ๋ธ”๋ฆฟ ๋ฐฐ์น˜์™€ <load-on-startup> ํƒœ๊ทธ

web.xml์— ์œ„์—์„œ ์ž‘์„ฑํ•œ AppInitServlet์˜ ๋ฐฐ์น˜ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

 

web.xml

1
2
3
4
5
6
<!-- ์„œ๋ธ”๋ฆฟ ์„ ์–ธ -->
<servlet>
    <servlet-name>AppInitServlet</servlet-name>
    <servlet-class>com.atoz_develop.spms.servlets.AppInitServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
cs

 

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์—†์–ด๋„ ์„œ๋ธ”๋ฆฟ์ด ์ƒ์„ฑ๋ผ์•ผ ํ•˜๋ฏ€๋กœ <load-on-startup> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋ ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

1์ด๋ผ๊ณ  ์ž…๋ ฅํ•œ ๊ฐ’์€ ์ƒ์„ฑ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ƒ์„ฑ ์ˆœ์„œ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋จผ์ € ์„ ์–ธ๋œ ์„œ๋ธ”๋ฆฟ์ด ๋จผ์ € ์ƒ์„ฑ๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์ด ์•„๋‹ˆ๋ฏ€๋กœ URL ๋งคํ•‘ ์ •๋ณด๋Š” ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

3. ServletContext์— ์ €์žฅ๋œ DB ์ปค๋„ฅ์…˜ ์‚ฌ์šฉ

์„œ๋ธ”๋ฆฟ์—์„œ ์ง์ ‘ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์–ป๋Š” ์ฝ”๋“œ๋ฅผ ServletContext์—์„œ ๊บผ๋‚ด์“ฐ๋„๋ก ๋ณ€๊ฒฝํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
/*
// DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์–ป๋Š” ๊ธฐ์กด ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ
Class.forName(sc.getInitParameter("driver"));
conn = DriverManager.getConnection(
        sc.getInitParameter("url"),
        sc.getInitParameter("username"),
        sc.getInitParameter("password")
);*/
// ServletContext์— ์ €์žฅ๋œ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด ์‚ฌ์šฉ
conn = (Connection) sc.getAttribute("conn");
stmt = conn.createStatement();
cs

 

์ถ”๊ฐ€๋กœ DB ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์„œ๋ธ”๋ฆฟ์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ finally ๋ธ”๋ก์— conn.close();์™€ ๊ฐ™์€ ์ฝ”๋“œ๋„ ์‚ญ์ œํ•œ๋‹ค.

 

์ฝ”๋“œ ๋ณ€๊ฒฝ ํ›„ ๋ฐฐ์น˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด ๋™์ผํ•˜๊ฒŒ ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ถ”๊ฐ€๋กœ ๊ณต์œ  ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ์—๋Š” ์ด๋ ‡๊ฒŒ ์„œ๋ธ”๋ฆฟ์„ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์„œ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

- ServletContextListener๋กœ DB ์ปค๋„ฅ์…˜, DAO ๊ณต์œ  ๊ฐ์ฒด ๊ด€๋ฆฌํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€