๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end ๋ฐ๋ธŒ์ฝ”์Šค/week 03 - 05 TIL (Spring)

[TIL] 221114 - SpringBoot Part3 : ์›น ๊ธฐ์ˆ  Overview, Servelt

by young-ji 2022. 11. 22.

SpringBoot Part3 (1) 

 

Web์˜ ๊ตฌ์„ฑ

URI : ์›น์„ ๊ตฌ์„ฑํ•˜๋Š” ์ •๋ณด, ๋ฆฌ์†Œ์Šค๋“ค์„ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•œ ์‹๋ณ„์ž

 

  • ์ƒ๋Œ€ ๊ฒฝ๋กœ, ์ ˆ๋Œ€ ๊ฒฝ๋กœ (์‹œ์ž‘์  /foo/bar) 
    ์ƒ๋Œ€ ๊ฒฝ๋กœ ๊ฒฐ๋Œ€ ๊ฒฝ๋กœ(/๋กœ ์‹œ์ž‘)
    hoge (./huge) /foo/bar/hoge
    hoge/fuga /foo/bar/hoge/fuga
    ../hoge /foo/hoge
    ../../foge /foge
    • ./ โ†’ ํ˜„์žฌ๊ฒฝ๋กœ ../ โ†’ ๋ถ€๋ชจ๊ฒฝ๋กœ
    • ํŠน์ •์œ„์น˜๋กœ ์˜ฎ๊ธธ๋•Œ ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค : ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋„๋ฉ”์ธ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€ ์ž˜๋ชป๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค.

 

  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž (ASCII ๋ฌธ์ž) : ์˜์–ด, ์ˆซ์ž, ํŠน์ • ๊ธฐํ˜ธ

 

HTTP

  • ํด๋ผ์ด์–ธํŠธ โ†’ ์›น ๋ธŒ๋ผ์šฐ์ € โ†’ OS โ†’ ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„
  • ํŠน์ง•
    • TCP/IP ๊ธฐ๋ฐ˜
    • ์š”์ฒญ/์‘๋‹ตํ˜• ํ”„๋กœํ† ์ฝœ
    • ๋™๊ธฐํ˜• ํ”„๋กœํ† ์ฝœ
    • stateless
     

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

 

HTTP ๊ฐœ์š” - HTTP | MDN

HTTP๋Š” HTML ๋ฌธ์„œ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. HTTP๋Š” ์›น์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตํ™˜์˜ ๊ธฐ์ดˆ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„

developer.mozilla.org

 

HTML

 

Hyper Text : ํ…์ŠคํŠธ ์•ˆ์— ๋งํฌ๊ฐ€ ์žˆ์–ด ์—ฐ๊ฒฐ์„ฑ์ด ์žˆ๋Š” ํ…์ŠคํŠธ

Makup : ๊ตฌ์กฐ์  ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ทœ์น™

 

 

์›น์˜ ๊ธฐ์ˆ ์  ํŠน์ง•

  • ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ : ๋‹ค์–‘ํ•œ ๋ฏธ๋””์–ด๊ฐ€ ํ•˜์ดํผ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ  ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ
  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ

 

Web Application Archietcture

caching service โ†’ ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๋ฐ์ดํ„ฐ

cloud storage โ†’ ๋‚˜๋ž‘ ๊ฐ€๊นŒ์šด chech server?

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview


 

(http)์›น ์„œ๋ฒ„ ๐Ÿ†š  ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (WAS)

๋™์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋ƒ์˜ ์œ ๋ฌด ์ฐจ์ด

: ์ •์  ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ ์™ธ์— DB์กฐํšŒ, ๋กœ์ง ์ฒ˜๋ฆฌ ๋“ฑ ๋™์  ์ปจํ…์ธ  ์ œ๊ณต

: WAS โ†’ ๋ณ„๋„ ํ”„๋กœ์„ธ์Šค, ์˜คํ”ˆ์†Œ์Šค WAS๋กœ ํƒ์บฃ,์ œํ‹ฐ ๋“ฑ

 

: ์›น ํด๋ผ์ด์–ธํŠธ โ†’ ์›น์„œ๋ฒ„(์•„ํŒŒ์น˜, ์—”์ง„์—‘์Šค ๋“ฑ) โ†’ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ DB

: ์›น์„œ๋ฒ„๋ฅผ ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ

 

Servlet

 

: http ์š”์ฒญ์— ๋Œ€ํ•ด ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์‘๋‹ต์„ ํ•ด์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

