์ด์ฐฝ๊ธฐ ์ ์
์์ ์ ๋ฐฐ์ฐ๊ฑฐ๋ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ์ธ ๋ฐฉ๋ฒ๋ค์ด ์๋ค. ์๊ฐ์ด ์ง๋ ์๋ก ์ ๋งํด์ ๋ค๋ฅธ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์ผ๋ ค ํ๊ณ ์ต๊ด์ฒ๋ผ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํ๋ ๋ฒ๋ฆ์ด ์๋ค. ๊ทธ ์ด์ ๋ ๊ณผ๊ฑฐ์ ์ฌ์ฉํ์๋ ์๋ฌด ํ ์์ด ์ ๋์๊ธฐ ๋๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฅธ ๊ตฌํ ๋๋ฌธ์ด๋ผ๋ ํ๊ณ์ผ ๊ฒ ๊ฐ๋ค. ์ด๋ฌํ ๋ฒ๋ฆ์ ๋น๋จ ์ด ๊ธ์ ์ ๊ณ ์๋ ํ์ ๋ฟ๋ง์ด ์๋๋ผ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ง๊ณ ์์๊บผ๋ผ ์กฐ์ฌ์ค๋ ์ถ์ธกํด๋ณธ๋ค. (์๋๋ผ๋ฉด…๋์ฑ ๋ถ๋ฐ ํด์ผ๊ฒ ๋ค…ใ
) ์ต๊ทผ ์ด์ํ๊ณ ์๋ ์๋น์ค์์ ์ฅ์ ์ํฉ๊น์ง ๊ฐ์์๋ ์ํํ ์ํฉ์ด ์์๋๋ฐ ํ๋ด ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํตํด ๋ฌธ์ ์ ์ ํ์
ํ ์ ์์๋ค. ๊ทธ ์์ธ์ Spring MVC Controller ๋ ๋ฒจ์์ redirect ์ฒ๋ฆฌ๋ฅผ ํ ๋ return๊ฐ์ Cardinality๊ฐ ๋์๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์๋๋ค๊ณ …
@RequestMapping(value = "/test", method = RequestMethod.GET) public String test() { String url = "์ด๋ ํ ๋ก์ง์ ์ํด ์์ฑ๋๋ url"; return "redirect:" + url; // <- ์ํ ํฌ์ธํธ! } ์ด ์ฝ๋๊ฐ ์? ์ด๋๊ฐ ์ด๋์? ์ด์ ๊น์ง Controller ๋ ๋ฒจ์์ redirect ์ฒ๋ฆฌ๋ฅผ ํ ๋ ์๋ฌด์๊ฐ์์ด ์์ ์๋ ์ฝ๋ ํํ๋ก ๊ตฌํ์ ํ๋๋ฐ ์ ๋ฌํ ์ฝ๋ ๋๋ฌธ์ OOM์ด ๋ฐ์ํ์ฌ fullGC ๊ฐ ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๊ณ , ์ผ์์ ์ผ๋ก ์๋น์ค๊ฐ ์ง์ฐ๋๋ ํ์์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด์๋๋ฐ ์ฅ์ ๋ฅผ ์ ๋ฐํ ์ ์๋ ์ํํ ๋ฐฉ๋ฒ์ด์๋ค๋… ์ด๋ฒ ํฌ์คํ
์์๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ด ์ ์๋ชป๋์๋์ง ์ค์ ๋ก ํ
์คํธ๋ฅผ ํตํด ๋ชธ์(?) ์ฒด๊ฐ์ ํด๋ณด๊ณ , ๊ทธ๋ผ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก redirect ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋๊ฐ์ ๊ฐ์ ์ ํจ์ผ๋ก์จ ๊ธฐ์กด๋ฐฉ์์ ๋นํด ์ด๋ค์ ์ด ์ข์์ก๋์ง์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๋ญ๊ฐ ๋ด๊ฒ์ผ๋ก ๋ง๋ค๊ธฐ ์๋ฆฌ์ฆ๋ฌผ์ด ๋์ฌ๊ฒ๋ง ๊ฐ์ ๋๋์ด๋ค…
๊ธฐ์กด๋ฐฉ์์ ๋ฌธ์ ์ ์ฌํ ๋ฐ ๋ค์ํ ์์ธ๋ถ์ ๊ธฐ์กด๋ฐฉ์์ผ๋ก ํ์๋ ์ OOM์ด ๋ฐ์ํ์๊น? ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฐ์ ๋ฐ ๊ธ๋ค๋ง ๋ณด๊ณ ์ถ์ธก ํ ๊ฒ์ด ์๋๋ผ ์ง์ ์ฌํ์ ํด๋ณด๊ณ ๋ค์ํ ์๊ฐ์์ ์์ธ๋ถ์์ ํด๋ณด์. ๋จผ์ ๊ธฐ๋ณธ์ ์ธ Spring MVC ๋ผ๋๋ฅผ ๋ง๋ค๊ณ redirect ํ๋ return ๊ฐ์ Cardinality๊ฐ ๋๋๋ก random string ์ ๋ง๋ค์ด ์ฃผ๋๋ก ํ๋ค. ์ฆ, /random์ ํธ์ถํ๋ฉด /result/ETmHfowFkU์ฒ๋ผ random string ์ด ๋ง๋ค์ด ์ง๋ฉฐ redirect ์ฒ๋ฆฌ๊ฐ ๋๋ ๋งค์ฐ ์ฌํํ ๊ตฌ์กฐ์ด๋ค.
// Spring ๋ฒ์ ์ 4.0.6.RELEASE @Controller @RequestMapping("/") public class TestController { @RequestMapping(value = "random", method = RequestMethod.GET) public String random() { return "redirect:result/" + UUID.randomUUID(); } @RequestMapping(value = "result/{message}", method = RequestMethod.GET) public String result(ModelMap model, @PathVariable String message) { model.addAttribute("message", message); return "result"; } } ๋ํ ํด๋น ํ๋ก์ ํธ์์๋ AOP๋ฅผ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ทธ๋์ ๋์ผํ ์ํฉ์ผ๋ก ์ฌํ์ ํ๊ธฐ ์ํด AOP๊ด๋ จ ์ค์ ๋ ์ถ๊ฐํด์ค๋ค.
@Configuration @EnableWebMvc @EnableAspectJAutoProxy @ComponentScan public class HelloWorldConfiguration { @Bean(name="HelloWorld") public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } } ์ด๋ ๊ฒ ํ๋ค tomcat์ผ๋ก ์ต๋/์ต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 256m์ผ๋ก ์ค์ ํ ํด๋น ๋ชจ๋์ ๋์์ค๋ค. ๊ทธ๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ๋ณด๊ธฐ ์ํด tomcat์ pinpoint๋ฅผ ์ฐ๋ํ๊ณ ๋ง์ง๋ง์ผ๋ก ํธ์ถํ
์คํธ๋ฅผ ์ํด nGrinder์ ์ค์ ํด์ค๋ค. ํน๋ณํ ์ค์ ์ ์๊ณ ์ ์ปจํธ๋กค๋ฌ์ url (/random) ์ ์ฌ๋ฌ๋ฒ ํธ์ถํ๋๋ก ํ์๋ค. nGrinder์ ์ค์ ํ๋๋์๋ ์ด ๋ธ๋ก๊ทธ ํฌ์คํ
์ ์ฐธ๊ณ ํด์ ์ค์ ํ์๋ค.
์, ์ด์ ํ
์คํธ๋ฅผ ์์ํด๋ณด์. (๋ง์น ์์ ์ง๋ํ๋๊ฒ ๊ฐ์ ๊ธฐ๋ถ์ผ๋ก…๊ฐํธ์ฌ~ ์นผ!)
nGrinder nGrinder์ ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ์์ url๋ง ํด๋น ์๋ฒ๋ก ํธ์ถ๋๋๋ก ๋ฐ๊ฟ์ฃผ๊ณ ์ด ๊ฐ์ ์ฌ์ฉ์๋ 2,000์ผ๋ก ์๊ฐ์ 5๋ถ์ผ๋ก ์ค์ ํ์ ํ
์คํธ ์์์ ํ์๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋ณผ์ ์์๋ค. TPS๊ฐ ๋ถ์์ ํด์ง๋ค๊ฐ ์ด๋์์ ๋ถํฐ ๋ฎ์์ง๋๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๊ฒ ์๋น์ค ์๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ ์ํ๋๋ฐ ๋ถํธ์ ๋๊ผ์๊บผ๋ผ ์ถ์ธก์ ํด๋ณธ๋ค. ๋ํ ์์ฃผ ๊ฐ๋จํ random string ์ ๋ฆฌํดํ๋ ํ์ด์ง ์์๋ ๋ถ๊ตฌํ๊ณ ์๋ฌ ์๋ต์ด ์ ์ง ์์๊ฒ์ ํ์ธํ ์ ์์๋ค.
pinpoint ๋ฉ๋ชจ๋ฆฌ ์ํ๋ ์ด๋ค์ง ํ์ธํ๊ธฐ ์ํด pinpoint๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋ณผ์ ์์๋ค. ๋ณด๊ธฐ๋งํด๋ ์ฌ์ฅ์ด ๋ฒ๋ ๋ฒ๋ (?) ๋ธ ์ ๋๋ก ๋ฌด์์ด ๊ทธ๋ฆผ์ด๋ค. ์ค์ ๋ก ์๋น์ค์ (์ด์ ๋๊น์ง ์๋์์ง๋ง) ๋น์ทํ ์ํฉ์ด ๋ฐ์ํ์๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ
์คํธ๋ฅผ ์ ์ ํ๋ฉด ํ ์๋ก ์ฌ๋ผ๊ฐ๋ค๊ฐ fullGC๊ฐ ๋ฐ์ํ๋๋ ๋๋๋ฌด ์ฒ์ ์๋ ๋๋๋ฌด๋ง๋ฅ fullGC๊ฐ ๋นผ๊ณกํ ๋ฐ์ํ์๋ค. (์ด๋ฌ๋… ํ์ด์ง ์ ๊ทผ์ ์ง์ฐ์ด ์๊ธด๊ฒ ๊ฐ๋ค.
๋ง์ฝ 1๋ฒ๋ถํฐ 10๋ฒ๊น์ง ๋ฒํธํ๊ฐ ์๋ ์ฌ๋๋ค ์ด ์ด๋ช
์๊ฒ ํผ์์ ๋์ผํ ๋ด์ฉ์ ๋ฉ์ผ์ ๋ณด๋ธ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ๋ฉ์ผ ๋ฐ์ก์ ํ๋ฒ์ ํ๋ช
์๊ฒ๋ง ๋ณด๋ด์ผ ํ๋ ์ ํ์ฌํญ์ด ์์๋ ๊ณผ์ฐ ๋น์ ์ ์ด๋ค์์ผ๋ก ๋ณด๋ด๊ฒ ๋๊ฐ? ์ด์ด์ ์ฝ์ง๋ง๊ณ ํ๋ฒ ์๊ฐํด๋ณด์.์๋ฌด๊ฒ๋ ๊ณ ๋ คํ์ง ์๊ณ ๋จ์ํ๊ฒ ์๊ฐํ๋ค๋ฉด 1๋ฒ ๋ณด๋ด๊ณ > 2๋ฒ ๋ณด๋ด๊ณ … 9๋ฒ ๋ณด๋ด๊ณ > 10๋ฒ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด ๋จผ์ ๋ ์ค๋ฅด๊ฒ ๋๋ค. (for loop 1 to 10 … ) ํ์ง๋ง ๋ณด๋ด์ผ ํ ์ฌ๋๋ค์ด ๋ง์์ ธ์ ๋ฐฑ๋ช
, ์ฒ๋ช
๋ง๊ฒ๋ ์ฒ๋ง๋ช
์๊ฒ ๋ณด๋ด์ผ ํ ๊ฒฝ์ฐ ๋ฐฉ๊ธ๊ณผ ๊ฐ์ ์์ฐจ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ฌด ๋ฆ๊ฒ ๋ฐ์ก๋๋ค๋๊ฑด ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ์ ์์๋ ๋ฌธ์ … ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋ณด๋ด์ผ ๋ณด๋ค ๋นจ๋ฆฌ ๋ณด๋ผ์ ์์๊น? ์ด๋ฒ ํฌ์คํ
์์๋ ํ์๊ฐ ์ด์ํ๊ณ ์๋ ์๋น์ค์์ ๊ธฐ์กด์ ์๋ ๋ณ๋ ฌํ๋ก์ธ์ค๋ฅผ ์ด๋ค์์ผ๋ก ์ต์ ํ ํ๋์ง, ๊ทธ๋์ ๊ฒฐ๊ตญ ์ผ๋ง๋ ๋นจ๋ผ์ก๋์ง์ ๋ํ ๊ณผ์ ์ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํ๋ค. ๋น๋จ ๋ฉ์ผ ๋ฐ์ก์ด๋ ์ฑ ํธ์ ๋ฑ ํน์ ๋๋ฉ์ธ์ ๊ตญํ๋์ง๋ ์๊ณ ์ ๋ฐ์ ์ธ ํ๋ก์ธ์ค์ ๋ํด ์ดํด๋ฅผ ํ๋ค๋ฉด ๋ค๋ฅธ ๊ณณ์์๋ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฉํ ์ ์์๊บผ๋ผ ๊ธฐ๋ ํด๋ณธ๋ค.
์ํฉํ์
๋ฐ ๋ชฉํ (์ํ ํ ์ดํด๋ฅผ ๋๊ธฐ ์ํ์ฌ) ๋จผ์ ํ์๊ฐ ์ด์ํ๊ณ ์๋ ์๋น์ค๋ฅผ ๊ฐ๋ตํ ์๊ฐ๋ถํฐ ํด์ผ๊ฒ ๋ค. (๊ทธ๋ ๋ค๊ณ ํ์ ํผ์ ๋ค ํ๋๊ฑด ์๋^^;…) ์
๋ฝ์ ๋ฐฉ์ก์ด ์์๋๋ฉด ๊ตฌ๋
ํ ์ฌ์ฉ์์๊ฒ ๊ฐ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์ค์น๋์ด์๋ ์ฑ์ผ๋ก ์๋ฆผ์ ๋ณด๋ด์ด ์์ ์ ์๋ ๊น์ง ๋ผ์ด๋ธ ๋ฐฉ์ก์ด๋ VOD ์์ ์คํ์ ๋ณด๋ค ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋๋ก ์ ๊ณตํ๊ณ ์๋ค. ์ฌ๊ธฐ์, ์๋ฆผ์ด ๋ฆ๊ฒ ๋ฐ์ก๋๋ฉด ์
๋ฝ์ ๋ฐฉ์ก์ ์์ํ๊ณ ํฌ๋ค์ด ๋ค์ด์ค๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค๊ฑฐ๋ ๋ฐ๋๋ก ํฌ๋ค์ ๋ฐฉ์ก ์์ํ๊ณ ๋ค๋ฆ๊ฒ ๋ฐฉ์ก์ ๋ณด๊ฒ๋๋ ๋ถํธํจ์ด ์๊ธฐ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ณต์ผ๋ก ์๋ฆผ์ด ๋ฐ์ก๋๊ฑฐ๋ ํน์ ์ฌ์ฉ์๋ค์๊ฒ ๋ฐ์ก์ด ๋๋ฝ๋๋ฉด ์ ๋๋ ๋ฑ “์๋ฆผ” ์ด๋ ๊ธฐ๋ฅ์ ์๋น์ค์ ์์ด์ ์ค์ํ ๊ธฐ๋ฅ ์ค์ ํ๋๋ผ๊ณ ํ ์ ์๋ค.
์ฌ๊ธฐ์ “๋ฐ์ก ์๊ฐ"์ ์ฒ์ ๋ฐ์ก์์
์์๋ถํฐ ๋ง์ง๋ง ์ฌ์ฉ์์ ๋ํด ์ฌ๋ด ๋ฐ์ก ํ๋ซํผ์ผ๋ก ๋ฐ์ก ์์ฒญ์ ํ๊ธฐ๊น์ง์ ์๊ฐ์ ์๋ฏธ
๊ทธ๋ฆฌ๊ณ “์ฑ๋” ์ด๋ผ๋ ์๋ฝ๋จ์์ ๊ทธ๋ฃน์ด ์๋๋ฐ ์์๊ณผ ์ฑ๋์ ๊ด๊ณ๋ 1:N์ด๋ค. ์ฆ, ํ๋์ ์์์ ์ฌ๋ฌ ์ฑ๋์ ์ฐ๊ฒฐ์ํฌ์ ์์ด์ ํ๋์ ์์์ ๋ํด ์ฌ๋ฌ ์ฑ๋๋ค์๊ฒ ์ฐ๊ฒฐ์ ์์ผ๋์ผ๋ฉด ์ฑ๋์ ๊ตฌ๋
ํ๊ณ ์๋ ๊ฐ๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ชจ๋ ์๋ฆผ์ ๋ฐ์ก ํ ์๊ฐ ์๊ฒ ๋๋ค.
์ฐ์ , ์๋์ด ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๊ธฐ๊น์ง์ ํฐ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
์๋ฆผ ํ๋ก์ธ์ค" ์๋ฆผ ํ๋ก์ธ์ค ์๋น์ค์์ ๋ณด๋ผ ๋์๊ณผ ๋ณด๋ผ ์ ๋ณด๋ฅผ ์กฐํฉํ์ฌ ์ฌ๋ด ํธ์ ๋ฐ์ก ํ๋ซํผ์ธ ์ฌ๋ด ๋ฐ์ก ํ๋ซํผ์๊ฒ ์ ๋ฌ์ ํ๋ฉด ํ๋ซํผ์ ๋ฐ๋ผ ๋ฐ์ก์ด ๋๊ณ ์ต์ข
์ ์ผ๋ก๋ ์ฌ์ฉ์์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋
ธ์ถ์ด ๋จ ๊ฐ๋จํ๊ฒ “๋ณ๋ ฌ๋ก ๋ฐ์กํ๋ฉด ๋์ง ์์๊น?“๋ผ๋ ํ์์ ์๊ฐ์ด ๋ถ๋๋ฌ์์ง ์ ๋๋ก ์ด๋ฏธ redis, rabbitMQ ๋ฅผ ํ์ฉํด์ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ณ๋ ฌ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋์ด ์์๋ค.
๊ธฐ์กด ๊ตฌ์กฐ" ๊ธฐ์กด ๊ตฌ์กฐ ๋ผ์ด๋ธ๊ฐ ์์๋๊ฑฐ๋ VOD๊ฐ ์คํ๋ ๊ฒฝ์ฐ api๊ฐ ํธ์ถ์ด ๋๊ณ ๋ค์ ๋ฐฐ์น ์๋ฒ์๊ฒ ์์์ ๊ณ ์ ๋ฒํธ๋ฅผ ์ ๋ฌ ์ ๋ฌ๋ฐ์ ์์์ ๊ณ ์ ๋ฒํธ๋ฅผ rabbitMQ์ ์์ ์ ์กฐํ Queue์ produce ์์ ์ ์กฐํ Queue์ consumer์ธ ์์ ์ ์กฐํ ๋ชจ๋์์ ์์์ ๊ณ ์ ๋ฒํธ๋ฅผ consume ํ ์๋ ์์
์ ์งํ 3-1. ์์:์ฑ๋ ์ 1:N ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฑ๋์ ์ฌ์ฉ์๋ค์๊ฒ ์๋ฆผ์ ๋ฐ์กํ ์ ์๊ณ , ์์์ ์ฐ๊ฒฐ๋ ์ฑ๋๋ค์ user๋ฅผ db์์ ๊ฐ์ ธ์จ๋ค. 3-2. ๊ฐ์ ธ์จ user๋ฅผ (์ค๋ณต์ผ๋ก ์๋ฆผ์ด ๋ฐ์ก๋์ง ์๊ธฐ ์ํด) java set์ ๋ด๊ณ ๋ชจ๋ ์ฑ๋์ ์กฐํํ๋ค๋ฉด redis์ sorted set์ผ๋ก ๋ด๋๋ค. 3-3. ์ ๋นํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ์ด ๋ถํ ์ ๋ณด๋ฅผ ๋ฐ์ก Queue์ produce ๋ฐ์ก ๋ชจ๋์์ ๋ถํ ์ ๋ณด๋ฅผ consume ํ๊ณ ์๋ ์์
์ ์งํ (๋ณ๋ ฌ์ฒ๋ฆฌ) 4-1. redis ์์ user ๋ชจ์์ ๊ฐ์ ธ์ค๊ณ 4-2. ์กฐํํ user์ ํด๋นํ๋ deviceId๋ฅผ db์์ ๊ฐ์ ธ์ด deviceId์ ์ปจํ
์ธ ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ์ ์ ํ payload๋ฅผ ๊ตฌ์ฑ ํ ์ฌ๋ด ๋ฐ์ก ํ๋ซํผ ์๊ฒ ์ ๋ฌ ๊ธฐ์กด ๊ตฌ์กฐ์์ ๋ฐ์ก ์๊ฐ์ ์๋น์ค์์ ๊ตฌ๋
์ ์๊ฐ ๊ฐ์ฅ ๋ง์ ์ฑ๋ ๊ธฐ์ค์ผ๋ก ์ฝ 1.1์ฒ๋ง ๋ช
์๊ฒ ์ต์ข
11๋ถ ์ ๋ ์์๋๊ณ ์์๋ค. (๋งจ ์ฒ์์ ์ด์ผ๊ธฐ ํ ์์ฐจ์ ์ธ ๋ฐฉ๋ฒ์ด์๋ค๋ฉด… ํจ์ฌ๋ ์ค๋ ๊ฑธ๋ ธ์๊บผ๋ผ ์์ํด๋ณธ๋ค…)
๊ธฐ์กด์ ๊ตฌ์ฑํ์
จ๋ ๋ถ๋ค๋ ์๋ง์ ์ํ์ฐฉ์ค์ ๊ณ ๋ฏผ์ ํ์๋ฉฐ ๊ตฌ์ฑํ์
จ์ ํ
๋ฐ ๋ ์ด์ ์ด๋ป๊ฒ ๋ ๋น ๋ฅด๊ฒ ๋ณด๋ผ ์ ์์๊น ํ๋ ๋ถ๋ด๊ฐ๊ณผ ์์นซ ์๋ฆผ์ด ์๋ชป ๋ฐ์ก๋๊ธฐ๋ผ๋ ํ๋ค๋ฉด(์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด) ๊ทธ ์๋ง์ ์ฌ์ฉ์๋ค์ ๋ถ๋ง ํ์ด ๊ณผ๋
์ด ํ์๊ฐ ๋์ด์ผ ํ๋ค๋ ์๋ฐ๊ฐ์ด ๊ฐ์ ์์ ์ ๋ถํฐ ๋จธ๋ฆฟ์์ ํ๊ฐ๊ณ ์์๋ ์ฐฐ๋์
๋งค์ฌ์ ํ๋ํ๋ ๋ชจ๋ ๊ฒ๋ค์ ๋์๋ฝ์์๋ ๊ทธ๋์ ์ํ๊ฒ๊ณผ ๋ชปํ๊ฒ์ ๋ค์ ์๊ฐํ๋ฉฐ ์ํ๊ฒ์ ๋ณด๋ค ๋ ์ํ ์ ์๋๋ก ํ๊ณ ๋ชปํ๊ฒ์ ์ ๋ชปํ๋์ง ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ํ๋ฉด ๋ชปํ ๋ถ๋ถ์ ๊ณ ์น ์ ์์์ง์ ๋ํ ์๊ฐ์ ๊ฐ์ผ๋ ค๊ณ ๋
ธ๋ ฅํด์๋ค. ๊ทธ๊ฒ ๊ฐ๋ฐ์ด ๋์๋ ๊ฒ์์ด ๋์๋ ์ฐ์ธ๊ณผ์ ๋ฐ์ดํธ๊ฐ ๋์๋ ๋ญ๋ ์ง. ์ด๋ฌํ ์๊ฐ๋ค์ ํ์์๊ฒ ํฐ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์๊ฒ ๋์๊ณ ์ง๋ ํํด๋ฅผ ๋์ด์ผ ๋ณด์๋ฉด ๊ฐ์ธ์ ์ผ๋ก ๊ณํํ ์ ๋ถ๋ฅผ ๋ค ์ด๋ค๋ด์ง๋ ๋ชปํ์ง๋ง ๋๋ฆ์ ๋ง์ ๊ฒฝํ๊ณผ ์ฑ๊ณผ๋ฅผ ๋ฌ์ฑํ๋ค๊ณ ์๊ฐํด๋ณธ๋ค. ์ด์ ๋ช์๊ฐ ๋ค๋ฉด ์ฌํด๊ฐ ๋๋๊ณ ์๋ก์ด ํ ํด๊ฐ ์์๋๋ ์ด ์์ ์ ๊ฐ๋ฐ์๋ก์จ์ ํ๊ณ ๋ฅผ ํด๋ณด๋ฉฐ 2018๋
์ ๋ฆฌ ๋ฐ 2019๋
๋ชฉํ๋ฅผ ๋ค์งํด๋ณด์.
๊ธ์ฐ๋ ๊ฐ๋ฐ์๊ฐ ๋์. ๊ฐ์ธ ๋ธ๋ก๊ทธ ์ด์ ์์ฃผ ์ค๋์ , ๋๊ธฐ ํ์ ํตํด ๊ฐ๋ฐ์๊ฐ ๊ธ์ ์จ์ผํ๋ ์ค์์ฑ์ ๋ํด ์ ์คํ๊ฒ ๋ฐฐ์ฐ๊ฒ ๋์๊ณ ๊ทธ๋๋ถํฐ ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๊ธฐ ์์ํ์๋ค. ๊ทธ ๋๊ธฐํ์ ๋ง์ ์กฐ๊ธ ๋ ๋ด ์๊ฐ์ ์ฒจ๊ฐํ์๋ฉด ๊ธ์ ์ฐ๋ค๋ณด๋ฉด ๋๊ตฐ๊ฐ ๋ด ๊ธ์ ๋ณธ๋ค๋ ๋ง์์ ๋ด๊ฐ ์๊ณ ์๋ ์ง์์ ๋ณด๋ค ๋ ๊น๊ฒ ๊ณต๋ถํ๊ฒ ๋๊ณ ๊ทธ๊ฒ๋ค์ด ๋ชจ์ฌ ๋ด ๊ฐ๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ง๋ค์ด ์ง๋ฉฐ ํฌํธํด๋ฆฌ์ค ๋ฑ ๋ค์ํ๊ฒ ํ์ฉํ ์ ์๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๋๊ฑด ์ ๋ง ์ข์ ์ ํ์ง ์๋๊ฒ ๊ฐ๋ค. ์ค์ ๋ก ๊ทธ๋ฅ ๊ตฌ๊ธ๋ง ํด์ ์๊ฒ๋ ๊ฒ๊ณผ๋ ๋ ๋ค๋ฅธ ๋ฐฐ์์ด ์์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ฌ ์ผ ๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ ์ด๋ ํ๋ฌ์ ํ๊ฐ์ง ์ด์์ ๋ฐฐ์ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ฌํด ์ด ํ๋ฌ์ ํ๊ฐ ์ด์์ ๊ธ์ ์ฐ๊ธฐ๋ก ๊ฒฐ์ฌํ์๋ค.(๊ทธ ๋ฌ์ ๊ธ์ด ์๋ค๋ฉด ๋ญ๊ฐ ๋์๊ฑฐ๋(?) ๋ฏธ์น๋ฏ์ด ๋ฐ๋นด๊ฑฐ๋ ์๋๋ฉด ๊ฒ์๋ ๊ฑฐ๋…) ๋ธ๋ก๊ทธ์ ๊ธ์ ์ด ๋ด์ญ์ ๊ทธ๋ํ๋ก ์๊ฐํ ํด๋ณด๋ฉด ์๋์ฒ๋ผ ์ด 23๊ฐ์ ๊ธ์ ์์ฑํ์๊ณ ์ ํ๊ท 1.9๊ฐ์ ๊ธ์ ์์ฑํ๊ฒ ๋๊ฒ์ ๋ณผ์ ์๋ค.
9์๋ฌ์ ํ ์ฎ๊ธฐ์๋ง์ ์์ฒญ ๋ฐ๋นด๊ณ , 11์์ ๊ทธ ๋ฐ์๊ฒ ๊ฒฐ์ค์ ๋งบ๋ ์๊ฐ… ์ด๋ผ ํ๊ณ๋ฅผ… (๋์ค์ ๋ธ๋ก๊น
์์ , ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ)
์๋ณ ๊ธ ์์ฑ์" ์๋ณ ๊ธ ์์ฑ์ ์ ๊ฒฐ๊ณผ๋ง์ ๋๊ณ ๋ดค์๋ ๋ง์ผ๋ฉด ๋ง๊ณ ์ ์ผ๋ฉด ์ ๋ค๊ณ ํ ์ ์๋ ๊ฒฐ๊ณผ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก๋ ์ํฌ๋ฆฌ ์๊ฐ์ ํ์ฉํด์ ๊ทธ๊ฐ ๋ฐฐ์ ๋๊ฒ, ๊ทธ๋ฆฌ๊ณ ๊ฒฝํํ์ง๋ง ๋ด๊ฒ์ผ๋ก ๋ง๋ค์ง ๋ชปํ๊ณ ๋ณด๊ธฐ๋ง ํ๋ฉฐ ๋์ด๊ฐ๊ฒ๋ค์ ๋ํด ๊ท์ฐฎ์ง๋ง ์๊ฐ์ ํฌ์ํ๊ณ ์ ๋ฆฌํ๋๋ผ๋ฉด ๋ ๋ง์ ๊ธ์ ์ผ์๊ฒ ๊ฐ๋ค๋ ์กฐ๊ธ ์์ฌ์ด ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค.
์ฃผ ๋จ์ PV, ๋๊ตฐ๊ฐ ๋ด ๊ธ์ ๋ณด๊ณ ์๋ค๋๊ฒ์ ๋ฟ๋ฏํจ" ์ฃผ ๋จ์ PV, ๋๊ตฐ๊ฐ ๋ด ๊ธ์ ๋ณด๊ณ ์๋ค๋๊ฒ์ ๋ฟ๋ฏํจ ๋๋ฆ ์ด์ฌํ ๊ธ์ ์ด ๊ฒฐ๊ณผ์ผ๊น, GA๋ฅผ ํตํด ๋ณธ ํ์์ ๋ธ๋ก๊ทธ์ ์ ์
๋์ด ์ ์ ๋์ด๋๋๊ฒ์ ๋ณด๋ฉฐ ํ๋๋ฅผ ์ฐ๋๋ผ๋ ์ข๋ ์์ธํ ๋
์์ ์
์ฅ์์ ์จ์ผ๊ฒ ๋ค๊ณ ๋ค์ํ๋ฒ ๋ค์งํ๊ฒ ๋๋ค. ๋ค๋ง ๊ธ์ “๋ง์ด” ์ฐ๋๊ฒ๋ณด๋ค ํ๋๋ฅผ ์์ฑํ๋๋ผ๋ ์์ธ๊ณผ ๊ทผ๊ฑฐ๋ฅผ ๋ค์ด๊ฐ๋ฉฐ ๋ฌธ์ ๋ฅผ ์ ํํ ํ์
ํ๋๋ฐ ์ง์ค์ ํด์ผํ๊ณ , ๋จ์ ์ฌ์ฉ๋ฒ ๋์ด์ด ์๋ ์ค์ ๋ก ๊ฒฝํ์ ํด๊ฐ๋ฉด์ “๋ด๊ฒ"์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ด ํ์ํ๊ฒ ๋ค.
ํ์ฌ ํ ๋ณ๊ฒฝ ๊ทธ๋ฆฌ๊ณ ํ ์ด ํ๋ก์ ํธ ๊ธฐ์กด์ ์๋ฌด๊ฒ๋ ์๋ ํ๊ฒฝ์์ ์๋ฒ ๋ฐ๊ธ๋ถํฐ ์ด๋ฐ ์ ๋ฐ ์๋น์ค์ ๋์์ด ๋๋ ๋ค์ํ ๋ชจ๋ํฐ๋ง ํด์ ๊ฐ๋ฐํ๋ฉฐ ๋ฌด์ฌํ ์๋น์ค๋ฅผ ์คํ์ ํ์๊ณ , ์ฝ๊ฐ์ ๋งค๋๋ฆฌ์ฆ์ด ์๊ฒจ๋ ์ฆ์ ์ข์ ๊ธฐํ๊ฐ ์๊ฒจ ์ฑ๊ฒฉ์ด ์ ํ ๋ค๋ฅธ ์๋น์ค๋ฅผ ํ๋ ํ์ ์ฎ๊ธฐ๊ฒ ๋์๋ค. ์ฝ๊ฐ ์ด์ง๊ณผ๋ ๋น์ทํ ๋๋์ผ๋ก ํ์ ์ฎ๊ธฐ๊ฒ ๋์๋๋ฐ ์ฒ์์ ์๋ก์ด ์ง์์ ์ต๋ํด์ผ ํ๋ ๋๋ ค์๋ ์์๊ณ ๊ธฐ์กด ์๋น์ค์ ์ ์ ์ด ๋ง์์ ๊ณ ๋ฏผ์ด ๋ง์์ง๋ง ๋ฒ์จ ์ฎ๊ธด์ง 5๊ฐ์์ด ์ง๋๊ณ ๋์ด์ผ๋ณด๋ฉด ์ฌํด ๊ฐ์ฅ ์ํ ์ผ ์ค ํ๋๊ฐ ์๋๊นํ๋ ์๊ฐ์ด ๋ ๋ค. ์ ํ์์ ์๋น์ค๋ฅผ ์ด์ํ๋๋ฐ ๊ทธ์ณค์ง๋ง ์ง๊ธ ๋ด๊ฐ ์๋ ๊ณณ์ ๋์ฉ๋ ์๋น์ค๋ฅผ ์ฑ๋ฅ์ธก๋ฉด์์, ๊ทธ๋ฆฌ๊ณ ์ํคํ
์ณ ์ธก๋ฉด์์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐํ๋๋ฐ ์ง์ค์ ํ๋ ค๋ ๋ชจ์ต๋ค์ด ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ถ์ด ํ์ ํฌ์
๋์๋ง์ ํ์ ํ๋ก ๊ธฐ์กด์ ์๋ ๋ณ๋ ฌ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ํ์ฌ ์๋น์ค์ ์ผ๋ก ์ฝ 90%์ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ณผ์์์๋๋ฐ ์ด ๋ถ๋ถ์ ์ถํ ํฌ์คํ
ํ ์์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ ์ฎ๊ธฐ๊ธฐ ํ๋๋ฌ ์ ๊ฐ์ธ์ ์ธ ์ฌ์ ์๊ฐ์ด ๋ง์ด ์์๊ณ , ๋ค๋ฅธ์ฌ๋๋ค์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉฐ ์ฑ๊ฒจ๋ณด๊ณ ์ถ์ ๋ง์์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฒ ๋์๋ค. 7์ ์ค์๋ถํฐ ์์ํ์ผ๋ ์ด๊ฒ๋ ์ด๋๋ง ๋ฐ๋
์ด ์ง๋๊ณ ์๋๋ฐ ์ด์์ ํด๊ฐ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ข
์ข
๋ฐค์ ์๋ ๋ฑ ์ฌ ํํด์์ด ๊ฝค ๋ง์๊ฒ์ ์ป์์ ์์๋ ์๊ฐ์ด์๋ค.
์๋ผ์คํฑ์ ์ฒ์ ์ ํ๊ฒ ๋ ๊ฑด 2017๋
์ฌ๋ฆ facebook ํผ๋์ “Elastic Stack์ ์ด์ฉํ ์์ธ์ ์งํ์ฒ ๋์๋ณด๋” ๋ผ๋ ๋งํฌ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ๋ถํฐ์ธ ๊ฒ ๊ฐ๋ค. ๊ทธ ๋น์ ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์๋ํ์ ๊ด์ฌ์ด ์ปค์ง๊ณ ์๋ ์ฐฐ๋์๋๋ฐ ํค๋ฐ๋๋ก ๊ฐ๋จํ๋ฉด์๋ ์์ฃผ ๋ฉ์ง ๋์๋ณด๋๋ฅผ ๊ทธ๋ฆด ์ ์๋ค๋ ๊ฒ ๋๋ฌด ํฅ๋ฏธ๋กญ๊ฒ ๋ค๊ฐ์๊ณ ๊ฑฐ๊ธฐ๋ค ์ค์๊ฐ์ผ๋ก ๋ณผ์ ์๋ค๋ ์ ์ ๊ณต๋ถ๋ฅผ ์์ํ์ง ์์ ์ ์์๋ค. ๊ทธ๋ ๊ฒ ์ด๊ฒ์ ๊ฒ ๋ง๋ค์ด ๋ณด๊ธฐ๋ ํ๊ณ ํ๊ตญ ์๋ผ์คํฑ์์น ์ปค๋ฎค๋ํฐ ํ๋์ ํด์ค๋ ์ฐฐ๋ (์ต๊ทผ๋ค์ด ๋ํ
๋ง ํ๊ณ ์์ง๋ง…) ์ฌํด ๋ง์ง๋ง ๋ฐ์
์ ํ๋ค๊ณ ํ์ฌ ์ฐธ์ฌํ๊ฒ ๋์๋ค.
์ฌ๊ธฐ์ด๋ ๋ณธ์ฌ ๋ฐฉ๋ฌธ ๊ฐ๋จ์ ์์นํ ์ฌ๊ธฐ์ด๋ ๋ณธ์ฌ์์ ๋ฐ์
์ ํ๊ฒ ๋์ด ๋๋ถ์ ๋ค๋ฅธ ํ์ฌ ๊ตฌ๊ฒฝ์ ํ ์ ์๊ฒ ๋์๋ค. ์์ ๋ค๋ฅธ IT ์คํํธ์
๋ฐ์
ํ์ฌ์์๋ ๋๊ผ๋ ๋ถ๋ถ์ธ๋ฐ ์์ฒญ๋๊ฒ ํฐ ์์ค์ ์๋์ง๋ง ์๊ธฐ์๊ธฐํ๊ฒ ํ์ฌ์ ์๊น๊ณผ ํน์ง์ ์ ์ด๋ ค๋์ ์ธํ
๋ฆฌ์ด๊ฐ ์ธ์์ ์ด์๋ค. ๊ทธ๋ฐ๋ฐ ์๊ฐ๋ณด๋ค ์ฌ๋์ด ๋๋ฌด~ ๋ง์ด ์์ ์ฝ๊ฐ ์ง์ค์ด ์ ๋ ๊ฒ ๊ฐ์์ง๋ง ๋คํํ๋ ์๋ฆฌ๋ฅผ ์ ์ก์์ ์ธ์
์ ๋ฃ๋ ๋ฐ๋ ๋ฌด๋ฆฌ๊ฐ ์์๋ค. (์ ํํ์ง ์์ง๋ง ์ฐธ์ํ์ ๋ถ๋ค ์ค์ ์ ๋ฐ ์ ๋๋ง ๊ฐ์์ฅ์ ๋ค์ด์ค๊ณ ๋๋จธ์ง๋ ๋ฐ์์ ๋ฃ๋ ๊ฑธ ๋ณด๊ณ ์ด๋ฐ IT ํ์ฌ์ ์ธ๊ธฐ๋ฅผ ๋ค์ ํ๋ฒ ์ค๊ฐํ ์ ์์๋ค.)
‘์ฌ๊ธฐ์ด๋’ ๋ณธ์ฌ๊ฑด๋ฌผ์์ ์๋ผ์คํฑ ๋ฐ์
์!" ‘์ฌ๊ธฐ์ด๋’ ๋ณธ์ฌ๊ฑด๋ฌผ์์ ์๋ผ์คํฑ ๋ฐ์
์! ์๋ผ์คํฑ์์น 6.5 ์ต์ ๋ฒ์ ์๊ฐ ๋ฐ ์ปค๋ฎค๋ํฐ ํ๊ณ ํ์ฌ ์ฒ์ ์ธ์
์ผ๋ก ๊น์ข
๋ฏผ ์ปค๋ฎค๋ํฐ ์์ง๋์ด ๋ถ๊ป์ ์๋ผ์คํฑ์ ์ต๊ทผ ์
๋ฐ์ดํธ ์ ๋ณด์ ์ปค๋ฎค๋ํฐ ํ๋์ ๋ํด์ ํ๊ณ ํด์ฃผ์
จ๋ค. ๋ด๊ฐ ์ฒ์ ์๋ผ์คํฑ์์น๋ฅผ ์ ํ ๋ฒ์ ์ด 2.4์๋๋ฐ ๋ฒ์จ 6.5๋ผ๋… ๋นจ๋ผ๋ ๋๋ฌด ๋น ๋ฅด๋ค. ์ด๋ฒ ๋ฒ์ ์์๋ ํ ํด๋ฌ์คํฐ์์ ๋ค๋ฅธ ํด๋ฌ์คํฐ๋ก์ ์ธ๋ฑ์ค๋ฅผ ๋ณต์ ํ๋ ๋ฐฉ๋ฒ์ธ Cross-cluster replication (ํด๋ฌ์คํฐ ๋ณต์ ) ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๊ณ ODBC Client ์ถ๊ฐ, ์๋ฐ 11์ง์ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค๊ณ ํ๋ค. ํนํ ํค๋ฐ๋์์๋ ํ์ผ์ ์
๋ก๋ํ๋ฉด ์๋์ผ๋ก ๋ถ์ํด์ ์ธ๋ฑ์ฑ์ ํด์ฃผ๋ ๊ธฐ๋ฅ๋ ์๊ฒผ๊ณ (ํ์ผ ํฌ๊ธฐ๊ฐ 100๋ฉ๊ฐ ์ ํ์ด๋ผ๋๊ฒ ์ด์ง ์์ฝ๊ธด ํ๋ค.) ์บ๋ฒ์ค, ์คํ์ด์ค ๋ฑ ์ญ์ ํค๋ฐ๋ ๋ผ๋ ์๊ฐ์ด ๋ค ์ ๋๋ก ๋น์ฃผ์ผ๋ผ์ด์ง์ ํ๋ฒ๋ ์
๊ทธ๋ ์ด๋ ํ๋ฏ ํ๋ค. (๋ค ์ฌ์ฉํ ์ ์์๊น ํ๋ ์ ๋๋ก… ์๋ผ์คํฑ ์คํ์ ๋ค์ด๋ณด๊ธฐ๋ง ํ๋ ํจ๊ป ์ฐธ์ํ ๋๊ธฐ ๋
์๋ ๋น์ฅ ํด๋ณด๊ฒ ๋ค๊ณ ํ ์ ๋๋ก…) ๋ค๋ฅธ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๋๋ฌด๋ ๋น ๋ฅธ ๋ฒ์ ์
๊ณผ ๋๋ฌด๋ ๋ฐ๋น ๋ฅด๊ฒ ์์ง์ด๋ ์ฌ๋๋ค" ๋๋ฌด๋ ๋น ๋ฅธ ๋ฒ์ ์
๊ณผ ๋๋ฌด๋ ๋ฐ๋น ๋ฅด๊ฒ ์์ง์ด๋ ์ฌ๋๋ค ์๋ผ์คํฑ์์น ํ์ฉ์ฌ๋ก ์ค๋ง์ผ๊ฒ์ดํธ ๋ฐ ์ฌ๊ธฐ์ด๋ ์์ ์๋ผ์คํฑ ์์น๋ฅผ ํ์ฉํ ์ฌ๋ก๋ฅผ ๋ฐํํด ์ฃผ์
จ๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ ํ์๋ 5.6 ๋ฒ์ ๊น์ง๋ฐ์ ์ฌ์ฉํ ๊ฒ ์ ๋ถ์ฌ์์ธ์ง(๊ทธ๊ฒ๋ ์ผ๋ถ ๊ธฐ๋ฅ๋ง) ์ ์ฒด ๋ฐํ ๋ด์ฉ์ ๋ค ์ดํด๋ฅผ ํ์ง ๋ชปํ์ง๋ง ๊ตฌ์ถํ๋ฉด์ ์๊ธด ๋ฌธ์ ๋ ์ฝ์ง ๊ฒฝํ๋ด์ ๊ณต์ ํด์ฃผ์
์ ๊ฐ์ ์ ์ผ๋ก๋ผ๋ ๊ทธ๋์ ํ์ฅ๊ฐ(?)์ ๋๋ ์ ์์ด ์ข์๊ณ , ํํธ์ผ๋ก ์ฌํ๊น์ง ๋๋ฆ ์๋ผ์คํฑ์์น๋ฅผ ๋ง์ ธ๋ดค๋ค๊ณ ์ฝ๊ฐ์ ์์ ๊ฐ ๋ฐ ์๋ง์ฌ ๋ฐ์ผ๋ก ์๊ฐํ์๋๋ฐ ์ญ์ ์ธ์์ ๊ณ ์๊ฐ ๋ง๊ตฌ๋ ํ๋ฉฐ ๋ค์ ๋ถ๋ฐํด์ผ๊ฒ ๋ค๊ณ ๋ค์งํ๋ค. ์ค๋ง์ผ๊ฒ์ดํธ + ์ฌ๊ธฐ์ด๋" ์ค๋ง์ผ๊ฒ์ดํธ + ์ฌ๊ธฐ์ด๋
๋ง์น๋ฉฐ ์ปค๋ฎค๋ํฐ ํ๋ ํ๊ณ ์๊ฐ์ ๋๊ฐ ํ์ด์ค๋ถ ์ปค๋ฎค๋ํฐ์์ “๊ณต์ "๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํด์ ๊ฒ์๊ธ์ ์์ฑํ๋์ง ํค๋ฐ๋๋ก ๋ณด์ฌ์ฃผ๊ณ ๋ฐ์
์ ์จ ์ฌ๋์ด ์๋ค๋ฉด 5๋ง์ ์ฌ๊ธฐ์ด๋ ์ฟ ํฐ์ ์ค๋ค๊ณ ํ์๋ค. ๋ง์นจ ํค๋ฐ๋ ๋์๋ณด๋ ํ์ชฝ ๊ตฌ์์ ํ์์ ์ด๋ฆ์ด ๋ณด์์ง๋ง (์์ ์ ๋๋ฆ ํ๋ฐํ๊ฒ ์ง๋ฌธ๋ ํ๊ณ ๊ณต์ ๋ ํ๋ ์ ์ด ์์ด์…) ์ฟ ํฐ์ ๋ฐ๋๊ตฌ๋ ํ๋ฉฐ ๊ธฐ๋๋ฅผ ํ๊ณ ์์์ง๋ง ์์ฝ๊ฒ๋ ์ต๊ทผ์ ์์ฑํ ๋ช ๋ถ์๊ฒ๋ง ์ ๋ฌผ์ด ๋์๊ฐ๋ค… ํ์ง๋ง ๊ทธ ์์ฌ์๋ ์ ์, ๋ฌด์์๋ก ์ถ์ฒจํ์ฌ ๋ ์ฟ ํฐ์ ์ค๋ค๊ณ ํ๋๋ฐ ๋น์ฒจ์ด ๋์ด์ใ
ใ
๊ฐ์ฌํ๊ฒ๋ ์ฟ ํฐ์ ๋ฐ๋ ๊ธฐ์จ์ ๋๋ฆด ์ ์์๋ค!!
์ญ์ ๋ฐ์
์ ๋ง๋ฌด๋ฆฌ๋ ๊ตฟ์ฆ๋ชจ์์ด์ง(?)" ์ญ์ ๋ฐ์
์ ๋ง๋ฌด๋ฆฌ๋ ๊ตฟ์ฆ๋ชจ์์ด์ง(?) ๋งค๋ฒ ์ด๋ฐ IT๋ฐ์
์ ์ฐธ๊ฐ ์ ์ฒญ์ ํ๊ณ ์ฐธ์ํ๊ธฐ ์ ์๋ “์ ๊ท์ฐฎ๋ค. ์ทจ์ํ ๊น. ๋ ๋ ์ถ์ด๋ฐ. ํผ๊ณคํ๋ฐ” ํ๋ฉฐ ๊ฐ๊ธฐ ์ซ์์ง๋ง ๋ง์ ์๋ณด๋ฉด ์๊ฐ๋ณด๋ค ๋ง์ ๊ฒ์ ๋ฐฐ์๊ฐ๊ณ ์ป์ด ๊ฐ๋ค. (์ฟ ํฐ์ ๋ฐ์์๊ฐ ์๋๋ผ…) ์ธ์
์ ๋ฐํํ์๋ ๋ถ๋ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐํ๋ฅผ ๋ฃ๋ ์ฐธ์ํ์ ๋ถ๋ค์ ๋๋์์์ ๋ฐฐ์์๋ ๋์ด ์๊ณ ๋ฐฐ์์ผ ์ด์๋จ๋๋ค๋ ๊ฑธ (ํนํ IT์ง๊ตฐ์ ๋…) ๋ค์ ํ๋ฒ ๋๋ผ๊ณ ์๊ฐํ ์ ์์๋ ์ข์ ์๊ฐ์ด์๋ค.
“show me the money”, “black sheep wall”. ์ด๋ ธ์์ ์คํํฌ๋ํํธ๋ผ๋ ๊ฒ์์ด ๋์ค๊ณ ์ ์
์ ๋ฌ๊ณ ์ด์๋ ์นํธํค. ๊ฒ์์ด ์์๋๊ณ ํด๋น ์นํธํค๋ฅผ ์
๋ ฅํ๋ฉด ๋์ด ๋ค์ด์ค๊ฑฐ๋ ๋งต์ด ํคํ๊ฒ ๋ณด์ฌ ์ปดํจํฐ๋ฅผ ์ด๊ธฐ๋๋ฐ ๋์์ ์ฃผ๊ณค ํ์๋ค. ๊ฐ๋ฐ์ ํ๋ฉด์ Jenkins๋ ๋ ๋์ ์ด๋ค ์
๋ฌด๋ฅผ ์ํํ๋๋ฐ ๊ฐ๋ ฅํ ํด ์ค์ ํ๋์ด๋ค. (๋ฌผ๋ก ๋ง๋ฅ์ด๋ผ๋ ์๋ฆฌ๋ ์๋์ง๋ง…) ์๋ก์ด ํ๋ก์ ํธ๊ฐ ์์๋๊ฑฐ๋ ๊ฐ๋ฐ๋์ค ๋ฌด์ธ๊ฐ ์๋ํ๋ฅผ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ Jenkins๋ฅผ ์ฐพ๊ฒ ๋๋๋ฐ ๊ทธ๋ด๋๋ง๋ค ์ค์น๋ฅผ ํ๊ณ ์ด๋ฐ์ ๋ฐ ์ค์ ์ด ํ์ํ๋ค. ๋์น๋ฅผ ์ฑ์์๋ ์์ง๋ง ์ด ํฌ์คํธ๋ ์ค๋ก์ง ์ ํจ์ค ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์์ฃผ ๊ฐ๋จํ๊ณ ํต์ฌ๋ง ์ ๋ฆฌํ๊ณ ์ ํ๋ค. ๋ง์น ์นํธํค์ฒ๋ผ. ๋์ค์ ๋ค์ ๋ณด๊ธฐ์ํด + ๋๊ตฐ๊ฐ ํด๋น ํฌ์คํธ๋ฅผ ๋ณด๊ณ ๋์์ด ๋์์ผ๋ฉด ํ๋ ๋ฐ๋์ผ๋ก.
(๋ฌผ๋ก ์ด ๋ฐฉ๋ฒ๋ฐ์ ์๋๊ฑด ์๋์ง๋ง ํ์๋ ์๋์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์๋ค.)
์ฐ์ CentOS ํ๊ฒฝ์ Java๊ฐ ์ค์น๋์ด ์๋ ์ํฉ์ด๋ผ ๊ฐ์ ํ๋ค.
์ ๋นํ ์์น์ tomcat ๋ค์ด ( https://tomcat.apache.org/download-80.cgi ) wget {์์ถํ์ผ ๋ค์ด๊ฒฝ๋ก, ํ์๋ apache-tomcat-8.5.35 } ์์ถ ํด์ ํ ํ์ ํด๋์ค webapps๋ก ์ด๋ tar -zxvf apache-tomcat-8.5.35.tar.gz cd apache-tomcat-8.5.35/webapps Jenkins ๋ค์ด ( https://jenkins.io/download/ ) wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war tomcat ํ์ํด๋์ค conf ํด๋๋ก ์ด๋ cd ../conf server.xml ์์ ๋ฐ http port ํ์ธ vi server.xml <Host> ํ์์ ์ถ๊ฐ <Context path="/jenkins" debug="0" privileged="true" docBase="jenkins.war" /> port ํ์ธ <Connector port="8080" protocol="HTTP/1.1"/> ํด๋น ์๋ฒ์ ip์ ์ port์ ๋ง์ถฐ url ์
๋ ฅํ jenkins ์ค์น http://ip:8080/jenkins
ํ์๊ฐ ์ด์ํ๊ณ ์๋ Daily Dev Blog ๋ผ๋ ์๋น์ค๋ ๋งค์ผ ๋์ผํ ์๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋ง ํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฉ์ผ์ ๋ฐ์กํ๋ ์ผ๋ จ์ ์์
์ ์ํํ๊ณ ์๋ค. ํ๋ฐ ์์ํ์ง ๋ชปํ ๋ถ๋ถ์์ ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ์ด๋ค๊ฒฝ์ฐ๋ ๋ฉ์ผ ๋ฐ์ก์ ๋ชปํ๋ค๊ฑฐ๋ ๊ธฐ์กด์ ๋ฐ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ณด๋ด๋ ๋ฑ ์ ์์ ์ด์ง ๋ชปํ ์ํฉ์ ๋ง์ดํ๊ฒ ๋๋ค.๋ฉ์ผ์ด ํ๋ฃจ๋ผ๋ ์๋ชป์ค๋ฉด ์ฌ๊ธฐ์ ๊ธฐ์ ์ฐ๋ฝ์ด ์จ๋ค. ๊ฐ์ฌํ ๋ถ๋ค…" ๋ฉ์ผ์ด ํ๋ฃจ๋ผ๋ ์๋ชป์ค๋ฉด ์ฌ๊ธฐ์ ๊ธฐ์ ์ฐ๋ฝ์ด ์จ๋ค. ๊ฐ์ฌํ ๋ถ๋ค… ์ด๋ฐ์ ๋ฐ ๋ฐ์์ผ๋ค๋ก ์ฐจ์ผํผ์ผ ๋ฏธ๋ฃจ๋ค ๋ง์นจ ์ฌ์ ๊ฐ ์๊ฒจ ๊ธฐ์กด์๋ Crontab ์ค์ผ์ฅด๋ก ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ฒ์์ Jenkins๋ก ์ฎ๊ธฐ๋ ์์
์ ํ๋ค. ์ ํจ์ค๊ฐ ์ค์ผ์ฅด๋ง์ ํด์ฃผ๊ณ ์คํ์ด๋ ฅ์ ๋ณด์ฌ์ฃผ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ์คํฌ๋ฆฝํธ๊ฐ ๋์๊ฐ๋๊ฑธ ๋ณผ์ ์์๊ฒ ๊ฐ๋ค๋ ๊ธฐ๋๊ฐ์์์ด๋ค. ์์์ ์ด์ผ๊ธฐ ํ๋ ์์ธ์ํฉ์ ๋ณด๋ค ๋น ๋ฅด๊ณ ํธํ๊ฒ ์ค์๊ฐ์ผ๋ก ๋๋ฒ๊น
์ ํ๊ธฐ ์ํด์๊ฐ ๊ฐ์ฅ ์ปธ๋ค.
๋น์ฐํ ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ผ๋… ์์
์ ๊ฐ๋จํ ๊บผ๋ผ ์๊ฐํ๋ค.
์ฐ์ Jenkins๋ฅผ ์ค์นํ๊ณ ๊ธฐ์กด์ ์คํฌ๋ฆฝํธ ํ์ผ์ Jenkins Job์ผ๋ก ์ฎ๊ธดํ์ ์ ๋นํ ์ฝ๋ ์ค๊ฐ์ค๊ฐ์ ๋๋ฒ๊น
์ด ์ฉ์ดํ๋๋ก ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ฒ ํด๋๋ค์ ์ค์ผ์ฅด๋ง๋ง ๊ฑธ์ด๋๋ฉด ๋์ด๋ผ๊ณ ์๊ฐํ๋ค. ํ์ง๋ง, ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋๋ ๊ฒ๋ง ๊ฐ์๋ ์์
์ด ์๊ทผ ๊ท์ฐฎ์ ์์
์ด ๋ ์ค์ด์ผ. ๋๋ฒ๊น
์ ์ํด ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋๋ก ํด๋จ๋๋ฐ ๋ชจ๋ ์คํฌ๋ฆฝํธ๊ฐ ๋์ด ๋์์ผ ํด๋น ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด์๋ค. ๋ก๊ทธ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณผ์ ์๋ค๋ฉด Crontab์์ Jenkins๋ก ์ฎ๊ธฐ๋ ์ด์ ๊ฐ ํฌ๊ฒ ์๊ฒ ๋๋ค. ์ค์ ๋ก ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๊ณ Jenkins Job์ ์คํ์์ผ๋ณด๋ฉด ๋ค ๋๋๊ณ ์์ผ ์ถ๋ ฅ์ด ๋๋๊ฑธ ๋ณผ์ ์์๋ค.
(1์ด์ ํ๋ฒ์ฉ 5์ด๋์ ๋ก๊ทธ๋ฅผ ์ฐ๋ ๊ฐ๋จํ ์ฝ๋๋ค.)
import time print('start') for second in range(0,5) : print(second) time.sleep(second) print('end') ์คํฌ๋ฆฝํธ๊ฐ ๋ค ๋๋์์ผ ์ถ๋ ฅ์ ๋ณผ์ ์๋คใ
์ค์๊ฐ์ผ๋ก ๋๋ฒ๊น
์ด ์ด๋ ต๋ค." ์คํฌ๋ฆฝํธ๊ฐ ๋ค ๋๋์์ผ ์ถ๋ ฅ์ ๋ณผ์ ์๋คใ
์ค์๊ฐ์ผ๋ก ๋๋ฒ๊น
์ด ์ด๋ ต๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ฐ๋ฐ์ ํ๋ฉด์ ๋ง๋๋ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ค์ ๋๊ตฐ๊ฐ ๊ณผ๊ฑฐ์ ๊ฒฝํํ๋ ๋ฌธ์ ์๊ณ , ์ด๋ฏธ ํด๊ฒฐ๋ ๋ฌธ์ ์ผ ํ๋ฅ ์ด ์๋นํ ๋์๊ฒ๋ค์ด ๋ง๋ค. ์ด๋ฒ์๋ ์ญ์, ๊ฐ ์คํ ์ค๋ฒํ๋ก์ฐ : https://stackoverflow.com/questions/107705/disable-output-buffering
์ ๋งํฌ์์ ์๋ ค์ค๊ฒ์ฒ๋ผ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋๋๋ก ์ ํจ์ค์์ ๋ณผ์ ์๊ฒ ๋๋ค.
์ฝ์ํ๊ฒฝ์์์ ๋๋ฒ๊น
์ ๋ก๊น
์ด ์ต๊ณ !" ์ฝ์ํ๊ฒฝ์์์ ๋๋ฒ๊น
์ ๋ก๊น
์ด ์ต๊ณ ! ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋ค.
Execute Python script ์ ํ์ฉํ์ฌ Jenkins ์ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ print์ flush์ต์
์ ํ์ฉ ( https://docs.python.org/3/library/functions.html?highlight=print#print ) print('hello', flush=True) ๋งค๋ฒ print ๊ฐ ๋ ๋๋ง๋ค flush๊ฐ ๋๋๋ก ์ฌ์ ์ import sys class Unbuffered(object): def __init__(self, stream): self.stream = stream def write(self, data): self.stream.write(data) self.stream.flush() def writelines(self, datas): self.stream.writelines(datas) self.stream.flush() def __getattr__(self, attr): return getattr(self.stream, attr) sys.stdout=Unbuffered(sys.stdout) Execute shell์ ํ์ฉํ์ฌ ํน์ ๊ฒฝ๋ก์ Python ํ์ผ์ ์คํํ ๊ฒฝ์ฐ -u ์ต์
์ ์ค์ ์คํ์ํจ๋ค. ( python -u python_module.py ) ์ด๋ ๊ฒ ๋๊ณ ๋ณด๋ฉด ๋๋ฌด ๊ฐ๋จํ ์์
์ธ๋ฐ ์ด๋ฐ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ ์ํฉ์์๋ ์์ฑ๋ Python Script๋ฅผ Shell Script๋ก ๋ค์ ๊ฐ์ธ๋ณด๊ฑฐ๋ Python ์ฝ๋๋ฅผ ์ฐ์ง ๋ง๊น ๊น์ง ์๊ฐํ์๋ค… ์ฝ์ง์ ์ฐ์๋ค… (Shell Script๋ก ์์ฑํ๋ฉด ๋ฐ๋ก๋ฐ๋ก ๋ณด์๊ธฐ ๋๋ฌธ…)
๋ค์ํ๋ฒ ๋ชจ๋ฅด๋ฉด ๋ชธ์ด ๊ณ ์ํ๋ค(?)๋ผ๋๊ฑธ ๋ชธ์ ์ฒดํํ ์ข์…์๊ฐ์ด์๋ค.
ํ์ฌ ๋ด์์๋ ๋ํ์์ ์๊ฐ์ ์ฒญ๋ง๋ฅ 1๋ถ๋ ์๋์ ๋ง๊ฐ๋ ์ ๋๋ก ๊ด์ฌ์ด ๋ง์๋ DEVIEW 2018. ๋คํํ ํด๋ฆญ์ ๊ณต์ผ๋ก ์ด์ข๊ฒ ์ ์ฒญ์ ์ฑ๊ณตํ์๊ณ ํ์์๋ ๋ฐ์ ์๊ธฐ์์ง๋ง ๊ฐ์ฌํ๊ฒ๋ ๋ณด๋ด์ฃผ์
์ ์ฌํด๋ ์ดํ ๋ชจ๋ ๋ค๋
์ฌ์ ์๊ฒ ๋์๋ค.์์ ์๋ ์ฐ์ฐจ๊ฐ ์ฌ๋ผ๊ฐ๋ฉด DEVIEWํ์ฌ๋ ์ฐธ์ฌ ์ํ๊ฒ ์ง~๋ผ๋ ์๊ฐ์ด ์์๋๋ฐ ๊ทธ๋๋ ๋จ์ ํธ๊ธฐ์ฌ์ ์ฐธ์์ ํ๊ณ ์ถ์๋ค๋ฉด ์ด๋ฒ์๋ ๋ญ๋ผ๋ ๋ฐฐ์์ค์๋ผ๋ ๋ง์์ผ๋ก ์ ์
์์ ๋ณด๋ค ์กฐ๊ธ๋ ์ฑ์ํ ๋ง์๊ฐ์ง๊ณผ ์์ธ๋ฅผ ๊ฐ์ง๊ณ ์ฐธ์์ ํ๊ฒ ๋์๋ค.
๋ค์ ์๊ฐํด๋ณด๋ฉด ํธ๊ธฐ์ฌ๋ง์ผ๋ก ์ธ์
๋ค์ ๋ฃ๊ณ ๋ถ์ค์์ ๋๋ ์ฃผ๋ ๊ตฟ์ฆ๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ๋ ๋ฐ์์์ผ์ง ํ๊ณ ์๊ฐํ๋ ์ ์
์์ ์ ์๊ฐ์ด ํ๋ฆฐ๊ฑด ์๋์์ง๋ง, ๋ง ๊ทธ๋๋ก ๊ธฐ์ ํ์ฌ์ด๋๋งํผ ๊ฐ๊ธ์ ์ด๋ฉด ์ธ์
์์ ๋ฐํํ๋ ๋ด์ฉ์ ๋ด๊ฒ์ผ๋ก ๋ง๋ค๊ณ ์ค๋ฌด์์ ๋๋ ๋ค๋ฅธ๊ณณ์์ ํ์ฉํ ์๋ ์์๊น ํ๋ ์๊ฐ์ ๊ฐ๋๊ฒ ๋ณด๋ค ์ฑ์ฅํ๋ ค๋ ๊ฐ๋ฐ์๋ก์์ ์์ธ๊ฐ ์๋๊น ์๊ฐ์ด ๋ ๋ค. (๋ผ๊ณ ๋ฉ๋๋ฌ์ง๊ฒ ๋งํ์ง๋ง ์ธ์
๋ด์ฉ์ ์ ๋ฐ์ด๋ผ๋ ์ดํดํ๋ฉด ๋คํ์ด๊ฒ ์ง…)
ํ์ฌ ์์ ๊ทธ๋ฆฌ๊ณ ํค๋
ธํธ 10์ด๋ง์ ๋ง๊ฐ๋์๋ค๋ ์๋ฆฌ๊ฐ ์์์ ๋๋ก ์ฌํด๋ ์ฌ์ ํ ๊ด์ฌ์ด ๋ง์๋ DEVIEW 2018. ์ฝ์์ค์ ๋์ฐฉํ๊ณ ๋ฑ๋ก์ ํ๋ค ์ด๊ณณ์ ๊ณณ ๋ถ์ค๋ค์ ๊ตฌ๊ฒฝํ๊ธฐ ๋ฐ๋นด๋ค. ์ด๋ฒ์๋ ์ง๋๋ฒ๊ณผ ๋ฌ๋ฆฌ ๊ฑฐ์ ๋ค์ด๋ฒ ์๋น์ค๊ฐ 60~70%๋ฅผ ์๋ฆฌ์ก๊ณ ์์๊ณ (ํํ๊ณ , ์ง๋, ํด๋ก๋ฐ, ๊ธ๋ก๋ฒ ๊ด๊ณ ๋ฑ๋ฑ) ์ผ๋ฐ ๊ธฐ์
์์๋ ์ผ๋ง ์ค์ง ์์๋ค.(๋ด ๊ธฐ์ต์ผ๋ก 5~6๊ฐ?) ๊ฐ์ธ์ ์ผ๋ก ์ฌ๋ฌ ๋ค์ํ ํ์ฌ๋ค์ด ํจ๊ปํ๋ ๊ธฐ์ ํ์ฌ๊ฐ ๋์์ผ๋ฉด ํ๋ ๋ฐ๋จ์ด ์์์ง๋ง ํ์ฌ๋ฅผ ์ ์ ํ๋๋ฐ, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ์ฌ์ ๋ค์ด ์์๊บผ๋ผ๋ ์์ฌ์์ ๋ค๋กํ๊ณ CTO๋์ด ๋ฐํํ์๋ ํค๋
ธํธ๋ฅผ ๋ค์ผ๋ฌ ๋ฉ์ธ๊ฐ์์ฅ์ ๋ค์ด๊ฐ๋ค. (์์นซ… ์ด๊ฒ๋ ๋ค์ด๋ฒ ๋
๊ณผ์ (?) ์ด๋ฌ๋ฉด ํ ๋ง์ด ์๋๋ฐ…ใ
ใ
)
์ก์ฐฝํ ๋ค์ด๋ฒ CTO๋์ keynote" ์ก์ฐฝํ ๋ค์ด๋ฒ CTO๋์ keynote ์๋
์๋ ๊ฑฐ์ ๋ก๋ด์์น๋ก ๋๊ปด์ก๋๋ฐ ์ฌํด๋ ๊ทธ ๊ธฐ์ ๋ค์ ์ตํฉ(?)์์น ๋ก ๋ฐ์๋ค์ฌ์ก๋ค. Ambient Intelligence ๋ฅผ ๊ฐ์กฐํ์๋ฉฐ ๊ธฐ์ ์ ์ง์ ํ ๊ฐ์น๋ ๊ธฐ์ ์ด ์ํ์์ผ๋ก ์ฌ๋ผ์ก์ ๋ ๋์จ๋ค๋ผ๋ ๋ช
์ธ๊ฐ์ ๋ง์๋ ํด์ฃผ์
จ๋ค.
์ฐ๊ฒฐ : ์ฌ๋ฌผ, ์ํฉ, ์์น์ธ์, ์ดํด ๋ฐ๊ฒฌ : ์ ์์ ๋ต, ์ถ์ฒ, ์ก์
์ ๊ณต ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๊ด๋ จ๋ ๋ค์ด๋ฒ ์๋น์ค๋ฅผ ๊ณต๊ฐ ํ์
จ๋๋ฐ, ๋ค์ด๋ฒ ์ง๋ Map API๋ฅผ ๋ฌด์ ํ/๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค๊ณ ํ๋ค. (๋ฐ์ ์ ๋ํ์ฌ ใ
ใ
) ๋ํ ์ด๋ฒ์ ๊ฐ์ฅ ํฌ๊ฒ ๋ฐ๋๋ ๋ค์ด๋ฒ ๋ชจ๋ฐ์ผ ํ ํ์ด์ง์ธ ๊ทธ๋ฆฐ๋ท, ์ง๋ ๊ธฐ์ ๋ค์ ์ข
ํฉ ํ๋ซํผ์ธ xDM Platform(์ธก์, ์ง๋, ๋ด๋น), ๊ทธ๋ฆฌ๊ณ ์์จ์ฃผํ๊ณผ ๋ก๋ด์ ๋ํด ์ฐ๊ตฌ๊ฒฐ๊ณผ ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก์ ๋ฐฉํฅ์ฑ์ ๋ํด ์ ๋ฆฌํด์ฃผ์
จ๋ค. ์ง์ ๋์์์ ๊ฒ์์ข ํ๋ค๋ณด๋ ํ
ํฌ์๋ค์์ ๋ฒ์จ(?) ์์์ ํ๋ ์ฌ๋ฆฐ๊ฒ ์์ด ๊ณต์ ํด๋ณธ๋ค.
ํค๋
ธํธ๋ฅผ ๋ค ๋ฃ๊ณ ์๋
์๋ ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๊ณ ๋ณ์๊ฐ์ด ์๋ค์๋๋ฐ ์ฌํด๋ ์ ๋ฐ ๊ธฐ์ ๋ค์ด ์๋น์ค ๋ ๋ฒจ๊น์ง ๊ฐ๋๋ฐ ์ด๋ ๋คํ ํ๋ค์์ด ์ฌ์ฉ์๋ค์๊ฒ ๋ณด์ฌ์ง์๋ง ์๋ค๋ฉด ๊ฐ๋ฐ์๋ก์ ๋ณด๋ค ๋ ํฐ ์๋ถ์ฌ์ ๊ฐ์ง๊ณ ๊ธฐ์ ๊ฐ๋ฐ์ ์ ์งํ ํ
๋ฐ… ํ๋ ์์ฌํ ์๊ฐ์ ํด๋ณด๊ฒ ๋์๋ค. (๋ฌผ๋ก ์ด๋ฐ ๋ถ๋ถ๋ค๋ ๋ค ์ฌ์ ์ด ์์๊บผ๋ผ ์๊ฐ์ด ๋ค์ง๋ง ์ํ๊น์ด๊ฑด ๊ฐ์ถ์๊ฐ ์์๊ฒ ๊ฐ๋ค.)
์ดํ์ ๊ฑธ์ณ ์ด๋ฐ์ ๋ฐ ๋ค์ํ ์ธ์
๋ค์ ๋ค์์ ์์ด ์ข์๋๋ฐ ๋ช๋ช ์ธ์
๋ค์ ๊ธฐ๋ณธ์ง์์ด ์์ด (AI, ๋จธ์ ๋ฌ๋ ๋ฑ…ใ
) ์ดํดํ๊ธฐ ํ๋ค์๋ค. ๋ด๋
์ ์ดํดํ ์ ์๋๋ก ์ค๋น๋ฅผ ํด์ ์ค์๋ฉฐ ๋๋ค์ง์ ํ๊ณ … ๊ทธ๋๋ง ์กฐ๊ธ์ด๋ผ๋ ์ดํดํ ์ ์์๋ ์ธ์
๋ค ๋ช๊ฐ๋ง ์ ๋ฆฌํด๋ณธ๋ค.
React Native: ์น ๊ฐ๋ฐ์๊ฐ ํ ๋ฌ ๋ง์ ์ฑ ์ถ์ํ๊ธฐ React Native: ์น ๊ฐ๋ฐ์๊ฐ ํ ๋ฌ ๋ง์ ์ฑ ์ถ์ํ๊ธฐ" React Native: ์น ๊ฐ๋ฐ์๊ฐ ํ ๋ฌ ๋ง์ ์ฑ ์ถ์ํ๊ธฐ ์ง๋ํ์์ ์์ฃผ ์ ๊น React๋ฅผ ๊ฒฝํํด๋ณด๊ธด ํ์ง๋ง ๊ฑฐ์ hello world ์์ค์ด์๊ธฐ ๋๋ฌธ์ ์ด ์ธ์
์ญ์ ์ดํด๊ฐ ์ ๋์ง ๋ชปํ๋ค. ํ์ง๋ง ํ์์ฒ๋ผ ์ดํด๋ฅผ ์ ๋ชปํ๋ ์ฌ๋๋ ๋ฐํ์๊ฐ ์ ๋ฌํ๋ ค๋ ๋ชฉ์ ์ด ๋ฌด์์ธ์ง ์์ ์์ ์ ๋๋ก ์ ์ฒด์ ์ธ ํ๋ฆ์ ์กฐ๊ธ์ด๋๋ง ์ดํด๋ฅผ ํ ์ ์์๊ณ ํนํ ๊ฐ๋ฐํ๋ฉด์ ์ข์๋ ๊ฒ์ด๋ ๊ฒฝํ๋ด์ ์๋ ค์ฃผ๋ฉฐ ์ฝ์ง๊ณต์ ๋ฅผ ํด์ฃผ๋๊ฒ ๋ฃ๊ธฐ ์ข์๋ค. React Native ๋ ๋น ๋ฅธ๊ฐ๋ฐ์ ํ ์์๊ณ ์ฝ๋๊ณต์ ๊ฐ ์ฌ์ฐ๋ฉฐ ๊ฐ์ ์ด ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค๊ณ ํ๋ค. ๋ํ ๋จ๊ธฐ๊ฐ์ ํฌ๋ก์ค ํ๋ซํผ์ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉํ๋ค๊ณ ํ๋ ๋์ค์ ์ฐธ๊ณ ํด๋ด๋ ์ข์๋ฏ ์ถ๋ค.
๋ฐํ์๋ฃ : https://www.slideshare.net/deview/121react-native LINE x NAVER ๊ฐ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ด์ผ๊ธฐ LINE x NAVER ๊ฐ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ด์ผ๊ธฐ" LINE x NAVER ๊ฐ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ด์ผ๊ธฐ ๋ฒ๊ทธ๋ฐ์ดํฐ๋ผ๋ ์ ๊ธฐํ(?)ํ๋ก๊ทธ๋จ์ ๋ํ ์๊ฐ์ ์ด์์ ๋ํ ๋ด์ฉ์ ๋ฐํํด ์ฃผ์
จ๋ค. ๊ฐ๋ ์ฌ๋ด์์๋ ๋ฒ๊ทธ๋ฅผ ์ก์ผ๋ฉด ํฌ์์ ๋๋ ค์ ๋ผ๋ ๊ธ์ด ์ฌ๋ผ์์๋๋ฐ ๊ทธ๋๋ง๋ค ์์๋ฐ๊ณ ์ฝํ๋ ค๋ ํ๋ ๋น๋ค์ด์ง(?
IT๊ด๋ จ ํ์ฌ์ ์ฐธ์ฌํ๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ์ป์์ ์๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ์ฌ์ค ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํจ๋ณด๋ค ๊ทธ๊ณณ์ ๋ถ์๊ธฐ๋ฅผ ํ์ฅ์์ ๋ชธ์ ๋๋ผ๊ณ ์ฐธ์ฌํ ์ฌ๋๋ค์ ๋๋น์ ๋ณด๋ฉฐ ํด์ดํด์ง ๋ง์๊ฐ์ง์ ๋ค์ ๋ค์ก์์ ์์์ด ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ด๋ค. ๊ทธ์ ์ฌํด Pycon๋ ํ๋์ ์ ํ์ ์ด ๋๊ธธ ๋ฐ๋ผ๋ ๋ง์์ผ๋ก ์ ์ฒญ์ ํ๊ฒ ๋์๋ค.
๋ฑ๋ก https://www.pycon.kr ์ผ๋ฆฌ๋ฒ๋ ๋ฑ๋ก์ ํ๋ค๊ณ Facebook์์ ํ๋ณด๋ฅผ ํ๊ธธ๋ ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๋๋ฐ ์ ๊น ํ์ฌ์ผ์ ์ง์คํ๊ณ ๋ค์ ๋ณด๋ ์ด๋ฏธ ๋งค์ง์ด ๋์ด์์๋ค. ์ฌ์ค Pycon ์ ์ฌํด๊ฐ ์ฒ์ ๊ฐ๋ณด๋๊ฑฐ๋ผ ์ธ๊ธฐ๋ฅผ ์ค๊ฐํ ์ ์์๋๋ฐ ์ด์ ๋์ผ์ค์ ์์๋ ๋ชปํ๋ค. (๋์ค์ ์๊ฒ ๋ ์ฌ์ค์ด์ง๋ง ์ฌํด๊ฐ ๊ฐ์ฅ ์ธ์์ด ๋ง์๋ค๊ณ …) ๊ทธ๋์ ๋์ค์ ์งํ๋์๋ ์ผ๋ฐํ ๋ฑ๋ก์ ํด๋ํฐ ์๋๊น์ง ๊ฑธ์ด๋๋ฉฐ ๋ฆ์ง์๊ฒ ๋ฑ๋กํ ์ ์์๋ค. ์ธ๋ถ ์ผ์ ๋ค์ด ์
๋ฐ์ดํธ๊ฐ ๋๊ณ ์ด๋ค ์ธ์
์ ๋ค์๊น ๊ณ ๋ฏผํ๋ฉด์ ๊ฐ๋ต ์๊ฐ๋ฅผ ํ๋๋์ฉ ๋ณด๊ฒ ๋์๋๋ฐ Python์ ๋ง์ง๋ฉฐ ํ์์ ๊ถ๊ธํ๋๊ฑฐ๋ ์ฌ๋ฐ์ด ๋ณด์ด๋ ์ธ์
๋ค์ด ๋๋ฌด๋ง์ ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค. ํ๊ฐ์ง ์์ฌ์ด๊ฑด ๋ก๊ทธ์ธ ๊ธฐ๋ฐ์ด ์๋๋ค ๋ณด๋ (์์ ๋ก๊ทธ์ธ๊ธฐ๋ฐ?) ๋ด ์๊ฐํ ์ค์ ํ๋๊ฒ ์์๋ค. ๋๋ ๋ณ๋๋ก ์ ์ด์ ๊ฐ์ง๋ง ๋์ค์ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์๊ฒผ์ผ๋ฉด ์ข๊ฒ ๋ค.
2019๋
Pycon์ ํฌ๋กฌ ์ต์คํ
์
์ผ๋ก ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ก๊ทธ์ธ ์ฌ๋ถ์ ์๊ด์์ด ๋ช์์ ๋ด๊ฐ ์ด๋ค ์ธ์
์ ๋ค์๊ฑด์ง์ ๋ํ ์ค์ ์ ํ๊ณ ์ด๋ฅผ ์ด๋ฏธ์ง๋ก ์บก์ณํด์ ์ถ๋ ฅ/๋ค์ด ๋ฐ์์ ์๋ ๊ฑธ ๋ง๋ค์ด ๋ณด๊ณ ์ถ๋ค. (๊ทธ์ ์ ๋ฏธ๋ค๋๋ ํฌ๋กฌ ์ต์คํ
์
๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ๋ถํฐ ๊ณต๋ถํ์…)
์ฒซ์งธ๋ ๊ฐ์ธ์ ์ผ๋ก ์์นจ์ ์ด ๋๋ฌด ๋ง์๋ฐ ์๋ฆผ์ด ์ธ๋ฆฌ๊ธฐ๋ ์ ์ ๋์ด ๋ ์ก๊ณ ํ์ฌ์ฅ์ ๋์ฐฉํด๋ณด๋ ํ์์ฌ ๋ถ์ค๋ ์์ง ํ
ํ
๋น์ด์์๊ณ , ๋ฐค์๊ฐ๋ฉด์ ์ค๋น๋ฅผ ํ์
จ๋์ง ์์๋ด์ฌ์ ๋ถ๋ค์ ์ฌ๊ธฐ์ ๊ธฐ ๋น๋ฐฑ์ ๋์(์ฐ๋ฌ์ ธ) ์๊ณ ์์๋ค. ๊ทธ๋งํผ Pycon์ ๋ํ ๊ธฐ๋๊ฐ ์ปธ๋๋ณด๋ค. ์๊ฐ์ด ์ง๋๋ ํ๋๋์ฉ ์ฌ๋๋ค์ด ๋ฑ๋ก์ ํ๋ฉฐ ์ค๊ธฐ ์์ํ์๊ณ ์ญ์๋ ํ์ฌ์ ๊ฝ์ค์ ๊ฝ์ธ ํ์์ฌ ๋ถ์ค์์ ๋๋ ์ฃผ๋ ์ด๋ฒคํธ ์ํ๋ค์ ๋ฐ๊ธฐ ๋ฐ๋นด๋ค.
DIVE INTO DIVERSITY !!" DIVE INTO DIVERSITY !! ํค๋
ธํธ๋ฅผ ์์์ผ๋ก ์ฌ๋๋ค์ ๊ฐ์ ๋ฃ๊ณ ์ถ์ ์ธ์
์ ์ฐธ๊ฐํ๋ฉฐ ํ์ฌ๋ ์์์ด ๋์๋ค. ์ ์ฒด์ ์ผ๋ก ๊ธฐ์ ์ ๋์ด๋๋ ์ด๊ธ ์์ค์ ๋ฐํ์๋๊ฑธ๋ก ๋๊ปด์ก๋ค. (๋ฌผ๋ก ๋๋ ์ด์ด์ด๊ธ๋ ์๋๋ ๊ผฌ๊ผฌ๋ง ์์ค์ด์ง๋ง…) ๋๋ถ๋ถ Python์ผ๋ก ์ด๋ค๊ฑธ ํด๋ดค๊ณ , ์ด๋ค ์ด๋ ค์์ด ์์๊ณ , ์ด๋ฌ์ ๋ฌํ ์ํฉ๋ค์ ๋ง๋ฌ์ผ๋ฉฐ, ์๋ฐ ๊ฒฝ์ฐ์์๋ ์ด๋ป๊ฒ ํ๋ฉฐ ํด๊ฒฐ์ ํ์๋ค๋ ๋ฑ ๊ธฐ์ ์ ํ์ฉํ “๊ฒฝํ๊ธฐ"์ ๋ํ ๋ด์ฉ๋ค์ ๋ค์์ ์์๋ค. Pycon์ ์ฌ๋ก๊ฑด์ธ DIVE INTO DIVERSITY์ ๊ฑธ๋ง๊ฒ ์์ฃผ ๋ค์ํ ์ฃผ์ ๋ก ํฅ๋ฏธ์๋ ๋ฐํ๋ด์ฉ๋ค์ด์๋ค. ๊ธฐ์ต๋๋ ๊ฒ๋ค์ค์ ์ธ์๊น์๋ ๋ถ๋ถ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
ํ์ด์ฌ ๋ฌธํ(?)์ค์ ํ๋๋ ๋ชฐ๋ผ์ ๋ฌผ์ด๋ณด๋ ์ฌ๋์๊ฒ ๊ตฌ๊ธ๋ง์ ํ๋ผ๊ธฐ๋ณด๋ค ์ง์ ์๋ ค์ฃผ๋ผ๋ ๊ฒ์ด๋ค. ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด ๋ค๋ฅธ์ฌ๋๋ค์ ๊ฐ๋ฅด์น๋๊ฒ๋ถํฐ(์๋ ค์ฃผ๋๊ฒ๋ถํฐ) ์์ํ๋ผ. ์ฌ์ฑ ๊ฐ๋ฐ์, ์ฌ์ฑ ๋ฐํ์๋ค๋ ์ ์ ๋์ด๋๊ณ ์๋ค. ํ์ด์ฌ์ ๊ฐ๋ฐ ํ์ฅ(?)์ด ์๋ ๋ค๋ฅธ๊ณณ์์ ์ฌ์ฉํ๋ค๋ฉด ์์
์๋๋ ๋น ๋ฅด๊ณ ์ป์ด๋ด๋ ๊ฐ์น๋ํ ํจ์ฌ ๋ ๋ฐฉ๋ํ๋ค. ์์
๋ก ํ ์ ์๋ ์์
์ ํ์ด์ฌ์ผ๋ก ํ ์ ์๋ค. ํ์ด์ฌ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ์์ ๋์์ ์ค๋ค. ํ์ฌ๋ฅผ ๋ค์ผ๋ฉฐ ๊ผญ ์ง๋ฌธ์ ํด์ผ์ง ํ๋ ๋ง์์ ๊ฐ๊ณ ์์๋๋ฐ (๊ทธ๋์ผ ์ค๋ ๊ธฐ์ต์ ๋จ์ผ๋) ๋ง์นจ ์ด๋ค ์ธ์
์์ ๊ถ๊ธํ๊ฒ ์์ด ์ง๋ฌธ์ ํ ์ ์์๋ค. (์ง๋ฌธ์ ํ๋ ํ์ด์ฌ ๊ด๋ จ ์ฑ
์ ๋ฌผ๋ ๋ฐ์๋ค.^^) ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ๋ผ์ดํธ๋ ํก์ด๋ผ๋ ์ธ์
์ด ์์๋๋ฐ ์ฌ๋ฌ ๋ฐํ์๋ค์ด ์งค๋งํ๊ฒ 5๋ถ๋์ ํ๊ณ ์ถ์ ์ด์ผ๊ธฐ๋ฅผ ํ๋ ์ธ์
์ด์๋ค. 5๋ถ์ด๋ผ๋ ์ ํ์ด ์๊ธฐ์ ๋ค๋ค ์ฝ๊ณ ํธํ๊ฒ ๋ฐํํ๋๋ฏ ๋ณด์์ผ๋ ๋ฐํ ์๋ฃ๋ ๋ฐํ๋ด์ฉ์ ๋ณด๋ฉด ๊ผญ ๊ทธ๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋ฐํํ๋๊ฑด ์๋์๋ค. ๋ณธ ์ธ์
์์ ๋งํ๊ธฐ์ ๋ค์ ๋ถ๋์ด ์์ ์์ฐจ๊ณ ๊นจ์๊ฐ์ ๋ฐํ๋ ์์๊ณ , ๋งค๋
Pycon ๋ผ์ดํธ๋ํก์ ๋ฐํํ๋๊ฒ ๋ชฉํ์ด์ ๋ถ๋ ์์๋ค. ๋ฐํ๋ฅผ ๋ค์ผ๋ฉด์ ๋ ์ธ์ ์ ๋ฐ์๋ฆฌ์ ๊ฐ์ ๋ฐํ๋ฅผ ํ ์ ์์๊น ํ๋ ๋ง์์ด ์ค์ณ ์ง๋๊ฐ๋ ์ฏค. “์๋ชปํ์ง? ๋ ํ์ด์ฌ์ผ๋ก ๋ง๋ ๊ฑฐ ์์์?” ๋ผ๊ณ ํผ์ฃ๋ง๋ก ๊ถ์๋ ๊ฑฐ๋ฆฌ๋ฉฐ ๋์งธ๋ ์ ์๋ ๋ผ์ดํธ๋ํก์์ ๋ฐํํ๊ธฐ๋ก ๋ง์์ ๋จน๊ณ ์๋๋ฌ์ ์ฐธ๊ฐ ์ ์ฒญ์ ๋ณด๋๋ค. ๊ทธ๋ฌ๊ณ ์๋ ์ ๋
์ ๋จน๊ณ ์ง์ ๋ฆ๊ฒ ๋์์ ์๋ฒฝ 3์๋์ด์์ผ ๋ฐํ์๋ฃ๋ฅผ ์์ฑํ์์ง๋ง “๋ฐํ” ๋ผ๋ ๋ถ๋ด๊ฐ๋๋ฌธ์ ์ด๋ ต๊ฒ ์ ์ ๋ค์๋ค.
๋์งธ๋ ์ด์ ์๋ ๋ฌ๋ฆฌ ์ค๋์ ์ ์ ๋ง์ด ๋ชป์์ ์ธ์ง ๋ฆ๊ฒ ์ผ์ด๋ ์ฒซ ์ธ์
์ด ์์ํ๊ณ ์ ๊ฑฐ์ ๋๋ ์ฆ์์ ํ์ฌ์ฅ์ ๋์ฐฉํ๊ฒ ๋์๋ค. “๊ดํ ๋ฐํ ํ๋ค๊ณ ํ๊ฑธ๊น” ๋ผ๋ ์๊ฐ์ด ๋ค๋ฉฐ ์งํ์ ๋ณธ๋ถ์ ๊ฐ์ ๋ฐํ ์์๋ฅผ ํ์ธํด๋ณด๋ ์ฒซ๋ฒ์งธ… ์ฌ์ฌ ๋จธ๋ฆฌ๊ฐ ์ํ์ค๊ธฐ ์์ํ๋ค.
์๋ฐ(Java)๋ก ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํ๋ฒ์ฏค ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๋ก์ง์ ์์ฑํ ๋๊ฐ ์๋ค. ๊ทธ๋๋ง๋ค ๋์ค๋ ์ด์ผ๊ธฐ์ธ Shalldow Copy ์ Deep Copy. ํ๊ตญ์ด๋ก ํํํ๋ฉด ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ๋ผ๊ณ ์ด์ผ๊ธฐ๋ฅผ ํ๋๋ฐ ์ด ๋ ๊ฐ๋
์ ์ฐจ์ด๋ ์์ฃผ ๊ฐ๋จํ๋ค. ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ณต์ฌํ๋์ง, ์๋๋ฉด ๊ฐ์ฒด์ ์ค์ ๊ฐ(value)๋ฅผ ๋ณต์ฌํ๋์ง. ์ด ๋์ ์ฐจ์ด์ ์ ์๊ฐํ๋ ๊ธ๋ค์ ์๋ ๋ง์ผ๋ ํจ์คํ๋๋ก ํ๊ณ ์ด๋ฒ ํฌ์คํ
์์๋ Deep Copy๋ฅผ ํ ๋ org.apache.http.client.utils ํ์์ ์๋ CloneUtils ์ฌ์ฉ๋ฒ์ ๋ํด ์ ๋ฆฌ ํ๊ณ ์ ํ๋ค.
๊ทธ๋ฅ ์ฐ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ? ๋ผ๊ณ ์๊ฐํ์ง๋ง (๋ณ๊ฑฐ ์๋๋ผ๊ณ ์๊ฐํ์ง๋ง) ํด๋ณด๊ณ ์ํด๋ณด๊ณ ์ ์ฐจ์ด๋ ์์ฒญ์ปธ๊ณ ์ฌ์ฉํ ๋ ์ฃผ์์ ์ด ๋ช๊ฐ์ง ์์ด ์ ๋ฆฌ ํ๋ ค๊ณ ํ๋ค.
์์ ์ ์์ ๋ณธ ํฌ์คํ
์์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. (ํ๊ต์์ ํ์ ์ ์์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.)
public class Student { String name; // ์ด๋ฆ int age; // ๋์ด Family family; // ๊ฐ์กฑ } public class Family { String name; // ์ด๋ฆ int age; // ๋์ด boolean isOfficeWorkers; // ์ง์ฅ์ธ ์ฌ๋ถ } public class PhysicalInformation { int height; // ํค int weight; // ๋ชธ๋ฌด๊ฒ } ๊ฐ์ฒด๋ Cloneable interface ๋ฅผ implement ํด์ผํ๊ณ clone ๋ฉ์๋๋ฅผ public ์ผ๋ก override ํด์ผํ๋ค. ๋น์ฐํ ์ด์ผ๊ธฐ๊ฐ ๋ ์๋ ์์ผ๋ CloneUtils๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ๊ฐ์ฒด๋ Cloneable interface ๋ฅผ implement ํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ clone ๋ฉ์๋๋ฅผ override ํด์ผ๋๋๋ฐ ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ์ ์ ์ธ๋ถ์์๋ ํธ์ถ์ด ๊ฐ๋ฅํด์ผํ๊ธฐ ๋๋ฌธ์ public ์ผ๋ก override๋ฅผ ํด์ผํ๋ค. (๊ธฐ๋ณธ์ protected ๋ก ๋์ด์๋ค.) ์ฐ์ ๊ฐ๋จํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ถ๋ ฅ๋ถํฐ ํด๋ณด์. (์ถ๋ ฅ์ ์ด์๊ฒ ํ๊ธฐ ์ํด ToStringBuilder.reflectionToString์ ์ฌ์ฉํ์๋ค.)
PhysicalInformation physicalInformation = new PhysicalInformation(); physicalInformation.height = 180; physicalInformation.weight = 70; System.out.println(ToStringBuilder.reflectionToString(physicalInformation, ToStringStyle.DEFAULT_STYLE)); ๊ฒฐ๊ณผ๋ ๋น์ฐํ
PhysicalInformation@5d6f64b1[height=180,weight=70] ์ด์ Cloneable interface ๋ฅผ implement ํ๊ณ clone ๋ฉ์๋๋ฅผ public ์ผ๋ก override ํ๋ค, CloneUtils๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด๋ณด์. ํ
์คํธ๋ฅผ ํ๋ฉด์ Shalldow Copy๋ ํด๋ณด์.
// class setting public class PhysicalInformation implements Cloneable{ int height; int weight; @Override public Object clone() throws CloneNotSupportedException { // public ์ผ๋ก ๋ฐ๊ฟ์ฃผ์. return super.clone(); } } // test code PhysicalInformation physicalInformation = new PhysicalInformation(); physicalInformation.height = 180; physicalInformation.weight = 70; PhysicalInformation physicalInformationShalldowCopy = physicalInformation; PhysicalInformation physicalInformationDeepCopy = null; try { physicalInformationDeepCopy = (PhysicalInformation)CloneUtils.clone(physicalInformation); } catch (CloneNotSupportedException e) { e.printStackTrace(); } // ์๋ณธ System.out.println(ToStringBuilder.reflectionToString(physicalInformation, ToStringStyle.DEFAULT_STYLE)); // ์์ ๋ณต์ฌ System.out.println(ToStringBuilder.reflectionToString(physicalInformationShalldowCopy, ToStringStyle.DEFAULT_STYLE)); // ๊น์ ๋ณต์ฌ System.out.println(ToStringBuilder.reflectionToString(physicalInformationDeepCopy, ToStringStyle.DEFAULT_STYLE)); // ๊ฐ ๋ณ๊ฒฝ physicalInformation.weight = 80; physicalInformation.height = 170; // ์๋ณธ System.out.println(ToStringBuilder.reflectionToString(physicalInformation, ToStringStyle.DEFAULT_STYLE)); // ์์ ๋ณต์ฌ System.out.println(ToStringBuilder.reflectionToString(physicalInformationShalldowCopy, ToStringStyle.DEFAULT_STYLE)); // ๊น์ ๋ณต์ฌ System.out.println(ToStringBuilder.reflectionToString(physicalInformationDeepCopy, ToStringStyle.DEFAULT_STYLE)); ๊ฒฐ๊ณผ๋ ์๋ณธ๊ณผ ์์ ๋ณต์ฌ๋ฅผ ํ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(?)๊ฐ ๊ฐ์ผ๋ ๊น์ ๋ณต์ฌ๋ฅผ ํ๊ฒ์ ๋ฐ์ดํฐ๋ ๊ฐ์ง๋ง ์ฃผ์๊ฐ ๋ค๋ฅด๊ณ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค. (์์ ํ ์๋ก๋ค๋ฅธ ๊ฐ์ฒด์ธ๊ฒ์ ์ฆ๋ช
)
PhysicalInformation@1376c05c[height=180,weight=70] PhysicalInformation@1376c05c[height=180,weight=70] PhysicalInformation@1b4fb997[height=180,weight=70] PhysicalInformation@1376c05c[height=170,weight=80] PhysicalInformation@1376c05c[height=170,weight=80] PhysicalInformation@1b4fb997[height=180,weight=70] ๋ง์ฝ ์์์ clone์ ๊ธฐ๋ณธ๊ฐ์ธ protected๋ก override๋ฅผ ํ๊ฒ ๋๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ๊น?
Exception in thread "main" java.lang.NoSuchMethodError: com.PhysicalInformation.clone() at org.apache.http.client.utils.CloneUtils.cloneObject(CloneUtils.java:55) at org.apache.http.client.utils.CloneUtils.clone(CloneUtils.java:77) at com.Test.main(Test.java:16) ์ ๊ทผ์ ํ์์์ ๋์น๋ฅผ ์ฑ์๋ ์์๊ฒ ์ง๋ง ์ ๊ทผ์ ํ ์์์ด CloneUtils ์ด ๋ฆฌํ๋ ์
์ ํ๋ ๊ณผ์ ์์ Exception์ ๋ฐ์ํ๋ค. ๊ผญ! public ์ผ๋ก override๋ฅผ ํด์ฃผ์.
๊ฐ์ฒด ๋ด์ clone์ด ์๋๋ ๋ณ์๋ ๋ณ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค. ๊ฐ์ฒด ๋ด์ ์๋ ๋ฉค๋ฒ ๋ณ์๋ ์์ ๋ณ์(int, char, float ๋ฑ) , Immutable Class (String, Boolean, Integer ๋ฑ) ๋๋ Enum ํ์์ผ ๋๋ ์๋ณธ์ ๊ฐ์ ๋ฐ๋ก ๋์
ํด๋ ๋์ง๋ง, ๊ทธ๋ ์ง ์์ ๋๋ ๋ฉค๋ฒ๋ณ์์ clone์ ํธ์ถํ์ฌ ๋ณต์ฌํด์ผ ํ๋ค. ๋ง๋ก๋ง ๋ณด๋ฉด ๋ฌด์จ์ด์ผ๊ธฐ ์ธ์ง ๋ชจ๋ฅด๋ ์์ ๋ฅผ ๋ณด์.
public class Student implements Cloneable { String name; int age; Family family; @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } Student ํด๋์ค์์ Cloneable ๋ฅผ implements ํ๊ณ clone ๋ฉ์๋๋ฅผ override ํ์๋ค. (์ฌ๊ธฐ์ ๊ตฌ๋ฉ์ด ์๋ค!
1๋ถ์์๋ ๊ธฐ์ ๋ธ๋ก๊ทธ ๊ตฌ๋
์๋น์ค(์ดํ ์๋น์ค)๋ฅผ ์ ๋ง๋ค๊ฒ ๋์๊ณ ์ด๋ค๊ตฌ์กฐ๋ก ๋ง๋ค๊ฐ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด์๋ค๋ฉด, ์ด๋ฒ ํฌ์คํ
์์๋ ๋ง๋ค๋ฉด์ ๋ง๋๊ฒ ๋ ๊ฐ์ข
ํธ๋ฌ๋ธ์ํ
์ข
ํฉ์ธํธ(?)๋ฅผ ํ๋์ฉ ํ์ด๋ณด๊ณ ์ ํ๋ค. ๋ฌผ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ์๋ฌด ๋ฌธ์ ์์ด ์ ๋๋ฉด ๋น์ฐํ ์ข๊ฒ ์ผ๋ ์๋๋ ์ด์ํ๊ฒ ๊ฐ๋ฐ์ด๋ผ๋ ์ธ๊ณ๊ฐ ์๋๋๊ฐ.
์ ์๋๋ฉด ๋ฌธ์ , ์ ๋๋ ๋ฌธ์ ใ
ใ
์ถ์ฒ : https://www.clien.net/service/board/park/9111495" ์ ์๋๋ฉด ๋ฌธ์ , ์ ๋๋ ๋ฌธ์ ใ
ใ
์ถ์ฒ : https://www.clien.net/service/board/park/9111495 1๋ถ : ์ ๋ง๋ค๊ฒ ๋์๋๊ฐ ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ตฌ์กฐ๋ก ๋ง๋ค์๋๊ฐ 2๋ถ : ๋ฌธ์ ๋ฐ์ ๋ฐ Trouble Shooting 3๋ถ : ์์ผ๋ก์ ๊ณํ๊ณผ ๋ฐฉํฅ์ฑ ์ง๋ 1๋ถ์์ ์ด์ผ๊ธฐ ํ๋๊ฒ์ฒ๋ผ ๋ฌธ์ - ํด๊ฒฐ, ๋ฌธ์ - ํด๊ฒฐ ์์ผ๋ก ๋์ดํด๋ณด๊ณ ์ ํ๋ค. ๋ค์ ๊ธ์ ์ ๊ฐ๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ์ผ์๋ ์๊ฒ ์ง๋ง ๋ง ๊ทธ๋๋ก ํธ๋ฌ๋ธ์ํ
์ข
ํฉ์ธํธ์ด๋ ๋
์๋ค์ ์ํด๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ๋ค.
ํธ๋ฌ๋ธ ์ํ
๋ฆฌ์คํธ 10์์ ๋ก์ง์ด ์คํ๋์์ง๋ง ๋ฉ์ผ์ 11์ ๋์ด์ ๋ฐ๊ฒ ๋๋ค. ์ ๋ชฉ์๋ ๊ธ? ๋ธ๋ก๊ทธ RSSํ์ฑ ์ค๋ฅ? ๊ฐํ์ ์ผ๋ก ์ค๋ฅ๊ฐ ์๊ธด๋ค. ๋ฉ์ผ ๋ด์ class๋ฅผ ์ ์ฉํ์ฌ CSS ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฉ์ผ์ ๋ณด๋์ผ๋ ์คํธ์ผ๋ก ์ฒ๋ฆฌ๋๋ค. Elastic Stack์ ์ฌ์ฉํ ์ ์๋ค. ๋ฉ์ผ ๋ณด๋ด๋ ๋ฐ์ก์๋๊ฐ ๋๋ฌด ๋๋ฆฌ๋ค. ๊ตฌ๋
ํด์ ๊ฐ ์๋ ์์ฒด ์์ ๊ฑฐ๋ถ๋ ์ด์ฐ ์ฒ๋ฆฌํ ๊น? 10์์ ๋ก์ง์ด ์คํ๋์์ง๋ง ๋ฉ์ผ์ 11์ ๋์ด์ ๋ฐ๊ฒ ๋๋ค. ๐ ํด๊ฒฐ๋ฐฉ์ : Divide and Conquer
๋ณธ ์๋น์ค์ ์๊ตฌ์ฌํญ์ค ํ๋๋ ๋งค์ผ ์ค์ 10์, ๊ตฌ๋
์๋ค์๊ฒ ์ด์ ๋ฑ๋ก๋ ๊ธ์ ์์งํ์ฌ ๋ฉ์ผ๋ก ๋ณด๋ด์ฃผ๋๊ฒ ์๋ค. ์ฐ์ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํ๋๊ฒ ๊ฐ๋ฐํ์๊ณ , jenkins ๋ฑ ๋ณ๋์ ์ค์ผ์ฅด๋ฌ ๊ด๋ฆฌ ์ดํ๋ฆฌ์ผ์ด์
์ ์ํด ํ ์๋ ์์์ผ๋ ์ด ๋ํ ์ฌํํ๊ฒ crontab ์ ๋ฑ๋กํ์ฌ ๋งค์ผ ์ค์ 10์์ ์คํ๋๋๋ก ํ์๋ค.
1. awesome-devblog ์์ ๋ธ๋ก๊ฑฐ๋ค์ RSS ํผ๋๋ฅผ ์กฐํํ๋ค. 2. ์ด์ ๋ฑ๋ก๋ ๊ธ์ด ์๋ค๋ฉด ๋ฆฌ์คํธ์ ๋ด๋๋ค. 3. ์กฐํ๊ฐ ๋๋๋ฉด ๋ฉ์ผํ์์ ๋ง์ถ์ด html ๋ฌธ์์ด์ ๋ง๋ ๋ค. 4. ๋ง๋ค์ด์ง ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ๋ฑ๋ก๋ ๊ตฌ๋
์๋ค์๊ฒ ๋ฉ์ผ์ ๋ณด๋ธ๋ค. ๋ก์ง์ ์์ฃผ ๊ฐ๋จํ๋ค. ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ ๋ฉ์ผํ์์ ๋ง์ถ์ด html๋ฌธ์์ด์ ๋ง๋๋ ๋ฑ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ค์ ๋ณต์กํ ๋ถ๋ถ๋ง ๋นผ๋ฉด ๋จ์ํ for๋ฌธ๊ณผ if๋ฌธ์ ์กฐํฉํด์ ๋ก์ง์ ๊ตฌ์ฑํ ์ ์์๋ค. ํ๋ฐ, 10์์ ํด๋น๋ก์ง์ด ์คํ๋์์ง๋ง ์ต๋ 1์๊ฐ์ด ์ง๋๊ณ ์์ผ ๋ฉ์ผ์ ๋ฐ๋ ๊ฒฝ์ฐ๋ ์์๋ค. ์ด๊ฒ ๋ฌด์จ์ผ์ผ๊น!? ๋์น๋ฅผ ์ฑ์์๋ ์์ง๋ง RSS ํผ๋๋ฅผ ์กฐํํ๋ ๊ณณ์์ ์ค๋๊ฑธ๋ฆฐ ๊ฒ์ด๋ค. ํฐ์คํ ๋ฆฌ๋ ๋ค์ด๋ฒ๋ฑ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ค์ RSS๋ฅผ ์ฝ๊ณ ํ์ฑํ๋ ์๋๊ฐ ๊ทธ๋ ๊ฒ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์๋๋ฐ (1์ด ์ด๋ด) ์ ๋
์ด๊ธ๋ฃจ์ค ๋ธ๋ก๊ทธ์ RSSํ์ฑ์ด ์ค๋๊ฑธ๋ฆฌ๋๊ฑด 1๋ถ๊น์ง๋ ๊ฑธ๋ฆฌ๋ ๊ฒ์ด์๋ค. ( ์ฐธ๊ณ ๋ก RSS ํ์ฑ๋ชจ๋, yaml ํ์ฑ๋ชจ๋ ์ ์ฌ์ฉํ๋ค. ) ์๋ง RSS์ ํ์์ด ์ฝ๊ฐ ๋ฌ๋ผ์ ๊ทธ๋ฐ๊ฒ ๊ฐ๊ธด ํ๋ฐ ๊ทธ๋ ๋ค๊ณ ์ด๊ธ๋ฃจ์ค ์ผ ๊ฒฝ์ฐ์ ํ์ฑ์ ๋ค๋ฅด๊ฒ ํ๋๊ฑด ์ข ๊ทธ๋ ๊ณ … ์ถํ ์ด๊ธ๋ฃจ์ค๊ฐ ์๋ ๋๋ค๋ฅธ ํ์ฑ์๋๊ฐ ๋๋ฆฐ ๋ธ๋ก๊ทธ์ RSS๋ฅผ ๋ง๋ ์๋ ์๊ธฐ์ RSS ํ์
๋ณ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋๊ฑด ์ข ์๋๊ฒ ๊ฐ์๋ค. ์ด๋ฐ์ ๋ฐ ๊ณ ๋ฏผ๋์ ์์ฃผ ๊ฐ๋จํ๊ฒ๋ ์๋ฌด(?)๋ฅผ ๋๋๋์์ผ๋ก ํด๊ฒฐ ํ์๋ค. ์ฆ, RSS๋ฅผ ์ฝ๊ณ ๋ฉ์ผ์ ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ job ํ๋์ ๋ง๋ค์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ job ์ผ๋ก ๋๋๋ค RSS๋ฅผ ๋ถ์ํ๋ job์ 9์์, ๋ฉ์ผ๋ณด๋ด๋ job์ 10์์ ๋ณด๋ด๋๋ก ํด์ ์๊ฐ๋ณด๋ค ์์ฃผ ์ฌํํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค. ๋ณต์กํ๊ณ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ผญ ๋ณต์กํ๊ณ ์ด๋ ต๊ฒ๋ง ํด๊ฒฐํด์ผํ๋ ๋ฒ์ ์๋๊ฒ ๊ฐ๋ค. ๋ชจ๋ก ๊ฐ๋ ์์ธ๋ง ๊ฐ๋ฉด ๋๋ค๋ผ๋ ์๋ด์ด ์์ง ์๋๊ฐ.
์ ๋ชฉ์๋ ๊ธ? ๋ธ๋ก๊ทธ RSSํ์ฑ ์ค๋ฅ? ๊ฐํ์ ์ผ๋ก ์ค๋ฅ๊ฐ ์๊ธด๋ค. ๐ ํด๊ฒฐ๋ฐฉ์ : ์ธ์ ๋ ์ ๊ฒฝ์จ์ผ ํ๋ ์์ธ์ฒ๋ฆฌ(try-catch)
๋ด๊ฐ ๋ง๋ ์ฝ๋๋ ์ธ์ ๋ ๋ด ์๊ฐ๋๋ก๋ง ๋์๊ฐ์ผ๋ฉด ํ๋๊ฑด ๋ชจ๋ ๊ฐ๋ฐ์์ ๋ง์๊ณผ ๊ฐ๋ค.
ํํ IT ์ข
์ฌ์๋ค.deploy ์ถ์ฒ : https://9gag.com/gag/a0Yxw4B/operations-team-before-leaving-for-holidays" ํํ IT ์ข
์ฌ์๋ค.deploy ์ถ์ฒ : https://9gag.com/gag/a0Yxw4B/operations-team-before-leaving-for-holidays ํ์ง๋ง ๊ทธ์๊ฐ๋ ์ ์ ์ธ์ ๋ ์์ธ๋ ๋ฐ์ํ๊ธฐ ๋ง๋ จ. ( ๋ฌผ๋ก ์ ํ ์์ธ๊ฐ ๋ฐ์ ์ํ ์๋ ์์ผ๋ ๋ง์ฝ ๋ฐ์ํ์ง ์์๋ค ํ ์ง๋ผ๋ ๋ฐ์ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ผ๋ํด๋ฌ์ผ ํ๋ค. ) ํ์ฑํ๋ ๊ณผ์ ์์ ์ ๋ชฉ์ด ์๋๊ธ๋ก ์จ๋ค๊ฑฐ๋, ๊ฐ๋ RSS url ์๋ต์ด 404 ๋๋ 503 ์ธ ๊ฒฝ์ฐ๊ฐ ์์๋ค.
์ฐธ๊ณ ๋ก ํ์๋ ์ถ๊ทผ์ด ๋ฆ์ํธ์ด๋ผ ์์นจ๋ง๋ค ๋ฆ์ ์ ์๊ณค ํ๋๋ฐ ์ด ์๋น์ค๋ฅผ ๋ง๋ค๋ฉด์ ๋๋ถ์(?