0403 ~ 0423


# 0403 ~ 0423

# 0404 - Dispatcher-Servlet(๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ)

# Dispatcher-Servlet ๊ฐœ๋…

# ๊ฐœ๋…

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์˜ dispatch๋Š” "๋ณด๋‚ด๋‹ค"๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„์ž„ํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฒƒ์„ ๋ณด๋‹ค ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ ์š”์ฒญ์ด ์˜ค๋ฉด Tomcat(ํ†ฐ์บฃ)๊ณผ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ์š”์ฒญ์„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์ธ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๊ณตํ†ต์ ์ธ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ ํ›„์— ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„์„œ ์ž‘์—…์„ ์œ„์ž„ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ Front Controller(ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ)๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, Front Controller๋Š” ์ฃผ๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ์จ, MVC ๊ตฌ์กฐ์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

# ์žฅ์ 

spring MVC๋Š” DispatcherServlet์ด ๋“ฑ์žฅํ•จ์— ๋”ฐ๋ผ web.xml์˜ ์—ญํ• ์„ ์ƒ๋‹นํžˆ ์ถ•์†Œ์‹œ์ผœ ์ฃผ์—ˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์„ URL ๋งคํ•‘์„ ์œ„ํ•ด web.xml์— ๋ชจ๋‘ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, dispatcher-servlet์ด ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•ด์ฃผ๊ณ  ๊ณตํ†ต์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์ƒ๋‹นํžˆ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•ด๋‘๊ธฐ๋งŒ ํ•˜๋ฉด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์•Œ์•„์„œ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

# Dispatcher-Servelt ๋™์ž‘ ๊ณผ์ •

# ๋™์ž‘๋ฐฉ์‹

image

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๋ฐ›์Œ
  2. ์š”์ฒญ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์œ„์ž„ํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์Œ
  3. ์š”์ฒญ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•  ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ฐพ์•„์„œ ์ „๋‹ฌ
  4. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•จ
  5. ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ
  6. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ
  7. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ฒ˜๋ฆฌํ•จ
  8. ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•จ

# 0406 - SpringBoot ์‹คํ–‰ ํ›„์— ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ

# ์ปค๋งจ๋“œ๋ผ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ CommandLineRunner

# CommandLineRunner๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ

CommandLineRunner๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ 1.0์— ์ถ”๊ฐ€๋œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ์จ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋œ ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. CommandLineRunner๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ String ํƒ€์ž…์˜ ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ปจ๋งจ๋“œ ๋ผ์ธ์œผ๋กœ ๋ฐ›์€ ์ŠคํŠธ๋ง ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋”ฐ. CommandLineRunner๋Š” ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ๋นˆ์ด ๋“ฑ๋กํ•˜๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋œ ํ›„์— ์ž๋™์œผ๋กœ run ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

@Component
class TestCommandLineRunner implements CommandLineRunner {

    @Override
    public void run(String... args) {
        System.out.println("Test");
    }
    
}
1
2
3
4
5
6
7
8
9

# CommandLineRunner๋ฅผ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ตฌํ˜„