: WAS๊ฐ€ ํ˜ธ์ถœํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ์ •ํ•ด๋‘” ์ผ์ข…์˜ format

: MVC ํŒจํ„ด์—์„œ Contoller์— ์—ญํ• 

(JSP๋Š” view ์—ญํ• )

 

 

Servlet์˜ life cycle

  • init() : ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ณ  ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋จ. ๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ ํ™˜๊ฒฝ์—์„œ ๋งค ์š”์ฒญ์— servlet์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์•„๋‹Œ service ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ.
  • service() : ํ•˜๋‚˜์˜ ์š”์ฒญ thread์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฉฐ, request๋ฅผ ํ™•์ธํ•˜์—ฌ doGet ํ˜น์€ doPost๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • doGet() / doPost()

 

์‹ค์Šต

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

--

public class TestServlet extends HttpServlet {
    private static final Logger logger = LoggerFactory.getLogger(TestServlet.class);

    @Override
    public void init() throws ServletException {
        super.init();
        logger.info("init Servlet");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        var requestURI = req.getRequestURI();
        logger.info("Got Request form {}", requestURI);
				
				// ์‘๋‹ต ์ „๋‹ฌ
        var writer = resp.getWriter();
        writer.println("Hello Servlet");
    }
}

 

WAS(ํ†ฐ์บฃ)์— servlet ๋“ฑ๋ก

: ํ†ฐ์บฃ ์„œ๋ฒ„ ๊ตฌ๋™ํ›„ web container์— servlet์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ธฐ

 

  • Web.xml์„ ์ด์šฉํ•˜์—ฌ ๋“ฑ๋ก (src > webapp > web.xml )
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>org.prgrms.kdt.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

 

  • ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋“ฑ๋ก
@WebServlet(value = "/*", loadOnStartup = -1) // 1์ด๋ฉด ์ด๋ฏธ init
public class TestServlet extends HttpServlet {
    private static final Logger logger = LoggerFactory.getLogger(TestServlet.class);

    @Override
    public void init() throws ServletException {
        super.init();
        logger.info("init Servlet");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        var requestURI = req.getRequestURI();
        logger.info("Got Request form {}", requestURI);

        var writer = resp.getWriter();
        writer.println("Hello Servlet");
    }
}

 

  • spring ์ธํ„ฐํŽ˜์ด์Šค WebApplicationInitializer ์ด์šฉ
public class KdtWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        var servletRegistration = servletContext.addServlet("test",new TestServlet());
        servletRegistration.addMapping("/*");
        servletRegistration.setLoadOnStartup(-1);//default
    }
}

: ์„ ํ–‰ ํ›„ํ–‰ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์šฉ์ดํ•˜๋‹ค.

: Spring MVC ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณดํ†ต WebApplicationInitializer๋ฅผ ๊ตฌํ˜„ํ•ด์ค€๋‹ค.

 

โ‡’ Spring์€ Servlet์„ (๋‹ค์ด๋ ‰ํŠธ๋กœ ์“ฐ์ง€์•Š๊ณ ) ์ถ”์ƒํ™”์‹œํ‚จ Spring MVC๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ•ด๋‹น ๋ฐฉ์‹์„ ํ†ฐ์บฃ WAR์— ๋””ํ”Œ๋กœ์ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์˜ฌ๋“œํ•œ ๋ฐฉ์‹์ด๋‹ค.

 

SpringBoot์—์„œ Embaded Tomcat์„ ์‚ฌ์šฉํ•  ๊ฒƒ. ๊ทธ๋• was์— ๋ฐฐํฌํ•  ์ผ์ด ๊ฑฐ์˜ ์—†๋‹ค.

๋ชจ๋˜ ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ๋Š” Embaded Tomcat์œผ๋กœ ๋ง์•„์„œ jar๋กœ ๋ฐฐํฌํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๋Œ€๋ถ€๋ถ„.

 


IntelliJ ํ†ฐ์บฃ ๋ฐฐํฌ

 

tomcat ์„œ๋ฒ„ ์ถ”๊ฐ€

 

์•„ํ‹ฐํŒฉํŠธ ์ถ”๊ฐ€

ํ†ฐ์บฃ์— ๋ฐฐํฌํ•˜๋ฉด out ํด๋” ์ƒ์„ฑ

 

 

 

์ถœ์ฒ˜ - ํ•ด๋ฆฌ : SpringBoot Part3

๋Œ“๊ธ€