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 ๋์ ๊ณผ์
# ๋์๋ฐฉ์
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ๋ฐ์
- ์์ฒญ ์ ๋ณด๋ฅผ ํตํด ์์ฒญ์ ์์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์
- ์์ฒญ์ ์ปจํธ๋กค๋ฌ๋ก ์์ํ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ฐพ์์ ์ ๋ฌ
- ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ์ ์์ํจ
- ๋น์ง๋์ค ๋ก์ง์ ์ฒ๋ฆฌํจ
- ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํ๊ฐ์ ๋ฐํํจ
- ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ๋ฐํ๊ฐ์ ์ฒ๋ฆฌํจ
- ์๋ฒ์ ์๋ต์ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํจ
# 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");
}
}
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");
}
}
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");
}
}
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) {
});
}
}
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) {
});
}
}
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");
}
}
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);
}
}
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)
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์ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ ์ฅ์ ์ ์ป์ ์ ์๋ค.
ํ์ด์ง ๋ก๋ ์๊ฐ ๋จ์ถ
๊ฐ๊น์ด CDN ์๋ฒ์์ ์ฝํ ์ธ ๋ฅผ ์ ์กํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถ ํ ์ ์๋ค.๋์ญํญ ๋น์ฉ ์ ๊ฐ
-> CDN์ ์บ์ฑ ๋ฐ ๊ธฐํ ์ต์ ํ๋ฅผ ํตํด Origin ์๋ฒ๊ฐ ์ ๊ณตํด์ผํ๋ ๋ฐ์ดํฐ์ ์์ ์ค์ฌ ์น ์ฌ์ดํธ ์์ ์์ ํธ์คํ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.์ฝํ ์ธ ๊ฐ์ฉ์ฑ ์ ๊ณต
-> CDN ์๋น์ค๋ ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ณ ์น ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.์น ์ฌ์ดํธ ๋ณด์ ๊ฐํ
-> DDoS ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ๊ฐ์ง ํธ๋ํฝ์ ์ฌ๋ฌ ์ค๊ฐ ์๋ฒ ๊ฐ์ ๋ถ์ฐํ์ฌ Origin ์๋ฒ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ผ ์ ์๋ค.
# 0413 - ๋ ผ๋ฆฌ ์ฐ์ฐ๊ณผ ๋ถ ๋์
# ๋ ผ๋ฆฌ ์ฐ์ฐ
: ์ฐ์ ์ฐ์ฐ(์์น๋ฅผ ์ด์ฉํ ๊ฐ๊ฐ์น์ )์ ์ ์ธํ ๋ฌธ์๋ ์ซ์์ ๋ํ ์ฌ๋ฌ ๊ฐ์ง ์ฐ์ฐ. ๋ฐ์ดํฐ๋ฅผ ์ซ์๋ก ์ทจ๊ธํ์ง ์์ผ๋ฉฐ ๋นํธ ๋๋ ๋ฐ์ดํธ ๋จ์๋ก ์ทจ๊ธ.
# ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ข ๋ฅ
๋ ผ๋ฆฌํฉ, ๋ ผ๋ฆฌ๊ณฑ, ๋ ผ๋ฆฌ๋ถ์ , ๋ถ๊ธฐ, ๋น๊ต ์ํํธ, ๋ณํ ๋ฑ
- ๋ถ๊ธฐ : ๋ช ๋ น์ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ. ๋ฌด์กฐ๊ฑด ๋ถ๊ธฐ์ ์กฐ๊ฑด ๋ถ๊ธฐ ์กด์ฌ.
- ๋น๊ต : ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ ๊ทธ ๋์๋ฅผ ํ๋จํ๋ ๊ฒ.
- ์ํํธ : ๊ฐ์ข ์ฐ์ฐ์ ์ํด์ ๊ธฐ์ต๋ ๋ฐ์ดํฐ ๋นํธ๋ค์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฐจ๋ก๋๋ก ์ด๋ํ๋ ์ฐ์ฐ.
- ๋ณํ : 2์ง์์ 10์ง์์ ์ํธ ๋ณํ์ด๋ ์ฝ๋๋ฅผ ๋ฐ๊พธ๋ ๊ฒ.
# ๋ถ ๋์
# ๋์
: ๋์ํ (๊ฐ๊ฐ์ ์ซ์ ๋์ ์ ์ซ์๋ฅผ ๋ํํ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ด๊ณ, ์ฑ์ง, ๊ณ์ฐ ๋ฒ์น ๋ฐ์๋ฅผ ํ๋ฌธํ๋ ํ๋ฌธ).
# ๋ถ ๋์
: ์กฐ์ง ๋ถ์ ์ํด ์ฐฝ์๋ ๋
ผ๋ฆฌ ์ํ. ๋ช
์ ์ ์ฐธ๊ณผ ๊ฑฐ์ง์ ํ๋จํ๋ ๋ก ๋ฆฌ ์ฐ์ฐ์ ๋ค๋ฃจ๋ ๋์.
๋
ผ๋ฆฌ ํ๋ก ์ค๊ณ์ ์ด์ฉ๋์ด ์ปดํจํฐ ๋์์ ๊ธฐ์ด๊ฐ ๋จ.
๋
ผ๋ฆฌ์ ์ฐธ ๋๋ ๊ฑฐ์ง ๊ฐ์ ๊ฐ๋ ๋
ผ๋ฆฌ ๋ณ์๋ค์ ์๊ด๊ด๊ณ๋ฅผ ๋
ผ๋ฆฌ๊ณฑ, ๋
ผ๋ฆฌํฉ, ๋
ผ๋ฆฌ๋ถ์ ๋ฑ์ ๋
ผ๋ฆฌ ์ฐ์ฐ์ ์ด์ฉํ์ฌ ๋
ผ๋ฆฌ์์ผ๋ก ํํ.
๋ ผ๋ฆฌ์์ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ ๋ฒ์น๊ณผ ์ ๋ฆฌ๋ค์ ์ ๊ณตํ๋ฏ๋ก ์ด๋ค์ ์ด์ฉํ์ฌ ์ ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ ผ๋ฆฌ ํ๋ก ์ค๊ณ ๊ฐ๋ฅ.
# ๋ถ ๋์์ ๊ธฐ๋ณธ ์ฐ์ฐ
- ๋ ผ๋ฆฌ๊ณฑ : ์ฃผ์ด์ง ๋ณต์ ๋ช ์ ๋ชจ๋๊ฐ ์ฐธ์ด์ด์ผ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด ๋๋ ์ฐ์ฐ
- ๋ ผ๋ฆฌํฉ : ์ฃผ์ด์ง ๋ณต์ ๋ช ์ ์ ์ ์ด๋ 1๊ฐ ์ด์์ ์ฐธ์ด ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด ๋๋ ์ฐ์ฐ
- ๋ ผ๋ฆฌ๋ถ์ : ์ฃผ์ด์ง ๋ช ์ ์ ์ฐธ๊ณผ ๊ฑฐ์ง์ ๋ถ์ ํ๋ ์ฐ์ฐ
# ๋ถ ๋์์ ๋ฒ์น๊ณผ ์ ๋ฆฌ
์ฐ์ ์ฐ์ฐ์์ +์ *์ฐ์ฐ์ ์ฐ์ ์์๋ ๋ค๋ฅด์ง๋ง, ๋ ผ๋ฆฌ ์ฐ์ฐ์์ +์ *์ฐ์ฐ์ ์ฐ์ ์์๋ ๊ฐ์ผ๋ฏ๋ก ๋ถ๋ฐฐ๋ฒ์น์ด ์ฑ๋ฆฝํ๋ค.
# ๋ ผ๋ฆฌ ๊ฒ์ดํธ
: ํ๋ ์ด์์ ๋ ผ๋ฆฌ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ํํ์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์ ์ ํ๋ก
- 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 ๋๋ ํ ๋ก ์ ๋ํ ์์ ์ด ๊ณ์๋์ง ์์ |