์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ž‘์—…์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ›„์— 1ํšŒ ์ดˆ๊ธฐํ™” ์ž‘์—…์ธ๋ฐ, ์œ„์™€ ๊ฐ™์ด ํด๋ž˜์Šค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฌด๊ฑฐ์šฐ๋ฉฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. CommandLineRunner๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด main ํด๋ž˜์Šค์— @Bean๊ณผ ํ•จ๊ป˜ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestingApplication.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner() {
        return args -> System.out.println("Test");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

@Bean์€ @Configuration์ด ์žˆ๋Š” ํด๋ž˜์Šค ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š”๋ฐ, @SpringBootApplication์ด ๊ฐ–๊ณ  ์žˆ๋Š” @SpringBootConfiguration ์•ˆ์— @Configuration์ด ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฉ”์ธ ํด๋ž˜์Šค ์—ญ์‹œ ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜์–ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

# ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ApplicationRunner

ApplicationRunner ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ์จ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋œ ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋ชฉ์  ์ž์ฒด๋Š” ๋™์ผํ•˜์ง€๋งŒ ApplicationRunner๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ApplicationRunner๋Š” ์Šคํ”„๋ง ๋ถ€ํ„ฐ 2.0์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestingApplication.class, args);
    }

    @Bean
    public ApplicationRunner applicationRunner() {
        return args -> System.out.println("Test");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# ์ด๋ฒคํŠธ ์ˆ˜์‹ ์„ ์œ„ํ•œ EventListener

# ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ๋ฐ ์ด๋ฒคํŠธ ๋ฐœํ–‰

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

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(TestingApplication.class, args);

        context.addApplicationListener(new ApplicationListener<ApplicationEvent>() {
            @Override
            public void onApplicationEvent(ApplicationEvent event) {
                System.out.println("Test");
            }
        });

        context.publishEvent(new ApplicationEvent(context) {

        });
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

ApplicationEvent์˜ ์ƒ์„ฑ์ž๋Š” Object ํƒ€์ž…์„ ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋„ฃ๋Š” ์šฉ๋„๋กœ ์กด์žฌํ•œ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ ApplicationContext ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. ApplicationListener๋Š” ์—ญ์‹œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(TestingApplication.class, args);

        context.addApplicationListener(event -> System.out.println("Test"));

        context.publishEvent(new ApplicationEvent(context) {

        });
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# @EventListner๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง 4.2๋ถ€ํ„ฐ๋Š” @VentListener ์–ด๋…ธํ…Œ์ด์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, @EventListener๋ฅผ ์Šคํ”„๋ง ๋นˆ ์•ˆ์— ๊ตฌํ˜„ํ•ด๋‘๋ฉด ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์Šคํ”„๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ApplicationReadyEvent ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestingApplication.class, args);
    }

    @EventListener(ApplicationReadyEvent.class)
    public void init() {
        System.out.println("Test");
    }
    
    @EventListener
    public void init(ApplicationReadyEvent event) {
        System.out.println("Test");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

@EventListener๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํŠน์ • ํƒ€์ž…์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” @EventListener ์–ด๋…ธํ…Œ์ด์…˜์— ์ด๋ฒคํŠธ ํƒ€์ž…์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋ฉฐ, ๋งŒ์•ฝ ํ•ด๋‹น ํƒ€์ž…์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด ์–ด๋…ธํ…Œ์ด์…˜์— ์ ์–ด์ค„ ํ•„์š”์—†์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋งŒ ๋ช…์‹œํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค. ์Šคํ”„๋ง์€ ApplicationReadyEvent ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๋ฅผ 1ํšŒ๋งŒ ๋ฐœํ–‰ํ•˜๋Š”๋ฐ, ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ์ˆ˜์‹ ํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ๊ฐ€ 2๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ€ํ‹ฐ ์บ์ŠคํŒ… ๊ด€๊ณ„์ด๋ฏ€๋กœ ๋™์ผํ•œ ํƒ€์ž…์˜ ์—ฌ๋Ÿฌ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋ฉด ๋ชจ๋“  ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

# ์ปค์Šคํ…€ ์ด๋ฒคํŠธ์™€ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์˜ ๊ตฌํ˜„

ApplicationListener์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ApplicationEvent ํ•˜์œ„์˜ ์ด๋ฒคํŠธ ํด๋ž˜์Šค๋ฅผ ์ฃผ๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๋งŒ์„ ๋ฐ›๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ง์ ‘ ๋ฆฌ์Šค๋„ˆ ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ตฌํ˜„ํ• ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

@SpringBootApplication
public class TestingApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(TestingApplication.class, args);
        context.publishEvent(new TestEvent(context, "TestEvent"));
    }

    static class TestEvent extends ApplicationEvent {

        private final String message;

        public TestEvent(Object source, String message) {
            super(source);
            this.message = message;
        }
    }

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @EventListener
    @interface TestListener {

    }

    @TestListener
    public void testEvent(TestEvent testEvent) {
        System.out.println(testEvent.message);
    }

}
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

