week 3 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

๊ธฐ์ˆ  ๋ฌธ์ œ

  • JAVA (๋ฐ•ํšจ์›)

    • Java8์˜ heap ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š” ๊ทธ๋ฆฌ๊ณ  ํž™์˜์—ญ๊ณผ ์Šคํƒ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค

      • stack

        ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ๊นŒ์ง€ ์ž‘์„ฑํ•˜๋˜ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์ •์˜ํ•˜๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(int, double, byte, long, boolean ๋“ฑ)์— ํ•ด๋‹น๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜(๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ๋ธ”๋Ÿญ๋ฌธ ๋‚ด ๋ณ€์ˆ˜ ํฌํ•จ)์˜ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด Stack(์Šคํƒ) ์˜์—ญ์ด๋‹ค.

      • heap

        ์ฐธ์กฐํ˜•(Reference Type)์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–๋Š” ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค), ๋ฐฐ์—ด ๋“ฑ์€ Heap ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ด๋•Œ ๋ณ€์ˆ˜(๊ฐ์ฒด, ๊ฐ์ฒด๋ณ€์ˆ˜, ์ฐธ์กฐ๋ณ€์ˆ˜)๋Š” Stack ์˜์—ญ์˜ ๊ณต๊ฐ„์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ Heap ์˜์—ญ์˜ ์ฐธ์กฐ๊ฐ’(reference value, ํ•ด์‹œ์ฝ”๋“œ / ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ’)์„ new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ฆฌํ„ด ๋ฐ›๋Š”๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” Heap ์˜์—ญ์˜ ์ฐธ์กฐ ๊ฐ’์„ Stack ์˜์—ญ์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฆฌํ„ด ๋ฐ›์€ ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ธ๋“ค ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์ž๋ฐ”8์—์„œ ์†Œ๊ฐœ๋œ ๋žŒ๋‹ค์‹๊ณผ ๋ฉ”์†Œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋ผ.

      • ๋žŒ๋‹ค๋ž€ ์‹๋ณ„์ž ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ด๋‹ค.
      • ๋žŒ๋‹ค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜์— ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์ด ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
      • ๋žŒ๋‹ค์‹ ์žฅ์ 
        • ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์‹์— ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๊ฐ€ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜๋ฏ€๋กœ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
        • ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—†์ด ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ฝ”๋”ฉํ•˜๋Š” ์‹œ๊ฐ„์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
        • ๋ณ‘๋ ฌํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
      • ๋žŒ๋‹ค์‹ ๋‹จ์ 
        • ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งŒ๋“œ๋Š” ๋ฌด๋ช…ํ•จ์ˆ˜๋Š” ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
        • ๋””๋ฒ„๊น…์ด ๋‹ค์†Œ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
        • ๋žŒ๋‹ค๋ฅผ ๋‚จ๋ฐœํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋น„์Šทํ•œ ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ์ค‘๋ณต์ƒ์„ฑ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ)
        • ์žฌ๊ท€๋กœ ๋งŒ๋“ค๊ฒฝ์šฐ์—๋Š” ๋‹ค์†Œ ๋ถ€์ ํ•ฉํ•œ๋ฉด์ด ์žˆ์Šต๋‹ˆ๋‹ค.
      • Stream์ด๋ž€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
    • checked-exception VS unchecked-exception ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

      • Checked Exception
        • ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•œ๋‹ค.
        • ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๋กค๋ฐฑ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.
        • ์ข…๋ฅ˜
          • IOException
          • SQLException
      • UnChecked Exception
        • ๋ช…์‹œ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
        • ๋Ÿฐํƒ€์ž„์— ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
        • ์ข…๋ฅ˜
          • NullPointerException
          • IllegalArgumentException
          • IndexOutOfBoundsException
          • SystemException
      • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•
        • ์˜ˆ์™ธ ๋ณต๊ตฌ : try, catch, finally ๋ธ”๋ก์„ ํ†ตํ•ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋Œ€์ฒ˜ํ•œ๋‹ค.
        • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํšŒํ”ผ : throws ํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•œ๋‹ค.
        • ์˜ˆ์™ธ ์ „ํ™˜ : ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด catch ๋ธ”๋ก์•ˆ์—์„œ ๋‚ด๋ถ€ ๊ทœ์ •์— ํ†ต์šฉ๋˜๋Š” ์˜ˆ์™ธ๋กœ ๋ณ€ํ™”ํ•˜์—ฌ ์œ„์ž„ํ•œ๋‹ค.
  • SPRING (์ฃผ์ข…ํ›ˆ)

    • @Service, @Component์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

      • ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž… : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ๊ด€๋ฆฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์‹๋ณ„ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋‹จ์ˆœํ•œ ๋งˆ์ปค๋‹ค.
      • @Component : ๋นˆ์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด DI ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ณธ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
      • @Service : Hibernate์—๊ฒŒ Transaction์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋„๋ก ์•Œ๋ ค์ค€๋‹ค.
      • @Repository : ๊ฒ€์‚ฌ ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ(DAO ๋ฉ”์†Œ๋“œ์—์„œ ๋ฐœ์ƒ)๋ฅผ Spring DataAccessException์œผ๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
      • @Controller : Dispatcher Sevlet์—์„œ ์ œ๊ณต๋˜๋ฉฐ ์—ฌ๊ธฐ์„œ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ํŠน์ • ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    • ์Šคํ”„๋ง MVC ์›น ์š”์ฒญ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์„ค๋ช…ํ•˜์‹œ์˜ค

      1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์–ด๋–ค ์š”์ฒญ์„ ํ•˜๋ฉด DispatcherServlet์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑˆ๋‹ค.
      2. DispatcherServlet์ด ๊ฐ€๋กœ์ฑˆ ์š”์ฒญ์„ HandlerMapping์—๊ฒŒ ๋ณด๋‚ด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Controller๋ฅผ ์ฐพ๋Š”๋‹ค.
      3. ๋ชจ๋“  ๋กœ์ง์„ ๋๋‚ธ ์„œ๋น„์Šค๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ๋„˜๊ธฐ๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋Š” Model๊ฐ์ฒด์— ๊ฒฐ๊ณผ๋ฌผ์„ ์–ด๋–ค view๋กœ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ์ง€ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋””์ŠคํŒจ์ฒ˜์„œ๋ธ”๋ฆฟ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.
      4. DispatcherServlet์€ ์‘๋‹ตํ•  View๋ฅผ ์ฐพ๊ณ  View๋Š” ์‘๋‹ต๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
      5. DispatcherServlet์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ Œ๋”๋ง๋œ View๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
    • @EnableWebMvc ๋Š” ์–ด๋””์— ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค

      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.TYPE)
      @Documented
      @Import(DelegatingWebMvcConfiguration.class)
      public @interface EnableWebMvc {
      }
      

      @Import(DelegatingWebMvcConfiguration.class)ํ•ด๋‹น ๋ถ€๋ถ„์„ Importํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ํ•ด๋‹น ํด๋ ˆ์Šค์™€ ๊ทธ ์†์—์„œ ์ƒ์†ํ•˜๋Š” WebMvcConfigurationSupport๋ฅผ ๋ณด๋ฉด MVC์—์„œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์„ ํ•ด์ฃผ๊ฑฐ๋‚˜, ์›น ๊ด€๋ จ ์„ค์ •์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

      ๋”ฐ๋ผ์„œ DelegatingWebMvcConfiguration๋Š” WebMvcConfigurer ๋ฅผ implementํ•œ ๋นˆ๋“ค์„ ํ†ตํ•ด์„œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์•„์ฃผ๋Š” ํด๋ ˆ์Šค๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, DelegatingWebMvcConfiguration ์—์„œ protected๋กœ ์ง€์›ํ•ด๋Š” ํ•จ์ˆ˜์˜ ์„ค๋ช…์„ ๋ณด๋ฉด ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

      WebMvcConfigurer ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements ๋ž˜๋„ ๋˜์ง€๋งŒ, ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋””์ด ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, WebMvcConfigurer ๋ณด๋‹ค๋Š” WebMvcConfigurerAdapter ํด๋ž˜์Šค๋ฅผ extends ํ•ด์„œ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์ฃผ๋Š” ํŽธ์ด ๋” ๊น”๋”ํ•˜๋‹ค.  

  • Infra/์šด์˜ (์œ ์ •ํ˜„)

    • heap dump๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

    • ๋ ˆ๋””์Šค ์บ์‹œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜?

      ๋ ˆ๋””์Šค๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€

      ๋ฐ์ดํ„ฐ ๋Œ€๋ถ€๋ถ„์„ ๋””์Šคํฌ ๋˜๋Š” SSD์— ์ €์žฅํ•˜๋Š” PostgreSQL, Cassandra, MongoDB ๋“ฑ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€๋Š” ๋‹ฌ๋ฆฌ ๋ชจ๋“  Redis ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„์˜ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„ ๋””์Šคํฌ๊นŒ์ง€ ์™•๋ณตํ•ด์•ผ ํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋Œ€์กฐ์ ์œผ๋กœ, Redis์™€ ๊ฐ™์€ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด๋Š” ์ด์™€ ๊ฐ™์€ ๋‹จ์ ์ด ์—†์Šต๋‹ˆ๋‹ค

      Cache์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์ •๋ณด๋“ค

      1. ๋‹จ์ˆœํ•œ, ๋˜๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ์˜ ์ •๋ณด๋ฅผ -> ์ •๋ณด์˜ ๋‹จ์ˆœ์„ฑ
      2. ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ -> ๋นˆ๋ฒˆํ•œ ๋™์ผ์š”์ฒญ์˜ ๋ฐ˜๋ณต
      3. ์ •๋ณด์˜ ๋ณ€๊ฒฝ์ฃผ๊ธฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜์ง€ ์•Š๊ณ , ๋‹จ์œ„์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ •๋ณด์ด๊ณ  -> ๋†’์€ ๋‹จ์œ„์ฒ˜๋ฆฌ๋น„์šฉ
      4. ์ •๋ณด์˜ ์ตœ์‹ ํ™”๊ฐ€ ๋ฐ˜๋“œ์‹œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ค„์ง€์ง€ ์•Š์•„๋„ ์„œ๋น„์Šค ํ’ˆ์งˆ์— ์˜ํ–ฅ์„ ๊ฑฐ์˜ ์ฃผ์ง€ ์•Š๋Š” ์ •๋ณด

      ๋” ๋งŽ์€ ์กฐ๊ฑด๋“ค์ด ์žˆ๊ฒ ์œผ๋‚˜,์ € ์กฐ๊ฑด๋“ค ์ค‘ 2๊ฐœ์ด์ƒ ํฌํ•จ๋˜๋Š” ์„ฑ๊ฒฉ์˜ ์„œ๋น„์Šค์™€ ์ •๋ณด๋ผ๋ฉดCache๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ คํ•ด ๋ณด์•„๋„ ํฐ ๋ฌด๋ฆฌ๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค.

      ์–ด๋–ค ์ •๋ณด๋“ค์„ Cache๋กœ ์‚ฌ์šฉํ•˜๋‚˜?

      • ํฌํƒˆ์˜ ๊ฒ€์ƒ‰์–ด
      • ์‡ผํ•‘๋ชฐ์˜ ํ•ซ๋”œ์ƒํ’ˆ, ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ, ์ถ”์ฒœ์ƒํ’ˆ๋“ฑ
      • ์ƒํ’ˆ์˜ ์นดํ…Œ๊ณ ๋ฆฌ์™€ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋“ฑ๋ก์ƒํ’ˆ ์ˆ˜
      • ๋ฐฉ๋ฌธ์ž์ˆ˜, ์กฐํšŒ์ˆ˜, ์ถ”์ฒœ์ˆ˜
      • 1ํšŒ์„ฑ ์ธ์ฆ์ •๋ณด (SMS ๋ณธ์ธ์ธ์ฆ์ •๋ณด, IP์ •๋ณด๋“ฑ)
      • ๊ณต์ง€์‚ฌํ•ญ, Q&A
    • SSL ํ•ธ๋“œ์‰์ดํ‚น ๊ณผ์ •์€?

      ํ•ธ๋“œ์‰์ดํฌ ๋‹จ๊ณ„

      1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•œ๋‹ค.(Client Hello)

        ์„œ๋ฒ„์— ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ

        • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒ์„ฑํ•œ ๋žœ๋ค ๋ฐ์ดํ„ฐ

        • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์›ํ•˜๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹๋“ค

        • ์„ธ์…˜ ์•„์ด๋””

      2. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต(์ „์†ก)ํ•œ๋‹ค.(Server Hello)

        ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ

        • ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•œ ๋žœ๋ค ๋ฐ์ดํ„ฐ

        • ์„œ๋ฒ„๊ฐ€ ์„ ํƒํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์•”ํ˜ธํ™” ๋ฐฉ์‹

        • ์ธ์ฆ์„œ(์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๊ฐ€ ํฌํ•จ๋จ)

      3-1. ํด๋ผ์ด์–ธํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ(์›น๋ธŒ๋ผ์šฐ์ €)์˜ CA๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ธ์ฆ์„œ๊ฐ€ CA์— ์˜ํ•ด์„œ ๋ฐœ๊ธ‰๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์›น๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ CA์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์ธ์ฆ์„œ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•˜๋ฉด ์ด ์ธ์ฆ์„œ๋ฅผ ์ „์†กํ•œ ์„œ๋ฒ„๊ฐ€ ์‹ ๋ขฐ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„๋ผ๋Š” ๊ฒƒ์ด ๋ณด์ฆ๋œ๋‹ค. ๋ฐ˜๋ฉด, ๋ฆฌ์ŠคํŠธ์— ์—†๊ฑฐ๋‚˜ ๋ณตํ˜ธํ™”์— ์‹คํŒจํ•˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

      3-2. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋žœ๋ค ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•ด์„œ Pre-Master Secret ํ‚ค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (์ด ํ‚ค๋Š” ๋’ค์—์„œ ์‚ดํŽด๋ณผ '์„ธ์…˜ ๋‹จ๊ณ„'์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•  ์•”ํ˜ธํ™” ๊ธฐ๋ฒ•์€ ๋Œ€์นญํ‚ค ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— pre master secret ๊ฐ’์€ ์ œ 3์ž์—๊ฒŒ ์ ˆ๋Œ€๋กœ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค)

      3-3. ์ธ์ฆ์„œ์— ํฌํ•จ๋œ ๊ณต๊ฐœํ‚ค๋กœ pre master secret ๊ฐ’์„ ์•”ํ˜ธํ™”ํ•ด์„œ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

      4-1. ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ๋น„๊ณต๊ฐœํ‚ค๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณตํ˜ธํ™”ํ•œ๋‹ค. (์ด ์‹œ์ ์— C/S๊ฐ€ ๋ชจ๋‘ Pre-Master Secret ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.)

      4-2. C/S ๋ชจ๋‘ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ Pre-Master Secret ๊ฐ’์„ Master Secret ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค.

      4-3. master secret์€ session key๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

      1. C/S๋Š” ์„œ๋กœ์—๊ฒŒ ํ•ธ๋“œ์‰์ดํฌ ๋‹จ๊ณ„์˜ ์ข…๋ฃŒ๋ฅผ ์•Œ๋ฆฐ๋‹ค.

์ถœ์ฒ˜

https://yonguri.tistory.com/82[๋Œ€๋””์žฅ ์ผ์ƒ ๋ธ”๋กœ๊ทธ]