์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์€ ๋นˆ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋Š์–ด ๋Š์Šจํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์„ค๊ณ„ ๋“ฑ์„ ์ด๋ฒคํŠธ ์ฃผ๋„ ์„ค๊ณ„(Event Driven Architecture) ๋“ฑ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ ์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ApplicationEvent๋ฅผ ์ƒ์†๋ฐ›๋Š” SpringApplicationEvnet ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด๋‘์—ˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌํ˜„์ฒด๋“ค ์—ญ์‹œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋‹ค.

  • ApplicationStartingEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ ๋‚˜์„œ ๊ฐ€๋Šฅํ•œ ๋น ๋ฅธ ์‹œ์ ์— ๋ฐœํ–‰๋จ
    • Environment์™€ ApplicationContext๋Š” ์ค€๋น„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฆฌ์Šค๋„ˆ๋“ค์€ ๋“ฑ๋ก์ด ๋˜์—ˆ์Œ
    • ์ด๋ฒคํŠธ ๋ฐœํ–‰ source๋กœ SpringApplication์ด ๋„˜์–ด์˜ค๋Š”๋ฐ, ์ดํ›„ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฏ€๋กœ ๋‚ด๋ถ€ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์€ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•จ
  • ApplicationContextInitializedEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ค€๋น„๋˜์—ˆ์œผ๋ฉฐ initializer๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์Œ
    • ํ•˜์ง€๋งŒ ๋นˆ ์ •๋ณด๋“ค์€ ๋ถˆ๋Ÿฌ์™€์ง€๊ธฐ ์ „์— ๋ฐœํ–‰๋จ
  • ApplicationEnvironmentPreparedEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ  Environment๊ฐ€ ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ๋ฐœํ–‰๋จ
  • ApplicationPreparedEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์™„์ „ํžˆ ์ค€๋น„๋˜์—ˆ์ง€๋งŒ refresh ๋˜๊ธฐ ์ „์— ๋ฐœํ–‰๋จ
    • ๋นˆ ์ •๋ณด๋“ค์€ ๋ถˆ๋Ÿฌ์™€์กŒ์œผ๋ฉฐ Environment ์—ญ์‹œ ์ค€๋น„๊ฐ€ ๋œ ์ƒํƒœ์ž„
  • ApplicationStartedEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ refresh ๋˜๊ณ ๋‚˜์„œ ๋ฐœํ–‰๋จ
    • ApplicationRunner์™€ CommandLineRunner๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์˜ ์‹œ์ ์ž„
  • ApplicationReadyEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๋ฐœํ–‰๋จ
    • ์ด๋ฒคํŠธ ๋ฐœํ–‰ source๋กœ SpringApplication์ด ๋„˜์–ด์˜ค๋Š”๋ฐ, ์ดํ›„์— ์ดˆ๊ธฐํ™” ์Šคํ…์ด ์ง„ํ–‰๋˜๋ฏ€๋กœ ๋‚ด๋ถ€ ๋ณ€๊ฒฝ์€ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•จ
  • ApplicationFailedEvent

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰์— ์‹คํŒจํ–ˆ์„ ๋•Œ ๋ฐœํ–‰๋จ

์œ„์˜ 3๊ฐ€์ง€ ์ค‘์—์„œ ํŽธํ•œ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์— warm-up์„ ์‹œํ‚ด์œผ๋กœ์จ ์ฒซ ์š”์ฒญ์ด ๋Š๋ฆฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜๊ณผ ์—ฐ๊ด€๋œ ์ž‘์—…์ด๋ผ๋ฉด @RansactionalEventListener๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


# 0409 - CDN(Contents Delivery Network)

image

CDN(Contents Delivery Network)์ด๋ž€ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์›น ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๋ฅผ ๋†’์ด๋Š” ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„ ๋„คํŠธ์›Œํฌ์ด๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋–„ ํ•ด๋‹น ์›น ์‚ฌ์ดํŠธ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์˜์ƒ์ด๋‚˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๋„๋ฅดํ•  ๋•Œ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๋ฐ˜๋ฉด ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” CDN ์„œ๋ฒ„์— ์›น ์‚ฌ์ดํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•ด ๋†“์œผ๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰, CDN์€ ์ฝ˜ํ…์ธ  ์ „์†ก ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๋Š” ๋„คํŠธ์›Œํฌ์ด๋‹ค.

# CDN์˜ ๋™์ž‘ ๋ฐฉ์‹

CDN์˜ ๋ชฉ์ ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„์ด๋ž€ ์›น ํŽ˜์ด์ง€ ํ˜น์€ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ ์ฝ˜ํ…์ธ  ๋“ฑ์ด ๋””๋ฐ”์ด์Šค์— ์™„์ „ํžˆ ๋กœ๋”ฉ๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋งํ•œ๋‹ค. ์ฝ˜ํ…์ธ ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๋ฌผ๋ฆฌ์  ๊ฑฐ๋ฆฌ๋ฅผ ์ค„์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” CDN๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ CDN์ด ๊ด‘๋ฒ”์œ„ํ•˜๊ณ  ๋„“๊ฒŒ ๋ถ„์‚ฐ๋˜์–ด ์žˆ์„์ˆ˜๋ก ์›น ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ CDN์€ ์—ฌ๋Ÿฌ ์ง€๋ฆฌ์  ์œ„์น˜์— ์ ‘์† ์ง€์ (POP) ๋˜๋Š” CDN ์—ฃ์ง€ ์„œ๋ฒ„ ๊ทธ๋ฃน์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์ด ๋„คํŠธ์›Œํฌ๋Š” ์บ์‹ฑ, ๋™์  ๊ฐ€์† ๋ฐ ์—ฃ์ง€ ๋กœ์ง ๊ณ„์‚ฐ์˜ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

# ์บ์‹ฑ

์บ์‹ฑ์€ ๋” ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์œ„ํ•ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์˜ ์—ฌ๋Ÿฌ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค. CDN ๊ธฐ์ˆ ์—์„œ ์บ์‹ฑ์€ ๋„คํŠธ์›Œํฌ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์ •์  ์›น ์‚ฌ์ดํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. CDN์—์„œ ์บ์‹ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

  • ์ง€๋ฆฌ์ ์œผ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์›น ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ์ •์  ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  • ์š”์ฒญ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๋˜๋Š” Origin ์„œ๋ฒ„์— ๋„๋‹ฌํ•œ๋‹ค. Origin ์„œ๋ฒ„๋Š” ์›๊ฒฉ ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ๋ฐฉ๋ฌธ์ž์™€ ์ง€๋ฆฌ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด CDN POP์— ์‘๋‹ต ๋ณต์‚ฌ๋ณธ์„ ๋ณด๋‚ธ๋‹ค.
  • CDN POP ์„œ๋ฒ„๋Š” ๋ณต์‚ฌ๋ณธ์„ ์บ์‹ฑ๋œ ํŒŒ์ผ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๋‹ค์Œ์— ํ•ด๋‹น ๋ฐฉ๋ฌธ์ž ๋˜๋Š” ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋™์ผํ•œ ์š”์ฒญ์„ ํ•˜๋ฉด, Origin ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์บ์‹ฑ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

# ๋™์  ๊ฐ€์†

๋™์  ๊ฐ€์†์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ์ค‘๊ฐœ CDN ์„œ๋ฒ„๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋™์  ์›น ์ฝ˜ํ…์ธ  ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ฒ„์‘๋‹ต ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ์›น ์ฝ˜ํ…์ธ ์—์„œ๋Š” ์บ์‹ฑ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. CDN ์„œ๋ฒ„๋Š” ๋ชจ๋“  ๋™์  ์š”์ฒญ์— ๋Œ€ํ•ด Origin ์„œ๋ฒ„์™€ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜์ง€๋งŒ ์ž์‹ ๊ณผ Origin์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์›น ์„œ๋ฒ„๋กœ ์ง์ ‘ ๋™์  ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์š”์ฒญ์ด ์†์‹ค๋˜๊ฑฐ๋‚˜ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ณด์•ˆ ๊ฒ€์ฆ์„ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ์—ด๊ณ  ๋‹ซ๋Š” ๋ฐ์—๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, ๊ทผ์ฒ˜์˜ CDN ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ Origin ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์ด ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ด๋“ค ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋”์šฑ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ง€๋Šฅํ˜• ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Origin ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ง€๋ฆฌ์  ๊ทผ์ ‘์„ฑ
  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

# ์—ฃ์ง€ ๋กœ์ง ๊ณ„์‚ฐ

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก CDN ์—ฃ์ง€ ์„œ๋ฒ„๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ์„œ๋ฒ„๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์บ์‹ฑ ๋™์ž‘์„ ์ˆ˜์ •ํ•œ๋‹ค.
  • ์ž˜๋ชป๋œ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ํ™•์ธํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์‘๋‹ตํ•˜๊ธฐ ์ „์— ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•œ๋‹ค.

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

# CDN์˜ ์žฅ์ 

CDN์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  1. ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•
    ๊ฐ€๊นŒ์šด CDN ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ „์†กํ•ด์ฃผ๊ธฐ ๋–„๋ฌธ์— ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ๋‹จ์ถ• ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ๋Œ€์—ญํญ ๋น„์šฉ ์ ˆ๊ฐ
    -> CDN์€ ์บ์‹ฑ ๋ฐ ๊ธฐํƒ€ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด Origin ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ค„์—ฌ ์›น ์‚ฌ์ดํŠธ ์†Œ์œ ์ž์˜ ํ˜ธ์ŠคํŒ… ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ์ฝ˜ํ…์ธ  ๊ฐ€์šฉ์„ฑ ์ œ๊ณต
    -> CDN ์„œ๋น„์Šค๋Š” ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์›น ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  4. ์›น ์‚ฌ์ดํŠธ ๋ณด์•ˆ ๊ฐ•ํ™”
    -> DDoS ๊ณต๊ฒฉ๊ณผ ๊ฐ™์€ ๊ฐ€์งœ ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์ค‘๊ฐ„ ์„œ๋ฒ„ ๊ฐ„์— ๋ถ„์‚ฐํ•˜์—ฌ Origin ์„œ๋ฒ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.


# 0413 - ๋…ผ๋ฆฌ ์—ฐ์‚ฐ๊ณผ ๋ถˆ ๋Œ€์ˆ˜

# ๋…ผ๋ฆฌ ์—ฐ์‚ฐ

: ์‚ฐ์ˆ  ์—ฐ์‚ฐ(์ˆ˜์น˜๋ฅผ ์ด์šฉํ•œ ๊ฐ€๊ฐ์Šน์ œ)์„ ์ œ์™ธํ•œ ๋ฌธ์ž๋‚˜ ์ˆซ์ž์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์—ฐ์‚ฐ. ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋น„ํŠธ ๋˜๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰.

# ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜

๋…ผ๋ฆฌํ•ฉ, ๋…ผ๋ฆฌ๊ณฑ, ๋…ผ๋ฆฌ๋ถ€์ •, ๋ถ„๊ธฐ, ๋น„๊ต ์‹œํ”„ํŠธ, ๋ณ€ํ™˜ ๋“ฑ

  • ๋ถ„๊ธฐ : ๋ช…๋ น์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ. ๋ฌด์กฐ๊ฑด ๋ถ„๊ธฐ์™€ ์กฐ๊ฑด ๋ถ„๊ธฐ ์กด์žฌ.
  • ๋น„๊ต : ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ทธ ๋Œ€์†Œ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ.
  • ์‹œํ”„ํŠธ : ๊ฐ์ข… ์—ฐ์‚ฐ์„ ์œ„ํ•ด์„œ ๊ธฐ์–ต๋œ ๋ฐ์ดํ„ฐ ๋น„ํŠธ๋“ค์„ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋™ํ•˜๋Š” ์—ฐ์‚ฐ.
  • ๋ณ€ํ™˜ : 2์ง„์ˆ˜์™€ 10์ง„์ˆ˜์˜ ์ƒํ˜ธ ๋ณ€ํ™˜์ด๋‚˜ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ.

# ๋ถˆ ๋Œ€์ˆ˜

# ๋Œ€์ˆ˜

: ๋Œ€์ˆ˜ํ•™ (๊ฐœ๊ฐœ์˜ ์ˆซ์ž ๋Œ€์‹ ์— ์ˆซ์ž๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์˜ ๊ด€๊ณ„, ์„ฑ์งˆ, ๊ณ„์‚ฐ ๋ฒ•์น™ ๋”ฐ์œ„๋ฅผ ํ•™๋ฌธํ•˜๋Š” ํ•™๋ฌธ).

# ๋ถˆ ๋Œ€์ˆ˜

: ์กฐ์ง€ ๋ถˆ์— ์˜ํ•ด ์ฐฝ์‹œ๋œ ๋…ผ๋ฆฌ ์ˆ˜ํ•™. ๋ช…์ œ์˜ ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ํŒ๋‹จํ•˜๋Š” ๋ก ๋ฆฌ ์—ฐ์‚ฐ์„ ๋‹ค๋ฃจ๋Š” ๋Œ€์ˆ˜.
๋…ผ๋ฆฌ ํšŒ๋กœ ์„ค๊ณ„์— ์ด์šฉ๋˜์–ด ์ปดํ“จํ„ฐ ๋™์ž‘์˜ ๊ธฐ์ดˆ๊ฐ€ ๋จ.
๋…ผ๋ฆฌ์˜ ์ฐธ ๋˜๋Š” ๊ฑฐ์ง“ ๊ฐ’์„ ๊ฐ–๋Š” ๋…ผ๋ฆฌ ๋ณ€์ˆ˜๋“ค์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋…ผ๋ฆฌ๊ณฑ, ๋…ผ๋ฆฌํ•ฉ, ๋…ผ๋ฆฌ๋ถ€์ • ๋“ฑ์˜ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ๋…ผ๋ฆฌ์‹์œผ๋กœ ํ‘œํ˜„.

๋…ผ๋ฆฌ์‹์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ•์น™๊ณผ ์ •๋ฆฌ๋“ค์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด๋“ค์„ ์ด์šฉํ•˜์—ฌ ์ •ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋…ผ๋ฆฌ ํšŒ๋กœ ์„ค๊ณ„ ๊ฐ€๋Šฅ.

# ๋ถˆ ๋Œ€์ˆ˜์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ

  • ๋…ผ๋ฆฌ๊ณฑ : ์ฃผ์–ด์ง„ ๋ณต์ˆ˜ ๋ช…์ œ ๋ชจ๋‘๊ฐ€ ์ฐธ์ด์–ด์•ผ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ด ๋˜๋Š” ์—ฐ์‚ฐ
  • ๋…ผ๋ฆฌํ•ฉ : ์ฃผ์–ด์ง„ ๋ณต์ˆ˜ ๋ช…์ œ์— ์ ์–ด๋„ 1๊ฐœ ์ด์ƒ์˜ ์ฐธ์ด ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ด ๋˜๋Š” ์—ฐ์‚ฐ
  • ๋…ผ๋ฆฌ๋ถ€์ • : ์ฃผ์–ด์ง„ ๋ช…์ œ์˜ ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ๋ถ€์ •ํ•˜๋Š” ์—ฐ์‚ฐ

# ๋ถˆ ๋Œ€์ˆ˜์˜ ๋ฒ•์น˜๊ณผ ์ •๋ฆฌ

image

์‚ฐ์ˆ  ์—ฐ์‚ฐ์—์„œ +์™€ *์—ฐ์‚ฐ์˜ ์šฐ์„ ์ˆœ์˜๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์—์„œ +์™€ *์—ฐ์‚ฐ์˜ ์šฐ์„ ์ˆœ์˜๋Š” ๊ฐ™์œผ๋ฏ€๋กœ ๋ถ„๋ฐฐ๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•œ๋‹ค.

# ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ

: ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ผ๋ฆฌ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ „์ž ํšŒ๋กœ

  • AND ๊ฒŒ์ดํŠธ : ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ์ด ๋ชจ๋‘ 1์ผ ๋•Œ ์ถœ๋ ฅ์ด 1์ธ ๊ฒŒ์ดํŠธ. ๋…ผ๋ฆฌ๊ณฑ ํšŒ๋กœ
  • OR ๊ฒŒ์ดํŠธ : ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ ์ž…๋ ฅ์ด 1์ผ ๋•Œ ์ถœ๋ ฅ์ด 1์ธ ๊ฒŒ์ดํŠธ. ๋…ผ๋ฆฌํ•ฉ ํšŒ๋กœ
  • XOR ๊ฒŒ์ดํŠธ : ์ž…๋ ฅ์ด ์„œ๋กœ ๋‹ค๋ฅผ ๋•Œ ์ถœ๋ ฅ์ด 1์ธ ๊ฒŒ์ดํŠธ. ๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ ํšŒ๋กœ
  • NOT ๊ฒŒ์ดํŠธ : ์ž…๋ ฅ์ด 0์ด๋ฉด ์ถœ๋ ฅ์ด 1, ์ž…๋ ฅ์ด 1์ด๋ฉด ์ถœ๋ ฅ์ด 0์ธ ๊ฒŒ์ดํŠธ. ๋…ผ๋ฆฌ๋ถ€์ • ํšŒ๋กœ
  • NAND ๊ฒŒ์ดํŠธ : NOT + AND ๊ฒŒ์ดํŠธ๋กœ AND ๊ฒŒ์ดํŠธ์˜ ๋ฐ˜๋Œ€๊ฐ€ ์ถœ๋ ฅ.
  • NOR ๊ฒŒ์ดํŠธ : NOT + OR ๊ฒŒ์ดํŠธ๋กœ OR ๊ฒŒ์ดํŠธ์˜ ๋ฐ˜๋Œ€๊ฐ€ ์ถœ๋ ฅ.
  • NXOR ๊ฒŒ์ดํŠธ : NOT + XOR ๊ฒŒ์ดํŠธ๋กœ XOR ๊ฒŒ์ดํŠธ์˜ ๋ฐ˜๋Œ€๊ฐ€ ์ถœ๋ ฅ.

# 0423 - GitHub ๊ธฐ๋ณธ Label ์˜๋ฏธ

Label ์„ค๋ช…
bug ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œย ๋˜๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘
documentation ๋ฌธ์„œ์— ๋Œ€ํ•œ ๊ฐœ์„  ๋˜๋Š” ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•จ
duplicate ์œ ์‚ฌํ•œ issue, pull requests ๋˜๋Š” ํ† ๋ก 
enhancement ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์š”์ฒญ
good first issue ์ฒ˜์Œ ๊ธฐ์—ฌ์ž์—๊ฒŒ ์ข‹์€ issue
help wanted ๊ด€๋ฆฌ์ž๊ฐ€ issue ๋˜๋Š” pull request์— ๋Œ€ํ•œ ๋„์›€์„ ์›ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค
invalid issue, pull request ๋˜๋Š” ํ† ๋ก ์ด ๋” ์ด์ƒ ๊ด€๋ จ์ด ์—†์Œ
question issue, pull request ๋˜๋Š” ํ† ๋ก ์— ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•จ
wontfix issue, pull request ๋˜๋Š” ํ† ๋ก ์— ๋Œ€ํ•œ ์ž‘์—…์ด ๊ณ„์†๋˜์ง€ ์•Š์Œ
Last update: June 11, 2023 23:31
Contributors: jaesungahn91