From 0a58898099980027726e6dd557862d9315715683 Mon Sep 17 00:00:00 2001 From: taetaetae Date: Sun, 31 Dec 2023 12:49:25 +0000 Subject: [PATCH] deploy: 4a884959dc732cafc33ff09e9ccb320c6c0c8af2 --- categories/index.html | 4 ++-- categories/index.xml | 2 +- categories/review/index.html | 8 +++---- categories/review/index.xml | 14 ++++------- categories/review/page/2/index.html | 5 ++-- index.html | 17 ++++---------- index.xml | 17 ++++---------- page/10/index.html | 8 +++++-- page/2/index.html | 23 ++++++++++--------- page/3/index.html | 21 +++++++++-------- page/4/index.html | 19 +++++++-------- page/5/index.html | 17 +++++++------- page/6/index.html | 21 +++++++---------- page/7/index.html | 20 ++++++++++------ page/8/index.html | 16 ++++++------- page/9/index.html | 16 +++++++------ .../index.html | 5 ++-- posts/index.html | 8 +++---- posts/index.xml | 17 ++++---------- posts/page/10/index.html | 5 ++-- posts/page/2/index.html | 8 +++---- posts/page/3/index.html | 8 +++---- posts/page/4/index.html | 8 +++---- posts/page/5/index.html | 8 +++---- posts/page/6/index.html | 6 ++--- posts/page/7/index.html | 6 ++--- posts/page/8/index.html | 8 +++---- posts/page/9/index.html | 8 +++---- posts/review-2023/index.html | 17 ++++++++++++++ sitemap.xml | 2 +- tags/archives-2023/index.html | 5 ++-- tags/archives-2023/index.xml | 4 +++- tags/index.html | 4 ++-- tags/index.xml | 2 +- 34 files changed, 179 insertions(+), 178 deletions(-) create mode 100644 posts/review-2023/index.html diff --git a/categories/index.html b/categories/index.html index 5ffa3caa..e3112cbe 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,2 +1,2 @@ -All Categories - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Categories

\ No newline at end of file +All Categories - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Categories

\ No newline at end of file diff --git a/categories/index.xml b/categories/index.xml index de1b17d0..6236a40d 100644 --- a/categories/index.xml +++ b/categories/index.xml @@ -1 +1 @@ -Categories - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/categories/Categories - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 23 Jul 2023 10:39:22 +0900essayhttps://taetaetae.github.io/categories/essay/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/categories/essay/reviewhttps://taetaetae.github.io/categories/review/Sun, 19 Feb 2023 23:39:22 +0900Authorhttps://taetaetae.github.io/categories/review/Techhttps://taetaetae.github.io/categories/tech/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/categories/tech/bloghttps://taetaetae.github.io/categories/blog/Sun, 27 Oct 2019 13:51:16 +0000Authorhttps://taetaetae.github.io/categories/blog/ \ No newline at end of file +Categories - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/categories/Categories - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 31 Dec 2023 15:26:10 +0900reviewhttps://taetaetae.github.io/categories/review/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/categories/review/essayhttps://taetaetae.github.io/categories/essay/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/categories/essay/Techhttps://taetaetae.github.io/categories/tech/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/categories/tech/bloghttps://taetaetae.github.io/categories/blog/Sun, 27 Oct 2019 13:51:16 +0000Authorhttps://taetaetae.github.io/categories/blog/ \ No newline at end of file diff --git a/categories/review/index.html b/categories/review/index.html index 2a205525..70d7601a 100644 --- a/categories/review/index.html +++ b/categories/review/index.html @@ -1,5 +1,6 @@ -review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

 review

2023

KAFKA ์„œ๋น„์Šค ํ™œ์šฉ ์Šคํ„ฐ๋”” ์‚ฌ๋ก€ ๋ฐ‹์—… ํ›„๊ธฐ +review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +07-07
\ No newline at end of file diff --git a/categories/review/index.xml b/categories/review/index.xml index 33b3dfa9..69023271 100644 --- a/categories/review/index.xml +++ b/categories/review/index.xml @@ -1,4 +1,6 @@ -review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/categories/review/review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 19 Feb 2023 23:39:22 +0900KAFKA ์„œ๋น„์Šค ํ™œ์šฉ ์Šคํ„ฐ๋”” ์‚ฌ๋ก€ ๋ฐ‹์—… ํ›„๊ธฐhttps://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/Sun, 19 Feb 2023 23:39:22 +0900Authorhttps://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/ +review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/categories/review/review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 31 Dec 2023 15:26:10 +0900์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐhttps://taetaetae.github.io/posts/review-2023/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/posts/review-2023/KAFKA ์„œ๋น„์Šค ํ™œ์šฉ ์Šคํ„ฐ๋”” ์‚ฌ๋ก€ ๋ฐ‹์—… ํ›„๊ธฐhttps://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/Sun, 19 Feb 2023 23:39:22 +0900Authorhttps://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/ ํ•„์ž๋Š” ์˜คํ”„๋ผ์ธ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ‹์—…์ด๋‚˜ ์ฝ˜ํผ๋Ÿฐ์Šค ๊ฐ€๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ๋ฐœํ‘œํ•˜๋Š” ๋‚ด์šฉ์„ ์ „๋ถ€๋‹ค ์ดํ•ดํ•ด์„œ ๋“ฃ๊ณ  ์˜จ๋‹ค๋Š” ๊ฑด ๊ฑฐ์ง“๋ง์ด๊ฒ ์ง€๋งŒ ๊ฐ„ํ˜น ๋“ค์—ˆ๋˜ ๋‚ด์šฉ์„ ํŒ€ ๋‚ด์— ์ ์šฉํ•ด ๋ณธ๋‹ค๊ฑฐ๋‚˜ ๋ชฐ๋ž๋˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค. ํŠนํžˆ, ์งˆ๋ฌธ์„ ๊ผญ ํ•˜๋Š” ํŽธ์ธ๋ฐ ์งˆ๋ฌธ์„ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ข€ ๋” ์ง‘์ค‘ํ•ด์„œ ๋“ฃ๊ฒŒ ๋˜๊ฑฐ๋‚˜ ์งˆ๋ฌธํ•œ ์„ธ์…˜์˜ ๋‚ด์šฉ์€ ๊ฝค ์˜ค๋žซ๋™์•ˆ ๊ธฐ์–ต์— ๋‚จ๊ฒŒ ๋˜๋‹ˆ ๊ฐœ๋ฐœ์ž ํ–‰์‚ฌ์— ์ฐธ์„ํ•˜๋ฉด ๊ผญ ์งˆ๋ฌธ์„ ํ•˜์ž๋Š” ๊ฒŒ ํ•„์ž ์ž์‹ ๊ณผ์˜ ์•ฝ์† ์ค‘์— ํ•˜๋‚˜์ด๊ธฐ๋„ ํ•˜๋‹ค. ใ€€ํ•œ๋™์•ˆ ์ฝ”๋กœ๋‚˜๋กœ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž ํ–‰์‚ฌ๊ฐ€ ์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋“ฑ ์˜คํ”„๋ผ์ธ ํ–‰์‚ฌ๋Š” ๋ˆˆ์„ ์”ป๊ณ  ์ฐพ๊ธฐ๋ž€ ํ•˜๋Š˜์— ๋ณ„ ๋”ฐ๊ธฐ์˜€๋‹ค. ์˜คํ”„๋ผ์ธ ํ–‰์‚ฌ์— ์ฐธ์—ฌํ•˜๋ฉด ๋‚˜๋ฆ„์˜ ๊ฐœ๋ฐœ๋ ฅ(?)์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์˜คํ”„๋ผ์ธ ํ–‰์‚ฌ ์ž์ฒด๋ฅผ ํ•˜์ง€ ์•Š์•„ ๊ดœํžˆ ๊ธฐ์šด์ด ๋น ์ง€๋˜ ์š” ๋ช‡ ๋…„์ด์—ˆ์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํŽ˜์ด์Šค๋ถ KAFKA ํ•œ๊ตญ ์‚ฌ์šฉ์ž ๋ชจ์ž„์—์„œ ๊ณต์ง€๊ฐ€ ์˜ฌ๋ผ์™”๊ณ  ์„ธ์…˜๋“ค์„ ๋ณด์•„ํ•˜๋‹ˆ ํ•˜๋‚˜๋„ ์•Œ์•„๋“ฃ์ง€ ๋ชปํ• (?) ์—„์ฒญ๋‚˜๊ฒŒ ๊ณ ์ฐจ์›์˜ ๋‚ด์šฉ์ด ์•„๋‹Œ ๊ทธ๋Ÿญ์ €๋Ÿญ ์ดํ•ดํ•  ๋งŒํ•œ ๋‚ด์šฉ์œผ๋กœ ์ค€๋น„๋˜์–ด ์žˆ์—ˆ๊ณ , ๋ฌด์—‡๋ณด๋‹ค ํšŒ์‚ฌ์™€ ๊ฐ€๊นŒ์›Œ์„œ ์„ค๋ ˆ๋Š” ๋งˆ์Œ์œผ๋กœ ์‹ ์ฒญ์„ ํ•˜์˜€๋‹ค. ์˜ค๋ž˜์ „์—๋„ ํ•œ๋ฒˆ ๋ฐ‹์—…์— ์ฐธ์„ํ•œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ ๋‚˜๋ฆ„ ์ง„ํ–‰๋„ ๋งค๋„๋Ÿฌ์› ๊ณ  ์ข‹์•˜๋˜ ๊ธฐ์–ต๋“ค๋ฟ์ด๋ผ ํ•œ ์น˜์˜ ๋ง์„ค์ž„ ์—†์ด ์‹ ์ฒญํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. @@ -84,12 +86,4 @@ Kafka MirrorMaker๋กœ ์นด์˜ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๋ง›๋ณด๊ธฐ / ํ™ฉํ•œํฌ ๋‹˜ Kafka ์‚ฌ์‹ค ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด์•ผ ๋ˆ„๊ตฌ๋‚˜ ๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ง€ ๊ฒฝํ—˜์— ๋”ฐ๋ฅธ ๊ตฌํ˜„์˜ ์†๋„๋‚˜ ์•ˆ์ •์„ฑ์˜ ์ฐจ์ด๊ฐ€ ์•„๋‹๊นŒ ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์ด์ƒ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ์ •๋‹ต์€ ์—†๊ฒ ์ง€๋งŒ ํ•„์ž๋Š” ๊ทธ ์ด์ƒ์„ ํ•ด๋ณด๋ ค ์šฐ์„  ํŒ€์— ๋„์›€์ด ๋˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž๋™ํ™” ํˆด ๋“ค์„ ๋งŒ๋“  ๊ฒƒ ๊ฐ™๋‹ค. ๋ณด๋‹ค ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•˜๊ณ  ๋‹จ์ˆœ ๋ฐ˜๋ณต์ ์ธ ์—…๋ฌด๋Š” ์‹œ์Šคํ…œ์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก. ๊ทธ๋ ‡๊ฒŒ ํˆด๋“ค์„ ๋งŒ๋“ค์–ด ๊ฐ€๋ฉฐ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„๋“ค์„ ๋ฐฐ์šฐ๊ฒŒ ๋˜๊ณ  ๋‚˜์ค‘์— ๊ทธ๊ฑธ ๋˜ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”, ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ๋ฐฐ์šฐ๊ณ  ์žˆ๋Š”๋“ฏํ•œ ๋Š๋‚Œ์ด๋ž„๊นŒ. ์•„, ๋ฌผ๋ก  ํšŒ์‚ฌ ๋ณธ์—ฐ์˜ ์—…๋ฌด๊ฐ€ ์ตœ์šฐ์„ ์ด์ง€๋งŒ ๋ง์ด๋‹ค. ์–ด์จŒ๋“  ์‹œํ‚จ ์ผ์€ ์šฐ์„  ์ฐจ์งˆ ์—†์ด ์ž˜ ํ•˜๊ณ  ์‹œํ‚ค์ง€๋„ ์•Š์€ ์ผ์„ ์ฐพ์•„์„œ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ํŒ€์„ ์œ„ํ•ด์„œ, ๊ณง ๋‚˜๋ฅผ ์œ„ํ•ด์„œ. ์ ์–ด๋„ ํšŒ์‚ฌ์—์„œ ์žˆ๋Š” ์‹œ๊ฐ„ ์†์—์„œ๋Š” ๋‹ค๋ฅธ ๊ณณ์— ํ•œ๋ˆˆ ์•ˆ ํŒ”๊ณ  ํšŒ์‚ฌ ์—…๋ฌด์— ์ „๋…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์™ธ๋ถ€ ํ™œ๋™ ๋ถ€์กฑํ•œ ์‹œ๊ฐ„์„ ์ชผ๊ฐœ๋ฉด์„œ ๋ฐ‹์—…์ด๋‚˜ ์„ธ๋ฏธ๋‚˜์— ์ฐธ์—ฌํ•˜๊ณค ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ๋ƒฅ ๋“ฃ๊ณ ๋งŒ ์˜ค์ง„ ์•Š์•˜๊ณ  “ํ–‰์‚ฌ์— ์ฐธ์—ฌํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์งˆ๋ฌธ ํ•˜๋‚˜๋Š” ํ•˜์ž"๋ผ๋Š” ๋‚˜์™€์˜ ์•ฝ์†์„ ์ง€ํ‚ค๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ…ํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค. ์˜ฌํ•ด ์ฒซ ๋ฐœํ‘œ!" ์˜ฌํ•ด ์ฒซ ๋ฐœํ‘œ! ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ๊ป˜ํ•˜๋Š” ํˆฌ๊ฒŒ๋”ํ†ค์„ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค. ํˆฌ๊ฒŒ๋”ํ†ค์€ ์•ฝ ํ•œ ๋‹ฌ ๋™์•ˆ ์ง„ํ–‰๋˜๋Š” ํ•ด์ปคํ†ค์œผ๋กœ ํ•˜๋ฃจ ๋˜๋Š” ๋ฌด๋ฐ• 2์ผ ๋™์•ˆ ํ•˜๋Š” ๊ธฐ์กด ํ•ด์ปคํ†ค๊ณผ ๋‹ค๋ฅด๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ํŒ€ ๋‚ด์—์„œ ์ž์œ ๋กญ๊ฒŒ ์ผ์ •์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ์•ฝ 7์ฃผ์— ๊ฑธ์ณ “๋™๋„ค ๋งˆํŠธ ํ• ์ธ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์•ฑ” ์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•„์ž๋Š” API ์ „๋ฐ˜์— ๋Œ€ํ•ด ๋‹ด๋‹น์„ ํ•˜์˜€๊ณ  ์ž‘์€ ๋ถ€๋ถ„์ด์—ˆ์ง€๋งŒ ์›น์‚ฌ์ดํŠธ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๋ฐฑ์ง€์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•˜๋ ค๋‹ˆ ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ ํ›„๊ธฐ์—์„œ๋„ ์ ์—ˆ๋“ฏ์ด ๋‹ค์‹œ ํ•ด๋ณด๋ผ๊ณ  ํ•˜๋ฉด ๋จธ๋ฆฟ์†์— ์ „์ฒด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค์งˆ ๋งŒํผ ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค. ํŠนํžˆ ์ •๋ง ์ข‹์€ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋„ˆ๋ฌด ์ข‹์•˜๋‹ค. -๋‚ด๊ณต ์—ฐ๋งˆ ํ•œ ๋‹ฌ์— 2๊ฐœ ์ด์ƒ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๋ชฉํ‘œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ง€๋‚œ๋‹ฌ์— ์ด์‚ฌ๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ (ํ•‘๊ณ„…) ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑ ํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋ฆ„ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ์žˆ๋Š” ๊ธ€์„ ์“ฐ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ  PV๋„ ์ž‘๋…„๋ณด๋‹ค ์กฐ๊ธˆ์”ฉ ์˜ค๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ๋‚ด์‹ฌ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘๋…„ ๋ง๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ํ•„์ž์˜ ์ฒซ ํ† ์ดํ”„๋กœ์ ํŠธ ์ธ ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ ๊ตฌ๋…์„œ๋น„์Šค ์— ์ด๋Ÿฐ์ €๋Ÿฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์„ค๋งˆ 1000๋ช…์ด ๋„˜๊ฒŒ ๊ตฌ๋… ํ•˜๊ฒ ์–ด?]]>D.light ํˆฌ๊ฒŒ๋”ํ†ค ์ฐธ๊ฐ€ํ›„๊ธฐhttps://taetaetae.github.io/2019/05/19/d-light-togetherthon-2019/Sun, 19 May 2019 22:46:03 +0000Authorhttps://taetaetae.github.io/2019/05/19/d-light-togetherthon-2019/ - - ํšŒ์‚ฌ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์‹œํ‚ค๋Š” ๋Œ€๋กœ ํ˜น์€ ํŒ€์˜ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์–ด์ฉ” ์ˆ˜ ์—†์ด ํ•ด์•ผ ํ•˜๋Š” ์ผ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ผ์ด ์žฌ๋ฏธ์žˆ๊ณ  ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•œ ๋งŒ์กฑ๋„๊ฐ€ 100% ๋ผ๋ฉด ๋‹คํ–‰์ด์ง€๋งŒ ๊ฐ„ํ˜น ์žฌ๋ฏธ๋„ ์—†๊ณ  ์‹œ์ผœ์„œ ํ•˜๋Š” ์ผ์€ ๋ฐค์„ ๊ผฌ๋ฐ• ์ƒˆ ๊ฐ€๋ฉด์„œ ์™„์„ฑ์„ ํ•ด๋„ ์ฉ ๊ทธ๋ ‡๊ฒŒ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋‹ค.(๋ฌผ๋ก  ํšŒ์‚ฌ์ผ์—์„œ ์ž์‹ ๋งŒ์˜ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด ๊ธˆ์ƒ์ฒจํ™”๊ฒ ์ง€๋งŒ… + ๋งค๋ฒˆ ํšŒ์‚ฌ์ผ์ด ์žฌ๋ฏธ์—†๊ณ  ํ•˜๊ธฐ ์‹ซ์€๊ฑด ์•„๋‹˜) ์–ธ์ œ๋ถ€ํ„ฐ์ธ์ง€ ํ•„์ž๋„ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ๊ฐˆ์ฆ์„ ๋Š๋ผ๋ฉฐ ํšŒ์‚ฌ์™€๋Š” ๋ณ„๋„๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ๋ฌด๋Ÿญ๋ฌด๋Ÿญ ์ƒ๊ฒจ๋‚  ์ฆˆ์Œ facebook ํƒ€์ž„๋ผ์ธ์—์„œ ๊ฐœ๋ฐœ์ž์™€ ๋””์ž์ด๋„ˆ๊ฐ€ ์•ฝ 7์ฃผ๊ฐ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” D.light ํˆฌ๊ฒŒ๋”ํ†ค ์ด๋ผ๋Š” ํ–‰์‚ฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‚˜๋ฆ„ ์ •์„ฑ์Šค๋ ˆ ์ง€์›์„œ๋ฅผ ์ž‘์„ฑ ํ›„ ํ•ฉ๊ฒฉ ๋ฉ”์ผ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. (GDG Facebook ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€) ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ•ด์ปคํ†ค๊ณผ๋Š” ์‚ด์ง ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ D.light ํˆฌ๊ฒŒ๋”ํ†ค์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋Š๊ผˆ๋˜ ๋ถ€๋ถ„๋“ค๊ณผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ๋ฆฌ๋ทฐ๋ฅผ ํ•ด๋ณด๋ฉฐ ์ •๋ง ๊ธ‰ํ–‰์ฒ˜๋Ÿผ ์ง€๋‚˜๊ฐ„ ์•ฝ 7์ฃผ๊ฐ„์„ ๋Œ์ด์ผœ ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๊ณ ์ž ํ•œ๋‹ค. -ํŒ€ ๋นŒ๋”ฉ ๋ˆˆ๋„ ๋ชป๋งˆ์ฃผ์น  ์ •๋„๋กœ ์–ด์ƒ‰ํ•œ ์ฒซ๋‚ Team. ๊ทธํŒฝ" ๋ˆˆ๋„ ๋ชป๋งˆ์ฃผ์น  ์ •๋„๋กœ ์–ด์ƒ‰ํ•œ ์ฒซ๋‚  -Team. ๊ทธํŒฝ ์ด 6๊ฐœ ํŒ€ ์ค‘์— ํ•„์ž๋Š” ์—ฌ์ž ๋””์ž์ด๋„ˆ ๋‘ ๋ถ„, ๋‚จ์ž ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋‘ ๋ถ„์„ ํฌํ•จํ•œ ํŒ€์— ์†ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 5๋ช… ์ค‘ ํ•ด์ปคํ†ค ์ฐธ์—ฌ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ์—ฌ์ž ๋””์ž์ด๋„ˆ ๋ถ„๊ป˜์„œ ํŒ€์žฅ์ด ๋˜์‹œ๊ณ , 7์ฃผ๋ผ๋Š” ์‹œ๊ฐ„์ด ์ •๋ง ๊ธ‰ํ•˜๊ฒŒ ์ง€๋‚˜๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์–ต์ง€(?) ์ด์œ ๋ฅผ ๋“ค๋จน์—ฌ ๊ทธํŒฝ์ด๋ผ๋Š” ํŒ€ ์ด๋ฆ„์ด ์ •ํ•ด์กŒ๋‹ค. ๊ทธ๋ ‡๊ฒŒ “์šฐ๋ฆฌ๊ฐ€ ์ •๋ง ๋ฌด์—‡์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?” ํ•˜๋Š” ์˜๊ตฌ์‹ฌ ์†์— ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘์ด ๋˜์—ˆ๋‹ค. -ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ „๋ฐ˜ ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ์šฐ๋ฆฌ 5๋ช…์€ ๊ฐ๊ฐ ์‚ฌ๋Š” ์ง€์—ญ์ด ์ „๋ถ€ ๋‹ฌ๋ž๋‹ค. (์‹ฌ์ง€์–ด ํ•œ ๋ถ„์€ ๋งค์ฃผ ์ € ๋ฉ€๋ฆฌ ์ถฉ์ฒญ๋‚จ๋„ ์ฒœ์•ˆ์—์„œ ์˜ฌ๋ผ์˜ค์…”์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ใ… ใ… ) ๋งค ์ฃผ๋ง๋งˆ๋‹ค ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋งŒ๋‚˜์„œ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ธธ๋‹ค๋ฉด ๊ธธ๊ณ  ์งง๋‹ค๋ฉด ์งง์€ 7์ฃผ ์•ˆ์— ์™„์„ฑ๋„ ๋†’์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ์˜€๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์ œ๋ฅผ ์ •ํ•˜๋Š” ์•„์ด๋””์–ด ํšŒ์˜์—์„œ ์ •ํ•ด์ง„ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” “๋™๋„ค ๋งˆํŠธ ํ• ์ธ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์•ฑ"์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ•˜์˜€๋‹ค. -์‹œ๊ฐ„๊ฐ€๋Š”์ค„ ๋ชฐ๋ž๋˜ ์•„์ด๋ฐ์ด์…˜ ํšŒ์˜" ์‹œ๊ฐ„๊ฐ€๋Š”์ค„ ๋ชฐ๋ž๋˜ ์•„์ด๋ฐ์ด์…˜ ํšŒ์˜ ํŒ€์›Œํฌ๊ฐ€ ์ค‘์š”ํ•œ ํˆฌ๊ฒŒ๋”ํ†ค ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ๋Š ์ฒœ์žฌ ๋””์ž์ด๋„ˆ, ์ฒœ์žฌ ๊ฐœ๋ฐœ์ž์ฒ˜๋Ÿผ ์ผ๋‹น๋ฐฑ ์Šคํƒ€์ผ๋กœ ๋š๋”ฑ ๋งŒ๋“œ๋Š” ๊ทธ๋Ÿฐ ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰ ๋ฐฉ์‹์€ ํ”ผํ•˜๋ ค๊ณ  ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋…ธ๋ ฅํ•˜์˜€๋‹ค. ๋˜๋„๋ก์ด๋ฉด ์ด๋ ‡๊ฒŒ ๋ชจ์ธ ๋‹ค์„ฏ ๋ช…์ด ํ•œ๋งˆ์Œ ํ•œ๋œป์œผ๋กœ ๊ฐ์ž๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํฌ๊ธฐ์™€ ์–‘์€ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ฌด์—‡์ด๋ผ๋„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ํ–ˆ๋‹ค. ๋””์ž์ด๋„ˆ ๋ถ„๋“ค์€ ์„œ๋กœ ๋””์ž์ธํ•˜์‹  ์‹œ์•ˆ์— ๋Œ€ํ•ด ๊ณต์œ ๋ฅผ ํ•˜๋ฉด์„œ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐ€๋Š” ๋ชจ์Šต๊ณผ, ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋‘๋ถ„์€ (๊ฑฐ์˜ ๋งค์ผ) ๋ฐค๋งˆ๋‹ค ์„œ๋กœ ์Šฌ๋ž™์—์„œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋Š” ๋ชจ์Šต์ด ๋ณด๊ธฐ ๋„ˆ๋ฌด ๋ณด๊ธฐ ์ข‹์•˜๋‹ค. ๋ฌผ๋ก  ํ•„์ž๋„ ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  API๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์†์—์„œ ์ •๋ง ๋งŽ์€๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ ๋งˆ์ง€๋ง‰ ๋ฐœํ‘œํ•˜๋Š” ์ „๋‚ ์—” ํŒ€์› ๋ช‡ ๋ถ„๊ณผ ํ•จ๊ป˜ ๊ผฌ๋ฐ• ๋ฐค์„ ์ƒˆ์šฐ๋ฉฐ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ๋…ธ๋ ฅํ•˜์˜€๊ณ  ํ•„์ž ๊ฐœ์ธ์ ์œผ๋กœ ์•„์ฃผ ์„ฑ๊ณต์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. -๊ฐœ๋ฐœ ์ง„ํ–‰ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์€ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜์˜€๋‹ค. ์—ฌ๋Ÿฌ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๋“ค์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค๊ณ  ๋“ค์—ˆ๋Š”๋ฐ ํ•„์ž๋Š” ์•„์‰ฝ๊ฒŒ๋„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ์ „๋ถ€๋ฅผ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ•˜์˜€๋‹ค. ์˜ˆ์ „์— ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ Flask ๋˜๋Š” Django ๊ธฐ๋ฐ˜์œผ๋กœ API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณผ๊นŒ ํ•˜๊ณ  ๊ณ ๋ฏผํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ (Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ๋„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๊ณ ) ํŒŒ์ด์ฌ๋ณด๋‹ค๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ๋” ๋Šฅ์ˆ™ํ•  ๊ฒƒ ๊ฐ™์•„์„œ Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ์„œ๋ฒ„๋Š” AWS ํ”„๋ฆฌํ‹ฐ์–ด์˜ EC2๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๊ณ  DB ๋˜ํ•œ AWS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” RDS(mysql)์„ ๋ฐœ๊ธ‰๋ฐ›์•„ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  DNS๋Š” ์˜ˆ์ „์— ๋ฌด๋ฃŒ ๋„๋ฉ”์ธ์„ ์ฐพ๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋œ http://mooo.com/ ๋ผ๋Š” ์„œ๋น„์Šค์—์„œ ๋ฐœ๊ธ‰๋ฐ›์•„ ์—ฐ๊ฒฐํ•˜์˜€๊ณ , ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ ์ค‘์— ์„œ๋ฒ„์—์„œ ์•ฑ์œผ๋กœ ํ‘ธ์‹œ๋ฅผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋Š”๋ฐ Firebase๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. -์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค" ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค Entity Relationship Diagram (ERD) ๋Š” ๋ฌด๋ฃŒ๋กœ ์ธํ„ฐ๋„ท์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ด ์žˆ๋Š”์ง€ ์ฐพ๋‹ค๋ณด๋‹ˆ http://aquerytool.]]> \ No newline at end of file +๋‚ด๊ณต ์—ฐ๋งˆ ํ•œ ๋‹ฌ์— 2๊ฐœ ์ด์ƒ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๋ชฉํ‘œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ง€๋‚œ๋‹ฌ์— ์ด์‚ฌ๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ (ํ•‘๊ณ„…) ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑ ํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋ฆ„ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ์žˆ๋Š” ๊ธ€์„ ์“ฐ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ  PV๋„ ์ž‘๋…„๋ณด๋‹ค ์กฐ๊ธˆ์”ฉ ์˜ค๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ๋‚ด์‹ฌ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘๋…„ ๋ง๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ํ•„์ž์˜ ์ฒซ ํ† ์ดํ”„๋กœ์ ํŠธ ์ธ ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ ๊ตฌ๋…์„œ๋น„์Šค ์— ์ด๋Ÿฐ์ €๋Ÿฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์„ค๋งˆ 1000๋ช…์ด ๋„˜๊ฒŒ ๊ตฌ๋… ํ•˜๊ฒ ์–ด?]]> \ No newline at end of file diff --git a/categories/review/page/2/index.html b/categories/review/page/2/index.html index d4768d6b..b44b5686 100644 --- a/categories/review/page/2/index.html +++ b/categories/review/page/2/index.html @@ -1,5 +1,6 @@ -review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

 review

2019

์ž๋ฐ”, ์„ฑ๋Šฅ, ๋ชจ๋‹ˆํ„ฐ๋ง ํ…Œํฌ์„ธ๋ฏธ๋‚˜ ์ •๋ฆฌ ๋ฐ ํ›„๊ธฐ (by ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค) +review - Category - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

 review

2019

2018

2018 ํšŒ๊ณ  - Coder๊ฐ€ ์•„๋‹Œ Programmer๋กœ diff --git a/index.html b/index.html index ec88b295..65b31400 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,7 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธ

(ํ•„์ž์˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์„ ๋ฏธ๋ฃจ์–ด) ๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ์—์„œ ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” CRUD(Create, Read, Update, Delete) API๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(?)๊ฐ€ ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ผ์ •์€ ์ด‰๋ฐ•ํ•œ๋ฐ ์‚ฌ๋žŒ์€ ๋ถ€์กฑํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ณต๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒŒ ๋ˆˆ์— ํ›คํžˆ ๋ณด์ด์ง€๋งŒ ๊ฐœ์„ ํ•  ์‹œ๊ฐ„์ด๋‚˜ ์—ฌ์œ ์กฐ์ฐจ ์—†์–ด ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ์  “๋Œ์•„๊ฐ€๊ฒŒ๋งŒ” ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋“ค. ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์€ ์ ์  ์—†์–ด์ง€๊ณ , ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ธก๋ฉด์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์ฑ…์ž„๊ณผ ๊ด€์‹ฌ ๊ฐ™์€ ์ƒ๊ฐ๋“ค์€ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํŽธ์˜๋งŒ ์ถ”๊ตฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด์ง์„ ํ•ด์•ผ๊ฒ ๋‹ค ๋งˆ์Œ๋จน๊ณ  ์ด๋ ฅ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋‚˜ ์—ฐ๋ง ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ํ•œ ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋Œ์•„๋ณด๋ฉด ํšŒ์‚ฌ์ผ์€ ๋ถˆ์ฒ ์ฃผ์•ผ ์ •๋ง ์—ด์‹ฌํžˆ ํ–ˆ์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•œ ๊ฑด ํšŒ์‚ฌ์ผ ๋Œ€๋น„ ์•„์ฃผ ๊ทน์†Œ์ˆ˜์— ๋ถˆ๊ณผํ•˜๋Š” ์‚ถ์ด ๊ณ„์†๋œ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐ

์–ธ์ œ๋ถ€ํ„ฐ์ธ๊ฐ€ ์ƒˆํ•ด๊ฐ€ ๋˜๋ฉด ๊ทธ ํ•ด์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์„ ์ •ํ•˜๊ณ  ํ•ด์‹œํƒœ๊ทธ์ฒ˜๋Ÿผ ๋‹ฌ๊ณ  ๋‹ค๋‹ˆ๋ฉฐ ํ•œ ํ•ด๋ฅผ ๋ณด๋‚ด์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ์ž‘๋…„์˜ ํ‚ค์›Œ๋“œ๋Š” “ํ•œ๊ณ„”. ํ•œ์ •๋œ ์‹œ๊ฐ„ ์†์—์„œ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋„ ๋งŽ๊ณ  ํ•ด์•ผ ํ•  ๊ฒƒ๋„ ๋งŽ์€ ๋‚˜๋กœ์„œ๋Š” ์ค‘์š”๋„์— ๋”ฐ๋ผ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋ฌด์–ธ๊ฐ€๋ฅผ ํฌ๊ธฐํ•˜๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„๋“ค์ด ์ฐพ์•„์™”๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ๋Š˜ ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค๋Š” ์ž๊ธฐ ๊ฐ€๋ฉด์„ ์“ด ์ฑ„ ์ •๋ง ํ•˜๊ณ  ์‹ถ๋˜, ๊ผญ ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‹ค์Œ์— ํ•ด์•ผ์ง€ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋˜ ์ ์ด ๋งŽ์•˜๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋‹ˆ ์•„์‰ฌ์›€์ด ๋‚จ๊ฒŒ ๋˜์—ˆ๊ณ  ์ž ์„ ์ค„์—ฌ์„œ๋ผ๋„ ํ•  ๊ฒƒ ๋“ค์„ ํ•˜์ž๋ฉฐ ๋‚˜๋ฅผ ๊ทนํ•œ์œผ๋กœ ๋ชฐ์•„๋ถ™์—ฌ๋ณด์ž๋Š” ์˜๋ฏธ๋กœ ์ž‘๋…„์˜ ํ‚ค์›Œ๋“œ๋ฅผ “ํ•œ๊ณ„"๋ผ๊ณ  ์ •ํ–ˆ๊ณ  ์ •๋ง ๋งŽ์€ ๊ฒƒ๋“ค์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋‚˜๋ฅผ ๋ชฐ์•„๋ถ™์ด๋Š” ์‚ถ์„ ์‚ด๋‹ค ๋ณด๋‹ˆ ๋ง ๊ทธ๋Œ€๋กœ ๊ทธ์ € “์—ฌ๋Ÿฌ ๊ฐ€์ง€๋งŒ ํ–ˆ๋˜” ํ•œ ํ•ด๋กœ ๊ธฐ์–ต๋œ๋‹ค. (์•„๋งˆ ๊ทธ๋ž˜์„œ ์ž‘๋…„ ๋ฆฌ๋ทฐ๊ฐ€ ์—†๋˜ ์ด์œ ์ผ์ง€๋„…) ์ž‘๋…„์˜ “ํ•œ๊ณ„"๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ž ์€ ์ฃฝ์–ด์„œ ์ž์•ผ์ง€ ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ๋ถˆํƒ€๋Š” ์—ด์ •์„ ์—ฐ์Šตํ–ˆ๋‹ค๋ฉด ์˜ฌํ•ด๋Š” ๊ฐ™์€ ์‹œ๊ฐ„์„ ์“ฐ๋”๋ผ๋„ ์ œ๋Œ€๋กœ ์“ฐ๊ณ  ์‹ถ์€ ๋งˆ์Œ์— ๋งŽ์€ ๊ฒƒ๋“ค์„ ๋ฐฐ์šฐ์ž๋Š” ์˜๋ฏธ๋กœ “๋ฐฐ์›€"์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์„ ์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„์˜จ ์ง€ ์˜ฌํ•ด๋กœ 11๋…„ ์ฐจ๊ฐ€ ๋˜๋Š” ํ•ด ์ด๊ธฐ๋„ ํ•˜๊ณ  ์ด์ œ๋Š” “์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž"๋ผ๋Š” ์ˆ˜์‹์–ด๊ฐ€ ๋ถ™๋‹ค ๋ณด๋‹ˆ ๋”์šฑ ์‹œ๊ฐ„์„ ํ—ˆํˆฌ๋ฃจ ๋ณด๋‚ผ ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ “๋ฐฐ์›€"์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ ํ•ด๋ฅผ ์ง€๋‚˜์™€๋ณด๋‹ˆ ์ •๋ง ๋งŽ์€ ๊ฒƒ๋“ค์„ ๊ฒฝํ—˜ ๊ทธ ์ด์ƒ์œผ๋กœ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ํ•œ ํ•ด์˜ ๋ฆฌ๋ทฐ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. +ํšŒ์‚ฌ์›์œผ๋กœ์จ์˜ ๋…ธ๋ ฅ ๋ถ€์—ฌ๋ฐ›์€ ์ผ์€ ๊ธฐ๋ณธ์ด๊ณ  ๊ทธ ์ด์ƒ์„ ์Šค์Šค๋กœ ์ฐพ์•„์„œ ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ตฌ์„ฑ์› ๋ชจ๋‘๊ฐ€ ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๋ฅผ ์ด๋Œ์–ด ๋‚˜๊ฐ€์•ผ ํ•˜๋Š” ์ผ๋‹น๋ฐฑ ‘์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž’๋กœ์จ ํšŒ์‚ฌ ์ƒํ™œ์„ ํ•ด์™”๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (์“ฐ๊ณ  ๋ณด๋‹ˆ ์ด๋ ฅ์„œ์—์„œ๋‚˜ ๋ณผ๋ฒ•ํ•œ ๋ฌธ์žฅ์ด์ง€๋งŒ;;) ํ›„๋ฐฐ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด ์ž˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ๊ณผ์ •๋“ค์ด ๊ฒฐ๊ตญ ์„œ๋น„์Šค๊ฐ€ ๋‚˜์•„๊ฐ€๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ์— ๋ณดํƒฌ์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ์„œํฌํŠธ ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘์„ ํ•ด์™”๋‹ค. ๊ฐ€๋”์€ ํŒ€ ๋‚ด์— ์Œˆ๋‹ญ(?)์ด ๋˜์–ด ๋Œ์•„๋งŒ ๊ฐ€๊ฒŒ ํ•˜๋˜ ์ผ์„ ๊ฐœ๋ฐœ์ž๋กœ์จ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด ๊ฐœ์„ ํ•ด ๋ณด์ž๋Š” ์ž์„ธ๋ฅผ ์ทจํ•ด ๋ณด๊ธฐ๋„ ํ–ˆ๊ณ  ํ•จ๊ป˜ ์ผํ•˜๋Š” ์ฃผ๋‹ˆ์–ด ๋ถ„๋“ค๊ป˜ ํ•˜๊ธฐ ์‹ซ์—ˆ์ง€๋งŒ (๊ทธ ์‹œ์ ˆ ๋‚˜๋ฅผ ๋ณด๋Š” ๊ฒƒ๋งŒ ๊ฐ™์•˜๋˜) ์ข€ ๋” ์˜ฌ๋ฐ”๋ฅธ ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์„ฑ์žฅ์„ ํ•˜๋Š” ๋ฐ”๋žŒ์œผ๋กœ ์“ด์†Œ๋ฆฌ๋ฅผ ๋ช‡ ๋ฒˆ ๊ฑด๋„จ ๊ฒƒ ๊ฐ™๋‹ค. ์ง€๋‚˜๊ณ  ๋ณด๋ฉด ์ข‹์€ ๊ฒŒ ์ข‹๋‹ค๋Š” ์‹์œผ๋กœ ๋„˜์–ด๊ฐ€๋„ ๋ ๋ฒ•ํ–ˆ๋‚˜ ์‹ถ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ์ € ์ฝ”๋”ฉ๋งŒ ํ•˜๋Š” ๊ธฐ๊ณ„๊ฐ€ ์•„๋‹ˆ๊ธฐ์—. ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด๋Ÿฐ ์ƒ๊ฐ๊ณผ ๋ง์„ ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ด์ƒํ•œ ์ฑ…์ž„๊ฐ์˜ ๋ชจ์ž๋ฅผ ์จ๋ณด๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค. ๊ธฐ์ˆ ์  ๊ธฐ์–ต์œผ๋กœ๋Š” ์  ํ‚จ์Šค IDC ์ด์ค‘ํ™”(master-slave๊ฐ€ ์•„๋‹Œ)๋ฅผ ์œ„ํ•ด ์Šค์Šค๋กœ ๊ฝค ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์นœ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ํ†ตํ•ด ์ด์ค‘ํ™”๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ํ•˜์˜€๊ณ  ์ธ์› ๋Œ€๋น„ ์—…๋ฌด๋Ÿ‰์ด ๋งŽ๋‹ค ๋ณด๋‹ˆ ๋Š˜์–ด๋งŒ ๊ฐ€๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž ์ž์ฒด์ ์œผ๋กœ ‘๊ธฐ์ˆ /ํ”„๋กœ์„ธ์Šค ๊ฐœ์„  TF’๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ๊ฐœ๋ฐœํŒ€์—์„œ ์ฑ™๊ฒจ์•ผ ํ•  ๋ถ€๋ถ„๋“ค์„ ๋†“์น˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ์žฅ์น˜๋“ค์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์—ฌ๋Ÿฌ output ์ค‘์— ํ•˜๋‚˜๋กœ ํŒ€ ๋‚ด ์ฃผ๋‹ˆ์–ด ๋ถ„๊ณผ ํ•จ๊ป˜ ํ•˜๋ฐ˜๊ธฐ ์‚ฌ๋‚ด ๊ธฐ์ˆ  ๊ณต์œ  ํ–‰์‚ฌ์—์„œ “๊ทธ๋Ÿฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋กœ ๊ดœ์ฐฎ์€๊ฐ€(feat. Github Action)“๋ผ๋Š” ์ œ๋ชฉ์œผ๋กœ ๋ฐฐํฌ ์ž๋™ํ™” ์‚ฌ๋ก€๋ฅผ ์‚ฌ๋‚ด ์˜คํ”ˆ์†Œ์Šคํ™”(Github Action Marketplace) ํ•˜์—ฌ ๋ฐœํ‘œํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค. ์‚ฌ๋‚ด ๋…์„œ๋ชจ์ž„์—์„œ ๋ชจ์ž„์žฅ์„ ์ž์ฒ˜ํ•˜์—ฌ ์ธ๋ฌธํ•™ ๋…์„œ ์†Œ๋ชจ์ž„์„ ๋งŒ๋“ค๊ณ  10์—ฌ๋ช… ์ •๋„์˜ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰์„ ํ•ด๋ณด๊ธฐ๋„ ํ•˜์˜€๊ณ , ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ ํ•œ ๋‹ฌ์— ํ•œ ๋ฒˆ์”ฉ ๋ชจ์—ฌ ์‹์‚ฌ ์ž๋ฆฌ๋ฅผ ๊ฐ€์กŒ๋˜ ๋ฏธ์‹ํšŒ ๋ชจ์ž„์„ ์šด์˜ํ•ด ๋ณด๊ธฐ๋„ ํ•˜์˜€๋‹ค. ๊ฐœ๋ฐœ๊ณผ๋Š” ๊ด€๋ จ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ชจ์ž„์„ ์šด์˜ํ•ด ๋ณด๋ฉด์„œ “๊ด€๊ณ„” ๊ทธ๋ฆฌ๊ณ  “์กฐ์ง ์šด์˜"์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ฐ„์ ‘์ ์œผ๋กœ๋‚˜๋งˆ ๋Š๊ปด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ์ข‹์€ ๊ฒฝํ—˜์œผ๋กœ ๊ธฐ์–ต๋  ๊ฒƒ ๊ฐ™๋‹ค. +‘ํƒœํƒœํƒœ’๋ผ๋Š” ๋ถ€์ผ€ ๋งŒ๋“ค๊ธฐ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ํšŒ์‚ฌ ๋ฐ–์—์„œ์˜ “๋‚˜"๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ๋“ค์„ ํ•ด์˜ค๊ณ  ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์จ ํšŒ์‚ฌ๋ผ๋Š” ์ปดํฌํŠธ ์กด์„ ๋ฒ—์–ด๋‚˜๋„ ์Šค์Šค๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๋‹จํ•œ ๋‚ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ๋“ค. ์˜ฌํ•ด ์ดˆ ํšŒ์‚ฌ ์ฃผ์ตœ๋กœ ์ง„ํ–‰๋œ DEVIEW 2023์˜ ๊ณ๋‹ค๋ฆฌ(?) ํ–‰์‚ฌ์ธ DEVIEW CAMPUS 2023์—์„œ ๋Œ€ํ•™์ƒ๋ถ„๋“ค์—๊ฒŒ ๊ฐœ๋ฐœ์ž์˜ ์„ฑ์žฅ์— ๋Œ€ํ•œ ๋‚ด์šฉ์œผ๋กœ ๋ฐœํ‘œ๋ฅผ ํ•˜๊ธฐ๋„ ํ•˜์˜€๊ณ  ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๋ฉ˜ํ† ๋ง์„ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค.

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธ

(ํ•„์ž์˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์„ ๋ฏธ๋ฃจ์–ด) ๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ์—์„œ ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” CRUD(Create, Read, Update, Delete) API๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(?)๊ฐ€ ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ผ์ •์€ ์ด‰๋ฐ•ํ•œ๋ฐ ์‚ฌ๋žŒ์€ ๋ถ€์กฑํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ณต๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒŒ ๋ˆˆ์— ํ›คํžˆ ๋ณด์ด์ง€๋งŒ ๊ฐœ์„ ํ•  ์‹œ๊ฐ„์ด๋‚˜ ์—ฌ์œ ์กฐ์ฐจ ์—†์–ด ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ์  “๋Œ์•„๊ฐ€๊ฒŒ๋งŒ” ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋“ค. ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์€ ์ ์  ์—†์–ด์ง€๊ณ , ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ธก๋ฉด์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์ฑ…์ž„๊ณผ ๊ด€์‹ฌ ๊ฐ™์€ ์ƒ๊ฐ๋“ค์€ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํŽธ์˜๋งŒ ์ถ”๊ตฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด์ง์„ ํ•ด์•ผ๊ฒ ๋‹ค ๋งˆ์Œ๋จน๊ณ  ์ด๋ ฅ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋‚˜ ์—ฐ๋ง ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ํ•œ ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋Œ์•„๋ณด๋ฉด ํšŒ์‚ฌ์ผ์€ ๋ถˆ์ฒ ์ฃผ์•ผ ์ •๋ง ์—ด์‹ฌํžˆ ํ–ˆ์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•œ ๊ฑด ํšŒ์‚ฌ์ผ ๋Œ€๋น„ ์•„์ฃผ ๊ทน์†Œ์ˆ˜์— ๋ถˆ๊ณผํ•˜๋Š” ์‚ถ์ด ๊ณ„์†๋œ๋‹ค. ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž.์ถœ์ฒ˜ : https://sdtimes.com/ai/ai-enabled-tools-might-completely-change-development-one-day/" ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž. ์ถœ์ฒ˜ : https://sdtimes.com/ai/ai-enabled-tools-might-completely-change-development-one-day/ ใ€€๊ฐœ์ธ์ด ์Šค์Šค๋กœ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋ฆฌ๋žœ์„œ๋‚˜ ์‚ฌ์—…๊ฐ€๋ฅผ ์ œ์™ธํ•˜๊ณ  ์„  ๋Œ€๋ถ€๋ถ„ ํšŒ์‚ฌ๋ผ๋Š” ์ง‘๋‹จ์— ์†Œ์†๋˜์–ด ์‚ด์•„๊ฐ„๋‹ค. ๊ทธ๋Ÿฌํ•œ ํšŒ์‚ฌ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉํ‘œ๋Š” ๋ˆ์„ ๋ฒŒ๊ธฐ ์œ„ํ•œ ์‚ฌ์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํšŒ์‚ฌ์—์„œ๋Š” ์ง์›๋“ค์—๊ฒŒ ์–ด๋Š ์ •๋„์˜ ์ฒ˜์šฐ๋Š” ๋ณด์žฅํ•ด ์ค„ ์ˆœ ์žˆ์ง€๋งŒ ๊ฐœ๊ฐœ์ธ์˜ ์ธ์ƒ์„ ์ฑ…์ž„์ ธ์ฃผ์ง„ ์•Š๋Š” ๊ฒŒ ํ˜„์‹ค์ด๋‹ค. ๊ทธ๊ฑธ ์•Œ๋ฉด์„œ๋„ ์ง€๊ธˆ ๋‹ค๋‹ˆ๊ณ  ์žˆ๋Š” ํšŒ์‚ฌ์—์„œ ์„ฑ์žฅ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉฐ ์ด์ง์„ ์ค€๋น„ํ•˜๊ฑฐ๋‚˜ ์–ด์ฉŒ๋ฉด ๋‚˜๋ฅผ ์œ„ํ•œ ๊ฒŒ ์•„๋‹Œ ํšŒ์‚ฌ๋ฅผ ์œ„ํ•œ ์ผ๋งŒ ํ•ด์˜ค๊ณ  ์žˆ๋Š” ๊ฑด ์•„๋‹Œ๊ฐ€ ์Šค์Šค๋กœ๋ฅผ ๋˜๋Œ์•„๋ณด๊ฒŒ ๋œ๋‹ค. ใ€€๊ฐœ๋ฐœ์ž๋กœ์จ ์ง€๊ธˆ์˜ ์‚ถ์ด ๋„ˆ๋ฌด ํ–‰๋ณตํ•˜๊ณ  ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค๋ฉด ์ด ๊ธ€์„ ์ฝ์ง€ ์•Š์•„๋„ ์ข‹๋‹ค. (์–ด์ฉŒ๋ฉด ์šฐ๋ฌผ ์•ˆ ๊ฐœ๊ตฌ๋ฆฌ๋กœ ์‚ด์•„๊ฐ€๊ณ  ์žˆ๋Š” ๊ฑด ์•„๋‹Œ์ง€ ๋ฌป๊ณ  ์‹ถ๋‹ค. ๋ฌผ๋ก  ๊ทธ ์šฐ๋ฌผ๋งˆ์ € ๋”ฐ๋œปํ•˜๋‹ค๋ฉด ํŒจ์Šคํ•˜๋Š” ๊ฒƒ์œผ๋กœ.) ์˜ค๋žœ๋งŒ์— ์“ฐ๋Š” ์ด ๊ธ€์—์„œ๋Š” ํšŒ์‚ฌ๋ผ๋Š” ์˜์กด์„ ๋ฒ—์–ด๋‚˜ ์Šค์Šค๋กœ ์šฐ๋š ์„ค์ˆ˜ ์žˆ๋Š” ‘ํ™˜๊ฒฝ์„ ๋ฐ”๊พธ๋Š” ์ด์•ผ๊ธฐ’๋ฅผ ํ•˜๋ ค ํ•œ๋‹ค. ๋ชธ์งฑ์ด ๋˜๊ธฐ ์œ„ํ•ด ํ—ฌ์Šค์žฅ์„ ๊ฐ€๊ณ  ๊ทธ๊ฒƒ๋„ ๋ชจ์ž๋ผ ๋น„์‹ผ PT๋ฅผ ๋Š๋Š”๋‹ค๊ฑฐ๋‚˜, ํ—ˆ๋ฆฌ๊ฐ€ ์ข‹์ง€ ์•Š์•„ ์Šคํƒ ๋”ฉ ์ฑ…์ƒ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๊ฐ€๋ฉด์„œ ๋‚ด๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ‘ํ™˜๊ฒฝ’์„ ๋ฐ”๊พธ๋ฉด์„œ ์•ž์„œ ์ด์•ผ๊ธฐ ํ•œ ‘๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•ด ์„ฑ์žฅํ•˜๋Š” ์‹œ๊ฐ„’์„ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žŒ์ด๋‹ค. @@ -68,13 +70,4 @@ ์ „์ฒด ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ์ดํ•ฉ์„ ํ‘œํ˜„ํ•˜๋ ค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ‘์ˆซ์ž’๋ฅผ ํ‘œํ˜„ํ•˜๋ ค ํ•˜๋Š” ๊ฒฝ์šฐ Metric์„ ํ™œ์šฉํ•˜๊ณค ํ•œ๋‹ค. ์šฐ์ธก์—์„œ Aggregation ๋ฐฉ๋ฒ•์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ•„๋“œ๋Š” ์œ ํ˜•๋ณ„๋กœ ๊ฐ๊ฐ ์„ ํƒํ•ด ์ฃผ์ž. ์•„๋ž˜ ‘Add’๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. Label์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ํ˜•ํƒœ๋กœ Aggregation์„ ํ–ˆ๋Š”์ง€๋ฅผ Label ์˜์—ญ์— ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ณด๊ธฐ ์‹ซ๋‹ค๋ฉด ์›ํ•˜๋Š” ํ…์ŠคํŠธ๋กœ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ตœ๊ทผ ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ‘์ตœ๊ทผ ๋ฐ์ดํ„ฐ’๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ๋ชฉ์ ์ด๋‹ค. ์ด ๊ฒฝ์šฐ Aggregation์„ Top Hit์œผ๋กœ ์„ ํƒํ•˜๋ฉด ํ•„๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ํ•˜๋ฃจ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด 18 row์ด๊ธฐ ๋•Œ๋ฌธ์— (์„œ์šธ, ๋ถ€์‚ฐ, …, ์ œ์ฃผ, ๊ฒ€์—ญ) 18 row ์„ ์ „๋ถ€ ๋”ํ•œ ๊ฐ’์ด ํ•˜๋ฃจ ๊ธฐ์ค€์˜ ํ•ฉ๊ณ„๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋ ฌ์„ ๋‚ ์งœ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•ด์ค˜์•ผ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ์˜ ํ•ฉ๊ณ„๊ฐ€ ๋˜๋Š” ์ ๋„ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. ๊ฐ ํƒ€์ž…๋ณ„ ํ•ฉ๊ณ„ ." . ใ€€๏ปฟ์ง€์—ญ๋ณ„๋กœ ํƒ€์ž…๋ณ„ ์ˆ˜๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด Pie ํƒ€์ž…์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ง„ํ–‰ํ•œ๋‹ค. ํƒ€์ž…๋ณ„(์˜ˆ๋กœ ๋“ค์–ด ํ™•์ง„์ด๋ฉด confirmed)๋กœ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด Aggregation์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋นˆ ์›์ด ๋‚˜์˜ค์ง€๋งŒ ๊ฐ ์ง€์—ญ๋ณ„๋กœ ์ฐจํŠธ๋ฅผ ์ž˜๋ผ์„œ ๋ด์•ผ ํ•˜๊ธฐ์— ํ•˜๋‹จ์˜ Buckets์˜ Add๋ฅผ ๋ˆ„๋ฅด๊ณ  regieon์˜ ํ•„๋“œ๋ฅผ Terms Aggregation ํ•œ๋‹ค. 18 row์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋ถ€ ๋ณด์—ฌ์•ผ ํ•˜๊ธฐ์— ์ •๋ ฌ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  option ํƒญ์—์„œ ๋ณด๋Š” ์ทจํ–ฅ์— ์•Œ๋งž๊ฒŒ ์„ค์ •๊ฐ’๋“ค์„ ๋ฐ”๊ฟ”์ค€๋‹ค. -ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.

Elastic Stack์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ : ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ

๏ปฟใ€€์–ผ๋งˆ ์ „์— ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋Š ๊ต์œก ๊ธฐ๊ด€์—์„œ ElasticStack์— ๋Œ€ํ•œ ๊ฐ•์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ์‚ฌ์‹ค ๊ด€๋ จ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ง€์‹์ด ์•„์ฃผ ๊นŠ๊ณ  ํ•ด๋ฐ•ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์•ฝ๊ฐ„์˜ ๋ฐ˜๊ฐ๋ถ€ํ„ฐ ๋“ค์—ˆ์ง€๋งŒ ElasticStack์„ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ์ •๋„๋กœ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์กฐ์‹ฌ์Šค๋Ÿฝ์ง€๋งŒ ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์—ด์‹ฌํžˆ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋กœ ๊ฐ‘์ž๊ธฐ ๊ฐ•์˜๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๊ฐ„ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋„ˆ๋ฌด ์•„์‰ฝ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ƒฅ ์ค‘๋‹จํ•˜๊ธฐ์—” ์•„์‰ฌ์šด ๋งˆ์Œ์ด ๋„ˆ๋ฌด ์ปค์„œ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ ์ค‘์— ‘๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„’์€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒ ๋„์›€์ด ๋ ๊นŒ ์‹ถ์–ด ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. -๏ปฟ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ•œ ์˜ฌํ•ด 1์›” ์ค‘์ˆœ์—” Elasticsearch ๋ฒ„์ „์ด 7.10.2์ด์—ˆ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ์ง€๊ธˆ์€ ๋ฒŒ์จ 7.11์œผ๋กœ ๋ฒ„์ „ ์—… ๋˜์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ์˜คํ”ˆ์†Œ์Šค ์ค‘์— ๋ฒ„์ „์—…์ด ๊ฐ€์žฅ ๋น ๋ฅธ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ๊ธฐ๋Šฅ์ด ํ™• ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์Šต๋“ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋ฐ”๋€Œ์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์ž‘์€ ๋‹จ์œ„๋กœ ์กฐ๊ธˆ์”ฉ ๋ฐ”๋€Œ์–ด ๊ฐ€๋Š” ๋ชจ์Šต์ด ๊ฝค ์ธ์ƒ์ ์ด๋‹ค. -ใ€€๏ปฟ์ž‘๋…„ ์ดˆ๋ถ€ํ„ฐ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์•„์ง๊นŒ์ง€๋„ ์ง„ํ–‰ ์ค‘์ด๋‹ค. ๋‚˜๋„ ์ „์—ผ๋˜๋Š” ๊ฑด ์•„๋‹๊นŒ ํ•˜๋Š” ๋‘๋ ค์›€์— ์–ด๋””์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋˜ ์‹œ์ ˆ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ๋›ฐ์–ด๋‚œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ˆ„๊ฐ€ ์‹œํ‚ค์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ๊ทธ ํ˜„ํ™ฉ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ ๋•๋ถ„์— ์ข€ ๋” ํ˜„ํ™ฉ์„ ๋ณด๊ธฐ์— ํŽธํ•ด์กŒ๊ณ  ๋”์šฑ ์กฐ์‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด์ œ๋Š” ํฌํ„ธ์‚ฌ์ดํŠธ๋‚˜ ๊ฐ์ข… ๋งค์ฒด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒ€์ƒ‰์—”์ง„์ด์ง€๋งŒ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ElasticStack์„ ํ™œ์šฉํ•ด์„œ ‘๋‚˜๋งŒ์˜ ๋Œ€์‹œ๋ณด๋“œ’๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์˜ ์ผํšŒ์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ „๋ฐ˜์ ์ธ “ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์ถ•ํ•œ ๋’ค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ ๋˜ํ•œ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค. ์ „์ฒด ํ๋ฆ„" ์ „์ฒด ํ๋ฆ„ -๏ปฟ๊ธ€์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋‹ˆ ์–‘์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์–ด์ ธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜์—ฌ Elasticsearch์— ์ธ๋ฑ์‹ฑ ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ “๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ Kibana์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” 2๊ฐœ์˜ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. -๏ปฟใ€€์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋  ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ตœ์ข… ๋ชฉํ‘œ!" ์ตœ์ข… ๋ชฉํ‘œ! -๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ์ค€๋น„ ใ€€๏ปฟ์˜ˆ์ „์—๋Š” Elasticsearch, Logstash, Kibana 3๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ELK๋ผ ๋ถˆ๋ฆฌ๋‹ค Beat๋ผ๋Š” ๊ฒฝ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ ์ œํ’ˆ์ด ๋“ฑ์žฅํ•˜๋ฉฐ ์ด ๋ชจ๋“  ๊ฑธ ElasticStack๋ผ ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ฐธ๊ณ ) ๋จผ์ € ์–ด๋–ค ๋ชฉํ‘œ์™€ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.๏ปฟ -๋ฐ์ดํ„ฐ ใ€€๏ปฟ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ์—์„œ ๊ฐ€์ ธ์˜ค๋ ค๋‹ค ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋ˆ„๋ฝ๋˜๋Š” ๋‚ ์งœ๋„ ์žˆ์—ˆ๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ์ƒ๊ฐ๋ณด๋‹ค ์ข‹์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๊ณณ์„ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊นƒํ—™์— ๊ณต๊ฐœ๊ฐ€ ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” https://coronaboard.kr/ ์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. ๏ปฟ -๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(preprocessing) ใ€€๏ปฟ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์œ„ ๊นƒํ—™์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์— ์ง€์—ญ๋ณ„ ๋ฐœ์ƒ ํ˜„ํ™ฉ. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์š”์ผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ์„œ์šธ์ง€์—ญ ๊ธฐ์ค€์œผ๋กœ 2020๋…„ 2์›” 17์ผ์— 14๋ช…์ด ๋ฐœ์ƒํ–ˆ๊ณ  2020๋…„ 2์›” 18์ผ์— ํ•œ ๋ช…๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ 14๋ช…์œผ๋กœ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Œ€๋กœ ํ•ด๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ๋ณ„๋„์˜ ๊ฐ€๊ณต ์—†์ด ์ตœ๋Œ€ํ•œ ์›๋ณธ ๋ฐ์ดํ„ฐ(raw) ๊ฐ€ ์žˆ์–ด์•ผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด, ์ง‘๊ณ„ ์ˆ˜๊ฐ€ ๋ˆ„์ ๋˜์ง€ ์•Š๊ณ  ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„๋œ ์ˆ˜๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ–ˆ๋‹ค.๏ปฟ -ใ€€๏ปฟํ•„์ž๋Š” ์ฃผ๋กœ java๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜์ง€๋งŒ ๊ฐ€๋” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์„ฑ ๊ฐœ๋ฐœ์€ python์„ ํ™œ์šฉํ•˜๋Š” ํŽธ์ด๊ธฐ์— ๋‹ค์†Œ ์ด์œ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. -import csv, requests import pandas as pd CSV_URL = 'https://raw.githubusercontent.com/jooeungen/coronaboard_kr/master/kr_regional_daily.csv' # ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌํ•ด์ œ yesterday_data = {} yesterday_data['์„œ์šธ'] = [0, 0, 0] yesterday_data['๋ถ€์‚ฐ'] = [0, 0, 0] yesterday_data['๋Œ€๊ตฌ'] = [0, 0, 0] yesterday_data['์ธ์ฒœ'] = [0, 0, 0] yesterday_data['๊ด‘์ฃผ'] = [0, 0, 0] yesterday_data['๋Œ€์ „'] = [0, 0, 0] yesterday_data['์šธ์‚ฐ'] = [0, 0, 0] yesterday_data['์„ธ์ข…'] = [0, 0, 0] yesterday_data['๊ฒฝ๊ธฐ'] = [0, 0, 0] yesterday_data['๊ฐ•์›'] = [0, 0, 0] yesterday_data['์ถฉ๋ถ'] = [0, 0, 0] yesterday_data['์ถฉ๋‚จ'] = [0, 0, 0] yesterday_data['์ „๋ถ'] = [0, 0, 0] yesterday_data['์ „๋‚จ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋ถ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋‚จ'] = [0, 0, 0] yesterday_data['์ œ์ฃผ'] = [0, 0, 0] yesterday_data['๊ฒ€์—ญ'] = [0, 0, 0] flag = False csv_data = [] with requests.
\ No newline at end of file +ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.
\ No newline at end of file diff --git a/index.xml b/index.xml index 575c04f6..d67e8063 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,6 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.io https://taetaetae.github.io/images/profile.pngenSun, 23 Jul 2023 10:39:22 +0900๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/ +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.io https://taetaetae.github.io/images/profile.pngenSun, 31 Dec 2023 15:26:10 +0900์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐhttps://taetaetae.github.io/posts/review-2023/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/posts/review-2023/๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/
(ํ•„์ž์˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์„ ๋ฏธ๋ฃจ์–ด) ๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ์—์„œ ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” CRUD(Create, Read, Update, Delete) API๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(?)๊ฐ€ ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ผ์ •์€ ์ด‰๋ฐ•ํ•œ๋ฐ ์‚ฌ๋žŒ์€ ๋ถ€์กฑํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ณต๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒŒ ๋ˆˆ์— ํ›คํžˆ ๋ณด์ด์ง€๋งŒ ๊ฐœ์„ ํ•  ์‹œ๊ฐ„์ด๋‚˜ ์—ฌ์œ ์กฐ์ฐจ ์—†์–ด ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ์  “๋Œ์•„๊ฐ€๊ฒŒ๋งŒ” ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋“ค. ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์€ ์ ์  ์—†์–ด์ง€๊ณ , ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ธก๋ฉด์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์ฑ…์ž„๊ณผ ๊ด€์‹ฌ ๊ฐ™์€ ์ƒ๊ฐ๋“ค์€ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํŽธ์˜๋งŒ ์ถ”๊ตฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด์ง์„ ํ•ด์•ผ๊ฒ ๋‹ค ๋งˆ์Œ๋จน๊ณ  ์ด๋ ฅ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋‚˜ ์—ฐ๋ง ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ํ•œ ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋Œ์•„๋ณด๋ฉด ํšŒ์‚ฌ์ผ์€ ๋ถˆ์ฒ ์ฃผ์•ผ ์ •๋ง ์—ด์‹ฌํžˆ ํ–ˆ์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•œ ๊ฑด ํšŒ์‚ฌ์ผ ๋Œ€๋น„ ์•„์ฃผ ๊ทน์†Œ์ˆ˜์— ๋ถˆ๊ณผํ•˜๋Š” ์‚ถ์ด ๊ณ„์†๋œ๋‹ค. ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž.์ถœ์ฒ˜ : https://sdtimes.com/ai/ai-enabled-tools-might-completely-change-development-one-day/" ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž. @@ -85,15 +87,4 @@ New Visualizaion!!" New Visualizaion!! ใ€€๋ฒ„์ „์—…์ด ๋˜๋ฉด์„œ ๋น„์ฅฌ์–ผ๋ผ ์ „์ฒด ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ์ดํ•ฉ์„ ํ‘œํ˜„ํ•˜๋ ค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ‘์ˆซ์ž’๋ฅผ ํ‘œํ˜„ํ•˜๋ ค ํ•˜๋Š” ๊ฒฝ์šฐ Metric์„ ํ™œ์šฉํ•˜๊ณค ํ•œ๋‹ค. ์šฐ์ธก์—์„œ Aggregation ๋ฐฉ๋ฒ•์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ•„๋“œ๋Š” ์œ ํ˜•๋ณ„๋กœ ๊ฐ๊ฐ ์„ ํƒํ•ด ์ฃผ์ž. ์•„๋ž˜ ‘Add’๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. Label์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ํ˜•ํƒœ๋กœ Aggregation์„ ํ–ˆ๋Š”์ง€๋ฅผ Label ์˜์—ญ์— ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ณด๊ธฐ ์‹ซ๋‹ค๋ฉด ์›ํ•˜๋Š” ํ…์ŠคํŠธ๋กœ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ตœ๊ทผ ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ‘์ตœ๊ทผ ๋ฐ์ดํ„ฐ’๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ๋ชฉ์ ์ด๋‹ค. ์ด ๊ฒฝ์šฐ Aggregation์„ Top Hit์œผ๋กœ ์„ ํƒํ•˜๋ฉด ํ•„๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ํ•˜๋ฃจ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด 18 row์ด๊ธฐ ๋•Œ๋ฌธ์— (์„œ์šธ, ๋ถ€์‚ฐ, …, ์ œ์ฃผ, ๊ฒ€์—ญ) 18 row ์„ ์ „๋ถ€ ๋”ํ•œ ๊ฐ’์ด ํ•˜๋ฃจ ๊ธฐ์ค€์˜ ํ•ฉ๊ณ„๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋ ฌ์„ ๋‚ ์งœ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•ด์ค˜์•ผ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ์˜ ํ•ฉ๊ณ„๊ฐ€ ๋˜๋Š” ์ ๋„ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. ๊ฐ ํƒ€์ž…๋ณ„ ํ•ฉ๊ณ„ ." . ใ€€๏ปฟ์ง€์—ญ๋ณ„๋กœ ํƒ€์ž…๋ณ„ ์ˆ˜๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด Pie ํƒ€์ž…์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ง„ํ–‰ํ•œ๋‹ค. ํƒ€์ž…๋ณ„(์˜ˆ๋กœ ๋“ค์–ด ํ™•์ง„์ด๋ฉด confirmed)๋กœ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด Aggregation์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋นˆ ์›์ด ๋‚˜์˜ค์ง€๋งŒ ๊ฐ ์ง€์—ญ๋ณ„๋กœ ์ฐจํŠธ๋ฅผ ์ž˜๋ผ์„œ ๋ด์•ผ ํ•˜๊ธฐ์— ํ•˜๋‹จ์˜ Buckets์˜ Add๋ฅผ ๋ˆ„๋ฅด๊ณ  regieon์˜ ํ•„๋“œ๋ฅผ Terms Aggregation ํ•œ๋‹ค. 18 row์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋ถ€ ๋ณด์—ฌ์•ผ ํ•˜๊ธฐ์— ์ •๋ ฌ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  option ํƒญ์—์„œ ๋ณด๋Š” ์ทจํ–ฅ์— ์•Œ๋งž๊ฒŒ ์„ค์ •๊ฐ’๋“ค์„ ๋ฐ”๊ฟ”์ค€๋‹ค. -ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.]]>Elastic Stack์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ : ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑhttps://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/Mon, 15 Feb 2021 17:50:12 +0900Authorhttps://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/ - -
๏ปฟใ€€์–ผ๋งˆ ์ „์— ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋Š ๊ต์œก ๊ธฐ๊ด€์—์„œ ElasticStack์— ๋Œ€ํ•œ ๊ฐ•์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ์‚ฌ์‹ค ๊ด€๋ จ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ง€์‹์ด ์•„์ฃผ ๊นŠ๊ณ  ํ•ด๋ฐ•ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์•ฝ๊ฐ„์˜ ๋ฐ˜๊ฐ๋ถ€ํ„ฐ ๋“ค์—ˆ์ง€๋งŒ ElasticStack์„ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ์ •๋„๋กœ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์กฐ์‹ฌ์Šค๋Ÿฝ์ง€๋งŒ ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์—ด์‹ฌํžˆ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋กœ ๊ฐ‘์ž๊ธฐ ๊ฐ•์˜๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๊ฐ„ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋„ˆ๋ฌด ์•„์‰ฝ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ƒฅ ์ค‘๋‹จํ•˜๊ธฐ์—” ์•„์‰ฌ์šด ๋งˆ์Œ์ด ๋„ˆ๋ฌด ์ปค์„œ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ ์ค‘์— ‘๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„’์€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒ ๋„์›€์ด ๋ ๊นŒ ์‹ถ์–ด ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. - ๏ปฟ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ•œ ์˜ฌํ•ด 1์›” ์ค‘์ˆœ์—” Elasticsearch ๋ฒ„์ „์ด 7.10.2์ด์—ˆ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ์ง€๊ธˆ์€ ๋ฒŒ์จ 7.11์œผ๋กœ ๋ฒ„์ „ ์—… ๋˜์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ์˜คํ”ˆ์†Œ์Šค ์ค‘์— ๋ฒ„์ „์—…์ด ๊ฐ€์žฅ ๋น ๋ฅธ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ๊ธฐ๋Šฅ์ด ํ™• ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์Šต๋“ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋ฐ”๋€Œ์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์ž‘์€ ๋‹จ์œ„๋กœ ์กฐ๊ธˆ์”ฉ ๋ฐ”๋€Œ์–ด ๊ฐ€๋Š” ๋ชจ์Šต์ด ๊ฝค ์ธ์ƒ์ ์ด๋‹ค. - ใ€€๏ปฟ์ž‘๋…„ ์ดˆ๋ถ€ํ„ฐ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์•„์ง๊นŒ์ง€๋„ ์ง„ํ–‰ ์ค‘์ด๋‹ค. ๋‚˜๋„ ์ „์—ผ๋˜๋Š” ๊ฑด ์•„๋‹๊นŒ ํ•˜๋Š” ๋‘๋ ค์›€์— ์–ด๋””์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋˜ ์‹œ์ ˆ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ๋›ฐ์–ด๋‚œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ˆ„๊ฐ€ ์‹œํ‚ค์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ๊ทธ ํ˜„ํ™ฉ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ ๋•๋ถ„์— ์ข€ ๋” ํ˜„ํ™ฉ์„ ๋ณด๊ธฐ์— ํŽธํ•ด์กŒ๊ณ  ๋”์šฑ ์กฐ์‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด์ œ๋Š” ํฌํ„ธ์‚ฌ์ดํŠธ๋‚˜ ๊ฐ์ข… ๋งค์ฒด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒ€์ƒ‰์—”์ง„์ด์ง€๋งŒ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ElasticStack์„ ํ™œ์šฉํ•ด์„œ ‘๋‚˜๋งŒ์˜ ๋Œ€์‹œ๋ณด๋“œ’๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์˜ ์ผํšŒ์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ „๋ฐ˜์ ์ธ “ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์ถ•ํ•œ ๋’ค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ ๋˜ํ•œ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค. ์ „์ฒด ํ๋ฆ„" ์ „์ฒด ํ๋ฆ„ - ๏ปฟ๊ธ€์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋‹ˆ ์–‘์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์–ด์ ธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜์—ฌ Elasticsearch์— ์ธ๋ฑ์‹ฑ ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ “๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ Kibana์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” 2๊ฐœ์˜ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. - ๏ปฟใ€€์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋  ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ตœ์ข… ๋ชฉํ‘œ!" ์ตœ์ข… ๋ชฉํ‘œ! -๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ์ค€๋น„ ใ€€๏ปฟ์˜ˆ์ „์—๋Š” Elasticsearch, Logstash, Kibana 3๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ELK๋ผ ๋ถˆ๋ฆฌ๋‹ค Beat๋ผ๋Š” ๊ฒฝ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ ์ œํ’ˆ์ด ๋“ฑ์žฅํ•˜๋ฉฐ ์ด ๋ชจ๋“  ๊ฑธ ElasticStack๋ผ ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ฐธ๊ณ ) ๋จผ์ € ์–ด๋–ค ๋ชฉํ‘œ์™€ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.๏ปฟ -๋ฐ์ดํ„ฐ ใ€€๏ปฟ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ์—์„œ ๊ฐ€์ ธ์˜ค๋ ค๋‹ค ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋ˆ„๋ฝ๋˜๋Š” ๋‚ ์งœ๋„ ์žˆ์—ˆ๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ์ƒ๊ฐ๋ณด๋‹ค ์ข‹์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๊ณณ์„ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊นƒํ—™์— ๊ณต๊ฐœ๊ฐ€ ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” https://coronaboard.kr/ ์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. ๏ปฟ -๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(preprocessing) ใ€€๏ปฟ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์œ„ ๊นƒํ—™์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์— ์ง€์—ญ๋ณ„ ๋ฐœ์ƒ ํ˜„ํ™ฉ. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์š”์ผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ์„œ์šธ์ง€์—ญ ๊ธฐ์ค€์œผ๋กœ 2020๋…„ 2์›” 17์ผ์— 14๋ช…์ด ๋ฐœ์ƒํ–ˆ๊ณ  2020๋…„ 2์›” 18์ผ์— ํ•œ ๋ช…๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ 14๋ช…์œผ๋กœ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Œ€๋กœ ํ•ด๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ๋ณ„๋„์˜ ๊ฐ€๊ณต ์—†์ด ์ตœ๋Œ€ํ•œ ์›๋ณธ ๋ฐ์ดํ„ฐ(raw) ๊ฐ€ ์žˆ์–ด์•ผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด, ์ง‘๊ณ„ ์ˆ˜๊ฐ€ ๋ˆ„์ ๋˜์ง€ ์•Š๊ณ  ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„๋œ ์ˆ˜๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ–ˆ๋‹ค.๏ปฟ -ใ€€๏ปฟํ•„์ž๋Š” ์ฃผ๋กœ java๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜์ง€๋งŒ ๊ฐ€๋” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์„ฑ ๊ฐœ๋ฐœ์€ python์„ ํ™œ์šฉํ•˜๋Š” ํŽธ์ด๊ธฐ์— ๋‹ค์†Œ ์ด์œ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. -import csv, requests import pandas as pd CSV_URL = 'https://raw.githubusercontent.com/jooeungen/coronaboard_kr/master/kr_regional_daily.csv' # ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌํ•ด์ œ yesterday_data = {} yesterday_data['์„œ์šธ'] = [0, 0, 0] yesterday_data['๋ถ€์‚ฐ'] = [0, 0, 0] yesterday_data['๋Œ€๊ตฌ'] = [0, 0, 0] yesterday_data['์ธ์ฒœ'] = [0, 0, 0] yesterday_data['๊ด‘์ฃผ'] = [0, 0, 0] yesterday_data['๋Œ€์ „'] = [0, 0, 0] yesterday_data['์šธ์‚ฐ'] = [0, 0, 0] yesterday_data['์„ธ์ข…'] = [0, 0, 0] yesterday_data['๊ฒฝ๊ธฐ'] = [0, 0, 0] yesterday_data['๊ฐ•์›'] = [0, 0, 0] yesterday_data['์ถฉ๋ถ'] = [0, 0, 0] yesterday_data['์ถฉ๋‚จ'] = [0, 0, 0] yesterday_data['์ „๋ถ'] = [0, 0, 0] yesterday_data['์ „๋‚จ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋ถ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋‚จ'] = [0, 0, 0] yesterday_data['์ œ์ฃผ'] = [0, 0, 0] yesterday_data['๊ฒ€์—ญ'] = [0, 0, 0] flag = False csv_data = [] with requests.]]> \ No newline at end of file +ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.]]> \ No newline at end of file diff --git a/page/10/index.html b/page/10/index.html index 391d3108..6910995c 100644 --- a/page/10/index.html +++ b/page/10/index.html @@ -1,5 +1,9 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

spring4์—์„œ json view ํ™œ์šฉํ•˜๊ธฐ(with @ResponseBody)

์ˆ˜๋งŽ์€ ๋ธ”๋กœ๊ฑฐ๋ถ„๋“ค์˜ ๋„์›€์„ ๋ฐ›๊ณ ์ž ๊ตฌ๊ธ€๋ง์„ ํ•ด์„œ ์ ์šฉ์„ ํ•ด๋ดค์ง€๋งŒ ๋„ˆ๋ฌด๋งŽ์€ ์‚ฝ์งˆ์„ ํ–ˆ๋‹ค.(ํ•ด๋ดค๋˜ ๋ฐฉ์‹์€ jsonViewResolver ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด๋ณด๊ฑฐ๋‚˜, @RequestMapping ์˜ต์…˜์„ ๋ฐ”๊ฟ”๋ณด๋Š” ์ˆ˜์ค€..) ํŠนํžˆ๋‚˜ Spring์„ค์ •๋ฐฉ์‹์ด ์˜ˆ์ „ ๋ฐฉ์‹์ด์˜€๋˜ xml์ด ์•„๋‹Œ javaconfig์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ๋” ์ž๋ฃŒ๊ฐ€ ์—†์—ˆ๊ณ .. ํ•œ์ฐธ์„ ์‚ฝ์งˆํ•˜๋‹ค ํ•ด๊ฒฐ์„ ํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ํ™˜๊ฒฝ์€ spring 4.3.4.RELEASE, Maven, jdk8์ž„์„ ๋ฐํžŒ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

Spring Transactional ์„ค์ • ๋ฐ ์ฃผ์š”์†์„ฑ

์ง€๋‚œ๋ฒˆ์—๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์„ค์ •๊ฐ’์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ ๋ฐ” ์žˆ๋‹ค. [ Spring Transaction ์˜ต์…˜ ] ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‹ค์ œ๋กœ ์Šคํ”„๋ง ํ™˜๊ฒฝ์—์„œ ์–ด๋–ค์‹์œผ๋กœ ์„ค์ •ํ•ด์•ผ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์†์„ฑ๋“ค์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์„ค์ • ๊ธฐ์กด xml๋ฐฉ์‹์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •์„ ํ•œ๋‹ค. +<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> ํ˜น, JavaConfig ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค. +@EnableTransactionManagement public class AppConfig { ... @Bean public PlatformTransactionManager transactionManager() throws URISyntaxException, GeneralSecurityException, ParseException, IOException { return new DataSourceTransactionManager(dataSource()); } } ์œ„์™€๊ฐ™์ด ์„ค์ •์„ ํ•ด์ฃผ๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณณ ์–ด๋””์„œ๋“  @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•ด์„œ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. +public class UserService{ @Transactional public boolean insertUser(User user){ ... } } ์ฃผ์š”์†์„ฑ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฃผ์š”์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. +์†์„ฑ ์„ค ๋ช… ์‚ฌ์šฉ ์˜ˆ isolation Transaction์˜ isolation Level. ๋ณ„๋„๋กœ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด DB์˜ Isolation Level์„ ๋”ฐ๋ฆ„. @Transactional(isolation=Isolation.DEFAULT) propagation ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ๊ทœ์น™์„ ์ •์˜ , Default=REQURIED @Transactional(propagation=Propagation.REQUIRED) readOnly ํ•ด๋‹น Transaction์„ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์ฒ˜๋ฆฌ (Default = false) @Transactional(readOnly = true) rollbackFor ์ •์˜๋œ Exception์— ๋Œ€ํ•ด์„œ๋Š” rollback์„ ์ˆ˜ํ–‰ @Transactional(rollbackFor=Exception.class) noRollbackFor ์ •์˜๋œ Exception์— ๋Œ€ํ•ด์„œ๋Š” rollback์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ. @Transactional(noRollbackFor=Exception.class) timeout ์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ rollback ์ˆ˜ํ–‰. -1์ผ ๊ฒฝ์šฐ no timeout (Default = -1) @Transactional(timeout=10) ๋งˆ์น˜๋ฉฐ ์ž์นซ ์ž˜๋ชปํ–ˆ๋‹ค๊ฐ€๋Š” ์›์น˜์•Š๋Š” ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ• ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’์€ ์ˆ™์ง€ํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™๋‹ค.

spring4์—์„œ json view ํ™œ์šฉํ•˜๊ธฐ(with @ResponseBody)

์ˆ˜๋งŽ์€ ๋ธ”๋กœ๊ฑฐ๋ถ„๋“ค์˜ ๋„์›€์„ ๋ฐ›๊ณ ์ž ๊ตฌ๊ธ€๋ง์„ ํ•ด์„œ ์ ์šฉ์„ ํ•ด๋ดค์ง€๋งŒ ๋„ˆ๋ฌด๋งŽ์€ ์‚ฝ์งˆ์„ ํ–ˆ๋‹ค.(ํ•ด๋ดค๋˜ ๋ฐฉ์‹์€ jsonViewResolver ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด๋ณด๊ฑฐ๋‚˜, @RequestMapping ์˜ต์…˜์„ ๋ฐ”๊ฟ”๋ณด๋Š” ์ˆ˜์ค€..) ํŠนํžˆ๋‚˜ Spring์„ค์ •๋ฐฉ์‹์ด ์˜ˆ์ „ ๋ฐฉ์‹์ด์˜€๋˜ xml์ด ์•„๋‹Œ javaconfig์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ๋” ์ž๋ฃŒ๊ฐ€ ์—†์—ˆ๊ณ .. ํ•œ์ฐธ์„ ์‚ฝ์งˆํ•˜๋‹ค ํ•ด๊ฒฐ์„ ํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ํ™˜๊ฒฝ์€ spring 4.3.4.RELEASE, Maven, jdk8์ž„์„ ๋ฐํžŒ๋‹ค. pom.xml jackson-mapper-asl์„ ์ด์šฉํ•ด์„œ ํ•˜๋ผ๋Š” ๋ธ”๋กœ๊ฑฐ๋“ค๋„ ์žˆ์—ˆ์ง€๋งŒ, ์•„๋ฌด๋ฆฌํ•ด๋„(๋ญ”๊ฐ€ Spring๋ฒ„์ „๊ณผ ๋งž์ง€ ์•Š๋Š”๋“ฏ ํ–ˆ๋‹ค.) ์ž˜ ์•ˆ๋˜์–ด ์•„๋ž˜์™€ ๊ฐ™์€ dependency๋ฅผ ์ฃผ์—ˆ๋‹ค. <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.1</version> </dependency> Controller ์•„๋ž˜์™€๊ฐ™์ด @ResponseBody ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ค์ •ํ•ด์ฃผ๊ณ  ๋ฆฌํ„ด์€ ํ•ด๋‹น ๋ชจ๋ธ์„ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค. @RequestMapping(value="/test") @ResponseBody public Map<String, Object> test(){ Map<String, Object> map = new HashMap<String, Object>(); map.put("1", "111"); map.put("2", 222); return map; } ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ์„ ํ•ด๋ณด๋ฉด ๊ธฐ๋Œ€ํ–ˆ๋˜๊ฒƒ์ฒ˜๋Ÿผ ์ด์˜๊ฒŒ jsonํ˜•ํƒœ๋กœ ๋‚˜์˜จ๋‹ค. diff --git a/page/2/index.html b/page/2/index.html index 8b028398..504f9eaf 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1,5 +1,14 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ด๋ ฅ์„œ' ํŽธ

๏ปฟ ์ด๋ ฅ์„œ๋Š” ์–ธ์ œ ์“ฐ๊ฒŒ ๋˜๋Š” ๊ฑธ๊นŒ? ์•„์ฃผ ์ผ๋ฐ˜์ ์œผ๋กœ. ์‹ ์ž…(ํ•™์ƒ)์˜ ๊ฒฝ์šฐ ๋Œ€ํ•™์„ ์กธ์—…ํ•  ์ฆˆ์Œ ์ทจ์—…ํ•˜๊ณ  ์‹ถ์€ ํšŒ์‚ฌ๋กœ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๊ณ , ๊ฒฝ๋ ฅ(ํšŒ์‚ฌ์›)์˜ ๊ฒฝ์šฐ ์ด์ง์„ ๋งˆ์Œ๋จน๊ณ  ๊ฐ€๊ณ ์ž ํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ๋šœ๋ ทํ•˜๊ฒŒ ๊ฒฐ์ •์ด ๋˜๋ฉด ๊ทธ๋•Œ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ํšŒ์‚ฌ๋งˆ๋‹ค ์ •ํ•ด์ง„ ํ˜•์‹์ด ์žˆ๋Š” ๊ณณ์ด๋ผ๋ฉด ๊ทธ ํ˜•์‹์— ๋งž์ถ”์–ด ์ž‘์„ฑํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‚˜๋งŒ์˜ ๊ธฐ์ค€์— ๋งž์ถ”์–ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š” ‘์ด๋ ฅ์„œ’. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

Elastic Stack์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ : ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ

๏ปฟใ€€์–ผ๋งˆ ์ „์— ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋Š ๊ต์œก ๊ธฐ๊ด€์—์„œ ElasticStack์— ๋Œ€ํ•œ ๊ฐ•์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ์‚ฌ์‹ค ๊ด€๋ จ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ง€์‹์ด ์•„์ฃผ ๊นŠ๊ณ  ํ•ด๋ฐ•ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์•ฝ๊ฐ„์˜ ๋ฐ˜๊ฐ๋ถ€ํ„ฐ ๋“ค์—ˆ์ง€๋งŒ ElasticStack์„ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ์ •๋„๋กœ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์กฐ์‹ฌ์Šค๋Ÿฝ์ง€๋งŒ ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์—ด์‹ฌํžˆ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋กœ ๊ฐ‘์ž๊ธฐ ๊ฐ•์˜๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๊ฐ„ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋„ˆ๋ฌด ์•„์‰ฝ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ƒฅ ์ค‘๋‹จํ•˜๊ธฐ์—” ์•„์‰ฌ์šด ๋งˆ์Œ์ด ๋„ˆ๋ฌด ์ปค์„œ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ ์ค‘์— ‘๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„’์€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒ ๋„์›€์ด ๋ ๊นŒ ์‹ถ์–ด ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. +๏ปฟ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ•œ ์˜ฌํ•ด 1์›” ์ค‘์ˆœ์—” Elasticsearch ๋ฒ„์ „์ด 7.10.2์ด์—ˆ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ์ง€๊ธˆ์€ ๋ฒŒ์จ 7.11์œผ๋กœ ๋ฒ„์ „ ์—… ๋˜์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ์˜คํ”ˆ์†Œ์Šค ์ค‘์— ๋ฒ„์ „์—…์ด ๊ฐ€์žฅ ๋น ๋ฅธ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ๊ธฐ๋Šฅ์ด ํ™• ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์Šต๋“ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋ฐ”๋€Œ์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์ž‘์€ ๋‹จ์œ„๋กœ ์กฐ๊ธˆ์”ฉ ๋ฐ”๋€Œ์–ด ๊ฐ€๋Š” ๋ชจ์Šต์ด ๊ฝค ์ธ์ƒ์ ์ด๋‹ค. +ใ€€๏ปฟ์ž‘๋…„ ์ดˆ๋ถ€ํ„ฐ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์•„์ง๊นŒ์ง€๋„ ์ง„ํ–‰ ์ค‘์ด๋‹ค. ๋‚˜๋„ ์ „์—ผ๋˜๋Š” ๊ฑด ์•„๋‹๊นŒ ํ•˜๋Š” ๋‘๋ ค์›€์— ์–ด๋””์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋˜ ์‹œ์ ˆ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ๋›ฐ์–ด๋‚œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ˆ„๊ฐ€ ์‹œํ‚ค์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ๊ทธ ํ˜„ํ™ฉ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ ๋•๋ถ„์— ์ข€ ๋” ํ˜„ํ™ฉ์„ ๋ณด๊ธฐ์— ํŽธํ•ด์กŒ๊ณ  ๋”์šฑ ์กฐ์‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด์ œ๋Š” ํฌํ„ธ์‚ฌ์ดํŠธ๋‚˜ ๊ฐ์ข… ๋งค์ฒด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒ€์ƒ‰์—”์ง„์ด์ง€๋งŒ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ElasticStack์„ ํ™œ์šฉํ•ด์„œ ‘๋‚˜๋งŒ์˜ ๋Œ€์‹œ๋ณด๋“œ’๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์˜ ์ผํšŒ์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ „๋ฐ˜์ ์ธ “ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์ถ•ํ•œ ๋’ค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ ๋˜ํ•œ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค. ์ „์ฒด ํ๋ฆ„" ์ „์ฒด ํ๋ฆ„ +๏ปฟ๊ธ€์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋‹ˆ ์–‘์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์–ด์ ธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜์—ฌ Elasticsearch์— ์ธ๋ฑ์‹ฑ ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ “๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ Kibana์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” 2๊ฐœ์˜ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. +๏ปฟใ€€์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋  ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ตœ์ข… ๋ชฉํ‘œ!" ์ตœ์ข… ๋ชฉํ‘œ! +๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ์ค€๋น„ ใ€€๏ปฟ์˜ˆ์ „์—๋Š” Elasticsearch, Logstash, Kibana 3๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ELK๋ผ ๋ถˆ๋ฆฌ๋‹ค Beat๋ผ๋Š” ๊ฒฝ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ ์ œํ’ˆ์ด ๋“ฑ์žฅํ•˜๋ฉฐ ์ด ๋ชจ๋“  ๊ฑธ ElasticStack๋ผ ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ฐธ๊ณ ) ๋จผ์ € ์–ด๋–ค ๋ชฉํ‘œ์™€ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.๏ปฟ +๋ฐ์ดํ„ฐ ใ€€๏ปฟ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ์—์„œ ๊ฐ€์ ธ์˜ค๋ ค๋‹ค ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋ˆ„๋ฝ๋˜๋Š” ๋‚ ์งœ๋„ ์žˆ์—ˆ๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ์ƒ๊ฐ๋ณด๋‹ค ์ข‹์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๊ณณ์„ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊นƒํ—™์— ๊ณต๊ฐœ๊ฐ€ ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” https://coronaboard.kr/ ์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. ๏ปฟ +๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(preprocessing) ใ€€๏ปฟ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์œ„ ๊นƒํ—™์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์— ์ง€์—ญ๋ณ„ ๋ฐœ์ƒ ํ˜„ํ™ฉ. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์š”์ผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ์„œ์šธ์ง€์—ญ ๊ธฐ์ค€์œผ๋กœ 2020๋…„ 2์›” 17์ผ์— 14๋ช…์ด ๋ฐœ์ƒํ–ˆ๊ณ  2020๋…„ 2์›” 18์ผ์— ํ•œ ๋ช…๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ 14๋ช…์œผ๋กœ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Œ€๋กœ ํ•ด๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ๋ณ„๋„์˜ ๊ฐ€๊ณต ์—†์ด ์ตœ๋Œ€ํ•œ ์›๋ณธ ๋ฐ์ดํ„ฐ(raw) ๊ฐ€ ์žˆ์–ด์•ผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด, ์ง‘๊ณ„ ์ˆ˜๊ฐ€ ๋ˆ„์ ๋˜์ง€ ์•Š๊ณ  ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„๋œ ์ˆ˜๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ–ˆ๋‹ค.๏ปฟ +ใ€€๏ปฟํ•„์ž๋Š” ์ฃผ๋กœ java๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜์ง€๋งŒ ๊ฐ€๋” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์„ฑ ๊ฐœ๋ฐœ์€ python์„ ํ™œ์šฉํ•˜๋Š” ํŽธ์ด๊ธฐ์— ๋‹ค์†Œ ์ด์œ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. +import csv, requests import pandas as pd CSV_URL = 'https://raw.githubusercontent.com/jooeungen/coronaboard_kr/master/kr_regional_daily.csv' # ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌํ•ด์ œ yesterday_data = {} yesterday_data['์„œ์šธ'] = [0, 0, 0] yesterday_data['๋ถ€์‚ฐ'] = [0, 0, 0] yesterday_data['๋Œ€๊ตฌ'] = [0, 0, 0] yesterday_data['์ธ์ฒœ'] = [0, 0, 0] yesterday_data['๊ด‘์ฃผ'] = [0, 0, 0] yesterday_data['๋Œ€์ „'] = [0, 0, 0] yesterday_data['์šธ์‚ฐ'] = [0, 0, 0] yesterday_data['์„ธ์ข…'] = [0, 0, 0] yesterday_data['๊ฒฝ๊ธฐ'] = [0, 0, 0] yesterday_data['๊ฐ•์›'] = [0, 0, 0] yesterday_data['์ถฉ๋ถ'] = [0, 0, 0] yesterday_data['์ถฉ๋‚จ'] = [0, 0, 0] yesterday_data['์ „๋ถ'] = [0, 0, 0] yesterday_data['์ „๋‚จ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋ถ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋‚จ'] = [0, 0, 0] yesterday_data['์ œ์ฃผ'] = [0, 0, 0] yesterday_data['๊ฒ€์—ญ'] = [0, 0, 0] flag = False csv_data = [] with requests.

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ด๋ ฅ์„œ' ํŽธ

๏ปฟ ์ด๋ ฅ์„œ๋Š” ์–ธ์ œ ์“ฐ๊ฒŒ ๋˜๋Š” ๊ฑธ๊นŒ? ์•„์ฃผ ์ผ๋ฐ˜์ ์œผ๋กœ. ์‹ ์ž…(ํ•™์ƒ)์˜ ๊ฒฝ์šฐ ๋Œ€ํ•™์„ ์กธ์—…ํ•  ์ฆˆ์Œ ์ทจ์—…ํ•˜๊ณ  ์‹ถ์€ ํšŒ์‚ฌ๋กœ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๊ณ , ๊ฒฝ๋ ฅ(ํšŒ์‚ฌ์›)์˜ ๊ฒฝ์šฐ ์ด์ง์„ ๋งˆ์Œ๋จน๊ณ  ๊ฐ€๊ณ ์ž ํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ๋šœ๋ ทํ•˜๊ฒŒ ๊ฒฐ์ •์ด ๋˜๋ฉด ๊ทธ๋•Œ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ํšŒ์‚ฌ๋งˆ๋‹ค ์ •ํ•ด์ง„ ํ˜•์‹์ด ์žˆ๋Š” ๊ณณ์ด๋ผ๋ฉด ๊ทธ ํ˜•์‹์— ๋งž์ถ”์–ด ์ž‘์„ฑํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‚˜๋งŒ์˜ ๊ธฐ์ค€์— ๋งž์ถ”์–ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š” ‘์ด๋ ฅ์„œ’. ใ€€ํšŒ์‚ฌ์— ์ž…์‚ฌํ•˜๊ณ  ์ •์‹ ์—†์ด ์ง€๋‚ด๋‹ค ๋ณด๋ฉด ์ด์ง์„ ์ƒ๊ฐํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ‘์ด๋ ฅ์„œ’๋ผ๋Š” ์กด์žฌ๋ฅผ ์ž์นซ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ์‰ฝ๋‹ค. ๋˜ํ•œ ๊ตฌํƒœ์—ฌ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋ฉด์„œ๊นŒ์ง€ ์จ์•ผ ํ•œ๋‹ค๋Š” ๋งˆ์Œ์กฐ์ฐจ ์ž˜ ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ๋กœ ํ…… ๋นˆ ์ฑ…์ƒ ์•ž์— ์•‰์•„ ํ•˜์–€ A4์ง€์™€ ํŽœ ํ•œ ์ž๋ฃจ๋งŒ ๊ฐ€์ง€๊ณ  ์จ๋ด์•ผ์ง€ ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ด์ œ๊นŒ์ง€ ๋ญ˜ ํ•ด์™”๋‚˜ ํ•˜๋ฉฐ ์ž˜ ์จ์ง€์ง€ ์•Š๊ธฐ๋„ ํ•˜๊ณ . ์ด๋ ฅ์„œ์— ๋ญ˜ ์จ์•ผ ํ• ๊นŒ.์ถœ์ฒ˜ : https://epsem.tistory.com/243" ์ด๋ ฅ์„œ์— ๋ญ˜ ์จ์•ผ ํ• ๊นŒ. ์ถœ์ฒ˜ : https://epsem.tistory.com/243 ใ€€๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ ์‹œ๋ฆฌ์ฆˆ์ธ ๏ปฟ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์–ด ‘์ด๋ ฅ์„œ’๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ธ์ œ, ์™œ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ •๋ณด์˜ ๋ฐ”๋‹ค, ํ™์ˆ˜์ฒ˜๋Ÿผ ์Ÿ์•„์ง€๋Š” ๊ธฐ์ˆ ์˜ ๋ณ€ํ™”๋ฅผ IT ์ตœ์ „๋ฐฉ์—์„œ ์˜จ๋ชธ์œผ๋กœ ๋งž์„œ ์‹ธ์šฐ๋Š” ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ‘ํšŒ์‚ฌ’๋ณด๋‹ค๋Š” ‘๋‚˜ ์ž์‹ ’์„ ์œ„ํ•ด ํ•˜๋ฃจ๋ฅผ ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ‘ํž˜’์ด ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ. @@ -84,12 +93,4 @@ ใ€€๊ทธ๋‹ค์Œ์œผ๋กœ ์•„๋ž˜์—์„œ ์ด์•ผ๊ธฐํ•  GitHub Pull Request Builder๋ผ๋Š” Jenkins plugin ์ด ๋นŒ๋“œ๊ฐ€ ๋๋‚œ ๋’ค์— ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํฌํŒ… ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„๋‘์ž. Github > Settings > Developer settings > Personal access tokens ํ™”๋ฉด์—์„œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋งŒ๋“ค์–ด์ง„ ํ‚ค๋ฅผ ์ €์žฅํ•ด ๋‘”๋‹ค. (์ด ํ‚ค๋Š” ๋ณด์•ˆ์— ์œ ์˜ํ•ด์•ผ ํ•˜๊ณ , ํ™”๋ฉด ๊ฒฝ๊ณ (?)์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํ‚ค๋Š” ์ƒ์„ฑ ์‹œ ํ•œ ๋ฒˆ๋ฐ–์— ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ๋‘ฌ์•ผ ํ•œ๋‹ค.) ์ธ์ฆํ† ํฐ์„ ๋ฏธ๋ฆฌ ๋ฐ›์•„๋‘์ž." ์ธ์ฆํ† ํฐ์„ ๋ฏธ๋ฆฌ ๋ฐ›์•„๋‘์ž. Jenkins ์„ค์ • ใ€€Jenkins > ๊ด€๋ฆฌ > pluginManager์— ๋“ค์–ด๊ฐ€ GitHub Pull Request Builder๋ฅผ ๊ฒ€์ƒ‰ ํ›„ ์„ค์น˜ํ•ด ์ค€๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ Jenkins > ๊ด€๋ฆฌ > ํ™˜๊ฒฝ์„ค์ •์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด GitHub Pull Request Builder ํ•ญ๋ชฉ์ด ์ƒ๊ธด ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  ์œ„์—์„œ ์„ค์ •ํ•œ ์ธ์ฆํ† ํฐ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ๋“ฑ๋ก ํ›„ ์ €์žฅ์„ ํ•œ๋‹ค. credentials ์„ ์œ„์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆํ† ํฐ์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค." credentials ์„ ์œ„์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆํ† ํฐ์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. ใ€€Jenkins job์„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  pullRequest ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •์„ ํ•ด์ค€๋‹ค. ๋จผ์ € General ํƒญ์— Github project์— Github url ์„ ์ ์–ด์ฃผ๊ณ  -ใ€€์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ ํƒญ์—์„œ ssh ์ฃผ์†Œ๋ฅผ ์ ๊ณ  ์œ„์—์„œ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ssh ํ‚ค๋กœ credentials ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ์ „์—๋„ ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ์ด ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋นจ๊ฐ„์ƒ‰ ๊ธ€์”จ๋กœ ์˜ค๋ฅ˜ ๋‚ด์šฉ์ด ๋‚˜์˜ค๊ณ  ์•„๋ž˜ ํ™”๋ฉด์ฒ˜๋Ÿผ ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋‚˜์˜จ๋‹ค. Refspec ์— +refs/pull/*:refs/remotes/origin/pr/* ๋ผ๊ณ  ์ ์–ด์ฃผ๊ณ  ๋ธŒ๋žœ์น˜ ์„ค์ •์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์™€์„œ pullRequest๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋ธŒ๋žœ์น˜๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ${sha1} ๋ผ๊ณ  ์ ์–ด์ฃผ์ž.

๋ฒŒ์จ 2๋…„ (feat. ํ† ์ดํ”„๋กœ์ ํŠธ ํšŒ๊ณ ,๊ฐ€์น˜,์ˆ˜์ž…)

์ •ํ™•ํžˆ 2018๋…„ 07์›” 12์ผ ํ•„์ž์˜ ์ฒซ ํ† ์ด ํ”„๋กœ์ ํŠธ์ธ โ€˜๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊ตฌ๋… ์„œ๋น„์Šคโ€™๋ฅผ ์˜คํ”ˆํ•˜๊ฒŒ ๋œ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๊ตฌ๋…(๊ฐ€์ž…) ํ•˜๊ฒ ์–ด ํ•˜๋Š” ์ƒ๊ฐ์ด ๋ถ€๋„๋Ÿฌ์šธ ๋งŒํผ 6๊ฐœ์›”์ด ์ง€๋‚˜ ๊ตฌ๋…์ž ์ˆ˜๋Š” 1,000๋ช…์„ ๋„˜๊ธฐ๊ณ  1๋…„์ด ์ง€๋‚˜ 2,000๋ช….์–ด๋Š๋ง ๋‹ฌ๋ ฅ์„ ๋ณด๋‹ˆ ์˜ค๋Š˜์ด ์ •ํ™•ํ•˜๊ฒŒ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์„œ๋น„์Šคํ•œ์ง€ ๋ฒŒ์จ 2๋…„์ด ๋˜๋Š” ๋‚ . ๊ตฌ๋…์ž ์ˆ˜๋Š” ์–ด๋Š๋ง 3,000๋ช…์„ ๋„˜์–ด์„ ๋‹ค. ๋ญ”๊ฐ€ ๋ฟŒ๋“ฏํ•˜๋ฉด์„œ๋„ ์„œ๋น„์Šค๋ฅผ ์ข€ ๋” ๋””๋ฒจ๋กญ ํ•˜์ง€ ๋ชปํ•œ ํ•„์ž ์ž์‹ ์„ ๋Œ์•„๋ณด๋‹ˆ ๊ดœํžˆ ๋งˆ์Œ์ด ๋ฌด๊ฑฐ์›Œ์ง€๊ณ . -๋ญ”๊ฐ€ ํ•ด์•ผํ•˜๋Š”๋ฐ… ๊ดœํžˆ ๋ˆˆ์น˜๋งŒ ๋ณด์ด๋„ค…์ถœ์ฒ˜ : http://egloos.zum.com/nievess/v/657827" ๋ญ”๊ฐ€ ํ•ด์•ผํ•˜๋Š”๋ฐ… ๊ดœํžˆ ๋ˆˆ์น˜๋งŒ ๋ณด์ด๋„ค… -์ถœ์ฒ˜ : http://egloos.zum.com/nievess/v/657827 ใ€€์ง€๋‚œ 2๋…„ ๋™์•ˆ์„ ๋Œ์ด์ผœ๋ณด๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์šด์˜ํ•ด ์™”๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ† ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์ž์—๊ฒŒ ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ์—ˆ๋Š”์ง€ ๋˜๋Œ์•„๋ณด๋ฉฐ ์…€ํ”„ ๋ฆฌ๋ทฐ๋ฅผ ํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค. -์„œ๋น„์Šค ์ž์ฒด ํ‰๊ฐ€ ์‹ฌํ”Œํ•œ ๊ธฐ๋Šฅ ใ€€๋ง ๊ทธ๋Œ€๋กœ ํ† ์ด ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ ๋˜ํ•œ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค. awesome-devblog์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐœ์ธ/๋‹จ์ฒด ๋ธ”๋กœ๊ทธ๋“ค์˜ ํฌ์ŠคํŒ…์„ ์กฐํšŒํ•˜์—ฌ ์–ด์ œ ์ž‘์„ฑ๋œ ๊ธ€๋“ค๋งŒ ๋ชจ์•„ ๋ฐœ์†กํ•œ๋‹ค. ๊ฑฐ๊ธฐ์— ์ฃผ๊ฐ„ ๋งŽ์ด ํด๋ฆญ๋œ ํฌ์ŠคํŒ…์„ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ ๋” ๋ฐœ์†กํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€. ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋” ๋””๋ฒจ๋กญ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์•„์ด๋””์–ด๊ฐ€ ์—†์–ด์„œ ์ธ์ง€ ๋””๋ฒจ๋กญ ํ•  ํž˜์ด ์•ˆ ๋‚˜์„œ ์ธ์ง€ ์œ ์ง€๋งŒ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋‹ค. -์„œ๋น„์Šค์— ์—†์–ด์„œ๋Š” ์•ˆ๋  ‘๋กœ๊น…(Logging)’ ใ€€ํ˜•์‹์„ ๋ง‰๋ก ํ•˜๊ณ  ์ปดํ“จํ„ฐ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋“  ‘ํ”„๋กœ๊ทธ๋žจ’์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ๋กœ์ง์— ๋”ฐ๋ผ ์›€์ง์ด๋Š” ๋กœ๋ด‡์— ๋ถˆ๊ณผํ•˜๋‹ค. ๋ฌผ๋ก  ์š”์ฆ˜์—๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์ด๋‚˜ AI ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์Šค์Šค๋กœ ํ•™์Šตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ๊ทธ ๋˜ํ•œ ๋ฏธ๋ฆฌ ์ฝ”๋”ฉ์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ถ€๋ถ„๋“ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 2๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ ์ด์ œ๊นŒ์ง€ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ”๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ „์— ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ‘๋กœ๊น…’. ์„œ๋น„์Šค ํˆฌ์ž… ์ „๋ถ€ํ„ฐ ํ”„๋ก ํŠธ๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋กœ๊น…์„ ํ•ด์„œ์ธ์ง€ 2๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋กœ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ์— ๋‹คํ–‰์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. -๊ฐ์ข… ์ง€ํ‘œ ใ€€๋จผ์ € ๋ด์•ผ ํ•  ์ง€ํ‘œ๋Š” ๋‹น์—ฐํžˆ ๊ฐ€์ž…/ํ•ด์ง€ ์ถ”์ด. ๋“œ๋ผ๋งˆํ‹ฑ ํ•œ ์„ ํ˜• ๊ทธ๋ž˜ํ”„๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋‹น์—ฐํžˆ(?) ํ•ด์ง€ ๋ณด๋‹ค ๊ฐ€์ž…์ด ๋” ๋งŽ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ์–ด๋Š ์ •๋„ ๊พธ์ค€ํ•˜๊ฒŒ ๊ฐ€์ž…์ž๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ๊ฐ€์ž…์„ ํ•˜๋Ÿฌ ์˜ค๋Š”์ง€ ์‹ ๊ธฐํ•  ๋”ฐ๋ฆ„์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งˆ๋ƒฅ ์‹ ๊ธฐํ•ดํ•˜์ง€๋งŒ ๋ง๊ณ  ํ•ด์ง€ํ•˜๋Š” ์›์ธ์„ ๋ถ„์„ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด ๋ณด์ธ๋‹ค. ์•„๋งˆ๋„ ์ˆ˜์ง‘ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๋“ค ์ค‘ ๊ฐ„ํ˜น ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋˜์ง€ ์•Š๋Š” ๊ธ€๋“ค์ด ์ข…์ข… ์ˆ˜์ง‘๋˜์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. -๊ฐ€์ž…/ํ•ด์ง€ ํŠธ๋žœ๋“œ" ๊ฐ€์ž…/ํ•ด์ง€ ํŠธ๋žœ๋“œ ใ€€๋‹ค์Œ์œผ๋กœ๋Š” ํด๋ฆญ์ˆ˜. ๋ˆˆ์น˜๊ฐ€ ๋น ๋ฅธ ๋ถ„๋“ค์€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ฒ ์ง€๋งŒ ์ด๋ฉ”์ผ์—์„œ ํด๋ฆญ ์‹œ ์„œ๋ฒ„์—์„œ ๊ฐ์ข… ๋กœ๊น…์„ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ํด๋ฆญ ์„ฑํ–ฅ(?)์— ๋Œ€ํ•ด ์ง‘๊ณ„๋„ ๊ฐ€๋Šฅํ•œ๋ฐ ์•„๋ž˜ ์ง€ํ‘œ๋ฅผ ๋ณด๋ฉด ์˜ค์ „ ์ผ๊ณผ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋ฉ”์ผ๋กœ ์ข…ํ•ฉ๋œ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋“ค์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ์ค‘์—์„œ ํŠนํžˆ ์›”์š”์ผ - 10์‹œ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํด๋ฆญ์ˆ˜๊ฐ€ ์ง‘๊ณ„๋˜์—ˆ๋‹ค. -ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํžˆํŠธ๋งต" ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํžˆํŠธ๋งต ใ€€์ด ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์•ฝ 19,000์—ฌ ๊ฐœ์˜ ํฌ์ŠคํŒ…์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ฐœํ–‰ํ•˜์˜€๋Š”๋ฐ ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ์—ˆ๋˜ ํฌ์ŠคํŒ… TOP 30 ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋‹จ์ฒด ๋ธ”๋กœ๊ทธ์˜ ํฌ์ŠคํŒ…์„ ๋ฉ”์ผ ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๊ณ  ๋…ธ๋ž€์ƒ‰์œผ๋กœ ํ…Œ๋‘๋ฆฌ๋ฅผ ํ‘œ์‹œํ•ด์„œ์ธ์ง€ ๋Œ€๋ถ€๋ถ„์˜ ๊ธ€๋“ค์ด ๋‹จ์ฒด ๋ธ”๋กœ๊ทธ์˜ ํฌ์ŠคํŒ…์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. -์ด ํšŒ์‚ฌ, ์ด ์„ธ์ƒ ์ฟจํ•จ์ด ์•„๋‹ˆ๋‹ค ๋Œ€๋†“๊ณ  ์ž๋ž‘ํ•˜๋Š” ๊ธ€ LINE ์‹ ์ž… SW ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค ์šฐํ…Œ์ฝ”์—์„œ ์ฐพ์€ ๋‚˜๋งŒ์˜ ํšจ๊ณผ์ ์ธ ๊ณต๋ถ€๋ฒ• LINE ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ค€๋น„ํ•œ ๊ฒƒ๋“ค ์—ฐ๋ด‰์„ ๋†’์ด๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€? ํ•™๊ต์—์„œ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” 17๊ฐ€์ง€ ์‹ค๋ฌด ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ๋ฆฌ๋ทฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์ƒํ•œ ์•Œ๋žŒ ํŒ€ ๋ฌธํ™”์˜ ํƒ„์ƒ LINE์—์„œ ์ „ ์ง์›์ด ์žฌํƒ ๊ทผ๋ฌดํ•˜๋ฉด์„œ ์ƒ์‚ฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• Flutter, ์™œ ์„ ํƒํ•˜์ง€ ๋ชปํ–ˆ๋‚˜ ์ฃผ์„ ๋‹ฌ ์‹œ๊ฐ„์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ œ๋Œ€๋กœ ํ•˜๊ธฐ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค : ์ƒˆ๋กœ์šด ์‹œ์ž‘ ๊ธฐํš์ž๋Š” ํ•„์š”์—†๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•ด ๋ณด๋Š” JavaScript ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค : ๋‚˜๋งŒ์˜ ํ•ญ๋กœ ์ฐพ๊ธฐ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ชจ์Œ ์„œ๋น„์Šค๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
\ No newline at end of file +ใ€€์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ ํƒญ์—์„œ ssh ์ฃผ์†Œ๋ฅผ ์ ๊ณ  ์œ„์—์„œ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ssh ํ‚ค๋กœ credentials ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ์ „์—๋„ ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ์ด ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋นจ๊ฐ„์ƒ‰ ๊ธ€์”จ๋กœ ์˜ค๋ฅ˜ ๋‚ด์šฉ์ด ๋‚˜์˜ค๊ณ  ์•„๋ž˜ ํ™”๋ฉด์ฒ˜๋Ÿผ ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋‚˜์˜จ๋‹ค. Refspec ์— +refs/pull/*:refs/remotes/origin/pr/* ๋ผ๊ณ  ์ ์–ด์ฃผ๊ณ  ๋ธŒ๋žœ์น˜ ์„ค์ •์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์™€์„œ pullRequest๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋ธŒ๋žœ์น˜๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ${sha1} ๋ผ๊ณ  ์ ์–ด์ฃผ์ž.
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index 7637c60e..c10ccee7 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1,5 +1,13 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ž๊ธฐ๊ณ„๋ฐœ' ํŽธ

ํ•™์ฐฝ ์‹œ์ ˆ์—” ‘์„ ์ƒ๋‹˜’๊ป˜์„œ ์ •ํ•ด๋†“์œผ์‹  ์ปค๋ฆฌํ˜๋Ÿผ์— ๋”ฐ๋ผ๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด ํฐ ๋ฌธ์ œ ์—†์ด ์ง€์‹์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์น˜๋ฅด๋Š” ์‹œํ—˜์„ ํ†ตํ•ด ‘์ ์ˆ˜’๋ผ๋Š” ํ‰๊ฐ€ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ž˜ ์„ฑ์žฅํ–ˆ๋‚˜๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์กธ์—… ํ›„ ์–ด๋ ต๊ฒŒ ์–ด๋ ต๊ฒŒ ์ทจ์—…์— ์„ฑ๊ณต์„ ํ•˜์—ฌ ‘์‹ ์ž… ๊ฐœ๋ฐœ์ž’๋ผ๋Š” ๋ฐฐ์ง€๋ฅผ ๋‹ฌ๊ณ  ํšŒ์‚ฌ์— ์ฒซ ์ถœ๊ทผ. ๊ทธ๋ ‡๊ฒŒ n ๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ๊ณผ ๋ผ๋–ผ ์‹œ์ ˆ(?)์„ ๋น„๊ตํ•ด ๋ณด๋ฉฐ ๊ณผ์—ฐ ‘ํ•™์Šต’์— ๋Œ€ํ•œ ์—ด์ • ๊ทธ๋ž˜ํ”„๊ฐ€ ์•„์ง๋„ ์šฐ์ƒํ–ฅ ์ค‘์ธ๊ฐ€? ํ•˜๋Š” ์งˆ๋ฌธ์—” ์ผ๋‹จ ๋‹จ์ „๋ถ€ํ„ฐ ์˜ฌ๋ผ์˜ค๋Š” ๊นŠ์€ ํ•œ์ˆจ๊ณผ ํ•จ๊ฒŒ ์ด์ƒํ•˜๊ฒŒ๋„ ์•ž์ด ์บ„์บ„ํ•ด์ง„๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

๋ฒŒ์จ 2๋…„ (feat. ํ† ์ดํ”„๋กœ์ ํŠธ ํšŒ๊ณ ,๊ฐ€์น˜,์ˆ˜์ž…)

์ •ํ™•ํžˆ 2018๋…„ 07์›” 12์ผ ํ•„์ž์˜ ์ฒซ ํ† ์ด ํ”„๋กœ์ ํŠธ์ธ โ€˜๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊ตฌ๋… ์„œ๋น„์Šคโ€™๋ฅผ ์˜คํ”ˆํ•˜๊ฒŒ ๋œ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๊ตฌ๋…(๊ฐ€์ž…) ํ•˜๊ฒ ์–ด ํ•˜๋Š” ์ƒ๊ฐ์ด ๋ถ€๋„๋Ÿฌ์šธ ๋งŒํผ 6๊ฐœ์›”์ด ์ง€๋‚˜ ๊ตฌ๋…์ž ์ˆ˜๋Š” 1,000๋ช…์„ ๋„˜๊ธฐ๊ณ  1๋…„์ด ์ง€๋‚˜ 2,000๋ช….์–ด๋Š๋ง ๋‹ฌ๋ ฅ์„ ๋ณด๋‹ˆ ์˜ค๋Š˜์ด ์ •ํ™•ํ•˜๊ฒŒ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์„œ๋น„์Šคํ•œ์ง€ ๋ฒŒ์จ 2๋…„์ด ๋˜๋Š” ๋‚ . ๊ตฌ๋…์ž ์ˆ˜๋Š” ์–ด๋Š๋ง 3,000๋ช…์„ ๋„˜์–ด์„ ๋‹ค. ๋ญ”๊ฐ€ ๋ฟŒ๋“ฏํ•˜๋ฉด์„œ๋„ ์„œ๋น„์Šค๋ฅผ ์ข€ ๋” ๋””๋ฒจ๋กญ ํ•˜์ง€ ๋ชปํ•œ ํ•„์ž ์ž์‹ ์„ ๋Œ์•„๋ณด๋‹ˆ ๊ดœํžˆ ๋งˆ์Œ์ด ๋ฌด๊ฑฐ์›Œ์ง€๊ณ . +๋ญ”๊ฐ€ ํ•ด์•ผํ•˜๋Š”๋ฐ… ๊ดœํžˆ ๋ˆˆ์น˜๋งŒ ๋ณด์ด๋„ค…์ถœ์ฒ˜ : http://egloos.zum.com/nievess/v/657827" ๋ญ”๊ฐ€ ํ•ด์•ผํ•˜๋Š”๋ฐ… ๊ดœํžˆ ๋ˆˆ์น˜๋งŒ ๋ณด์ด๋„ค… +์ถœ์ฒ˜ : http://egloos.zum.com/nievess/v/657827 ใ€€์ง€๋‚œ 2๋…„ ๋™์•ˆ์„ ๋Œ์ด์ผœ๋ณด๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์šด์˜ํ•ด ์™”๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ† ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์ž์—๊ฒŒ ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ์—ˆ๋Š”์ง€ ๋˜๋Œ์•„๋ณด๋ฉฐ ์…€ํ”„ ๋ฆฌ๋ทฐ๋ฅผ ํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค. +์„œ๋น„์Šค ์ž์ฒด ํ‰๊ฐ€ ์‹ฌํ”Œํ•œ ๊ธฐ๋Šฅ ใ€€๋ง ๊ทธ๋Œ€๋กœ ํ† ์ด ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ ๋˜ํ•œ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค. awesome-devblog์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐœ์ธ/๋‹จ์ฒด ๋ธ”๋กœ๊ทธ๋“ค์˜ ํฌ์ŠคํŒ…์„ ์กฐํšŒํ•˜์—ฌ ์–ด์ œ ์ž‘์„ฑ๋œ ๊ธ€๋“ค๋งŒ ๋ชจ์•„ ๋ฐœ์†กํ•œ๋‹ค. ๊ฑฐ๊ธฐ์— ์ฃผ๊ฐ„ ๋งŽ์ด ํด๋ฆญ๋œ ํฌ์ŠคํŒ…์„ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ ๋” ๋ฐœ์†กํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€. ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋” ๋””๋ฒจ๋กญ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์•„์ด๋””์–ด๊ฐ€ ์—†์–ด์„œ ์ธ์ง€ ๋””๋ฒจ๋กญ ํ•  ํž˜์ด ์•ˆ ๋‚˜์„œ ์ธ์ง€ ์œ ์ง€๋งŒ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋‹ค. +์„œ๋น„์Šค์— ์—†์–ด์„œ๋Š” ์•ˆ๋  ‘๋กœ๊น…(Logging)’ ใ€€ํ˜•์‹์„ ๋ง‰๋ก ํ•˜๊ณ  ์ปดํ“จํ„ฐ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋“  ‘ํ”„๋กœ๊ทธ๋žจ’์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ๋กœ์ง์— ๋”ฐ๋ผ ์›€์ง์ด๋Š” ๋กœ๋ด‡์— ๋ถˆ๊ณผํ•˜๋‹ค. ๋ฌผ๋ก  ์š”์ฆ˜์—๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์ด๋‚˜ AI ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์Šค์Šค๋กœ ํ•™์Šตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ๊ทธ ๋˜ํ•œ ๋ฏธ๋ฆฌ ์ฝ”๋”ฉ์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ถ€๋ถ„๋“ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 2๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ ์ด์ œ๊นŒ์ง€ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ”๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ „์— ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ‘๋กœ๊น…’. ์„œ๋น„์Šค ํˆฌ์ž… ์ „๋ถ€ํ„ฐ ํ”„๋ก ํŠธ๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋กœ๊น…์„ ํ•ด์„œ์ธ์ง€ 2๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋กœ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ์— ๋‹คํ–‰์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. +๊ฐ์ข… ์ง€ํ‘œ ใ€€๋จผ์ € ๋ด์•ผ ํ•  ์ง€ํ‘œ๋Š” ๋‹น์—ฐํžˆ ๊ฐ€์ž…/ํ•ด์ง€ ์ถ”์ด. ๋“œ๋ผ๋งˆํ‹ฑ ํ•œ ์„ ํ˜• ๊ทธ๋ž˜ํ”„๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋‹น์—ฐํžˆ(?) ํ•ด์ง€ ๋ณด๋‹ค ๊ฐ€์ž…์ด ๋” ๋งŽ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ์–ด๋Š ์ •๋„ ๊พธ์ค€ํ•˜๊ฒŒ ๊ฐ€์ž…์ž๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ๊ฐ€์ž…์„ ํ•˜๋Ÿฌ ์˜ค๋Š”์ง€ ์‹ ๊ธฐํ•  ๋”ฐ๋ฆ„์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งˆ๋ƒฅ ์‹ ๊ธฐํ•ดํ•˜์ง€๋งŒ ๋ง๊ณ  ํ•ด์ง€ํ•˜๋Š” ์›์ธ์„ ๋ถ„์„ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด ๋ณด์ธ๋‹ค. ์•„๋งˆ๋„ ์ˆ˜์ง‘ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๋“ค ์ค‘ ๊ฐ„ํ˜น ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋˜์ง€ ์•Š๋Š” ๊ธ€๋“ค์ด ์ข…์ข… ์ˆ˜์ง‘๋˜์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. +๊ฐ€์ž…/ํ•ด์ง€ ํŠธ๋žœ๋“œ" ๊ฐ€์ž…/ํ•ด์ง€ ํŠธ๋žœ๋“œ ใ€€๋‹ค์Œ์œผ๋กœ๋Š” ํด๋ฆญ์ˆ˜. ๋ˆˆ์น˜๊ฐ€ ๋น ๋ฅธ ๋ถ„๋“ค์€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ฒ ์ง€๋งŒ ์ด๋ฉ”์ผ์—์„œ ํด๋ฆญ ์‹œ ์„œ๋ฒ„์—์„œ ๊ฐ์ข… ๋กœ๊น…์„ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ํด๋ฆญ ์„ฑํ–ฅ(?)์— ๋Œ€ํ•ด ์ง‘๊ณ„๋„ ๊ฐ€๋Šฅํ•œ๋ฐ ์•„๋ž˜ ์ง€ํ‘œ๋ฅผ ๋ณด๋ฉด ์˜ค์ „ ์ผ๊ณผ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋ฉ”์ผ๋กœ ์ข…ํ•ฉ๋œ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋“ค์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ์ค‘์—์„œ ํŠนํžˆ ์›”์š”์ผ - 10์‹œ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํด๋ฆญ์ˆ˜๊ฐ€ ์ง‘๊ณ„๋˜์—ˆ๋‹ค. +ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํžˆํŠธ๋งต" ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํŠธ๋žœ๋“œ | ์‹œ๊ฐ„+์š”์ผ ๋ณ„ ํด๋ฆญ์ˆ˜ ํžˆํŠธ๋งต ใ€€์ด ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์•ฝ 19,000์—ฌ ๊ฐœ์˜ ํฌ์ŠคํŒ…์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ฐœํ–‰ํ•˜์˜€๋Š”๋ฐ ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ์—ˆ๋˜ ํฌ์ŠคํŒ… TOP 30 ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋‹จ์ฒด ๋ธ”๋กœ๊ทธ์˜ ํฌ์ŠคํŒ…์„ ๋ฉ”์ผ ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๊ณ  ๋…ธ๋ž€์ƒ‰์œผ๋กœ ํ…Œ๋‘๋ฆฌ๋ฅผ ํ‘œ์‹œํ•ด์„œ์ธ์ง€ ๋Œ€๋ถ€๋ถ„์˜ ๊ธ€๋“ค์ด ๋‹จ์ฒด ๋ธ”๋กœ๊ทธ์˜ ํฌ์ŠคํŒ…์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. +์ด ํšŒ์‚ฌ, ์ด ์„ธ์ƒ ์ฟจํ•จ์ด ์•„๋‹ˆ๋‹ค ๋Œ€๋†“๊ณ  ์ž๋ž‘ํ•˜๋Š” ๊ธ€ LINE ์‹ ์ž… SW ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค ์šฐํ…Œ์ฝ”์—์„œ ์ฐพ์€ ๋‚˜๋งŒ์˜ ํšจ๊ณผ์ ์ธ ๊ณต๋ถ€๋ฒ• LINE ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ค€๋น„ํ•œ ๊ฒƒ๋“ค ์—ฐ๋ด‰์„ ๋†’์ด๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€? ํ•™๊ต์—์„œ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” 17๊ฐ€์ง€ ์‹ค๋ฌด ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ๋ฆฌ๋ทฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์ƒํ•œ ์•Œ๋žŒ ํŒ€ ๋ฌธํ™”์˜ ํƒ„์ƒ LINE์—์„œ ์ „ ์ง์›์ด ์žฌํƒ ๊ทผ๋ฌดํ•˜๋ฉด์„œ ์ƒ์‚ฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• Flutter, ์™œ ์„ ํƒํ•˜์ง€ ๋ชปํ–ˆ๋‚˜ ์ฃผ์„ ๋‹ฌ ์‹œ๊ฐ„์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ œ๋Œ€๋กœ ํ•˜๊ธฐ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค : ์ƒˆ๋กœ์šด ์‹œ์ž‘ ๊ธฐํš์ž๋Š” ํ•„์š”์—†๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•ด ๋ณด๋Š” JavaScript ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค : ๋‚˜๋งŒ์˜ ํ•ญ๋กœ ์ฐพ๊ธฐ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ชจ์Œ ์„œ๋น„์Šค๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ž๊ธฐ๊ณ„๋ฐœ' ํŽธ

ํ•™์ฐฝ ์‹œ์ ˆ์—” ‘์„ ์ƒ๋‹˜’๊ป˜์„œ ์ •ํ•ด๋†“์œผ์‹  ์ปค๋ฆฌํ˜๋Ÿผ์— ๋”ฐ๋ผ๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด ํฐ ๋ฌธ์ œ ์—†์ด ์ง€์‹์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์น˜๋ฅด๋Š” ์‹œํ—˜์„ ํ†ตํ•ด ‘์ ์ˆ˜’๋ผ๋Š” ํ‰๊ฐ€ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ž˜ ์„ฑ์žฅํ–ˆ๋‚˜๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์กธ์—… ํ›„ ์–ด๋ ต๊ฒŒ ์–ด๋ ต๊ฒŒ ์ทจ์—…์— ์„ฑ๊ณต์„ ํ•˜์—ฌ ‘์‹ ์ž… ๊ฐœ๋ฐœ์ž’๋ผ๋Š” ๋ฐฐ์ง€๋ฅผ ๋‹ฌ๊ณ  ํšŒ์‚ฌ์— ์ฒซ ์ถœ๊ทผ. ๊ทธ๋ ‡๊ฒŒ n ๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ๊ณผ ๋ผ๋–ผ ์‹œ์ ˆ(?)์„ ๋น„๊ตํ•ด ๋ณด๋ฉฐ ๊ณผ์—ฐ ‘ํ•™์Šต’์— ๋Œ€ํ•œ ์—ด์ • ๊ทธ๋ž˜ํ”„๊ฐ€ ์•„์ง๋„ ์šฐ์ƒํ–ฅ ์ค‘์ธ๊ฐ€? ํ•˜๋Š” ์งˆ๋ฌธ์—” ์ผ๋‹จ ๋‹จ์ „๋ถ€ํ„ฐ ์˜ฌ๋ผ์˜ค๋Š” ๊นŠ์€ ํ•œ์ˆจ๊ณผ ํ•จ๊ฒŒ ์ด์ƒํ•˜๊ฒŒ๋„ ์•ž์ด ์บ„์บ„ํ•ด์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๋ผ๋–ผ ์‹œ์ ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ถœ์ฒ˜ : https://www.dogdrip.net/212294087" ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๋ผ๋–ผ ์‹œ์ ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ถœ์ฒ˜ : https://www.dogdrip.net/212294087 ใ€€๋ฐฐ์›Œ์•ผ ํ• ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค. ์•„๋‹ˆ ๊ทธ๋ณด๋‹ค ๋ฐฐ์šด ๊ฒƒ์„ ์ด์ œ ํ™œ์šฉํ•ด์•ผ์ง€ ์‹ถ์œผ๋ฉด ๋˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋งค๋„ˆ๋ฆฌ์ฆ˜์— ๋น ์ง€๊ณ . ๊ฑฐ๊ธฐ๋‹ค ํšŒ์‚ฌ์ผ์ด ๋ฐ”์˜๋‹ค๋Š” ํ•‘๊ณ„๋กœ ์ž๊ธฐ๊ณ„๋ฐœ์„ ๋ฉˆ์ถ”๋‹ค ๋ณด๋ฉด ๋‚จ๋“ค๋ณด๋‹ค ๋’ค์ฒ˜์ง„๋‹ค๋Š” ์ƒ๊ฐ์— ๊ดœํžˆ ์ž๊ดด๊ฐ์ด ๋“ค์–ด ์šฐ์šธํ•ด ์ง€๊ณค ํ•œ๋‹ค. (์ฝ”๋กœ๋‚˜ ๋ธ”๋ฃจ ๋•Œ๋ฌธ๋งŒ์€ ์•„๋‹ˆ๊ฒ ์ง€…) ๊ทธ ๊ฐ€์šด๋ฐ ํšŒ์‚ฌ์—๋Š” ์ •๋ง ์ข‹์€ ์„ ๋ฐฐ๋‹˜๋“ค๋„ ๋งŽ๊ณ  ๋ฉ˜ํ† -๋ฉ˜ํ‹ฐ ๊ด€๊ณ„๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ, ์ž˜, ์˜ฌ๋ฐ”๋ฅธ ๊ธธ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ‘์˜์กด’๋งŒ ํ•˜๋‹ค ๊ทธ ๋Œ€์ƒ์ด ์—†์–ด์ง„๋‹ค๋“ ์ง€ ์‹ฌ์ง€์–ด ๊ทธ๋Ÿฐ ๋Œ€์ƒ์กฐ์ฐจ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ์ ์  ๊ธฐ์ˆ ์€ ๋ฐœ์ „ํ•˜๊ณ  ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ๋“ค์€ ํ™์ˆ˜์ฒ˜๋Ÿผ ๋„˜์ณํ๋ฅด๊ณ  ์žˆ๋Š” ๊ฐ€์šด๋ฐ ‘ํšŒ์‚ฌ์›’์—์„œ ๋‚˜์•„๊ฐ€ ‘๊ฐœ๋ฐœ์ž’๋กœ์จ ์„ฑ์žฅ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ? ใ€€์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๊ฐ€๋ฉด์„œ ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ์ฆ‰, ์ž๊ธฐ๊ณ„๋ฐœ์˜ ‘๋ฐฉ๋ฒ•’์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์ด๊ฒƒ์ด ์ •๋‹ต์ด๋‹ค ํ•˜๋Š” ์€ ํƒ„ํ™˜์„ ์†Œ๊ฐœํ•˜๋ ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํŠนํžˆ ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์ƒ์„ ๋งˆ๊ฐ(?) ํ•  ๋•Œ๊นŒ์ง€๋Š” ๊ณ„์† ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ˆ™๋ช…๊ณผ๋„ ๊ฐ™์€ ์ง์—…์ด๊ธฐ์— ์ฒซ ๋‹จ์ถ”๋ฅผ ์ž˜ ๋ผ์›Œ์„œ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ๊ธฐ์ˆ ์˜ ๋ณ€ํ™”์— ์ผํฌ์ผ๋น„ ํ•˜์ง€ ์•Š๊ณ  ์ŠคํŽ€์ง€์ฒ˜๋Ÿผ ๋ฌด์—‡์ด๋“  ํก์ˆ˜ํ•˜๋Š”. ๋ง๋ž‘๋ง๋ž‘ํ•œ ์ •์‹ ์„ ๊ฐ–๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ ๋‚˜ ํ• ๊นŒ. ๋ธ”๋กœ๊ทธ ใ€€๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธ€๋„ ์จ์•ผ ํ•˜๋‚˜?๋ผ๋Š” ์งˆ๋ฌธ์—๋Š” ํ•„์ž๊ฐ€ ์˜ˆ์ „์— ์ •๋ฆฌํ•ด๋‘” ๊ฐœ๋ฐœํ•˜๊ธฐ ๋ฐ”์œ๋ฐ ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? (๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž.)๋ผ๋Š” ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ ์ˆ˜์ฐจ๋ก€ ๊ฐ•์กฐํ•˜์˜€์ง€๋งŒ ๊ทธ๋งŒํผ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ํŠนํžˆ๋‚˜ ๊ธ€์“ฐ๊ธฐ๊ฐ€ ์ค‘์š”ํ•˜๊ณ  ํ•„์š”ํ•˜๋‹ค. ๊ธ€์„ ๊ผญ ‘์ž˜’์จ์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋‹ด์„ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†๋‹ค. (ํ•„์ž๋„ ๊ทธ๋ ‡๊ฒŒ ์ž˜ ์“ฐ๋Š” ํŽธ์€ ์•„๋‹ˆ๋‹ค…) ๋‹ค๋งŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์ •๋ฆฌํ•˜๊ณ  ์ž์‹ ๋งŒ์˜ ๊ธฐ์ค€์— ๋งž์ถ”์–ด ์žฌ ์ •๋ฆฌํ•˜๋Š” ์Šต๊ด€์„ ๊ธฐ๋ฅด๋‹ค ๋ณด๋ฉด ์ด๋Ÿฌํ•œ ์ƒ๊ฐ๋“ค์ด ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ์—๋„ ๋„์›€์ด ์ƒ๋‹นํžˆ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. @@ -71,11 +79,4 @@ Spring Boot 2.2.3 Maven IntelliJ ์šฐ์„  IDE์˜ ํž˜์„ ๋นŒ๋ ค ํ•˜๋‚˜์˜ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณธ๋‹ค. ๋‹ค์Œ > ๋‹ค์Œ > ๋‹ค์Œ" ๋‹ค์Œ > ๋‹ค์Œ > ๋‹ค์Œ ๊ทธ ๋‹ค์Œ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์šฐํด๋ฆญ ํ›„ ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ ์„ ํƒ. Maven ๋ชจ๋“ˆ์„ ์„ ํƒํ•˜๊ณ  ์ ๋‹นํ•œ ์ด๋ฆ„์„ ์ ์–ด์ค€๋‹ค. ๋‹ค์Œ > ๋‹ค์Œ > ๋‹ค์Œ 222" ๋‹ค์Œ > ๋‹ค์Œ > ๋‹ค์Œ 222 “API”, “Batch”, “Core” ๋ผ๋Š” ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ค์ œ ๋ชจ๋“ˆ์ด ๋˜๋Š” “API”, “Batch"์— parent ์™€ dependencies ์„ ์„ค์ •ํ•ด์ฃผ์ž. ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ๊ฐ Pom.xml์„ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (“API” ๋ชจ๋“ˆ์— ๋Œ€ํ•ด์„œ๋งŒ ์ง‘์ค‘์ ์œผ๋กœ ์ด์•ผ๊ธฐ ํ•˜๋ ค ํ•œ๋‹ค. “Batch” ๋ชจ๋“ˆ๋„ ๋™์ผํ•œ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ.) -์ตœ ์ƒ์œ„ Pom.xml (library) modules ํ•˜์œ„์— ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ์„ค์ •ํ•œ ๋ชจ๋“ˆ๋“ค์˜ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>api</module> <module>core</module> <module>batch</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.taetaetae</groupId> <artifactId>library</artifactId> <version>0.

์กฐ๊ธˆ์€ ๋ฌด๊ฑฐ์šด 2019 ํšŒ๊ณ 

“ํšŒ๊ณ "๋Š” ๋น„๋‹จ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋– ํ•œ ๊ณผ์ •์˜ ๋งˆ์ง€๋ง‰์—๋Š” ๊ผญ ํ•ด์•ผํ•  ์ค‘์š”ํ•œ ์‹œ๊ฐ„์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์•ž๋งŒ๋ณด๊ณ  ๋‹ฌ๋ ค๊ฐ€์ž! ๋‹ฅ๊ณต! ๋ผ๋Š” ๋ง์ด ์žˆ์ง€๋งŒ ์‚ฌ์‹ค ์ด ๋ง์ด ์„ฑ๋ฆฝ๋˜๊ธฐ ์œ„ํ•ด์„  ์ง€๋‚œ ๊ณผ๊ฑฐ์— ๋Œ€ํ•œ ์ •๋ฆฌ์™€ ๋ฐ˜์„ฑ ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์„ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์–ด๋–ค ์ด์œ ๋กœ ๋ชปํ–ˆ๋Š”์ง€์™€ ๊ทธ ๋™์•ˆ์˜ ๋‚˜ ์ž์‹ ์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ด “ํšŒ๊ณ ” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. ๋ฒŒ์จ 2019๋…„๋„ ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋˜์–ด๊ฐ„๋‹ค. ์ž‘๋…„๋ณด๋‹ค ๋” ์ •์‹ ์—†์ด ๋‹ฌ๋ ค์˜จ ์˜ฌํ•ด. ๋‚ด๋…„์—” ์˜ฌํ•ด๋ณด๋‹ค ๋” ๋ฉ‹์ง€๊ณ  ํž˜์ฐจ๊ฒŒ ์ถœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ž์˜ ํ•œ ํ•ด๋ฅผ ๋Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. -๊ทธ๋ ‡๋‹ค๋ฉด ํšŒ๊ณ ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹์„๊นŒ? ๋ฌด์ž‘์ • ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ 1์›”์—” ๋ญํ–ˆ๊ณ  2์›”์—” ๋ญํ–ˆ๊ณ … ์ด ๋ฐฉ๋ฒ•์ด ํ‹€๋ฆฐ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•œ ๋’ค ํ‚ค์›Œ๋“œ๋ณ„๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ๋งž์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด๋‹ค. ๋ฌด์—‡์„ ํ–ˆ๊ณ , ๋ญ๊ฐ€ ์ข‹์•˜๊ณ  ์–ด๋–ค๊ฑด ์•„์‰ฌ์› ๊ณ . ๊ทธ๋ž˜์„œ ๋‚ด๋…„์—” ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ด๊ณ . ๊ฐ์ž์˜ ํšŒ๊ณ  ๋ฐฉ์‹์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ํšŒ๊ณ ๋ฅผ ํ•˜๋Š” ์ด์œ , ๊ทธ๋ฆฌ๊ณ  ํšŒ๊ณ ๋ผ๋Š” ๋ชฉํ‘œ ์ค‘์— ๊ณตํ†ต์ ์€ “๋’ค๋ฅผ ๋Œ์•„๋ณด๊ณ , ์•ž์„ ๋ณด๊ธฐ์œ„ํ•œ ํž˜์„ ์ฐพ๋Š”๊ฒƒ” ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค. -๋‚ด๋…„ ํšŒ๊ณ ๋ฅผ ํ• ๋•Œ๋Š” ํ‘๋ฐฑ์ด ์•„๋‹Œ ์ปฌ๋Ÿฌ ์‚ฌ์ง„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ๋ ๊นŒ?… ์ถœ์ฒ˜ : http://www.nanum.com/site/poet_walk/820914" ๋‚ด๋…„ ํšŒ๊ณ ๋ฅผ ํ• ๋•Œ๋Š” ํ‘๋ฐฑ์ด ์•„๋‹Œ ์ปฌ๋Ÿฌ ์‚ฌ์ง„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ๋ ๊นŒ?… ์ถœ์ฒ˜ : http://www.nanum.com/site/poet_walk/820914 ํšŒ์‚ฌ๋Š” ์„ฑ์žฅ์˜ ๊ณต๊ฐ„์ด ์•„๋‹Œ๊ฒƒ์„ ๊นจ๋‹ณ๋Š” ์ˆœ๊ฐ„. (์ด์•ผ๊ธฐ์— ์•ž์„œ ํ•„์ž๋Š” ํ˜„์žฌ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์ž์ž„์„ ๋ฐํžŒ๋‹ค.) -๋‚ด๋…„์ด ๋˜๋ฉด ์ปดํ“จํ„ฐ์Ÿ์ด๊ฐ€ ๋œ์ง€ ๋ฒŒ์จ 8๋…„์ฐจ. ๋งค๋…„ ์„ฑ์žฅ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์ž‘๋…„๊นŒ์ง€๋งŒ ํ•ด๋„ ์šฐ์ƒํ–ฅ์ด์—ˆ๋‹ค. (๊ทธ๋ž˜ํ”„์˜ ๊ธฐ์šธ๊ธฐ๋Š” ๋งค๋…„ ๋‹ฌ๋ž์ง€๋งŒ) ํ—ˆ๋‚˜ ์˜ฌํ•ด๋Š” ๊ธฐ์šธ๊ธฐ๊ฐ€ 0 ์ด๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค ๋งˆ์ด๋„ˆ์Šค๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด๋‹ค. ์™œ์ผ๊นŒ. -ํ‚ค๋Š” ์™œ ๋”์ด์ƒ ์„ฑ์žฅ์„ ์•ˆํ• ๊นŒ? (์“ฐ์…) ์ถœ์ฒ˜ : http://www.guro1318.or.kr/bbs/board.php?bo_table=data&wr_id=1723" ํ‚ค๋Š” ์™œ ๋”์ด์ƒ ์„ฑ์žฅ์„ ์•ˆํ• ๊นŒ? (์“ฐ์…) ์ถœ์ฒ˜ : http://www.guro1318.or.kr/bbs/board.php?bo_table=data&wr_id=1723 ํšŒ์‚ฌ๋ฅผ ๋‹ค๋‹ˆ๋‹ค ๋ณด๋ฉด ์•„์ฃผ ์ผ๋ฐ˜์ ์œผ๋กœ “์‹œํ‚ค๋Š” ์ผ"์„ ํ•˜๊ณค ํ•œ๋‹ค. ์ฃผ์–ด์ง„ ์—…๋ฌด๋ฅผ ์ •ํ•ด์ง„ ๊ธฐ๊ฐ„ ์•ˆ์— ์ŠคํŽ™์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•˜๋Š”. ์•„์ฃผ ๊ทน๋‹จ์ ์œผ๋กœ ๋‚˜์˜๊ฒŒ ๋งํ•˜๋ฉด “๋„๊ตฌ"๋กœ ์ „๋ฝ๋˜์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋Š” ์‹œ๊ฐ„๋“ค. (๊ฐœ๋ฐœ์ž๊ฐ€ ๋„๊ตฌ๊ฐ€ ๋œ๋‹ค๋Š” ๋ง์€ ๋„ˆ๋ฌด๋‚˜๋„ ๋“ฃ๊ธฐ ์‹ซ์€ ๋ง์ค‘์— ํ•˜๋‚˜.) ํ”ํžˆ ๋งํ•˜๋Š” CRUD(Create, Read, Update, Delete) ์„ฑ์˜ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ํ•˜๊ณค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ผญ ์„ฑ๊ณผ์— align(๋” ์ข‹์€ ํ•œ๊ตญ๋ง์„ ์ฐพ๊ณ  ์‹ถ์€๋ฐ…) ํ•˜๋Š” ์ผ ๋ง๊ณ ๋„ ํ—ˆ๋“œ๋ ›์ผ(์ผ์ข…์˜ ์„œ์Šคํ…Œ์ด๋‹?)์„ ํ•  ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋งŒ์•ฝ ์žฌ๋ฏธ์—†๋Š” ์ผ์ด๋ผ๋ฉด ์–ด๋–จ๊นŒ? -ํ•„์ž๋Š” ๊ทธ๋ ‡๊ฒŒ “์‹œํ‚ค๋Š” ์ผ๋งŒ ํ•˜๋ฉฐ ์žฌ๋ฏธ์—†๋Š” ํšŒ์‚ฌ์ƒํ™œ” ๋ณด๋‹ค “์žฌ๋ฏธ์žˆ๊ฒŒ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์„ฑ์žฅ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์‚ฌ์ƒํ™œ” ์ด๋ผ๋Š” ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ํ•œ ํ•ด๋ฅผ ์ง€๋‚ด์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ์ฆ‰, “์‹œํ‚ค๋Š” ์ผ"์ด ์•„๋‹Œ “์‹œํ‚ค์ง€๋„ ์•Š์€ ์ผ"์„ ์ฐพ์•„์„œ ํ•ด๊ฐ€๋ฉฐ. ์˜ˆ์ปจ๋Œ€, ์ฒ˜์Œ์— ์žก์•˜๋˜ ์„œ๋น„์Šค ๊ตฌ์กฐ๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋งŽ์•„์ง์— ๋”ฐ๋ผ ๋ณต์žกํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ €ํ•ดํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ฏธ๋ฆฌ ๊ตฌ์กฐ๊ฐœ์„ ์„ ํ†ตํ•ด ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์ด๋ผ๋Š” ๋‘๋งˆ๋ฆฌ์˜ ํ† ๋ผ๋ฅผ ์žก๋Š”๋‹ค๊ฑฐ๋‚˜. ์ง€๋‚œ ์™ธ๋ถ€ ์„ธ๋ฏธ๋‚˜์—์„œ ๋“ฃ๊ณ  ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์–ด ํŒ€๋‚ด์—๋„ ์ ์šฉํ•ด๋ณธ ๋ฐฐ์น˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ธฐ๋Šฅ. ํŒ€ ๋‚ด ์ฝ”๋“œ๋ฆฌ๋ทฐ์˜ ํ™œ์„ฑํ™”์™€ ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผํ•  ์—…๋ฌด๋“ค์„ ๋ฉ”์‹ ์ € ๋ด‡์„ ํ™œ์šฉํ•˜์—ฌ ์ž๋™ํ™” ํ•œ๋‹ค๊ฑฐ๋‚˜. ์„œ๋น„์Šค ์ง€ํ‘œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ํ•œ๋ˆˆ์— ์„œ๋น„์Šค ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ„๋„์˜ ๊ฐœ๋ฐœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๋“ฑ. ๋‹ค์–‘ํ•œ ์—…๋ฌด ๋‚ด/์™ธ ์ ์œผ๋กœ ์ผ์„ ์ฐพ์•„๊ฐ€๋ฉฐ + ํ•„์ž์˜ ๊ฐœ์ธ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ๊ฐ€๋ฉด์„œ ์ •๋ง ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ณด๋‚ด์˜จ ๊ฒƒ ๊ฐ™๋‹ค. -ํ•˜์ง€๋งŒ ๋’ค๋ฅผ ๋Œ์•„๋ณด๋ฉด “์„ฑ์žฅ ํ–ˆ๋Š”๊ฐ€?” ๋ผ๋Š” ์งˆ๋ฌธ์ด ์žˆ๋‹ค๋ฉด “๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„์„œ ์‹ ๋‚˜๊ฒŒ ํ•ด์™”๋Š”๋ฐ ๋Œ์•„๋ณด๋‹ˆ ๋ง‰์ƒ ๋ญ˜ํ–ˆ๋‚˜ ํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ ๋‹ค” ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋งŽ์ด ํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ “๊ฒฝํ—˜"์„ ์–ป๊ธด ํ–ˆ์ง€๋งŒ ์‹ค์งˆ์ ์ธ “์„ฑ์žฅ"์€ ์•„์‰ฝ์ง€๋งŒ ๋ถ€์กฑํ•œ ํ•œ ํ•ด ์˜€๋˜๊ฒƒ ๊ฐ™๋‹ค. -ํšŒ์‚ฌ๊ฐ€ ์›ํ•˜๋Š”, ์—ฐ์ฐจ์— ๋งž๋Š” ์—…๋ฌด ์—ญ๋Ÿ‰๊ณผ ๊ฐœ๋ฐœ ํŒ€์—์„œ์˜ ์œ„์น˜๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ์—” ํšŒ์‚ฌ ์•ˆ์—์„œ ์„ฑ์žฅํ•˜๊ธฐ์—” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ์ด ๋“ค์—ˆ๋‹ค. (์ด ์ƒ๊ฐ์ด ์™œ ์ด์ œ์„œ์•ผ ๋“ค์—ˆ์„๊นŒ.) ์˜คํ”ˆ์†Œ์Šค๋‚˜ ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ํšŒ์‚ฌ ๋ฐ–์—์„œ ํ˜ผ์ž์„œ ๊ณต๋ถ€ ํ•˜๋˜์ง€ ์—ฌ๋Ÿฌ๋ช…์ด์„œ ์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด ์Šต๋“์„ ํ•ด์•ผํ•˜๊ณ  ํ† ์ดํ”„๋กœ์ ํŠธ ๋˜ํ•œ ํšŒ์‚ฌ์™€ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐœ๋ฐœ ์Šคํ‚ฌ์„ ๋Š˜๋ ค์•ผ ํ• ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ ์ด์œ ๋Š” ํšŒ์‚ฌ์—์„œ์˜ ์„ฑ์žฅ์ด ๊ฒฐ๊ตญ ๋‚˜์˜ ์„ฑ๊ณผ๋กœ ์žกํž ์ˆ˜๋Š” ์—†๋Š”๋ฐ ๊ดœ์‹œ๋ฆฌ ๊ธฐ๋Œ€๋ฅผ ํ•˜๊ฒŒ ๋˜๊ธฐ๋„ ํ•˜๊ณ  ํŠนํžˆ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ํŒ€์—์„œ๋Š” ์š”์ฆ˜ ํ•ซ ํ•˜๋‹ค๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๋‚˜ ์†”๋ฃจ์…˜์„ ๋„์ž…ํ•˜๊ธฐ์—๋Š” ๋‹ค์†Œ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
\ No newline at end of file +์ตœ ์ƒ์œ„ Pom.xml (library) modules ํ•˜์œ„์— ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ์„ค์ •ํ•œ ๋ชจ๋“ˆ๋“ค์˜ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>api</module> <module>core</module> <module>batch</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.taetaetae</groupId> <artifactId>library</artifactId> <version>0.
\ No newline at end of file diff --git a/page/4/index.html b/page/4/index.html index 6d63c89e..aabd5cf7 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -1,5 +1,12 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

๊ฐœ๋ฐœํ•˜๊ธฐ ๋ฐ”์œ๋ฐ ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? (๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž.)

์‹ ์ž…์‹œ์ ˆ. ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ๋„ ํšŒ์‚ฌ ์—…๋ฌด๋„ ๋งŽ์•„ ํ—ˆ์šฐ์ ๋Œ€๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฃจ์— 3~4์‹œ๊ฐ„ ์ž๋ฉฐ ์ •์‹ ์—†์ด ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๋˜ ๋‚  ๋ฌธ๋“ ๋™๊ธฐ ํ˜•์ด “๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ•ด์•ผ ๋ผ!“๋ผ๋Š” ์ „ํ˜€ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ง์„ ํ•ด์˜จ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ”๋น  ์ฃฝ๊ฒ ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ์— ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? ๋ง์ด ๋˜๋Š” ์†Œ๋ฆด ํ•˜๋ผ๋ฉฐ ๋ฐ˜๋ฐ•ํ•˜๋‹ค ๋ชป๋‚ด ์ด๊ธฐ๋Š” ์ฒ™ ํ•˜๋‚˜ ๋‘˜ ๊ธ€์„ ์“ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ๋‹ค๋ฅธ ์œ ๋ช… ๋ธ”๋กœ๊ฑฐ์ฒ˜๋Ÿผ ์—„์ฒญ๋‚˜์ง„ ์•Š์ง€๋งŒ ํ•˜๋ฃจ์— 1,000~2,000๋ช… ์ •๋„ ๋“ค์–ด์˜ค๋ฉฐ ์ ์  ์„ฑ์žฅํ•ด ๊ฐ€๋Š” ๋‚˜๋งŒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๊ฐ€ ๋˜์—ˆ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์กฐ๊ธˆ์€ ๋ฌด๊ฑฐ์šด 2019 ํšŒ๊ณ 

“ํšŒ๊ณ "๋Š” ๋น„๋‹จ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋– ํ•œ ๊ณผ์ •์˜ ๋งˆ์ง€๋ง‰์—๋Š” ๊ผญ ํ•ด์•ผํ•  ์ค‘์š”ํ•œ ์‹œ๊ฐ„์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์•ž๋งŒ๋ณด๊ณ  ๋‹ฌ๋ ค๊ฐ€์ž! ๋‹ฅ๊ณต! ๋ผ๋Š” ๋ง์ด ์žˆ์ง€๋งŒ ์‚ฌ์‹ค ์ด ๋ง์ด ์„ฑ๋ฆฝ๋˜๊ธฐ ์œ„ํ•ด์„  ์ง€๋‚œ ๊ณผ๊ฑฐ์— ๋Œ€ํ•œ ์ •๋ฆฌ์™€ ๋ฐ˜์„ฑ ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์„ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์–ด๋–ค ์ด์œ ๋กœ ๋ชปํ–ˆ๋Š”์ง€์™€ ๊ทธ ๋™์•ˆ์˜ ๋‚˜ ์ž์‹ ์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ด “ํšŒ๊ณ ” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. ๋ฒŒ์จ 2019๋…„๋„ ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋˜์–ด๊ฐ„๋‹ค. ์ž‘๋…„๋ณด๋‹ค ๋” ์ •์‹ ์—†์ด ๋‹ฌ๋ ค์˜จ ์˜ฌํ•ด. ๋‚ด๋…„์—” ์˜ฌํ•ด๋ณด๋‹ค ๋” ๋ฉ‹์ง€๊ณ  ํž˜์ฐจ๊ฒŒ ์ถœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ž์˜ ํ•œ ํ•ด๋ฅผ ๋Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. +๊ทธ๋ ‡๋‹ค๋ฉด ํšŒ๊ณ ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹์„๊นŒ? ๋ฌด์ž‘์ • ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ 1์›”์—” ๋ญํ–ˆ๊ณ  2์›”์—” ๋ญํ–ˆ๊ณ … ์ด ๋ฐฉ๋ฒ•์ด ํ‹€๋ฆฐ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•œ ๋’ค ํ‚ค์›Œ๋“œ๋ณ„๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ๋งž์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด๋‹ค. ๋ฌด์—‡์„ ํ–ˆ๊ณ , ๋ญ๊ฐ€ ์ข‹์•˜๊ณ  ์–ด๋–ค๊ฑด ์•„์‰ฌ์› ๊ณ . ๊ทธ๋ž˜์„œ ๋‚ด๋…„์—” ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ด๊ณ . ๊ฐ์ž์˜ ํšŒ๊ณ  ๋ฐฉ์‹์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ํšŒ๊ณ ๋ฅผ ํ•˜๋Š” ์ด์œ , ๊ทธ๋ฆฌ๊ณ  ํšŒ๊ณ ๋ผ๋Š” ๋ชฉํ‘œ ์ค‘์— ๊ณตํ†ต์ ์€ “๋’ค๋ฅผ ๋Œ์•„๋ณด๊ณ , ์•ž์„ ๋ณด๊ธฐ์œ„ํ•œ ํž˜์„ ์ฐพ๋Š”๊ฒƒ” ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค. +๋‚ด๋…„ ํšŒ๊ณ ๋ฅผ ํ• ๋•Œ๋Š” ํ‘๋ฐฑ์ด ์•„๋‹Œ ์ปฌ๋Ÿฌ ์‚ฌ์ง„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ๋ ๊นŒ?… ์ถœ์ฒ˜ : http://www.nanum.com/site/poet_walk/820914" ๋‚ด๋…„ ํšŒ๊ณ ๋ฅผ ํ• ๋•Œ๋Š” ํ‘๋ฐฑ์ด ์•„๋‹Œ ์ปฌ๋Ÿฌ ์‚ฌ์ง„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ๋ ๊นŒ?… ์ถœ์ฒ˜ : http://www.nanum.com/site/poet_walk/820914 ํšŒ์‚ฌ๋Š” ์„ฑ์žฅ์˜ ๊ณต๊ฐ„์ด ์•„๋‹Œ๊ฒƒ์„ ๊นจ๋‹ณ๋Š” ์ˆœ๊ฐ„. (์ด์•ผ๊ธฐ์— ์•ž์„œ ํ•„์ž๋Š” ํ˜„์žฌ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์ž์ž„์„ ๋ฐํžŒ๋‹ค.) +๋‚ด๋…„์ด ๋˜๋ฉด ์ปดํ“จํ„ฐ์Ÿ์ด๊ฐ€ ๋œ์ง€ ๋ฒŒ์จ 8๋…„์ฐจ. ๋งค๋…„ ์„ฑ์žฅ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์ž‘๋…„๊นŒ์ง€๋งŒ ํ•ด๋„ ์šฐ์ƒํ–ฅ์ด์—ˆ๋‹ค. (๊ทธ๋ž˜ํ”„์˜ ๊ธฐ์šธ๊ธฐ๋Š” ๋งค๋…„ ๋‹ฌ๋ž์ง€๋งŒ) ํ—ˆ๋‚˜ ์˜ฌํ•ด๋Š” ๊ธฐ์šธ๊ธฐ๊ฐ€ 0 ์ด๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค ๋งˆ์ด๋„ˆ์Šค๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด๋‹ค. ์™œ์ผ๊นŒ. +ํ‚ค๋Š” ์™œ ๋”์ด์ƒ ์„ฑ์žฅ์„ ์•ˆํ• ๊นŒ? (์“ฐ์…) ์ถœ์ฒ˜ : http://www.guro1318.or.kr/bbs/board.php?bo_table=data&wr_id=1723" ํ‚ค๋Š” ์™œ ๋”์ด์ƒ ์„ฑ์žฅ์„ ์•ˆํ• ๊นŒ? (์“ฐ์…) ์ถœ์ฒ˜ : http://www.guro1318.or.kr/bbs/board.php?bo_table=data&wr_id=1723 ํšŒ์‚ฌ๋ฅผ ๋‹ค๋‹ˆ๋‹ค ๋ณด๋ฉด ์•„์ฃผ ์ผ๋ฐ˜์ ์œผ๋กœ “์‹œํ‚ค๋Š” ์ผ"์„ ํ•˜๊ณค ํ•œ๋‹ค. ์ฃผ์–ด์ง„ ์—…๋ฌด๋ฅผ ์ •ํ•ด์ง„ ๊ธฐ๊ฐ„ ์•ˆ์— ์ŠคํŽ™์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•˜๋Š”. ์•„์ฃผ ๊ทน๋‹จ์ ์œผ๋กœ ๋‚˜์˜๊ฒŒ ๋งํ•˜๋ฉด “๋„๊ตฌ"๋กœ ์ „๋ฝ๋˜์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋Š” ์‹œ๊ฐ„๋“ค. (๊ฐœ๋ฐœ์ž๊ฐ€ ๋„๊ตฌ๊ฐ€ ๋œ๋‹ค๋Š” ๋ง์€ ๋„ˆ๋ฌด๋‚˜๋„ ๋“ฃ๊ธฐ ์‹ซ์€ ๋ง์ค‘์— ํ•˜๋‚˜.) ํ”ํžˆ ๋งํ•˜๋Š” CRUD(Create, Read, Update, Delete) ์„ฑ์˜ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ํ•˜๊ณค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ผญ ์„ฑ๊ณผ์— align(๋” ์ข‹์€ ํ•œ๊ตญ๋ง์„ ์ฐพ๊ณ  ์‹ถ์€๋ฐ…) ํ•˜๋Š” ์ผ ๋ง๊ณ ๋„ ํ—ˆ๋“œ๋ ›์ผ(์ผ์ข…์˜ ์„œ์Šคํ…Œ์ด๋‹?)์„ ํ•  ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋งŒ์•ฝ ์žฌ๋ฏธ์—†๋Š” ์ผ์ด๋ผ๋ฉด ์–ด๋–จ๊นŒ? +ํ•„์ž๋Š” ๊ทธ๋ ‡๊ฒŒ “์‹œํ‚ค๋Š” ์ผ๋งŒ ํ•˜๋ฉฐ ์žฌ๋ฏธ์—†๋Š” ํšŒ์‚ฌ์ƒํ™œ” ๋ณด๋‹ค “์žฌ๋ฏธ์žˆ๊ฒŒ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์„ฑ์žฅ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์‚ฌ์ƒํ™œ” ์ด๋ผ๋Š” ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ํ•œ ํ•ด๋ฅผ ์ง€๋‚ด์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ์ฆ‰, “์‹œํ‚ค๋Š” ์ผ"์ด ์•„๋‹Œ “์‹œํ‚ค์ง€๋„ ์•Š์€ ์ผ"์„ ์ฐพ์•„์„œ ํ•ด๊ฐ€๋ฉฐ. ์˜ˆ์ปจ๋Œ€, ์ฒ˜์Œ์— ์žก์•˜๋˜ ์„œ๋น„์Šค ๊ตฌ์กฐ๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋งŽ์•„์ง์— ๋”ฐ๋ผ ๋ณต์žกํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ €ํ•ดํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ฏธ๋ฆฌ ๊ตฌ์กฐ๊ฐœ์„ ์„ ํ†ตํ•ด ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์ด๋ผ๋Š” ๋‘๋งˆ๋ฆฌ์˜ ํ† ๋ผ๋ฅผ ์žก๋Š”๋‹ค๊ฑฐ๋‚˜. ์ง€๋‚œ ์™ธ๋ถ€ ์„ธ๋ฏธ๋‚˜์—์„œ ๋“ฃ๊ณ  ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์–ด ํŒ€๋‚ด์—๋„ ์ ์šฉํ•ด๋ณธ ๋ฐฐ์น˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ธฐ๋Šฅ. ํŒ€ ๋‚ด ์ฝ”๋“œ๋ฆฌ๋ทฐ์˜ ํ™œ์„ฑํ™”์™€ ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผํ•  ์—…๋ฌด๋“ค์„ ๋ฉ”์‹ ์ € ๋ด‡์„ ํ™œ์šฉํ•˜์—ฌ ์ž๋™ํ™” ํ•œ๋‹ค๊ฑฐ๋‚˜. ์„œ๋น„์Šค ์ง€ํ‘œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ํ•œ๋ˆˆ์— ์„œ๋น„์Šค ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ„๋„์˜ ๊ฐœ๋ฐœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๋“ฑ. ๋‹ค์–‘ํ•œ ์—…๋ฌด ๋‚ด/์™ธ ์ ์œผ๋กœ ์ผ์„ ์ฐพ์•„๊ฐ€๋ฉฐ + ํ•„์ž์˜ ๊ฐœ์ธ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ๊ฐ€๋ฉด์„œ ์ •๋ง ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ณด๋‚ด์˜จ ๊ฒƒ ๊ฐ™๋‹ค. +ํ•˜์ง€๋งŒ ๋’ค๋ฅผ ๋Œ์•„๋ณด๋ฉด “์„ฑ์žฅ ํ–ˆ๋Š”๊ฐ€?” ๋ผ๋Š” ์งˆ๋ฌธ์ด ์žˆ๋‹ค๋ฉด “๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„์„œ ์‹ ๋‚˜๊ฒŒ ํ•ด์™”๋Š”๋ฐ ๋Œ์•„๋ณด๋‹ˆ ๋ง‰์ƒ ๋ญ˜ํ–ˆ๋‚˜ ํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ ๋‹ค” ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋งŽ์ด ํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ “๊ฒฝํ—˜"์„ ์–ป๊ธด ํ–ˆ์ง€๋งŒ ์‹ค์งˆ์ ์ธ “์„ฑ์žฅ"์€ ์•„์‰ฝ์ง€๋งŒ ๋ถ€์กฑํ•œ ํ•œ ํ•ด ์˜€๋˜๊ฒƒ ๊ฐ™๋‹ค. +ํšŒ์‚ฌ๊ฐ€ ์›ํ•˜๋Š”, ์—ฐ์ฐจ์— ๋งž๋Š” ์—…๋ฌด ์—ญ๋Ÿ‰๊ณผ ๊ฐœ๋ฐœ ํŒ€์—์„œ์˜ ์œ„์น˜๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ์—” ํšŒ์‚ฌ ์•ˆ์—์„œ ์„ฑ์žฅํ•˜๊ธฐ์—” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ์ด ๋“ค์—ˆ๋‹ค. (์ด ์ƒ๊ฐ์ด ์™œ ์ด์ œ์„œ์•ผ ๋“ค์—ˆ์„๊นŒ.) ์˜คํ”ˆ์†Œ์Šค๋‚˜ ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ํšŒ์‚ฌ ๋ฐ–์—์„œ ํ˜ผ์ž์„œ ๊ณต๋ถ€ ํ•˜๋˜์ง€ ์—ฌ๋Ÿฌ๋ช…์ด์„œ ์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด ์Šต๋“์„ ํ•ด์•ผํ•˜๊ณ  ํ† ์ดํ”„๋กœ์ ํŠธ ๋˜ํ•œ ํšŒ์‚ฌ์™€ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐœ๋ฐœ ์Šคํ‚ฌ์„ ๋Š˜๋ ค์•ผ ํ• ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ ์ด์œ ๋Š” ํšŒ์‚ฌ์—์„œ์˜ ์„ฑ์žฅ์ด ๊ฒฐ๊ตญ ๋‚˜์˜ ์„ฑ๊ณผ๋กœ ์žกํž ์ˆ˜๋Š” ์—†๋Š”๋ฐ ๊ดœ์‹œ๋ฆฌ ๊ธฐ๋Œ€๋ฅผ ํ•˜๊ฒŒ ๋˜๊ธฐ๋„ ํ•˜๊ณ  ํŠนํžˆ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ํŒ€์—์„œ๋Š” ์š”์ฆ˜ ํ•ซ ํ•˜๋‹ค๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๋‚˜ ์†”๋ฃจ์…˜์„ ๋„์ž…ํ•˜๊ธฐ์—๋Š” ๋‹ค์†Œ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐœ๋ฐœํ•˜๊ธฐ ๋ฐ”์œ๋ฐ ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? (๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž.)

์‹ ์ž…์‹œ์ ˆ. ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ๋„ ํšŒ์‚ฌ ์—…๋ฌด๋„ ๋งŽ์•„ ํ—ˆ์šฐ์ ๋Œ€๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฃจ์— 3~4์‹œ๊ฐ„ ์ž๋ฉฐ ์ •์‹ ์—†์ด ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๋˜ ๋‚  ๋ฌธ๋“ ๋™๊ธฐ ํ˜•์ด “๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ•ด์•ผ ๋ผ!“๋ผ๋Š” ์ „ํ˜€ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ง์„ ํ•ด์˜จ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ”๋น  ์ฃฝ๊ฒ ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ์— ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? ๋ง์ด ๋˜๋Š” ์†Œ๋ฆด ํ•˜๋ผ๋ฉฐ ๋ฐ˜๋ฐ•ํ•˜๋‹ค ๋ชป๋‚ด ์ด๊ธฐ๋Š” ์ฒ™ ํ•˜๋‚˜ ๋‘˜ ๊ธ€์„ ์“ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ๋‹ค๋ฅธ ์œ ๋ช… ๋ธ”๋กœ๊ฑฐ์ฒ˜๋Ÿผ ์—„์ฒญ๋‚˜์ง„ ์•Š์ง€๋งŒ ํ•˜๋ฃจ์— 1,000~2,000๋ช… ์ •๋„ ๋“ค์–ด์˜ค๋ฉฐ ์ ์  ์„ฑ์žฅํ•ด ๊ฐ€๋Š” ๋‚˜๋งŒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๊ฐ€ ๋˜์—ˆ๋‹ค. ๋ฏธ์•ฝํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ณด๋‹ค๋Š” ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ธ”๋กœ๊ทธ PV(Page View)" ๋ฏธ์•ฝํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ณด๋‹ค๋Š” ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ธ”๋กœ๊ทธ PV(Page View) ๋˜ํ•œ ํ•„์ž์˜ ๊ฐœ๋ฐœ์ž ๊ฒฝ๋ ฅ(?)์„ ๋Œ์ด์ผœ ๋ณด์ž๋ฉด ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ•˜๊ธฐ ์ „๊ณผ ํ•˜๊ณ  ๋‚œ ํ›„๋กœ ๋‚˜๋‰  ๋งŒํผ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์—„์ฒญ๋‚œ ์˜ํ–ฅ๋ ฅ์ด ๋˜์—ˆ๋‹ค. ์ด ๊ธฐํšŒ๋ฅผ ๋นŒ์–ด ๋™๊ธฐ ํ˜•์—๊ฒŒ ๊ฐ์‚ฌ์˜ ์ธ์‚ฌ๋ฅผ ์ „ํ•˜๊ณ  ์‹ถ๋‹ค. ํ˜•. ๋ณด๊ณ  ์žˆ์ฃ ? ;] ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ผญ “๋ธ”๋กœ๊ทธ๋ฅผ ํ•˜์ž” ๋ผ๊ธฐ ๋ณด๋‹ค “๊ธ€์„ ์™œ ์จ์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ•˜๋Š”์ง€"์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ฒ˜์Œ ์ด ๊ธ€์„ ์“ฐ๋ ค๊ณ  ๋งˆ์Œ๋จน์—ˆ์„ ๋• ๊ฐœ๋ฐœ์ž๋ผ๋Š” ์ง๊ตฐ์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ ์šฉ๋  ์ •๋„์˜ ๋ฒ”์šฉ์ ์ธ ๊ธ€์„ ์“ฐ๋ ค ํ–ˆ์œผ๋‚˜ “S"์˜ ์กฐ์–ธ์œผ๋กœ ๋…์ž(ํƒ€๊นƒ)์„ ์ตœ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž์— ๋งž์ถฐ ์จ๋ณด๊ณ ์ž ํ•œ๋‹ค. thanks to “S” @@ -71,10 +78,4 @@ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ „๋ฐ˜ ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ์šฐ๋ฆฌ 5๋ช…์€ ๊ฐ๊ฐ ์‚ฌ๋Š” ์ง€์—ญ์ด ์ „๋ถ€ ๋‹ฌ๋ž๋‹ค. (์‹ฌ์ง€์–ด ํ•œ ๋ถ„์€ ๋งค์ฃผ ์ € ๋ฉ€๋ฆฌ ์ถฉ์ฒญ๋‚จ๋„ ์ฒœ์•ˆ์—์„œ ์˜ฌ๋ผ์˜ค์…”์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ใ… ใ… ) ๋งค ์ฃผ๋ง๋งˆ๋‹ค ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋งŒ๋‚˜์„œ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ธธ๋‹ค๋ฉด ๊ธธ๊ณ  ์งง๋‹ค๋ฉด ์งง์€ 7์ฃผ ์•ˆ์— ์™„์„ฑ๋„ ๋†’์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ์˜€๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์ œ๋ฅผ ์ •ํ•˜๋Š” ์•„์ด๋””์–ด ํšŒ์˜์—์„œ ์ •ํ•ด์ง„ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” “๋™๋„ค ๋งˆํŠธ ํ• ์ธ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์•ฑ"์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์‹œ๊ฐ„๊ฐ€๋Š”์ค„ ๋ชฐ๋ž๋˜ ์•„์ด๋ฐ์ด์…˜ ํšŒ์˜" ์‹œ๊ฐ„๊ฐ€๋Š”์ค„ ๋ชฐ๋ž๋˜ ์•„์ด๋ฐ์ด์…˜ ํšŒ์˜ ํŒ€์›Œํฌ๊ฐ€ ์ค‘์š”ํ•œ ํˆฌ๊ฒŒ๋”ํ†ค ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ๋Š ์ฒœ์žฌ ๋””์ž์ด๋„ˆ, ์ฒœ์žฌ ๊ฐœ๋ฐœ์ž์ฒ˜๋Ÿผ ์ผ๋‹น๋ฐฑ ์Šคํƒ€์ผ๋กœ ๋š๋”ฑ ๋งŒ๋“œ๋Š” ๊ทธ๋Ÿฐ ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰ ๋ฐฉ์‹์€ ํ”ผํ•˜๋ ค๊ณ  ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋…ธ๋ ฅํ•˜์˜€๋‹ค. ๋˜๋„๋ก์ด๋ฉด ์ด๋ ‡๊ฒŒ ๋ชจ์ธ ๋‹ค์„ฏ ๋ช…์ด ํ•œ๋งˆ์Œ ํ•œ๋œป์œผ๋กœ ๊ฐ์ž๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํฌ๊ธฐ์™€ ์–‘์€ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ฌด์—‡์ด๋ผ๋„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ํ–ˆ๋‹ค. ๋””์ž์ด๋„ˆ ๋ถ„๋“ค์€ ์„œ๋กœ ๋””์ž์ธํ•˜์‹  ์‹œ์•ˆ์— ๋Œ€ํ•ด ๊ณต์œ ๋ฅผ ํ•˜๋ฉด์„œ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐ€๋Š” ๋ชจ์Šต๊ณผ, ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋‘๋ถ„์€ (๊ฑฐ์˜ ๋งค์ผ) ๋ฐค๋งˆ๋‹ค ์„œ๋กœ ์Šฌ๋ž™์—์„œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋Š” ๋ชจ์Šต์ด ๋ณด๊ธฐ ๋„ˆ๋ฌด ๋ณด๊ธฐ ์ข‹์•˜๋‹ค. ๋ฌผ๋ก  ํ•„์ž๋„ ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  API๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์†์—์„œ ์ •๋ง ๋งŽ์€๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ ๋งˆ์ง€๋ง‰ ๋ฐœํ‘œํ•˜๋Š” ์ „๋‚ ์—” ํŒ€์› ๋ช‡ ๋ถ„๊ณผ ํ•จ๊ป˜ ๊ผฌ๋ฐ• ๋ฐค์„ ์ƒˆ์šฐ๋ฉฐ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ๋…ธ๋ ฅํ•˜์˜€๊ณ  ํ•„์ž ๊ฐœ์ธ์ ์œผ๋กœ ์•„์ฃผ ์„ฑ๊ณต์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ฐœ๋ฐœ ์ง„ํ–‰ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์€ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜์˜€๋‹ค. ์—ฌ๋Ÿฌ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๋“ค์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค๊ณ  ๋“ค์—ˆ๋Š”๋ฐ ํ•„์ž๋Š” ์•„์‰ฝ๊ฒŒ๋„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ์ „๋ถ€๋ฅผ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ•˜์˜€๋‹ค. ์˜ˆ์ „์— ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ Flask ๋˜๋Š” Django ๊ธฐ๋ฐ˜์œผ๋กœ API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณผ๊นŒ ํ•˜๊ณ  ๊ณ ๋ฏผํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ (Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ๋„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๊ณ ) ํŒŒ์ด์ฌ๋ณด๋‹ค๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ๋” ๋Šฅ์ˆ™ํ•  ๊ฒƒ ๊ฐ™์•„์„œ Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ์„œ๋ฒ„๋Š” AWS ํ”„๋ฆฌํ‹ฐ์–ด์˜ EC2๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๊ณ  DB ๋˜ํ•œ AWS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” RDS(mysql)์„ ๋ฐœ๊ธ‰๋ฐ›์•„ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  DNS๋Š” ์˜ˆ์ „์— ๋ฌด๋ฃŒ ๋„๋ฉ”์ธ์„ ์ฐพ๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋œ http://mooo.com/ ๋ผ๋Š” ์„œ๋น„์Šค์—์„œ ๋ฐœ๊ธ‰๋ฐ›์•„ ์—ฐ๊ฒฐํ•˜์˜€๊ณ , ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ ์ค‘์— ์„œ๋ฒ„์—์„œ ์•ฑ์œผ๋กœ ํ‘ธ์‹œ๋ฅผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋Š”๋ฐ Firebase๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. -์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค" ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค Entity Relationship Diagram (ERD) ๋Š” ๋ฌด๋ฃŒ๋กœ ์ธํ„ฐ๋„ท์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ด ์žˆ๋Š”์ง€ ์ฐพ๋‹ค๋ณด๋‹ˆ http://aquerytool.

์ž๋ฐ”, ์„ฑ๋Šฅ, ๋ชจ๋‹ˆํ„ฐ๋ง ํ…Œํฌ์„ธ๋ฏธ๋‚˜ ์ •๋ฆฌ ๋ฐ ํ›„๊ธฐ (by ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค)

์‹ค๋ฌด์—์„œ ์ž๋ฐ” ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์šด์˜์„ ํ•˜๋‹ค๋ณด๋ฉด ์ฒ˜์Œ์—” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ๋“ฑ ์ด๋ฒคํŠธ์„ฑ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๊ผญ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ทธ๋Ÿด๋•Œ๋ฉด ๋’ค๋Šฆ๊ฒŒ ๋ถ€๋žด๋ถ€๋žด ์›์ธ์„ ์ฐพ๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ ๋ฐ”๋น ์ง€๊ฒŒ ๋œ๋‹ค. (์•„๋งˆ ์œ—๋ถ„๋“ค์—๊ฒŒ ํ˜ผ๋‚˜๋ฉด์„œ?ใ… ใ… ) ํ‰์†Œ์— ์ด๋Ÿฐ ์„ฑ๋Šฅ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ฏธ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง ํ• ์ˆ˜์žˆ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๋˜ ์ฐฐ๋‚˜, ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์—์„œ 5์›” ์šฐ์•„ํ•œ ํ…Œํฌ ์„ธ๋ฏธ๋‚˜๋ฅผ ํ•œ๋‹ค๊ธฐ์— ๋ถ€๋žด๋ถ€๋žด ์žฅ๋ฌธ์˜ ๊ธ€๋กœ ์‹ ์ฒญ์„ ํ•˜์˜€๊ณ  ์šด์ด ์ข‹์•„ ๋‹น์ฒจ์ด ๋˜์—ˆ๋‹ค. ํ•œ์ฐฝ ํšŒ์‚ฌ์—์„œ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ์ถœ์‹œ, ๊ทธ๋ฆฌ๊ณ  ์ž ์„ ์ค„์—ฌ๊ฐ€๋ฉฐ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋˜ ํ† ์ดํ”„๋กœ์ ํŠธ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ๋ฐ”์œ ์‹œ๊ธฐ์˜€์ง€๋งŒ ํŠนํžˆ ์˜ˆ์ „๋ถ€ํ„ฐ ๋ต™๊ณ ์‹ถ๋˜ ์ด์ƒ๋ฏผ๋‹˜๊ป˜์„œ ์ง์ ‘ ๊ฐ•์˜๋ฅผ ํ•ด์ฃผ์‹ ๋‹ค๊ธฐ์— ํ”ผ๊ณคํ•œ ์‹ฌ์‹ ์„ ์ด๋Œ๊ณ  ์„ธ๋ฏธ๋‚˜์— ์ฐธ์„ํ•˜์˜€๊ณ  ๊ทธ ํ›„๊ธฐ๋ฅผ ์ ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค. -๋‘๋ ˆ์ด๋กœ ๋งŒ๋“œ์‹  ๋ฐœํ‘œ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…จ์ง€๋งŒ ์ €์ž‘๊ถŒ ๋ฌธ์ œ๋„ ์žˆ๊ณ  ํ•ด์„œ ํ•„์ž๊ธฐ์ค€์—์„œ ์ดํ•ดํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋”๋ถˆ์–ด ๊ทธ๋ƒฅ ๋“ฃ๊ณ  ์•ต๋ฌด์ƒˆ์ฒ˜๋Ÿผ ๋ฐœํ‘œ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ๋ฅผ ๊ณต์œ ํ•˜๋Š”๊ฑด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด… -ํฌ์Šคํ„ฐ๋งŒ ๋ด๋„ ๋ฒŒ์จ๋ถ€ํ„ฐ ๊ฐ€์Šด์ด ๋›ด๋‹ค(?)." ํฌ์Šคํ„ฐ๋งŒ ๋ด๋„ ๋ฒŒ์จ๋ถ€ํ„ฐ ๊ฐ€์Šด์ด ๋›ด๋‹ค(?). ์„ฑ๋Šฅ ๊ตฌ๊ธ€์—์„œ ์ž‘์„ฑํ•œ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ด์œ  ๋ผ๋Š” ์•„ํ‹ฐํด์„ ๊ณต์œ ํ•ด ์ฃผ์…จ๋‹ค. (์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด ํ•œ๋ฒˆ ์ฝ์–ด๋ณด๊ธธ ๊ฐ•์ถ”, ๋ฌด๋ ค ํ•œ๊ธ€!) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ฑ๋Šฅ์€ ์‚ฌ์šฉ์ž์˜ ์ฆ๊ฐ€, ์ดํƒˆ์œจ, ์‘๋‹ต์†๋„์— ์˜ํ–ฅ์ด ์žˆ๊ณ  ์ด๋Š” ๊ฒฐ๊ตญ ์ถ”๊ตฌํ•˜๋Š” ๊ฐ€์น˜(์ด๋ฅผ ํ…Œ๋ฉด ์ˆ˜์ต)์— ์ง๋ฉดํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์–ด๋Š ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณด๋Š”๊ฐ€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ณ  ๊ฐ ๊ด€์ ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์„ ์ฑ™๊ฒจ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์ˆ˜๊ฐ•์‹ ์ฒญ์„ ํ•˜๋Š” ์‹œ์ ์—์„œ์˜ ์‚ฌ์šฉ์ž์™€ ๋‰ด์Šค ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ์‹œ์ ์—์„œ์˜ ์‚ฌ์šฉ์ž๋Š” ๊ฐ ์„ฑ๊ฒฉ์ด ์—„์—ฐํžˆ ๋‹ค๋ฅธ๊ฒƒ์ฒ˜๋Ÿผ. -์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋“ฑ๋ก๋œ / ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์„œ๋ฒ„ ๊ด€์  ๋กœ๊ทธ์ธ๋œ / ๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์„ฑ๋Šฅ ํ…Œ์Šคํ„ฐ ๊ด€์  Active User ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ์‚ฌ์šฉ์ž ๋ฉ”๋‰ด๋‚˜ ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์„ฑ๋Šฅํ…Œ์ŠคํŠธ์‹œ Vuser์™€ ๊ฑฐ์˜ ๋™์ผ ( Vuser : ๊ฐ€์ƒ์‚ฌ์šฉ์ž(virtual user) ) Concurrent user ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ณ  ์žˆ๊ฑฐ๋‚˜, ์ค„ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ๋†’์€ ์„œ๋น„์Šค์— ์ ‘์†์ค‘์ธ ์‚ฌ์šฉ์ž ์›น ํŽ˜์ด์ง€๋ฅผ ๋„์›Œ๋†“์€ ์‚ฌ์šฉ์ž TPS(Transaction Per Seconds)๋Š” ์ดˆ๋‹น ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ์˜ ์ ˆ๋Œ€์ ์ธ ์ˆ˜์น˜๋กœ ๋ณผ์ˆ˜์žˆ๋‹ค. (๊ฐœ๋ฐœ์ž๋Š” ์–ด๋Š์ƒํ™ฉ์—์„œ๋“ ์ง€ ๋Œ€์ถฉ ๊ฐ์œผ๋กœ ์ด์•ผ๊ธฐ ํ•˜์ง€๋ง๊ณ  ์ •ํ™•ํ•œ ์ˆ˜์น˜๋กœ ์ด์•ผ๊ธฐ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ผˆ๋ฅผ ๋•Œ๋ฆฌ๋Š” ์กฐ์–ธ๊ณผ ํ•จ๊ป˜…) TPS๋Š” Scale out/up์„ ํ†ตํ•ด ์ฆ๊ฐ€์‹œํ‚ฌ์ˆ˜ ์žˆ์ง€๋งŒ Response Time ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฌผ๋ก  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠœ๋‹ํ•˜๋ฉด ๋‘ ์ˆ˜์น˜ ๋ชจ๋‘ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ TPS์™€ Response Time์˜ ์ตœ๋Œ€์น˜๋Š” ์ถœ์‹œ์ „์— ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ์ด์Šˆ๋ฐœ์ƒ์‹œ ๋Œ€์‘ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. Bottleneck ์ฆ‰ ๋ณ‘๋ชฉ์€ ์žฅ๋น„, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ €์žฅ์†Œ, ์„ค์ • ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค. ๊ทธ์ค‘์— “์•„์ฃผ ์ผ๋ฐ˜์ "์œผ๋กœ ๊ฐ€์žฅ ๋ณ‘๋ชฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ๊ฐ„์€ DB์ด๊ณ  ๊ทธ ๋‹ค์Œ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ(Web page, App), Network์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๋ก ์€ Performance engineering is “Composite Art” of IT ๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด์ฃผ์…จ๋‹ค. ์•„๋ฌด๋ฆฌ ์ด์œ ๋””์ž์ธ๊ณผ ์–ด๋ ต๊ณ  ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„์ง€๋ผ๋„ ์„ฑ๋Šฅ์ด ๋’ท๋ฐ›์นจ ์•ˆ๋œ๋‹ค๋ฉด ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ๋Š” ๋ฌด์˜๋ฏธํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. -์ž๋ฐ” ์ž๋ฐ”์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์…จ๋‹ค. ( ์—ญ์‚ฌ์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์€ https://www.whatap.io/blog/12/ ์ฐธ๊ณ  ) ์–ธ์ œ๋ถ€ํ„ฐ์ธ๊ฐ€ JDK ๋ผ์ด์„ผ์Šค ์ด์Šˆ๊ฐ€ ๋งŽ์•˜์—ˆ๋Š”๋ฐ ์‹ค๋ฌด์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” java 8 ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์•ˆ๋˜๊ณ  java 11๋ถ€ํ„ฐ ๋ผ์ด์„ผ์Šค ๋ฌธ์ œ๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ธธ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ถ€๋ถ„์€ ๊ณต์‹๋ฌธ์„œ(?)๋ฅผ ์ฐพ์•„๋ณด๋Š”๊ฒŒ ์ข‹์„๋“ฏ ํ•˜๋‹ค. (๊ฐœ์ธ ๋˜๋Š” ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฒ•์  ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ์ˆ˜๋„, ์•ˆ์ƒ๊ธธ์ˆ˜๋„ ์žˆ๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด๋ณด์—ฌ์„œ… ํ•„์ž๋„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹คใ… ) -๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ž๋ฐ” ๋ฒ„์ „์—์„œ ๋ฐœํ‘œํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค. -Java 8 lambda, stream, default method, LocalDate / LocalTime ์ถ”๊ฐ€ stream ๊ณผ foreach ์˜ ์„ฑ๋Šฅ์€ ๊ฑฐ์˜ ์ฐจ์ด ์—†์Œ (์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์งˆ์ˆ˜๋„ ์žˆ๋‹ค.) ParallelStream ์€ ํ•ด๋‹น ์žฅ๋น„์˜ cpu ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ ํ’€์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ (์˜คํžˆ๋ ค ๋…์ด ๋ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ž˜ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ• ๊ฒƒ) Java 9 Compact Strings : char[] > byte[] G1 default GC : https://www.
\ No newline at end of file +์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค" ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ๋“ค Entity Relationship Diagram (ERD) ๋Š” ๋ฌด๋ฃŒ๋กœ ์ธํ„ฐ๋„ท์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ด ์žˆ๋Š”์ง€ ์ฐพ๋‹ค๋ณด๋‹ˆ http://aquerytool.
\ No newline at end of file diff --git a/page/5/index.html b/page/5/index.html index 9100f9b8..87ca2a6a 100644 --- a/page/5/index.html +++ b/page/5/index.html @@ -1,5 +1,11 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

spring-boot์—์„œ mybatis๋กœ mysql ์—ฐ๋™ํ•˜๊ธฐ

์‹ค๋ฌด์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณผ๊ฑฐ ๋ˆ„๊ตฐ๊ฐ€ ์ž˜ ๊ตฌ์„ฑํ•ด ๋†“์€ ๋ฐฅ์ƒ(legacy)์— ์ˆŸ๊ฐ€๋ฝ๋งŒ ์–น๋Š” ๋Š๋‚Œ์œผ๋กœ ๋กœ์ง ๊ตฌํ˜„๋งŒ ํ• ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ๊ฐ์ข… ๋ ˆ์ด์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ(์„ค์ •)๋˜์–ด์žˆ๋Š”์ง€๋„ ๋ชจ๋ฅด๊ณ  ๊ฐ„ํ˜น ์„ค์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด “์•„ ๋‚ด๊ฐ€ ์ด๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์ด์ œ๊นŒ์ง€ ๊ฐœ๋ฐœ์„ ํ•ด์™”๋‚˜” ํ•˜๋Š” ์ž๊ดด๊ฐ์ด ๋“ค๋ฉฐ ๋ช‡์‹œ๊ฐ„์„ ์‚ฝ์งˆํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๊ฒŒ ์ง€๊ธˆ์˜ ํ•„์ž์ธ๊ฒƒ ๊ฐ™๋‹ค. (๋ˆ™๋ฌผ…) +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์ž๋ฐ”, ์„ฑ๋Šฅ, ๋ชจ๋‹ˆํ„ฐ๋ง ํ…Œํฌ์„ธ๋ฏธ๋‚˜ ์ •๋ฆฌ ๋ฐ ํ›„๊ธฐ (by ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค)

์‹ค๋ฌด์—์„œ ์ž๋ฐ” ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์šด์˜์„ ํ•˜๋‹ค๋ณด๋ฉด ์ฒ˜์Œ์—” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ๋“ฑ ์ด๋ฒคํŠธ์„ฑ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๊ผญ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ทธ๋Ÿด๋•Œ๋ฉด ๋’ค๋Šฆ๊ฒŒ ๋ถ€๋žด๋ถ€๋žด ์›์ธ์„ ์ฐพ๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ ๋ฐ”๋น ์ง€๊ฒŒ ๋œ๋‹ค. (์•„๋งˆ ์œ—๋ถ„๋“ค์—๊ฒŒ ํ˜ผ๋‚˜๋ฉด์„œ?ใ… ใ… ) ํ‰์†Œ์— ์ด๋Ÿฐ ์„ฑ๋Šฅ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ฏธ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง ํ• ์ˆ˜์žˆ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๋˜ ์ฐฐ๋‚˜, ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์—์„œ 5์›” ์šฐ์•„ํ•œ ํ…Œํฌ ์„ธ๋ฏธ๋‚˜๋ฅผ ํ•œ๋‹ค๊ธฐ์— ๋ถ€๋žด๋ถ€๋žด ์žฅ๋ฌธ์˜ ๊ธ€๋กœ ์‹ ์ฒญ์„ ํ•˜์˜€๊ณ  ์šด์ด ์ข‹์•„ ๋‹น์ฒจ์ด ๋˜์—ˆ๋‹ค. ํ•œ์ฐฝ ํšŒ์‚ฌ์—์„œ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ์ถœ์‹œ, ๊ทธ๋ฆฌ๊ณ  ์ž ์„ ์ค„์—ฌ๊ฐ€๋ฉฐ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋˜ ํ† ์ดํ”„๋กœ์ ํŠธ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ๋ฐ”์œ ์‹œ๊ธฐ์˜€์ง€๋งŒ ํŠนํžˆ ์˜ˆ์ „๋ถ€ํ„ฐ ๋ต™๊ณ ์‹ถ๋˜ ์ด์ƒ๋ฏผ๋‹˜๊ป˜์„œ ์ง์ ‘ ๊ฐ•์˜๋ฅผ ํ•ด์ฃผ์‹ ๋‹ค๊ธฐ์— ํ”ผ๊ณคํ•œ ์‹ฌ์‹ ์„ ์ด๋Œ๊ณ  ์„ธ๋ฏธ๋‚˜์— ์ฐธ์„ํ•˜์˜€๊ณ  ๊ทธ ํ›„๊ธฐ๋ฅผ ์ ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค. +๋‘๋ ˆ์ด๋กœ ๋งŒ๋“œ์‹  ๋ฐœํ‘œ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…จ์ง€๋งŒ ์ €์ž‘๊ถŒ ๋ฌธ์ œ๋„ ์žˆ๊ณ  ํ•ด์„œ ํ•„์ž๊ธฐ์ค€์—์„œ ์ดํ•ดํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋”๋ถˆ์–ด ๊ทธ๋ƒฅ ๋“ฃ๊ณ  ์•ต๋ฌด์ƒˆ์ฒ˜๋Ÿผ ๋ฐœํ‘œ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ๋ฅผ ๊ณต์œ ํ•˜๋Š”๊ฑด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด… +ํฌ์Šคํ„ฐ๋งŒ ๋ด๋„ ๋ฒŒ์จ๋ถ€ํ„ฐ ๊ฐ€์Šด์ด ๋›ด๋‹ค(?)." ํฌ์Šคํ„ฐ๋งŒ ๋ด๋„ ๋ฒŒ์จ๋ถ€ํ„ฐ ๊ฐ€์Šด์ด ๋›ด๋‹ค(?). ์„ฑ๋Šฅ ๊ตฌ๊ธ€์—์„œ ์ž‘์„ฑํ•œ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ด์œ  ๋ผ๋Š” ์•„ํ‹ฐํด์„ ๊ณต์œ ํ•ด ์ฃผ์…จ๋‹ค. (์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด ํ•œ๋ฒˆ ์ฝ์–ด๋ณด๊ธธ ๊ฐ•์ถ”, ๋ฌด๋ ค ํ•œ๊ธ€!) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ฑ๋Šฅ์€ ์‚ฌ์šฉ์ž์˜ ์ฆ๊ฐ€, ์ดํƒˆ์œจ, ์‘๋‹ต์†๋„์— ์˜ํ–ฅ์ด ์žˆ๊ณ  ์ด๋Š” ๊ฒฐ๊ตญ ์ถ”๊ตฌํ•˜๋Š” ๊ฐ€์น˜(์ด๋ฅผ ํ…Œ๋ฉด ์ˆ˜์ต)์— ์ง๋ฉดํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์–ด๋Š ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณด๋Š”๊ฐ€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ณ  ๊ฐ ๊ด€์ ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์„ ์ฑ™๊ฒจ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์ˆ˜๊ฐ•์‹ ์ฒญ์„ ํ•˜๋Š” ์‹œ์ ์—์„œ์˜ ์‚ฌ์šฉ์ž์™€ ๋‰ด์Šค ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ์‹œ์ ์—์„œ์˜ ์‚ฌ์šฉ์ž๋Š” ๊ฐ ์„ฑ๊ฒฉ์ด ์—„์—ฐํžˆ ๋‹ค๋ฅธ๊ฒƒ์ฒ˜๋Ÿผ. +์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋“ฑ๋ก๋œ / ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์„œ๋ฒ„ ๊ด€์  ๋กœ๊ทธ์ธ๋œ / ๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์„ฑ๋Šฅ ํ…Œ์Šคํ„ฐ ๊ด€์  Active User ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ์‚ฌ์šฉ์ž ๋ฉ”๋‰ด๋‚˜ ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์„ฑ๋Šฅํ…Œ์ŠคํŠธ์‹œ Vuser์™€ ๊ฑฐ์˜ ๋™์ผ ( Vuser : ๊ฐ€์ƒ์‚ฌ์šฉ์ž(virtual user) ) Concurrent user ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ณ  ์žˆ๊ฑฐ๋‚˜, ์ค„ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ๋†’์€ ์„œ๋น„์Šค์— ์ ‘์†์ค‘์ธ ์‚ฌ์šฉ์ž ์›น ํŽ˜์ด์ง€๋ฅผ ๋„์›Œ๋†“์€ ์‚ฌ์šฉ์ž TPS(Transaction Per Seconds)๋Š” ์ดˆ๋‹น ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ์˜ ์ ˆ๋Œ€์ ์ธ ์ˆ˜์น˜๋กœ ๋ณผ์ˆ˜์žˆ๋‹ค. (๊ฐœ๋ฐœ์ž๋Š” ์–ด๋Š์ƒํ™ฉ์—์„œ๋“ ์ง€ ๋Œ€์ถฉ ๊ฐ์œผ๋กœ ์ด์•ผ๊ธฐ ํ•˜์ง€๋ง๊ณ  ์ •ํ™•ํ•œ ์ˆ˜์น˜๋กœ ์ด์•ผ๊ธฐ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ผˆ๋ฅผ ๋•Œ๋ฆฌ๋Š” ์กฐ์–ธ๊ณผ ํ•จ๊ป˜…) TPS๋Š” Scale out/up์„ ํ†ตํ•ด ์ฆ๊ฐ€์‹œํ‚ฌ์ˆ˜ ์žˆ์ง€๋งŒ Response Time ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฌผ๋ก  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠœ๋‹ํ•˜๋ฉด ๋‘ ์ˆ˜์น˜ ๋ชจ๋‘ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ TPS์™€ Response Time์˜ ์ตœ๋Œ€์น˜๋Š” ์ถœ์‹œ์ „์— ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ์ด์Šˆ๋ฐœ์ƒ์‹œ ๋Œ€์‘ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. Bottleneck ์ฆ‰ ๋ณ‘๋ชฉ์€ ์žฅ๋น„, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ €์žฅ์†Œ, ์„ค์ • ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค. ๊ทธ์ค‘์— “์•„์ฃผ ์ผ๋ฐ˜์ "์œผ๋กœ ๊ฐ€์žฅ ๋ณ‘๋ชฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ๊ฐ„์€ DB์ด๊ณ  ๊ทธ ๋‹ค์Œ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ(Web page, App), Network์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๋ก ์€ Performance engineering is “Composite Art” of IT ๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด์ฃผ์…จ๋‹ค. ์•„๋ฌด๋ฆฌ ์ด์œ ๋””์ž์ธ๊ณผ ์–ด๋ ต๊ณ  ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„์ง€๋ผ๋„ ์„ฑ๋Šฅ์ด ๋’ท๋ฐ›์นจ ์•ˆ๋œ๋‹ค๋ฉด ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ๋Š” ๋ฌด์˜๋ฏธํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. +์ž๋ฐ” ์ž๋ฐ”์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์…จ๋‹ค. ( ์—ญ์‚ฌ์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์€ https://www.whatap.io/blog/12/ ์ฐธ๊ณ  ) ์–ธ์ œ๋ถ€ํ„ฐ์ธ๊ฐ€ JDK ๋ผ์ด์„ผ์Šค ์ด์Šˆ๊ฐ€ ๋งŽ์•˜์—ˆ๋Š”๋ฐ ์‹ค๋ฌด์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” java 8 ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์•ˆ๋˜๊ณ  java 11๋ถ€ํ„ฐ ๋ผ์ด์„ผ์Šค ๋ฌธ์ œ๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ธธ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ถ€๋ถ„์€ ๊ณต์‹๋ฌธ์„œ(?)๋ฅผ ์ฐพ์•„๋ณด๋Š”๊ฒŒ ์ข‹์„๋“ฏ ํ•˜๋‹ค. (๊ฐœ์ธ ๋˜๋Š” ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฒ•์  ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ์ˆ˜๋„, ์•ˆ์ƒ๊ธธ์ˆ˜๋„ ์žˆ๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด๋ณด์—ฌ์„œ… ํ•„์ž๋„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹คใ… ) +๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ž๋ฐ” ๋ฒ„์ „์—์„œ ๋ฐœํ‘œํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค. +Java 8 lambda, stream, default method, LocalDate / LocalTime ์ถ”๊ฐ€ stream ๊ณผ foreach ์˜ ์„ฑ๋Šฅ์€ ๊ฑฐ์˜ ์ฐจ์ด ์—†์Œ (์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์งˆ์ˆ˜๋„ ์žˆ๋‹ค.) ParallelStream ์€ ํ•ด๋‹น ์žฅ๋น„์˜ cpu ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ ํ’€์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ (์˜คํžˆ๋ ค ๋…์ด ๋ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ž˜ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ• ๊ฒƒ) Java 9 Compact Strings : char[] > byte[] G1 default GC : https://www.

spring-boot์—์„œ mybatis๋กœ mysql ์—ฐ๋™ํ•˜๊ธฐ

์‹ค๋ฌด์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณผ๊ฑฐ ๋ˆ„๊ตฐ๊ฐ€ ์ž˜ ๊ตฌ์„ฑํ•ด ๋†“์€ ๋ฐฅ์ƒ(legacy)์— ์ˆŸ๊ฐ€๋ฝ๋งŒ ์–น๋Š” ๋Š๋‚Œ์œผ๋กœ ๋กœ์ง ๊ตฌํ˜„๋งŒ ํ• ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ๊ฐ์ข… ๋ ˆ์ด์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ(์„ค์ •)๋˜์–ด์žˆ๋Š”์ง€๋„ ๋ชจ๋ฅด๊ณ  ๊ฐ„ํ˜น ์„ค์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด “์•„ ๋‚ด๊ฐ€ ์ด๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์ด์ œ๊นŒ์ง€ ๊ฐœ๋ฐœ์„ ํ•ด์™”๋‚˜” ํ•˜๋Š” ์ž๊ดด๊ฐ์ด ๋“ค๋ฉฐ ๋ช‡์‹œ๊ฐ„์„ ์‚ฝ์งˆํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๊ฒŒ ์ง€๊ธˆ์˜ ํ•„์ž์ธ๊ฒƒ ๊ฐ™๋‹ค. (๋ˆ™๋ฌผ…) ์ถœ์ฒ˜ : http://blog.naver.com/PostView.nhn?blogId=ondo_h&logNo=221437452142" ์ถœ์ฒ˜ : http://blog.naver.com/PostView.nhn?blogId=ondo_h&logNo=221437452142 ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์…‹ํŒ…์„ ํ•˜๋ฉฐ ํ˜ธ๊ธฐ๋กญ๊ฒŒ spring boot ์ตœ์‹ ๋ฒ„์ „์—์„œ db๋ฅผ ์—ฐ๋™ํ•˜๋ ค ํ–ˆ๋Š”๋ฐ ๋ง‰์ƒ ์™„์ „ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์ ๋‹ค๋ณด๋‹ˆ (spring boot 2 ๋ฒ„์ „์—์„œ๋Š” ๋”์šฑ๋”…) ์–ด๋””์„œ๋ถ€ํ„ฐ ๋ญ˜ ์„ค์ •์„ ํ•ด์•ผํ• ์ง€… ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿด๋•Œ ๋ณด๋Š” ๋„ํ๋จผํŠธ๋ฅผ ๋ด๋„ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์–ด ์‚ฝ์งˆ์„ ํ•ด๊ฐ€๋ฉฐ ๋‹นํ™ฉํ•˜๊ธฐ ์ผ์‘ค์˜€๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ํ•˜๋Š”๋ฐ ๋ชฉํ‘œ๋ฅผ ๋‘๊ณ ์ž ํ•œ๋‹ค. Spring Boot 2 ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค๊ณ  mybatis ๋ฅผ ์‚ฌ์šฉํ•ด์„œ mysql ์„ ์—ฐ๋™ํ•˜๋Š”๊ฒƒ (AWS ์˜ RDS๋ฅผ ์‚ฌ์šฉ, ์ถ”ํ›„ RDS์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๋ธ”๋กœ๊น… ์˜ˆ์ •) ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žจ์œผ๋กœ ์งง๊ฒŒ๋‚˜๋งˆ ํ•„์ž์˜ ์‚ฝ์งˆ๊ธฐ๋ฅผ ์—ฌํ–‰ํ•ด๋ณด์ž. Spring boot 2 ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ํ•„์ž๋Š” IntelliJ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ์ƒˆ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ• ๋•Œ ํด๋ฆญ ๋ช‡๋ฒˆ๋งŒ์œผ๋กœ dependency ์„ค์ •๊นŒ์ง€ ๋‹ค ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•˜๊ณ  ์ข‹์•˜๋‹ค. ํ˜น ์ดํด๋ฆฝ์Šค๋‚˜ ๋‹ค๋ฅธ IDE๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด https://start.spring.io/ ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋„์›€์ด ๋ ๊ฒƒ๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ํด๋ฆญ ๋ช‡๋ฒˆ์œผ๋กœ IntelliJ ์—์„œ ํ•ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ๋ชจ๋“ˆ์„ ์„ ํƒํ•˜๊ณ  generate ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์ง„๋‹ค. (์ฐธ ์ข‹์€ ์„ธ์ƒ…) ์šฐ์„  File โ†’ New โ†’ Project ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์•„๋ž˜ ์ฐฝ์„ ์—ด์–ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ๋ญ”๊ฐ€ ๋‹ค ํ•ด์ค„๊ฒƒ ๊ฐ™์€ (๊ฐœ๋ฐœ๋„ ํ•ด์ฃผ๋ฉด ์•ˆ๋˜๋‚˜…) Spring Initializr์„ ์„ ํƒํ›„ ์•„๋ž˜์™€ ๊ฐ™์€ ์„ค์ •์„ ์ ์–ด์ค€ ๋’ค ๋‹ค์Œ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. @@ -66,9 +72,4 @@ ์šฐ์„ , ์•Œ๋žŒ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๊ธฐ๊นŒ์ง€์˜ ํฐ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•Œ๋ฆผ ํ”„๋กœ์„ธ์Šค" ์•Œ๋ฆผ ํ”„๋กœ์„ธ์Šค ์„œ๋น„์Šค์—์„œ ๋ณด๋‚ผ ๋Œ€์ƒ๊ณผ ๋ณด๋‚ผ ์ •๋ณด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ๋‚ด ํ‘ธ์‹œ ๋ฐœ์†ก ํ”Œ๋žซํผ์ธ ์‚ฌ๋‚ด ๋ฐœ์†ก ํ”Œ๋žซํผ์—๊ฒŒ ์ „๋‹ฌ์„ ํ•˜๋ฉด ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋ฐœ์†ก์ด ๋˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์— ๋…ธ์ถœ์ด ๋จ ๊ฐ„๋‹จํ•˜๊ฒŒ “๋ณ‘๋ ฌ๋กœ ๋ฐœ์†กํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?“๋ผ๋Š” ํ•„์ž์˜ ์ƒ๊ฐ์ด ๋ถ€๋„๋Ÿฌ์›Œ์งˆ ์ •๋„๋กœ ์ด๋ฏธ 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 ํšŒ๊ณ  - Coder๊ฐ€ ์•„๋‹Œ Programmer๋กœ

๋งค์‚ฌ์— ํ–‰๋™ํ•˜๋Š” ๋ชจ๋“ ๊ฒƒ๋“ค์˜ ๋์ž๋ฝ์—์„œ๋Š” ๊ทธ๋™์•ˆ ์ž˜ํ•œ๊ฒƒ๊ณผ ๋ชปํ•œ๊ฒƒ์„ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๋ฉฐ ์ž˜ํ•œ๊ฒƒ์€ ๋ณด๋‹ค ๋” ์ž˜ํ• ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ๋ชปํ•œ๊ฒƒ์€ ์™œ ๋ชปํ–ˆ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ชปํ•œ ๋ถ€๋ถ„์„ ๊ณ ์น ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ์‹œ๊ฐ„์„ ๊ฐ–์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•ด์™”๋‹ค. ๊ทธ๊ฒŒ ๊ฐœ๋ฐœ์ด ๋˜์—ˆ๋“  ๊ฒŒ์ž„์ด ๋˜์—ˆ๋“  ์—ฐ์ธ๊ณผ์˜ ๋ฐ์ดํŠธ๊ฐ€ ๋˜์—ˆ๋“  ๋ญ๋“ ์ง€. ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„๋“ค์€ ํ•„์ž์—๊ฒŒ ํฐ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ์ง€๋‚œ ํ•œํ•ด๋ฅผ ๋Œ์ด์ผœ ๋ณด์ž๋ฉด ๊ฐœ์ธ์ ์œผ๋กœ ๊ณ„ํšํ•œ ์ „๋ถ€๋ฅผ ๋‹ค ์ด๋ค„๋‚ด์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ ๋‚˜๋ฆ„์˜ ๋งŽ์€ ๊ฒฝํ—˜๊ณผ ์„ฑ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ์ด์ œ ๋ช‡์‹œ๊ฐ„ ๋’ค๋ฉด ์˜ฌํ•ด๊ฐ€ ๋๋‚˜๊ณ  ์ƒˆ๋กœ์šด ํ•œ ํ•ด๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์ด ์‹œ์ ์— ๊ฐœ๋ฐœ์ž๋กœ์จ์˜ ํšŒ๊ณ ๋ฅผ ํ•ด๋ณด๋ฉฐ 2018๋…„ ์ •๋ฆฌ ๋ฐ 2019๋…„ ๋ชฉํ‘œ๋ฅผ ๋‹ค์งํ•ด๋ณด์ž. -๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž. ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์šด์˜ ์•„์ฃผ ์˜ค๋ž˜์ „, ๋™๊ธฐ ํ˜•์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธ€์„ ์จ์•ผํ•˜๋Š” ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์ ˆ์‹คํ•˜๊ฒŒ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๋•Œ๋ถ€ํ„ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค. ๊ทธ ๋™๊ธฐํ˜•์˜ ๋ง์— ์กฐ๊ธˆ ๋” ๋‚ด ์ƒ๊ฐ์„ ์ฒจ๊ฐ€ํ•˜์ž๋ฉด ๊ธ€์„ ์“ฐ๋‹ค๋ณด๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณธ๋‹ค๋Š” ๋งˆ์Œ์— ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ์ง€์‹์„ ๋ณด๋‹ค ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ๋ชจ์—ฌ ๋‚ด ๊ฐœ๋ฐœ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ์ง€๋ฉฐ ํฌํŠธํด๋ฆฌ์˜ค ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๋Š”๊ฑด ์ •๋ง ์ข‹์€ ์„ ํƒ์ง€ ์˜€๋˜๊ฒƒ ๊ฐ™๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋ƒฅ ๊ตฌ๊ธ€๋ง ํ•ด์„œ ์•Œ๊ฒŒ๋œ ๊ฒƒ๊ณผ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์›€์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํšŒ์‚ฌ ์ผ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ์ ์–ด๋„ ํ•œ๋‹ฌ์— ํ•œ๊ฐ€์ง€ ์ด์ƒ์€ ๋ฐฐ์šฐ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌํ•ด ์ดˆ ํ•œ๋‹ฌ์— ํ•œ๊ฐœ ์ด์ƒ์˜ ๊ธ€์„ ์“ฐ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•˜์˜€๋‹ค.(๊ทธ ๋‹ฌ์˜ ๊ธ€์ด ์—†๋‹ค๋ฉด ๋ญ”๊ฐ€ ๋†€์•˜๊ฑฐ๋‚˜(?) ๋ฏธ์นœ๋“ฏ์ด ๋ฐ”๋นด๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๊ฒŒ์„๋ €๊ฑฐ๋‚˜…) ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์“ด ๋‚ด์—ญ์„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™” ํ•ด๋ณด๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ด 23๊ฐœ์˜ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€๊ณ  ์›” ํ‰๊ท  1.9๊ฐœ์˜ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค. -9์›”๋‹ฌ์—” ํŒ€ ์˜ฎ๊ธฐ์ž๋งˆ์ž ์—„์ฒญ ๋ฐ”๋นด๊ณ , 11์›”์—” ๊ทธ ๋ฐ”์œ๊ฒŒ ๊ฒฐ์‹ค์„ ๋งบ๋Š” ์‹œ๊ฐ„… ์ด๋ผ ํ•‘๊ณ„๋ฅผ… (๋‚˜์ค‘์— ๋ธ”๋กœ๊น… ์˜ˆ์ •, ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ) -์›”๋ณ„ ๊ธ€ ์ž‘์„ฑ์ˆ˜" ์›”๋ณ„ ๊ธ€ ์ž‘์„ฑ์ˆ˜ ์œ„ ๊ฒฐ๊ณผ๋งŒ์„ ๋‘๊ณ  ๋ดค์„๋• ๋งŽ์œผ๋ฉด ๋งŽ๊ณ  ์ ์œผ๋ฉด ์ ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์žํˆฌ๋ฆฌ ์‹œ๊ฐ„์„ ํ™œ์šฉํ•ด์„œ ๊ทธ๊ฐ„ ๋ฐฐ์› ๋˜๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๊ณ  ๋ณด๊ธฐ๋งŒ ํ•˜๋ฉฐ ๋„˜์–ด๊ฐ„๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๊ท€์ฐฎ์ง€๋งŒ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ  ์ •๋ฆฌํ–ˆ๋”๋ผ๋ฉด ๋” ๋งŽ์€ ๊ธ€์„ ์ผ์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์กฐ๊ธˆ ์•„์‰ฌ์šด ๊ฒฐ๊ณผ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค. -์ฃผ ๋‹จ์œ„ PV, ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณด๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์— ๋ฟŒ๋“ฏํ•จ" ์ฃผ ๋‹จ์œ„ PV, ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณด๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์— ๋ฟŒ๋“ฏํ•จ ๋‚˜๋ฆ„ ์—ด์‹ฌํžˆ ๊ธ€์„ ์“ด ๊ฒฐ๊ณผ์ผ๊นŒ, GA๋ฅผ ํ†ตํ•ด ๋ณธ ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ์— ์œ ์ž…๋Ÿ‰์ด ์ ์  ๋Š˜์–ด๋‚˜๋Š”๊ฒƒ์„ ๋ณด๋ฉฐ ํ•˜๋‚˜๋ฅผ ์“ฐ๋”๋ผ๋„ ์ข€๋” ์ž์„ธํžˆ ๋…์ž์˜ ์ž…์žฅ์—์„œ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์‹œํ•œ๋ฒˆ ๋‹ค์งํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค๋งŒ ๊ธ€์„ “๋งŽ์ด” ์“ฐ๋Š”๊ฒƒ๋ณด๋‹ค ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•˜๋”๋ผ๋„ ์›์ธ๊ณผ ๊ทผ๊ฑฐ๋ฅผ ๋“ค์–ด๊ฐ€๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์ง‘์ค‘์„ ํ•ด์•ผํ•˜๊ณ , ๋‹จ์ˆœ ์‚ฌ์šฉ๋ฒ• ๋‚˜์—ด์ด ์•„๋‹Œ ์‹ค์ œ๋กœ ๊ฒฝํ—˜์„ ํ•ด๊ฐ€๋ฉด์„œ “๋‚ด๊ฒƒ"์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ฒ ๋‹ค. -ํšŒ์‚ฌ ํŒ€ ๋ณ€๊ฒฝ ๊ทธ๋ฆฌ๊ณ  ํ† ์ด ํ”„๋กœ์ ํŠธ ๊ธฐ์กด์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋˜ ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„ ๋ฐœ๊ธ‰๋ถ€ํ„ฐ ์ด๋Ÿฐ ์ €๋Ÿฐ ์„œ๋น„์Šค์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋ฌด์‚ฌํžˆ ์„œ๋น„์Šค๋ฅผ ์˜คํ”ˆ์„ ํ•˜์˜€๊ณ , ์•ฝ๊ฐ„์˜ ๋งค๋„ˆ๋ฆฌ์ฆ˜์ด ์ƒ๊ฒจ๋‚  ์ฆˆ์Œ ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒจ ์„ฑ๊ฒฉ์ด ์ „ํ˜€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํ•˜๋Š” ํŒ€์„ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ์•ฝ๊ฐ„ ์ด์ง๊ณผ๋„ ๋น„์Šทํ•œ ๋Š๋‚Œ์œผ๋กœ ํŒ€์„ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ฒ˜์Œ์—” ์ƒˆ๋กœ์šด ์ง€์‹์„ ์Šต๋“ํ•ด์•ผ ํ•˜๋Š” ๋‘๋ ค์›€๋„ ์žˆ์—ˆ๊ณ  ๊ธฐ์กด ์„œ๋น„์Šค์— ์• ์ •์ด ๋งŽ์•„์„œ ๊ณ ๋ฏผ์ด ๋งŽ์•˜์ง€๋งŒ ๋ฒŒ์จ ์˜ฎ๊ธด์ง€ 5๊ฐœ์›”์ด ์ง€๋‚˜๊ณ  ๋Œ์ด์ผœ๋ณด๋ฉด ์˜ฌํ•ด ๊ฐ€์žฅ ์ž˜ํ•œ ์ผ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์ „ ํŒ€์—์„  ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š”๋ฐ ๊ทธ์ณค์ง€๋งŒ ์ง€๊ธˆ ๋‚ด๊ฐ€ ์žˆ๋Š” ๊ณณ์€ ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค๋ฅผ ์„ฑ๋Šฅ์ธก๋ฉด์—์„œ, ๊ทธ๋ฆฌ๊ณ  ์•„ํ‚คํ…์ณ ์ธก๋ฉด์—์„œ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์ง‘์ค‘์„ ํ•˜๋ ค๋Š” ๋ชจ์Šต๋“ค์ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”๋ถˆ์–ด ํŒ€์— ํˆฌ์ž…๋˜์ž๋งˆ์ž ํ•„์ž ํ™€๋กœ ๊ธฐ์กด์— ์žˆ๋˜ ๋ณ‘๋ ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์„œ๋น„์Šค์ ์œผ๋กœ ์•ฝ 90%์˜ ๊ฐœ์„ ํšจ๊ณผ๋ฅผ ๋ณผ์ˆ˜์žˆ์—ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ์ถ”ํ›„ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒ€์„ ์˜ฎ๊ธฐ๊ธฐ ํ•œ๋‘๋‹ฌ ์ „ ๊ฐœ์ธ์ ์ธ ์—ฌ์œ ์‹œ๊ฐ„์ด ๋งŽ์ด ์žˆ์—ˆ๊ณ , ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉฐ ์ฑ™๊ฒจ๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์— ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. 7์›” ์ค‘์ˆœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์œผ๋‹ˆ ์ด๊ฒƒ๋„ ์–ด๋Š๋ง ๋ฐ˜๋…„์ด ์ง€๋‚˜๊ณ  ์žˆ๋Š”๋ฐ ์šด์˜์„ ํ•ด๊ฐ€๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ข…์ข… ๋ฐค์„ ์ƒˆ๋Š” ๋“ฑ ์˜ฌ ํ•œํ•ด์žˆ์–ด ๊ฝค ๋งŽ์€๊ฒƒ์„ ์–ป์„์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์˜€๋‹ค.
\ No newline at end of file +๊ธฐ์กด์— ๊ตฌ์„ฑํ•˜์…จ๋˜ ๋ถ„๋“ค๋„ ์ˆ˜๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค์™€ ๊ณ ๋ฏผ์„ ํ•˜์‹œ๋ฉฐ ๊ตฌ์„ฑํ•˜์…จ์„ ํ…๋ฐ ๋” ์ด์ƒ ์–ด๋–ป๊ฒŒ ๋” ๋น ๋ฅด๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ ํ•˜๋Š” ๋ถ€๋‹ด๊ฐ๊ณผ ์ž์นซ ์•Œ๋ฆผ์ด ์ž˜๋ชป ๋ฐœ์†ก๋˜๊ธฐ๋ผ๋„ ํ•œ๋‹ค๋ฉด(์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด) ๊ทธ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์˜ ๋ถˆ๋งŒ ํ™”์‚ด ๊ณผ๋…์ด ํ•„์ž๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์••๋ฐ•๊ฐ์ด ๊ฐœ์„  ์‹œ์ž‘ ์ „๋ถ€ํ„ฐ ๋จธ๋ฆฟ์†์„ ํœ˜๊ฐ๊ณ  ์žˆ์—ˆ๋˜ ์ฐฐ๋‚˜์—
\ No newline at end of file diff --git a/page/6/index.html b/page/6/index.html index 08b17943..a38b6449 100644 --- a/page/6/index.html +++ b/page/6/index.html @@ -1,5 +1,10 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ 12์›” ์„œ์šธ ๋ฐ‹์—… ํ›„๊ธฐ

์—˜๋ผ์Šคํ‹ฑ์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋œ ๊ฑด 2017๋…„ ์—ฌ๋ฆ„ facebook ํ”ผ๋“œ์— “Elastic Stack์„ ์ด์šฉํ•œ ์„œ์šธ์‹œ ์ง€ํ•˜์ฒ  ๋Œ€์‹œ๋ณด๋“œ” ๋ผ๋Š” ๋งํฌ๋ฅผ ๋ณด๊ฒŒ ๋œ ๊ฒƒ๋ถ€ํ„ฐ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ ๋‹น์‹œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ž๋™ํ™”์— ๊ด€์‹ฌ์ด ์ปค์ง€๊ณ  ์žˆ๋˜ ์ฐฐ๋‚˜์˜€๋Š”๋ฐ ํ‚ค๋ฐ”๋‚˜๋กœ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ์•„์ฃผ ๋ฉ‹์ง„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ๋„ˆ๋ฌด ํฅ๋ฏธ๋กญ๊ฒŒ ๋‹ค๊ฐ€์™”๊ณ  ๊ฑฐ๊ธฐ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ด๊ฒƒ์ €๊ฒƒ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ๋„ ํ•˜๊ณ  ํ•œ๊ตญ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ๋™์„ ํ•ด์˜ค๋˜ ์ฐฐ๋‚˜ (์ตœ๊ทผ๋“ค์–ด ๋ˆˆํŒ…๋งŒ ํ•˜๊ณ  ์žˆ์ง€๋งŒ…) ์˜ฌํ•ด ๋งˆ์ง€๋ง‰ ๋ฐ‹์—…์„ ํ•œ๋‹ค๊ณ  ํ•˜์—ฌ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

2018 ํšŒ๊ณ  - Coder๊ฐ€ ์•„๋‹Œ Programmer๋กœ

๋งค์‚ฌ์— ํ–‰๋™ํ•˜๋Š” ๋ชจ๋“ ๊ฒƒ๋“ค์˜ ๋์ž๋ฝ์—์„œ๋Š” ๊ทธ๋™์•ˆ ์ž˜ํ•œ๊ฒƒ๊ณผ ๋ชปํ•œ๊ฒƒ์„ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๋ฉฐ ์ž˜ํ•œ๊ฒƒ์€ ๋ณด๋‹ค ๋” ์ž˜ํ• ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ๋ชปํ•œ๊ฒƒ์€ ์™œ ๋ชปํ–ˆ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ชปํ•œ ๋ถ€๋ถ„์„ ๊ณ ์น ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ์‹œ๊ฐ„์„ ๊ฐ–์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•ด์™”๋‹ค. ๊ทธ๊ฒŒ ๊ฐœ๋ฐœ์ด ๋˜์—ˆ๋“  ๊ฒŒ์ž„์ด ๋˜์—ˆ๋“  ์—ฐ์ธ๊ณผ์˜ ๋ฐ์ดํŠธ๊ฐ€ ๋˜์—ˆ๋“  ๋ญ๋“ ์ง€. ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„๋“ค์€ ํ•„์ž์—๊ฒŒ ํฐ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ์ง€๋‚œ ํ•œํ•ด๋ฅผ ๋Œ์ด์ผœ ๋ณด์ž๋ฉด ๊ฐœ์ธ์ ์œผ๋กœ ๊ณ„ํšํ•œ ์ „๋ถ€๋ฅผ ๋‹ค ์ด๋ค„๋‚ด์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ ๋‚˜๋ฆ„์˜ ๋งŽ์€ ๊ฒฝํ—˜๊ณผ ์„ฑ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ์ด์ œ ๋ช‡์‹œ๊ฐ„ ๋’ค๋ฉด ์˜ฌํ•ด๊ฐ€ ๋๋‚˜๊ณ  ์ƒˆ๋กœ์šด ํ•œ ํ•ด๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์ด ์‹œ์ ์— ๊ฐœ๋ฐœ์ž๋กœ์จ์˜ ํšŒ๊ณ ๋ฅผ ํ•ด๋ณด๋ฉฐ 2018๋…„ ์ •๋ฆฌ ๋ฐ 2019๋…„ ๋ชฉํ‘œ๋ฅผ ๋‹ค์งํ•ด๋ณด์ž. +๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž. ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์šด์˜ ์•„์ฃผ ์˜ค๋ž˜์ „, ๋™๊ธฐ ํ˜•์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธ€์„ ์จ์•ผํ•˜๋Š” ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์ ˆ์‹คํ•˜๊ฒŒ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๋•Œ๋ถ€ํ„ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค. ๊ทธ ๋™๊ธฐํ˜•์˜ ๋ง์— ์กฐ๊ธˆ ๋” ๋‚ด ์ƒ๊ฐ์„ ์ฒจ๊ฐ€ํ•˜์ž๋ฉด ๊ธ€์„ ์“ฐ๋‹ค๋ณด๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณธ๋‹ค๋Š” ๋งˆ์Œ์— ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ์ง€์‹์„ ๋ณด๋‹ค ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ๋ชจ์—ฌ ๋‚ด ๊ฐœ๋ฐœ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ์ง€๋ฉฐ ํฌํŠธํด๋ฆฌ์˜ค ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๋Š”๊ฑด ์ •๋ง ์ข‹์€ ์„ ํƒ์ง€ ์˜€๋˜๊ฒƒ ๊ฐ™๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋ƒฅ ๊ตฌ๊ธ€๋ง ํ•ด์„œ ์•Œ๊ฒŒ๋œ ๊ฒƒ๊ณผ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์›€์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํšŒ์‚ฌ ์ผ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ์ ์–ด๋„ ํ•œ๋‹ฌ์— ํ•œ๊ฐ€์ง€ ์ด์ƒ์€ ๋ฐฐ์šฐ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌํ•ด ์ดˆ ํ•œ๋‹ฌ์— ํ•œ๊ฐœ ์ด์ƒ์˜ ๊ธ€์„ ์“ฐ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•˜์˜€๋‹ค.(๊ทธ ๋‹ฌ์˜ ๊ธ€์ด ์—†๋‹ค๋ฉด ๋ญ”๊ฐ€ ๋†€์•˜๊ฑฐ๋‚˜(?) ๋ฏธ์นœ๋“ฏ์ด ๋ฐ”๋นด๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๊ฒŒ์„๋ €๊ฑฐ๋‚˜…) ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์“ด ๋‚ด์—ญ์„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™” ํ•ด๋ณด๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ด 23๊ฐœ์˜ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€๊ณ  ์›” ํ‰๊ท  1.9๊ฐœ์˜ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค. +9์›”๋‹ฌ์—” ํŒ€ ์˜ฎ๊ธฐ์ž๋งˆ์ž ์—„์ฒญ ๋ฐ”๋นด๊ณ , 11์›”์—” ๊ทธ ๋ฐ”์œ๊ฒŒ ๊ฒฐ์‹ค์„ ๋งบ๋Š” ์‹œ๊ฐ„… ์ด๋ผ ํ•‘๊ณ„๋ฅผ… (๋‚˜์ค‘์— ๋ธ”๋กœ๊น… ์˜ˆ์ •, ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ) +์›”๋ณ„ ๊ธ€ ์ž‘์„ฑ์ˆ˜" ์›”๋ณ„ ๊ธ€ ์ž‘์„ฑ์ˆ˜ ์œ„ ๊ฒฐ๊ณผ๋งŒ์„ ๋‘๊ณ  ๋ดค์„๋• ๋งŽ์œผ๋ฉด ๋งŽ๊ณ  ์ ์œผ๋ฉด ์ ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์žํˆฌ๋ฆฌ ์‹œ๊ฐ„์„ ํ™œ์šฉํ•ด์„œ ๊ทธ๊ฐ„ ๋ฐฐ์› ๋˜๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๊ณ  ๋ณด๊ธฐ๋งŒ ํ•˜๋ฉฐ ๋„˜์–ด๊ฐ„๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๊ท€์ฐฎ์ง€๋งŒ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ  ์ •๋ฆฌํ–ˆ๋”๋ผ๋ฉด ๋” ๋งŽ์€ ๊ธ€์„ ์ผ์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์กฐ๊ธˆ ์•„์‰ฌ์šด ๊ฒฐ๊ณผ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค. +์ฃผ ๋‹จ์œ„ PV, ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณด๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์— ๋ฟŒ๋“ฏํ•จ" ์ฃผ ๋‹จ์œ„ PV, ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ธ€์„ ๋ณด๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์— ๋ฟŒ๋“ฏํ•จ ๋‚˜๋ฆ„ ์—ด์‹ฌํžˆ ๊ธ€์„ ์“ด ๊ฒฐ๊ณผ์ผ๊นŒ, GA๋ฅผ ํ†ตํ•ด ๋ณธ ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ์— ์œ ์ž…๋Ÿ‰์ด ์ ์  ๋Š˜์–ด๋‚˜๋Š”๊ฒƒ์„ ๋ณด๋ฉฐ ํ•˜๋‚˜๋ฅผ ์“ฐ๋”๋ผ๋„ ์ข€๋” ์ž์„ธํžˆ ๋…์ž์˜ ์ž…์žฅ์—์„œ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์‹œํ•œ๋ฒˆ ๋‹ค์งํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค๋งŒ ๊ธ€์„ “๋งŽ์ด” ์“ฐ๋Š”๊ฒƒ๋ณด๋‹ค ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•˜๋”๋ผ๋„ ์›์ธ๊ณผ ๊ทผ๊ฑฐ๋ฅผ ๋“ค์–ด๊ฐ€๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์ง‘์ค‘์„ ํ•ด์•ผํ•˜๊ณ , ๋‹จ์ˆœ ์‚ฌ์šฉ๋ฒ• ๋‚˜์—ด์ด ์•„๋‹Œ ์‹ค์ œ๋กœ ๊ฒฝํ—˜์„ ํ•ด๊ฐ€๋ฉด์„œ “๋‚ด๊ฒƒ"์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ฒ ๋‹ค. +ํšŒ์‚ฌ ํŒ€ ๋ณ€๊ฒฝ ๊ทธ๋ฆฌ๊ณ  ํ† ์ด ํ”„๋กœ์ ํŠธ ๊ธฐ์กด์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋˜ ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„ ๋ฐœ๊ธ‰๋ถ€ํ„ฐ ์ด๋Ÿฐ ์ €๋Ÿฐ ์„œ๋น„์Šค์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋ฌด์‚ฌํžˆ ์„œ๋น„์Šค๋ฅผ ์˜คํ”ˆ์„ ํ•˜์˜€๊ณ , ์•ฝ๊ฐ„์˜ ๋งค๋„ˆ๋ฆฌ์ฆ˜์ด ์ƒ๊ฒจ๋‚  ์ฆˆ์Œ ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒจ ์„ฑ๊ฒฉ์ด ์ „ํ˜€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํ•˜๋Š” ํŒ€์„ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ์•ฝ๊ฐ„ ์ด์ง๊ณผ๋„ ๋น„์Šทํ•œ ๋Š๋‚Œ์œผ๋กœ ํŒ€์„ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ฒ˜์Œ์—” ์ƒˆ๋กœ์šด ์ง€์‹์„ ์Šต๋“ํ•ด์•ผ ํ•˜๋Š” ๋‘๋ ค์›€๋„ ์žˆ์—ˆ๊ณ  ๊ธฐ์กด ์„œ๋น„์Šค์— ์• ์ •์ด ๋งŽ์•„์„œ ๊ณ ๋ฏผ์ด ๋งŽ์•˜์ง€๋งŒ ๋ฒŒ์จ ์˜ฎ๊ธด์ง€ 5๊ฐœ์›”์ด ์ง€๋‚˜๊ณ  ๋Œ์ด์ผœ๋ณด๋ฉด ์˜ฌํ•ด ๊ฐ€์žฅ ์ž˜ํ•œ ์ผ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์ „ ํŒ€์—์„  ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š”๋ฐ ๊ทธ์ณค์ง€๋งŒ ์ง€๊ธˆ ๋‚ด๊ฐ€ ์žˆ๋Š” ๊ณณ์€ ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค๋ฅผ ์„ฑ๋Šฅ์ธก๋ฉด์—์„œ, ๊ทธ๋ฆฌ๊ณ  ์•„ํ‚คํ…์ณ ์ธก๋ฉด์—์„œ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์ง‘์ค‘์„ ํ•˜๋ ค๋Š” ๋ชจ์Šต๋“ค์ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”๋ถˆ์–ด ํŒ€์— ํˆฌ์ž…๋˜์ž๋งˆ์ž ํ•„์ž ํ™€๋กœ ๊ธฐ์กด์— ์žˆ๋˜ ๋ณ‘๋ ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์„œ๋น„์Šค์ ์œผ๋กœ ์•ฝ 90%์˜ ๊ฐœ์„ ํšจ๊ณผ๋ฅผ ๋ณผ์ˆ˜์žˆ์—ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ์ถ”ํ›„ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒ€์„ ์˜ฎ๊ธฐ๊ธฐ ํ•œ๋‘๋‹ฌ ์ „ ๊ฐœ์ธ์ ์ธ ์—ฌ์œ ์‹œ๊ฐ„์ด ๋งŽ์ด ์žˆ์—ˆ๊ณ , ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉฐ ์ฑ™๊ฒจ๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์— ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. 7์›” ์ค‘์ˆœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์œผ๋‹ˆ ์ด๊ฒƒ๋„ ์–ด๋Š๋ง ๋ฐ˜๋…„์ด ์ง€๋‚˜๊ณ  ์žˆ๋Š”๋ฐ ์šด์˜์„ ํ•ด๊ฐ€๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ข…์ข… ๋ฐค์„ ์ƒˆ๋Š” ๋“ฑ ์˜ฌ ํ•œํ•ด์žˆ์–ด ๊ฝค ๋งŽ์€๊ฒƒ์„ ์–ป์„์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์˜€๋‹ค.

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ 12์›” ์„œ์šธ ๋ฐ‹์—… ํ›„๊ธฐ

์—˜๋ผ์Šคํ‹ฑ์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋œ ๊ฑด 2017๋…„ ์—ฌ๋ฆ„ facebook ํ”ผ๋“œ์— “Elastic Stack์„ ์ด์šฉํ•œ ์„œ์šธ์‹œ ์ง€ํ•˜์ฒ  ๋Œ€์‹œ๋ณด๋“œ” ๋ผ๋Š” ๋งํฌ๋ฅผ ๋ณด๊ฒŒ ๋œ ๊ฒƒ๋ถ€ํ„ฐ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ ๋‹น์‹œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ž๋™ํ™”์— ๊ด€์‹ฌ์ด ์ปค์ง€๊ณ  ์žˆ๋˜ ์ฐฐ๋‚˜์˜€๋Š”๋ฐ ํ‚ค๋ฐ”๋‚˜๋กœ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ์•„์ฃผ ๋ฉ‹์ง„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ๋„ˆ๋ฌด ํฅ๋ฏธ๋กญ๊ฒŒ ๋‹ค๊ฐ€์™”๊ณ  ๊ฑฐ๊ธฐ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ด๊ฒƒ์ €๊ฒƒ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ๋„ ํ•˜๊ณ  ํ•œ๊ตญ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ๋™์„ ํ•ด์˜ค๋˜ ์ฐฐ๋‚˜ (์ตœ๊ทผ๋“ค์–ด ๋ˆˆํŒ…๋งŒ ํ•˜๊ณ  ์žˆ์ง€๋งŒ…) ์˜ฌํ•ด ๋งˆ์ง€๋ง‰ ๋ฐ‹์—…์„ ํ•œ๋‹ค๊ณ  ํ•˜์—ฌ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์—ฌ๊ธฐ์–ด๋•Œ ๋ณธ์‚ฌ ๋ฐฉ๋ฌธ ๊ฐ•๋‚จ์— ์œ„์น˜ํ•œ ์—ฌ๊ธฐ์–ด๋•Œ ๋ณธ์‚ฌ์—์„œ ๋ฐ‹์—…์„ ํ•˜๊ฒŒ ๋˜์–ด ๋•๋ถ„์— ๋‹ค๋ฅธ ํšŒ์‚ฌ ๊ตฌ๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ์ „ ๋‹ค๋ฅธ IT ์Šคํƒ€ํŠธ์—… ๋ฐ‹์—… ํ–‰์‚ฌ์—์„œ๋„ ๋Š๊ผˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ ์—„์ฒญ๋‚˜๊ฒŒ ํฐ ์‹œ์„ค์€ ์•„๋‹ˆ์ง€๋งŒ ์•„๊ธฐ์ž๊ธฐํ•˜๊ฒŒ ํšŒ์‚ฌ์˜ ์ƒ‰๊น”๊ณผ ํŠน์ง•์„ ์ž˜ ์‚ด๋ ค๋†“์€ ์ธํ…Œ๋ฆฌ์–ด๊ฐ€ ์ธ์ƒ์ ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์‚ฌ๋žŒ์ด ๋„ˆ๋ฌด~ ๋งŽ์ด ์™€์„œ ์•ฝ๊ฐ„ ์ง‘์ค‘์ด ์•ˆ ๋ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๋‹คํ–‰ํžˆ๋„ ์ž๋ฆฌ๋ฅผ ์ž˜ ์žก์•„์„œ ์„ธ์…˜์„ ๋“ฃ๋Š” ๋ฐ๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์—†์—ˆ๋‹ค. (์ •ํ™•ํ•˜์ง„ ์•Š์ง€๋งŒ ์ฐธ์„ํ•˜์‹  ๋ถ„๋“ค ์ค‘์˜ ์ ˆ๋ฐ˜ ์ •๋„๋งŒ ๊ฐ•์˜์žฅ์— ๋“ค์–ด์˜ค๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฐ–์—์„œ ๋“ฃ๋Š” ๊ฑธ ๋ณด๊ณ  ์ด๋Ÿฐ IT ํ–‰์‚ฌ์˜ ์ธ๊ธฐ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์‹ค๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.) ‘์—ฌ๊ธฐ์–ด๋•Œ’ ๋ณธ์‚ฌ๊ฑด๋ฌผ์—์„œ ์—˜๋ผ์Šคํ‹ฑ ๋ฐ‹์—…์„!" ‘์—ฌ๊ธฐ์–ด๋•Œ’ ๋ณธ์‚ฌ๊ฑด๋ฌผ์—์„œ ์—˜๋ผ์Šคํ‹ฑ ๋ฐ‹์—…์„! ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ 6.5 ์ตœ์‹ ๋ฒ„์ „ ์†Œ๊ฐœ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ๊ณ  ํ–‰์‚ฌ ์ฒ˜์Œ ์„ธ์…˜์œผ๋กœ ๊น€์ข…๋ฏผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์—”์ง€๋‹ˆ์–ด ๋ถ„๊ป˜์„œ ์—˜๋ผ์Šคํ‹ฑ์˜ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ ์ •๋ณด์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ๋™์— ๋Œ€ํ•ด์„œ ํšŒ๊ณ ํ•ด์ฃผ์…จ๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜๋ฅผ ์ ‘ํ•œ ๋ฒ„์ „์ด 2.4์˜€๋Š”๋ฐ ๋ฒŒ์จ 6.5๋ผ๋‹ˆ… ๋นจ๋ผ๋„ ๋„ˆ๋ฌด ๋น ๋ฅด๋‹ค. ์ด๋ฒˆ ๋ฒ„์ „์—์„œ๋Š” ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋กœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ Cross-cluster replication (ํด๋Ÿฌ์Šคํ„ฐ ๋ณต์ œ) ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ  ODBC Client ์ถ”๊ฐ€, ์ž๋ฐ” 11์ง€์› ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ํŠนํžˆ ํ‚ค๋ฐ”๋‚˜์—์„œ๋Š” ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ถ„์„ํ•ด์„œ ์ธ๋ฑ์‹ฑ์„ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋„ ์ƒ๊ฒผ๊ณ  (ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 100๋ฉ”๊ฐ€ ์ œํ•œ์ด๋ผ๋Š”๊ฒŒ ์‚ด์ง ์•„์‰ฝ๊ธด ํ–ˆ๋‹ค.) ์บ”๋ฒ„์Šค, ์ŠคํŽ˜์ด์Šค ๋“ฑ ์—ญ์‹œ ํ‚ค๋ฐ”๋‚˜ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ •๋„๋กœ ๋น„์ฃผ์–ผ๋ผ์ด์ง•์„ ํ•œ๋ฒˆ๋” ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ๋“ฏ ํ•˜๋‹ค. (๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ ํ•˜๋Š” ์ •๋„๋กœ… ์—˜๋ผ์Šคํ‹ฑ ์Šคํƒ์„ ๋“ค์–ด๋ณด๊ธฐ๋งŒ ํ•˜๋˜ ํ•จ๊ป˜ ์ฐธ์„ํ•œ ๋™๊ธฐ ๋…€์„๋„ ๋‹น์žฅ ํ•ด๋ณด๊ฒ ๋‹ค๊ณ  ํ•  ์ •๋„๋กœ…) ๋‹ค๋ฅธ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋„ˆ๋ฌด๋‚˜ ๋น ๋ฅธ ๋ฒ„์ „์—…๊ณผ ๋„ˆ๋ฌด๋‚˜ ๋ฐœ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋Š” ์‚ฌ๋žŒ๋“ค" ๋„ˆ๋ฌด๋‚˜ ๋น ๋ฅธ ๋ฒ„์ „์—…๊ณผ ๋„ˆ๋ฌด๋‚˜ ๋ฐœ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋Š” ์‚ฌ๋žŒ๋“ค ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ํ™œ์šฉ์‚ฌ๋ก€ ์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ ๋ฐ ์—ฌ๊ธฐ์–ด๋•Œ ์—์„œ ์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜๋ฅผ ํ™œ์šฉํ•œ ์‚ฌ๋ก€๋ฅผ ๋ฐœํ‘œํ•ด ์ฃผ์…จ๋‹ค. ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ํ•„์ž๋Š” 5.6 ๋ฒ„์ „๊นŒ์ง€๋ฐ–์— ์‚ฌ์šฉํ•œ ๊ฒŒ ์ „๋ถ€์—ฌ์„œ์ธ์ง€(๊ทธ๊ฒƒ๋„ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋งŒ) ์ „์ฒด ๋ฐœํ‘œ ๋‚ด์šฉ์„ ๋‹ค ์ดํ•ด๋ฅผ ํ•˜์ง„ ๋ชปํ–ˆ์ง€๋งŒ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ์ƒ๊ธด ๋ฌธ์ œ๋‚˜ ์‚ฝ์งˆ ๊ฒฝํ—˜๋‹ด์„ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ„์ ‘์ ์œผ๋กœ๋ผ๋„ ๊ทธ๋•Œ์˜ ํ˜„์žฅ๊ฐ(?)์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์–ด ์ข‹์•˜๊ณ , ํ•œํŽธ์œผ๋กœ ์—ฌํƒœ๊นŒ์ง€ ๋‚˜๋ฆ„ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜๋ฅผ ๋งŒ์ ธ๋ดค๋‹ค๊ณ  ์•ฝ๊ฐ„์˜ ์ž์‹ ๊ฐ ๋ฐ˜ ์ž๋งŒ์‹ฌ ๋ฐ˜์œผ๋กœ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ์—ญ์‹œ ์„ธ์ƒ์—” ๊ณ ์ˆ˜๊ฐ€ ๋งŽ๊ตฌ๋‚˜ ํ•˜๋ฉฐ ๋‹ค์‹œ ๋ถ„๋ฐœํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์งํ–ˆ๋‹ค. ์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ + ์—ฌ๊ธฐ์–ด๋•Œ" ์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ + ์—ฌ๊ธฐ์–ด๋•Œ @@ -65,14 +70,4 @@ Elastic ์—์„œ Remote ๋กœ ์ผํ•˜๊ธฐ / ๊น€์ข…๋ฏผ ๋‹˜ ๊ทธ์ „๋ถ€ํ„ฐ Elastic ์ œํ’ˆ๋“ค์„ ์‹ค๋ฌด์—์„œ๋„ ์‚ฌ์šฉํ•ด ์™”์—ˆ๊ธฐ์— ๊ฐœ์ธ์ ์œผ๋กœ ์˜ค๋Š˜ ๋ฐœํ‘œ์ค‘์— ๊ฐ€์žฅ ๊ถ๊ธˆํ–ˆ์—ˆ๊ณ , ๊ด€์‹ฌ์ด ์žˆ๋˜ ์‹œ๊ฐ„์ด์˜€๋‹ค. ๋ฐœํ‘œ์— ์•ž์„œ ์–ด๋–ป๊ฒŒ Elastic์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์…จ๊ณ  ํšŒ์‚ฌ ์†Œ๊ฐœ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•ด์ฃผ์…จ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋งˆ์–ด๋งˆํ•œ ํšŒ์‚ฌ๋‹ค๊ณ  ๋Š๋‚„์ˆ˜ ์žˆ์—ˆ๋‹ค.(800์—ฌ๋ช…์ค‘ ํ•œ๊ตญ์—” 9๋ช… / ๋„ค๋œ๋ž€๋“œ ์ถœ์‹  ์Šคํƒ€ํŠธ์—… ์ธ๋ฐ ๋ณธ์‚ฌ๋Š” ์บ˜๋ฆฌํฌ๋‹ˆ์•„ ๋งˆ์šดํ‹ด๋ทฐ์— ์žˆ๊ณ  ๋“ฑ๋“ฑ) ์›๊ฒฉ๊ทผ๋ฌด๋Š” ํŽธํ•˜๊ณ  ๋น„์šฉ์ด ์ ˆ์•ฝ๋˜๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜ ๋™๋ฃŒ๋“ค๊ฐ„์˜ ์œ ๋Œ€๊ฐํ˜•์„ฑ์ด ํž˜๋“ค๊ฑฐ๋‚˜ ํšŒ์˜์‹œ ์ง‘์ค‘์ด ํž˜๋“  ๋‹จ์ ๋„ ์žˆ๋‹ค๋Š” ์ ์„ ๋ง์”€ํ•ด ์ฃผ์…จ๋‹ค. ์‹œ๊ฐ„๊ด€๊ณ„์ƒ ๋ช‡๊ฐ€์ง€ ๋งํฌ๋“ค์„ ์†Œ๊ฐœํ•ด์ฃผ์…จ๋Š”๋ฐ ๋‚˜์ค‘์— ๋ด๋ณผ ์ƒ๊ฐ์ด๋‹ค. ์นจ๋Œ€์—์„œ ํšŒ์‚ฌ๊นŒ์ง€ 1๋ถ„ [๋งˆ์†Œ 392ํ˜ธ] ๋ฆฌ๋ชจํŠธ ์›Œํฌ์˜ ์ค‘์‹ฌ์— ์„œ๋ณด๋‹ค ์›๊ฒฉ ํˆด๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. github : ์Šฌ๋ž™์—ฐ๋™, ๊ฐœ๋ฐœ๋ฟ ์•„๋‹ˆ๋ผ ์šด์˜/๊ธฐํš/์ด๋ฒคํŠธ ๊ณต์œ ์‹œ ํ™œ์šฉ Google Apps Slack : ๋ด‡ ํ™œ์šฉ (๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ด‡, ์ƒํ™ฉ๋งˆ๋‹ค ํŠน์ • ์•Œ๋ฆผ์„ ์ค€๋‹ค.) salesforce : CRM ํˆด zoom : ํ™”์ƒํšŒ์˜ 200๋ช… ๋™์‹œ์ฝœ ๊ฐ€๋Šฅ, ํšŒ์˜๊ฐ€ ๋๋‚˜๋ฉด ๋…น์Œ/๋…นํ™”/์Šคํฌ๋ฆฝํŒ…๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค (wow) pinboard : ๊ทผํƒœ/์ธ์‚ฌ ๊ด€๋ฆฌ์šฉ ์•ฑ jira๋Š” ์‚ฌ์šฉ ์ž˜ ์•ˆํ•จ ๋‚˜์ค‘์— ํŒ€ ๋‚ด Slack ๋ด‡์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค์–‘ํ•œ ์ž๋™ํ™”๋ฅผ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. -์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„ ์ผ์›์œผ๋กœ์„œ์˜ ๊ฐœ๋ฐœ์ž / ๋ณ€์ •ํ›ˆ ๋‹˜ ์‚ฌํšŒ์ž๋ถ„์ด “์•„์›ƒ์‚ฌ์ด๋”๋‹˜"์ด๋ผ๊ณ  ํ•˜์‹œ๊ธธ๋ž˜ ์„ค๋งˆ ํ–ˆ๋‹ค. ๋ญ๊ฐ€ ์ž˜ ์•ˆ๋˜๋ฉด ๊ตฌ๊ธ€๋ง์„ ํ•˜๊ฒŒ๋˜๋Š”๋ฐ ๋‚ด๊ฐ€ ์ž์ฃผ ๋ณด๋˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜์…จ๋˜ ๋ถ„์ด ๋‚ด๋ˆˆ์•ž์— ใ„ทใ„ท… ์–ธ์ œ๋ถ€ํ„ฐ ํ•ด์•ผ์ง€~๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋‹ˆ ์–ด๋Š์ƒˆ ์˜คํ”ˆ์†Œ์Šค์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ์ฐธ์—ฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ์ด๋ฏธ ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„์†์—์„œ ์‚ด๊ณ ์žˆ๋Š” ์šฐ๋ฆฌ๋“ค์ด๋ผ ๋ง์”€ํ•˜์‹œ๊ณ , ์˜คํ”ˆ์†Œ์Šค Contribution ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์‚ฌ์šฉ/ํ™๋ณด/๋ฒˆ์—ญ/๋ฆฌํฌํŒ…/๋ฌธ์„œํ™”/์ฝ”๋“œ์ œ์ถœ ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ์œผ๋‹ˆ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง์ž ๋ผ๊ณ  ํ•˜์…จ๋‹ค. ์˜คํ”ˆ์†Œ์Šค์—์„œ ๋ฐฐ์šธ์ˆ˜ ์žˆ๋Š”์ ์€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ๋ฐฉ๋ฒ•, ํ˜‘์—…์˜ ๋ฐฉ๋ฒ•๊ณผ ์ค‘์š”์„ฑ, ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ์ค‘์š”์„ฑ, ์ง€์†์  ํ†ตํ•ฉ/์ง€์†์  ๋ฐฐํฌ, ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ด€๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค. ์ ์  ๋ฐœํ‘œ๋ฅผ ๋“ค์œผ๋ฉด์„œ ์˜คํ”ˆ์†Œ์Šค์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ๋ฐ”๋€Œ๊ณ  ์žˆ๋Š” ๋‚ด ์ž์‹ ์„ ๋Š๋‚„์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ดˆ๊ฐ„๋‹จ API์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 2๋ถ€ (Python + Flask + Nginx)

์ง€๋‚œํฌ์ŠคํŒ…์— ์ด์–ด ์ด๋ฒˆ์—” Flask์™€ Nginx๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. Apache๋กœ ์—ฐ๋™ํ–ˆ๋Š”๋ฐ ์™œ ๋˜ Nginx๋กœ ์—ฐ๋™ํ•˜๋Š”๊ฑธ ์ •๋ฆฌํ•˜์ง€(?)ํ•˜๋ฉฐ ์˜๋ฌธ์ด ๋“ค์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์„ ๋ด๋„ Apache + Flask ์กฐํ•ฉ๋ณด๋‹ค Nginx + Flask ์กฐํ•ฉ์ด ๋” ๋งŽ๊ณ  ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋„ ์•Œ์ˆ˜์žˆ์—ˆ๋“ฏ์ด (Apache VS Nginx) ๋‘˜์ค‘ ์–ด๋Š๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ• ์ˆ˜๋„ ์—†๊ณ  ๊ฐ ์ƒํ™ฉ์—์„œ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ด ๋˜ํ•œ ๋‚˜๋งŒ์˜ ๋ฌด๊ธฐ๊ฐ€ ๋ ๊ฒƒ๊ฐ™์•„ Nginx๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค. -1๋ถ€์—์„œ ์™œ Flask์ธ๊ฐ€, Flask์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ–ˆ์œผ๋‹ˆ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜์ง„ ์•Š๋Š”๋‹ค. -Nginx ์„ค์น˜ ( https://nginx.org/en/ ) ์—ญ์‹œ ์†Œ์Šค์„ค์น˜๋ฅผ ํ•œ๋‹ค. -- ๋‹ค์šด์„ ๋ฐ›๊ณ  $ https://nginx.org/download/nginx-1.14.0.tar.gz - ์••์ถ•์„ ํ‘ผ ๋‹ค์Œ $ tar -zxvf nginx-1.14.0.tar.gz - ํด๋”๋กœ ์ด๋™ํ•ด์„œ $ cd nginx-1.14.0 - ์„ค์น˜ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๊ณ  $ ./configure --prefix=/~~~/apps/nginx - make ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  $ make - ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. $ make install ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ผ๋‹จ Nginx๋Š” ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค. -uWSGI ์„ค์น˜ ( https://uwsgi-docs.readthedocs.io/ ) ์•ž์„œ Apache์™€ ์—ฐ๋™ํ• ๋•Œ๋Š” ๋ณ„๋„์˜ ๋ชจ๋“ˆ์„ Apache์—๊ฒŒ ๋“ฑ๋กํ•˜๋Š” ํ˜•ํƒœ์˜€๋‹ค๋ฉด Nginx๋Š” WSGIํ”„๋กœํ† ์ฝœ์„ ํ™œ์šฉํ•˜๋Š” WSGI ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. -- ๋‹ค์šด์„ ๋ฐ›๊ณ  $ wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz - ์••์ถ•์„ ํ’€๊ณ  $ tar zxvf uwsgi-latest.tar.gz - ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ $ cd uwsgi-2.0.17 - make ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 'uwsgi'์ด๋ผ๋Š” ์‹คํ–‰ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. $ make Nginx ์„ค์ • Apache์™€ ๋น„์Šทํ•˜๊ฒŒ uWSGI ๊ด€๋ จ ์„ค์ •์„ ํ•ด์ค€๋‹ค. -server { listen 80; server_name localhost; location / { # ( / ) ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ include uwsgi_params; # GET/POST ๋“ฑ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ include ํ•ด์ค€๋‹ค. uwsgi_pass 127.0.0.1:3031; # ์š”์ฒญ์„ IP:PORT๋กœ ์ „๋‹ฌํ•œ๋‹ค. } } ๋ณ„๋„์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ์ „๋‹ฌํ•ด์ฃผ๋Š” (proxy๋Š๋‚Œ) ์„ค์ •์„ ํ•ด์ค€๋‹ค. -uWSGI ์‹คํ–‰ ๋ฐ Nginx ์žฌ์‹œ์ž‘ ์•ž์„œ ์„ค์น˜ํ•œ uwsgi๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ IP:port ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์ฃผ๊ณ  (์œ„์—์„œ ์ „๋‹ฌ๋ฐ›์€ IP:PORT์™€ ๋™์ผํ•˜๊ฒŒ) Apache ์—ฐ๋™์‹œ ํ™œ์šฉํ–ˆ๋˜ wsgiํŒŒ์ผ์„ ์ด๋ฒˆ์—๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค. -$ ./uwsgi -s 127.0.0.1:3031 --wsgi-file /~~~/python_app/hello_world.wsgi ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด background๋กœ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹Œ foreground๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— &์„ ์‚ฌ์šฉํ•œ๋‹ค๋˜์ง€ ํ•ด์„œ background๋กœ ์‹คํ–‰๋˜๋„๋ก ํ•ด์ค€๋‹ค. ๊ทธํ›„ Nginx๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ๋ฉด ์›ํ•˜๋Š” ๊ทธํ† ๋ก ์›ํ–ˆ๋˜ Hello World!๋ฅผ ๋งŒ๋‚ ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค. -Apache์—ฐ๋™๊ณผ ์กฐ๊ธˆ ๋‹ค๋ฅธ์ ์€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€์•Š๊ณ  ๋ณ„๋„์˜ ์ „๋‹ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(?)์ด ํ•„์š”ํ•˜๋‹ค๋Š”์ ์ด๋‹ค. ๊ฐ„๋‹จํžˆ Apache์ฒ˜๋Ÿผ ๋ชจ๋“ˆ๋งŒ ๋„ฃ์œผ๋ฉด ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ๋ถˆํŽธํ• ์ˆ˜๋„ ์žˆ์„๊ฒƒ ๊ฐ™์ง€๋งŒ ํ•œํŽธ์œผ๋กœ๋Š” ๊ด€๋ฆฌํ• ์ˆ˜์žˆ๋Š” ํฌ์ธํŠธ๊ฐ€ ๋” ๋Š˜์–ด๋‚œ ์…ˆ์ด๋ผ ์–ด๋–ค ์ธก๋ฉด์—์„œ๋Š” ํ™œ์šฉํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•˜๋‚˜ ๋Š˜์–ด๋‚œ๊ฒƒ์œผ๋กœ ๋ณผ์ˆ˜๋„ ์žˆ๋‹ค. -๋งˆ์น˜๋ฉฐ ๋ง‰์ƒ ์ •๋ฆฌํ•˜๊ณ  ๋‚˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹Œ๋ฐ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ๋ชธ๋ถ€๋ฆผ์„ ์ณ๊ฐ€๋ฉฐ ์ฑ…์ด๋ฉฐ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ ์  ์„ฑ์žฅ์„ ํ•˜๋Š”๊ฒƒ ๊ฐ™๋‹ค. (์„ฑ์žฅํ†ต์ด๋ผ๊ณ ๋‚˜ ํ• ๊นŒ) ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํžˆ Flask๋ฅผ ํ• ์ˆ˜์žˆ๋‹ค ๊ฐ€ ์•„๋‹Œ ์›น์„œ๋ฒ„๋ฅผ ์—ฐ๋™ํ• ์ˆ˜์žˆ๋‹ค. ๊ทธ๊ฒƒ๋„ Apache์™€ Nginx ๋‘๊ฐœ๋‚˜. ์ด๊ฒƒ๋„ ์–ธ์  ๊ฐ„ ๋‚˜๋งŒ์˜ ๋ฌด๊ธฐ๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ?
\ No newline at end of file +์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„ ์ผ์›์œผ๋กœ์„œ์˜ ๊ฐœ๋ฐœ์ž / ๋ณ€์ •ํ›ˆ ๋‹˜ ์‚ฌํšŒ์ž๋ถ„์ด “์•„์›ƒ์‚ฌ์ด๋”๋‹˜"์ด๋ผ๊ณ  ํ•˜์‹œ๊ธธ๋ž˜ ์„ค๋งˆ ํ–ˆ๋‹ค. ๋ญ๊ฐ€ ์ž˜ ์•ˆ๋˜๋ฉด ๊ตฌ๊ธ€๋ง์„ ํ•˜๊ฒŒ๋˜๋Š”๋ฐ ๋‚ด๊ฐ€ ์ž์ฃผ ๋ณด๋˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜์…จ๋˜ ๋ถ„์ด ๋‚ด๋ˆˆ์•ž์— ใ„ทใ„ท… ์–ธ์ œ๋ถ€ํ„ฐ ํ•ด์•ผ์ง€~๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋‹ˆ ์–ด๋Š์ƒˆ ์˜คํ”ˆ์†Œ์Šค์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ์ฐธ์—ฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ์ด๋ฏธ ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„์†์—์„œ ์‚ด๊ณ ์žˆ๋Š” ์šฐ๋ฆฌ๋“ค์ด๋ผ ๋ง์”€ํ•˜์‹œ๊ณ , ์˜คํ”ˆ์†Œ์Šค Contribution ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์‚ฌ์šฉ/ํ™๋ณด/๋ฒˆ์—ญ/๋ฆฌํฌํŒ…/๋ฌธ์„œํ™”/์ฝ”๋“œ์ œ์ถœ ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ์œผ๋‹ˆ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง์ž ๋ผ๊ณ  ํ•˜์…จ๋‹ค. ์˜คํ”ˆ์†Œ์Šค์—์„œ ๋ฐฐ์šธ์ˆ˜ ์žˆ๋Š”์ ์€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ๋ฐฉ๋ฒ•, ํ˜‘์—…์˜ ๋ฐฉ๋ฒ•๊ณผ ์ค‘์š”์„ฑ, ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ์ค‘์š”์„ฑ, ์ง€์†์  ํ†ตํ•ฉ/์ง€์†์  ๋ฐฐํฌ, ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ด€๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค. ์ ์  ๋ฐœํ‘œ๋ฅผ ๋“ค์œผ๋ฉด์„œ ์˜คํ”ˆ์†Œ์Šค์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ๋ฐ”๋€Œ๊ณ  ์žˆ๋Š” ๋‚ด ์ž์‹ ์„ ๋Š๋‚„์ˆ˜ ์žˆ์—ˆ๋‹ค.
\ No newline at end of file diff --git a/page/7/index.html b/page/7/index.html index ed2cb890..d586e015 100644 --- a/page/7/index.html +++ b/page/7/index.html @@ -1,5 +1,15 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์ดˆ๊ฐ„๋‹จ API์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ (Python + Flask + Apache)

Staticํ•œ HTML์ด ์•„๋‹Œ ๋กœ์ง์ด ํ•„์š”ํ•œ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. (์ด์ œ๊นŒ์ง€ ์ง€์‹์œผ๋กœ)์ฒ˜์Œ ๋จธ๋ฆฟ์†์— ๋– ์˜ค๋ฅด๋Š”๊ฑด Java๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์Šคํ”„๋ง์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  apache์— tomcat์„ ์—ฐ๋™ํ•œ ๋‹ค์Œ …์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ •ํ•˜๋Š” ์‹œ๊ฐ„์ด ์€๊ทผ ๋งŽ์ด ์†Œ์š”๋œ๋‹ค. (๋ฌผ๋ก  Java Config, Spring Boot ๋“ฑ ๊ฐ„์†Œํ•ด์กŒ์ง€๋งŒ…) ์–ผ๋งˆ์ „๋ถ€ํ„ฐ Python์— ๋Œ€ํ•œ ๋งค๋ ฅ์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ Python์œผ๋กœ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ• ์ˆœ ์—†์„๊นŒ ์•Œ์•„๋ดค๊ณ  (๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„ ๋“€๋ž‘๊ณ  ์„œ๋ฒ„๊ฐ€ python์ด๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•˜๊ณ …) Flask์™€ Django๊ฐ€ ์žˆ์–ด์„œ ๋‘˜๋‹ค ์จ๋ณธ ๊ฒฐ๊ณผ ํ•„์ž๋Š” Flask๊ฐ€ ๋งž๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ๊นŒ ํ•œ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

์ดˆ๊ฐ„๋‹จ API์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 2๋ถ€ (Python + Flask + Nginx)

์ง€๋‚œํฌ์ŠคํŒ…์— ์ด์–ด ์ด๋ฒˆ์—” Flask์™€ Nginx๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. Apache๋กœ ์—ฐ๋™ํ–ˆ๋Š”๋ฐ ์™œ ๋˜ Nginx๋กœ ์—ฐ๋™ํ•˜๋Š”๊ฑธ ์ •๋ฆฌํ•˜์ง€(?)ํ•˜๋ฉฐ ์˜๋ฌธ์ด ๋“ค์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์„ ๋ด๋„ Apache + Flask ์กฐํ•ฉ๋ณด๋‹ค Nginx + Flask ์กฐํ•ฉ์ด ๋” ๋งŽ๊ณ  ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋„ ์•Œ์ˆ˜์žˆ์—ˆ๋“ฏ์ด (Apache VS Nginx) ๋‘˜์ค‘ ์–ด๋Š๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ• ์ˆ˜๋„ ์—†๊ณ  ๊ฐ ์ƒํ™ฉ์—์„œ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ด ๋˜ํ•œ ๋‚˜๋งŒ์˜ ๋ฌด๊ธฐ๊ฐ€ ๋ ๊ฒƒ๊ฐ™์•„ Nginx๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค. +1๋ถ€์—์„œ ์™œ Flask์ธ๊ฐ€, Flask์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ–ˆ์œผ๋‹ˆ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜์ง„ ์•Š๋Š”๋‹ค. +Nginx ์„ค์น˜ ( https://nginx.org/en/ ) ์—ญ์‹œ ์†Œ์Šค์„ค์น˜๋ฅผ ํ•œ๋‹ค. +- ๋‹ค์šด์„ ๋ฐ›๊ณ  $ https://nginx.org/download/nginx-1.14.0.tar.gz - ์••์ถ•์„ ํ‘ผ ๋‹ค์Œ $ tar -zxvf nginx-1.14.0.tar.gz - ํด๋”๋กœ ์ด๋™ํ•ด์„œ $ cd nginx-1.14.0 - ์„ค์น˜ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๊ณ  $ ./configure --prefix=/~~~/apps/nginx - make ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  $ make - ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. $ make install ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ผ๋‹จ Nginx๋Š” ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค. +uWSGI ์„ค์น˜ ( https://uwsgi-docs.readthedocs.io/ ) ์•ž์„œ Apache์™€ ์—ฐ๋™ํ• ๋•Œ๋Š” ๋ณ„๋„์˜ ๋ชจ๋“ˆ์„ Apache์—๊ฒŒ ๋“ฑ๋กํ•˜๋Š” ํ˜•ํƒœ์˜€๋‹ค๋ฉด Nginx๋Š” WSGIํ”„๋กœํ† ์ฝœ์„ ํ™œ์šฉํ•˜๋Š” WSGI ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. +- ๋‹ค์šด์„ ๋ฐ›๊ณ  $ wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz - ์••์ถ•์„ ํ’€๊ณ  $ tar zxvf uwsgi-latest.tar.gz - ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ $ cd uwsgi-2.0.17 - make ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 'uwsgi'์ด๋ผ๋Š” ์‹คํ–‰ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. $ make Nginx ์„ค์ • Apache์™€ ๋น„์Šทํ•˜๊ฒŒ uWSGI ๊ด€๋ จ ์„ค์ •์„ ํ•ด์ค€๋‹ค. +server { listen 80; server_name localhost; location / { # ( / ) ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ include uwsgi_params; # GET/POST ๋“ฑ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ include ํ•ด์ค€๋‹ค. uwsgi_pass 127.0.0.1:3031; # ์š”์ฒญ์„ IP:PORT๋กœ ์ „๋‹ฌํ•œ๋‹ค. } } ๋ณ„๋„์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ์ „๋‹ฌํ•ด์ฃผ๋Š” (proxy๋Š๋‚Œ) ์„ค์ •์„ ํ•ด์ค€๋‹ค. +uWSGI ์‹คํ–‰ ๋ฐ Nginx ์žฌ์‹œ์ž‘ ์•ž์„œ ์„ค์น˜ํ•œ uwsgi๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ IP:port ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์ฃผ๊ณ  (์œ„์—์„œ ์ „๋‹ฌ๋ฐ›์€ IP:PORT์™€ ๋™์ผํ•˜๊ฒŒ) Apache ์—ฐ๋™์‹œ ํ™œ์šฉํ–ˆ๋˜ wsgiํŒŒ์ผ์„ ์ด๋ฒˆ์—๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค. +$ ./uwsgi -s 127.0.0.1:3031 --wsgi-file /~~~/python_app/hello_world.wsgi ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด background๋กœ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹Œ foreground๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— &์„ ์‚ฌ์šฉํ•œ๋‹ค๋˜์ง€ ํ•ด์„œ background๋กœ ์‹คํ–‰๋˜๋„๋ก ํ•ด์ค€๋‹ค. ๊ทธํ›„ Nginx๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ๋ฉด ์›ํ•˜๋Š” ๊ทธํ† ๋ก ์›ํ–ˆ๋˜ Hello World!๋ฅผ ๋งŒ๋‚ ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค. +Apache์—ฐ๋™๊ณผ ์กฐ๊ธˆ ๋‹ค๋ฅธ์ ์€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€์•Š๊ณ  ๋ณ„๋„์˜ ์ „๋‹ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(?)์ด ํ•„์š”ํ•˜๋‹ค๋Š”์ ์ด๋‹ค. ๊ฐ„๋‹จํžˆ Apache์ฒ˜๋Ÿผ ๋ชจ๋“ˆ๋งŒ ๋„ฃ์œผ๋ฉด ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ๋ถˆํŽธํ• ์ˆ˜๋„ ์žˆ์„๊ฒƒ ๊ฐ™์ง€๋งŒ ํ•œํŽธ์œผ๋กœ๋Š” ๊ด€๋ฆฌํ• ์ˆ˜์žˆ๋Š” ํฌ์ธํŠธ๊ฐ€ ๋” ๋Š˜์–ด๋‚œ ์…ˆ์ด๋ผ ์–ด๋–ค ์ธก๋ฉด์—์„œ๋Š” ํ™œ์šฉํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•˜๋‚˜ ๋Š˜์–ด๋‚œ๊ฒƒ์œผ๋กœ ๋ณผ์ˆ˜๋„ ์žˆ๋‹ค. +๋งˆ์น˜๋ฉฐ ๋ง‰์ƒ ์ •๋ฆฌํ•˜๊ณ  ๋‚˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹Œ๋ฐ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ๋ชธ๋ถ€๋ฆผ์„ ์ณ๊ฐ€๋ฉฐ ์ฑ…์ด๋ฉฐ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ ์  ์„ฑ์žฅ์„ ํ•˜๋Š”๊ฒƒ ๊ฐ™๋‹ค. (์„ฑ์žฅํ†ต์ด๋ผ๊ณ ๋‚˜ ํ• ๊นŒ) ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํžˆ Flask๋ฅผ ํ• ์ˆ˜์žˆ๋‹ค ๊ฐ€ ์•„๋‹Œ ์›น์„œ๋ฒ„๋ฅผ ์—ฐ๋™ํ• ์ˆ˜์žˆ๋‹ค. ๊ทธ๊ฒƒ๋„ Apache์™€ Nginx ๋‘๊ฐœ๋‚˜. ์ด๊ฒƒ๋„ ์–ธ์  ๊ฐ„ ๋‚˜๋งŒ์˜ ๋ฌด๊ธฐ๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ?

์ดˆ๊ฐ„๋‹จ API์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ (Python + Flask + Apache)

Staticํ•œ HTML์ด ์•„๋‹Œ ๋กœ์ง์ด ํ•„์š”ํ•œ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. (์ด์ œ๊นŒ์ง€ ์ง€์‹์œผ๋กœ)์ฒ˜์Œ ๋จธ๋ฆฟ์†์— ๋– ์˜ค๋ฅด๋Š”๊ฑด Java๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์Šคํ”„๋ง์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  apache์— tomcat์„ ์—ฐ๋™ํ•œ ๋‹ค์Œ …์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ •ํ•˜๋Š” ์‹œ๊ฐ„์ด ์€๊ทผ ๋งŽ์ด ์†Œ์š”๋œ๋‹ค. (๋ฌผ๋ก  Java Config, Spring Boot ๋“ฑ ๊ฐ„์†Œํ•ด์กŒ์ง€๋งŒ…) ์–ผ๋งˆ์ „๋ถ€ํ„ฐ Python์— ๋Œ€ํ•œ ๋งค๋ ฅ์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ Python์œผ๋กœ API์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ• ์ˆœ ์—†์„๊นŒ ์•Œ์•„๋ดค๊ณ  (๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„ ๋“€๋ž‘๊ณ  ์„œ๋ฒ„๊ฐ€ python์ด๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•˜๊ณ …) Flask์™€ Django๊ฐ€ ์žˆ์–ด์„œ ๋‘˜๋‹ค ์จ๋ณธ ๊ฒฐ๊ณผ ํ•„์ž๋Š” Flask๊ฐ€ ๋งž๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ๊นŒ ํ•œ๋‹ค. ‘์žฅ๊ณ ’๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” Django์—๋Š” ๋ชจ๋“ ๊ฒƒ๋“ค์ด ๋‹ค ๋“ค์–ด๊ฐ€ ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋„ˆ๋ฌด ํŽธ๋ฆฌํ•˜๋‹ค. (DB, ์–ด๋“œ๋ฏผ ๋“ฑ ) ํ•˜์ง€๋งŒ Flask๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ๊ฒƒ๋“ค๋งŒ importํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ์–ด๋–ค ์ธก๋ฉด์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค ํ• ์ˆ˜ ์žˆ๊ฒ ์œผ๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ์šฉ์ดํ•˜๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์—ˆ๊ธฐ์— Flask๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. (Django๊ฐ€ Flask๋ณด๋‹ค ์•ˆ์ข‹๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ๋‹ˆ ์˜คํ•ด๋Š” ํ•˜์ง€ ๋งˆ์‹œ๊ธธ…) ๊ธ€์“ฐ๊ธฐ์— ์•ž์„œ ๋ณธ ํฌ์ŠคํŒ…์€ 2๊ฐœ์˜ ํฌ์ŠคํŒ…์— ๊ฑธ์ณ ์‹œ๋ฆฌ์ฆˆ(?)ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๋‹ค. 1๋ถ€์—์„œ๋Š” Flask๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉฐ Apache์™€ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ , 2๋ถ€์—์„œ๋Š” Nginx์™€ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ํ™˜๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. CentOS 7.4 Python 3.6 (๊ธฐ๋ณธ์€ 2.7์ด์˜€์œผ๋‚˜ ์ถ”๊ฐ€๋กœ ์„ค์น˜) Flask ( http://flask.pocoo.org/ ) ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ๋„ ๋ณด๋ฉด ์•Œ์ˆ˜ ์žˆ๋“ฏ์ด ๋„ˆ~๋ฌด ๊ฐ„๋‹จํ•˜๋‹ค. ๋‹จ์ง€ ์•„๋ž˜ ์ฝ”๋“œ ๋ช‡์ค„๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ ์ดˆ๊ธฐ ์ž‘์„ฑ์‹œ ํ•ญ์ƒ ๋งŒ๋‚˜๋Š” “Hello World"๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋‹ค. @@ -73,8 +83,4 @@ Jenkins > ํ•ด๋‹น Job > configure" Jenkins > ํ•ด๋‹น Job > configure Github Webhook ์„ค์ • ์ด์ œ Github Repository ์˜ Hook ์„ค์ •๋งŒ ํ•˜๋ฉด ๋์ด๋‚œ๋‹ค. ํ•ด๋‹น Repository > Settings > Hooks ์„ค์ •์— ๋“ค์–ด๊ฐ€์„œ Add webhook์„ ์„ ํƒํ•˜์—ฌ Webhook์„ ๋“ฑ๋กํ•ด์ค€๋‹ค. URL์€ {jenkins URL}/jenkins/job/{job name}/buildWithParameters์‹์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ณ  Content Type ์€ application/x-www-form-urlencoded์œผ๋กœ ์„ ํƒํ•œ๋‹ค. ์–ธ์ œ Webhook์„ ํŠธ๋ฆฌ๊ฑฐ๋ง ์‹œํ‚ฌ๊บผ๋ƒ๋Š” ์˜ต์…˜์—์„œ๋Š” ์›ํ•˜๋Š” ์„ค์ •์— ๋งž์ถ”๋ฉด ๋˜๊ฒ ์ง€๋งŒ ๋‚˜๋Š” pullRequest๊ฐ€ ๋“ฑ๋ก ๋ ๋•Œ๋งŒ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ Jenkins Job์„ ์‹คํ–‰์‹œํ‚ฌ ๊ณ„ํš์ด์˜€์œผ๋‹ˆ Let me select individual events.์„ ์„ค์ •ํ•˜๊ณ  Pull Request์— ์ฒดํฌ๋ฅผ ํ•ด์ค€๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. ํ•ด๋‹น Repositroy > Settings > Hooks" ํ•ด๋‹น Repositroy > Settings > Hooks ์ด๋ ‡๊ฒŒ ๋“ฑ๋กํ•˜๊ณ  ๋‹ค์‹œ ๋“ค์–ด๊ฐ€์„œ ๋งจ ์•„๋žซ ๋ถ€๋ถ„Recent Deliveries์„ ๋ณด๋ฉด ping test ๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ต์„ ๋ฐ›์€๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜๊ฐ€ ์žˆ๋‹ค. Webhook ๋“ฑ๋ก ๊ฒฐ๊ณผ" Webhook ๋“ฑ๋ก ๊ฒฐ๊ณผ ์ด๋ ‡๊ฒŒ ์„ค์ •์„ ๋‹ค ํ•œ ๋’ค PullRequest๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด Jenkins ํ•ด๋‹น Job์—์„œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฉฐ ์‹คํ–‰์ด ๋œ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜๊ฐ€ ์žˆ๋‹ค. -Jenkins Job ์‹คํ–‰ ๊ฒฐ๊ณผ" Jenkins Job ์‹คํ–‰ ๊ฒฐ๊ณผ ๋~

Github๊ณผ Jenkins ์—ฐ๋™ํ•˜๊ธฐ

Jenkins์—์„œ Github์˜ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋นŒ๋“œ๋ฅผ ํ•˜๋Š” ๋“ฑ Github๊ณผ Jenkins์™€ ์—ฐ๋™์„ ์‹œ์ผœ์ค˜์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ๋ณ„๋„์˜ ์„ ํ–‰ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ˆ˜ ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” SSH๋กœ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์šฐ์„  Jenkins๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ๋Š” ์„œ๋ฒ„์—์„œ ์ธ์ฆํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์ž. -$ ssh-keygen -t rsa -f id_rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa. Your public key has been saved in id_rsa.pub. The key fingerprint is: SHA256:~~~~~ ~~~@~~~~~ The key's randomart image is: +---[RSA 2048]----+ | o*+**=*=**+ | | o B=o+o++o | | E+.o+ + oo .| | oo. * o ...| | .+ S = o | | . + o . | | . . . | | . | | | +----[SHA256]-----+ $ ls id_rsa id_rsa.pub ๊ฐœ์ธํ‚ค(id_rsa)๋Š” ์  ํ‚จ์Šค์— ์„ค์ •ํ•ด์ค€๋‹ค. (์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ณต์‚ฌ, ์ฒซ์ค„ ๋งˆ์ง€๋ง‰์ค„ ๋นผ๋ฉด ์•ˆ๋œ๋‹ค… ) -์  ํ‚จ์Šค์— SSH ๊ฐœ์ธํ‚ค ์„ค์ •" ์  ํ‚จ์Šค์— SSH ๊ฐœ์ธํ‚ค ์„ค์ • ๊ทธ ๋‹ค์Œ ๊ณต๊ฐœํ‚ค(id_rsa.pub)๋Š” Github์— ์„ค์ •์„ ํ•ด์ค€๋‹ค. -Github์— SSH ๊ณต๊ฐœํ‚ค ์„ค์ •" Github์— SSH ๊ณต๊ฐœํ‚ค ์„ค์ • ์ด๋ ‡๊ฒŒ ํ•œ๋’ค Jenkins ์—์„œ ์ž„์˜๋กœ job์„ ์ƒ์„ฑํ•˜๊ณ  job ์„ค์ • > ์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ ์—์„œ git ๋ถ€๋ถ„์— ์•„๋ž˜์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๋™์ด ๋œ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค. Credentials ๊ฐ’์„ ์œ„์—์„œ ์„ค์ •ํ•œ ๊ฐœ์ธํ‚ค๋กœ ์„ค์ •ํ•˜๊ณ , repo ์ฃผ์†Œ๋ฅผ SSH์šฉ์œผ๋กœ ์ ์—ˆ์„๋•Œ ์—๋Ÿฌ๊ฐ€ ์•ˆ๋‚˜์˜ค๋ฉด ์„ฑ๊ณตํ•œ๊ฒƒ์ด๋‹ค. -์ •์ƒ ์—ฐ๊ฒฐ๋˜๋ฉด Jenkins ์˜ค๋ฅ˜๋„ ์—†๊ณ , github SSH ํ‚ค์— ๋…น์ƒ‰๋ถˆ์ด ๋“ค์–ด์˜จ๋‹ค." ์ •์ƒ ์—ฐ๊ฒฐ๋˜๋ฉด Jenkins ์˜ค๋ฅ˜๋„ ์—†๊ณ , github SSH ํ‚ค์— ๋…น์ƒ‰๋ถˆ์ด ๋“ค์–ด์˜จ๋‹ค. ๋~
\ No newline at end of file +Jenkins Job ์‹คํ–‰ ๊ฒฐ๊ณผ" Jenkins Job ์‹คํ–‰ ๊ฒฐ๊ณผ ๋~
\ No newline at end of file diff --git a/page/8/index.html b/page/8/index.html index 425e2413..0262e997 100644 --- a/page/8/index.html +++ b/page/8/index.html @@ -1,5 +1,9 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

linux(centOS)์—์„œ selenium ์„ค์ •ํ•˜๊ธฐ (feat. python)

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ์•ˆ๋˜๋Š” ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋‹จ ์‚ฌ์šฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ํ™”๋ฉด์ด ๋œจ๊ณ , ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ Regression Test. ์ด๋•Œ ํ™œ์šฉํ• ์ˆ˜ ์žˆ๋Š”๊ฒŒ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋ฒˆ์—” selenium ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์‹ค web application ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๊ณ  selenium ๋ฅผ ์•Œ์•„๋ณด๊ฒŒ ๋œ๊ฑด ์•„๋‹ˆ๊ณ , ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ํŠน์ • ๋ฐด๋“œ(๋„ค์ด๋ฒ„ BAND)์—์„œ ์ผ์ฃผ์ผ์— ํ•œ๋ฒˆ์”ฉ ๋™์ผํ•œ ํ˜•ํƒœ์˜ ๊ธ€์„ ์˜ฌ๋ฆฌ๊ณ  ์žˆ๋Š”๋ฐ (์ผ์ข…์˜ ํ•œ์ฃผ ์ถœ์„์ฒดํฌ ๊ฐ™์€…) ์ด๋ฅผ ์ž๋™ํ™” ํ•ด๋ณผ์ˆœ ์—†์„๊นŒ ํ•˜๋ฉฐ ๋ฐด๋“œ API๋ฅผ ์ฐพ์•„๋ณด๋‹ค selenium ๋ผ๋Š”๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ๋งคํฌ๋กœ์ฒ˜๋Ÿผ ์–ด๋–ค๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  ๊ทธ๋‹ค์Œ ์–ด๋–ค๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๊ฐ๋™์„ ๋ฐ›์•„(?) + ๋ณ„๋„์˜ API๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์ง€ ์•Š์•„๋„ ๋˜์–ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. (๋ฌผ๋ก  UI๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ณจ์น˜์•„ํ”„๊ฒ ์ง€๋งŒ…) +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

Github๊ณผ Jenkins ์—ฐ๋™ํ•˜๊ธฐ

Jenkins์—์„œ Github์˜ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋นŒ๋“œ๋ฅผ ํ•˜๋Š” ๋“ฑ Github๊ณผ Jenkins์™€ ์—ฐ๋™์„ ์‹œ์ผœ์ค˜์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ๋ณ„๋„์˜ ์„ ํ–‰ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ˆ˜ ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” SSH๋กœ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์šฐ์„  Jenkins๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ๋Š” ์„œ๋ฒ„์—์„œ ์ธ์ฆํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์ž. +$ ssh-keygen -t rsa -f id_rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa. Your public key has been saved in id_rsa.pub. The key fingerprint is: SHA256:~~~~~ ~~~@~~~~~ The key's randomart image is: +---[RSA 2048]----+ | o*+**=*=**+ | | o B=o+o++o | | E+.o+ + oo .| | oo. * o ...| | .+ S = o | | . + o . | | . . . | | . | | | +----[SHA256]-----+ $ ls id_rsa id_rsa.pub ๊ฐœ์ธํ‚ค(id_rsa)๋Š” ์  ํ‚จ์Šค์— ์„ค์ •ํ•ด์ค€๋‹ค. (์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ณต์‚ฌ, ์ฒซ์ค„ ๋งˆ์ง€๋ง‰์ค„ ๋นผ๋ฉด ์•ˆ๋œ๋‹ค… ) +์  ํ‚จ์Šค์— SSH ๊ฐœ์ธํ‚ค ์„ค์ •" ์  ํ‚จ์Šค์— SSH ๊ฐœ์ธํ‚ค ์„ค์ • ๊ทธ ๋‹ค์Œ ๊ณต๊ฐœํ‚ค(id_rsa.pub)๋Š” Github์— ์„ค์ •์„ ํ•ด์ค€๋‹ค. +Github์— SSH ๊ณต๊ฐœํ‚ค ์„ค์ •" Github์— SSH ๊ณต๊ฐœํ‚ค ์„ค์ • ์ด๋ ‡๊ฒŒ ํ•œ๋’ค Jenkins ์—์„œ ์ž„์˜๋กœ job์„ ์ƒ์„ฑํ•˜๊ณ  job ์„ค์ • > ์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ ์—์„œ git ๋ถ€๋ถ„์— ์•„๋ž˜์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๋™์ด ๋œ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค. Credentials ๊ฐ’์„ ์œ„์—์„œ ์„ค์ •ํ•œ ๊ฐœ์ธํ‚ค๋กœ ์„ค์ •ํ•˜๊ณ , repo ์ฃผ์†Œ๋ฅผ SSH์šฉ์œผ๋กœ ์ ์—ˆ์„๋•Œ ์—๋Ÿฌ๊ฐ€ ์•ˆ๋‚˜์˜ค๋ฉด ์„ฑ๊ณตํ•œ๊ฒƒ์ด๋‹ค. +์ •์ƒ ์—ฐ๊ฒฐ๋˜๋ฉด Jenkins ์˜ค๋ฅ˜๋„ ์—†๊ณ , github SSH ํ‚ค์— ๋…น์ƒ‰๋ถˆ์ด ๋“ค์–ด์˜จ๋‹ค." ์ •์ƒ ์—ฐ๊ฒฐ๋˜๋ฉด Jenkins ์˜ค๋ฅ˜๋„ ์—†๊ณ , github SSH ํ‚ค์— ๋…น์ƒ‰๋ถˆ์ด ๋“ค์–ด์˜จ๋‹ค. ๋~

linux(centOS)์—์„œ selenium ์„ค์ •ํ•˜๊ธฐ (feat. python)

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ์•ˆ๋˜๋Š” ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋‹จ ์‚ฌ์šฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ํ™”๋ฉด์ด ๋œจ๊ณ , ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ Regression Test. ์ด๋•Œ ํ™œ์šฉํ• ์ˆ˜ ์žˆ๋Š”๊ฒŒ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋ฒˆ์—” selenium ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์‹ค web application ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๊ณ  selenium ๋ฅผ ์•Œ์•„๋ณด๊ฒŒ ๋œ๊ฑด ์•„๋‹ˆ๊ณ , ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ํŠน์ • ๋ฐด๋“œ(๋„ค์ด๋ฒ„ BAND)์—์„œ ์ผ์ฃผ์ผ์— ํ•œ๋ฒˆ์”ฉ ๋™์ผํ•œ ํ˜•ํƒœ์˜ ๊ธ€์„ ์˜ฌ๋ฆฌ๊ณ  ์žˆ๋Š”๋ฐ (์ผ์ข…์˜ ํ•œ์ฃผ ์ถœ์„์ฒดํฌ ๊ฐ™์€…) ์ด๋ฅผ ์ž๋™ํ™” ํ•ด๋ณผ์ˆœ ์—†์„๊นŒ ํ•˜๋ฉฐ ๋ฐด๋“œ API๋ฅผ ์ฐพ์•„๋ณด๋‹ค selenium ๋ผ๋Š”๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ๋งคํฌ๋กœ์ฒ˜๋Ÿผ ์–ด๋–ค๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  ๊ทธ๋‹ค์Œ ์–ด๋–ค๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๊ฐ๋™์„ ๋ฐ›์•„(?) + ๋ณ„๋„์˜ API๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์ง€ ์•Š์•„๋„ ๋˜์–ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. (๋ฌผ๋ก  UI๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ณจ์น˜์•„ํ”„๊ฒ ์ง€๋งŒ…) ์—ฌ๊ธฐ์„œ๋Š” selenium ์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ธํ„ฐ๋„ท์— ๋‚˜๋ณด๋‹ค ์ •๋ฆฌ ์ž˜๋œ๊ธ€์ด ๋งŽ์œผ๋‹ˆ…) ๋‹จ, linux ํ™˜๊ฒฝ์—์„œ ์…‹ํŒ…ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋„ˆ๋ฌด ์—†๊ณ  ๋ช‡์ผ๋™์•ˆ ์‚ฝ์งˆ์„ ํ•œ๊ฒŒ ์•„์‰ฌ์›Œ์„œ ๊ทธ ๊ณผ์ •์„ ํฌ์ŠคํŒ… ํ•ด๋ณธ๋‹ค. (๋‚˜๊ฐ™์€ ๋ถ„์ด ์ด ๊ธ€์„ ๋ณด๊ณ  ๋„์›€์ด ๋˜์‹ค๊บผ๋ผ๋Š” ๊ธฐ๋Œ€๋ฅผ ๊ฐ–์œผ๋ฉฐ…) โ€ป ์ฃผ์˜ : ๋ณธ ํฌ์ŠคํŒ…์€ ๋ฐด๋“œ ์„œ๋น„์Šค์— ๊ธ€์„ ์˜ฌ๋ฆด์ˆ˜ ์žˆ๋Š” ๋น„ ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์˜ ๊ณต์œ ๊ฐ€ ์•„๋‹Œ, selenium์— ๋Œ€ํ•œ ์‚ฌ์šฉ ํ›„๊ธฐ(?)์— ๋Œ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. (์ฐธ๊ณ ๋กœ ๋ง‰ํ˜”์–ด์š” -ใ…-) ์„ค์ •ํ•˜๊ธฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์€ CentOS 7.4 64Bit + Python 3.6.3 + jdk 8 ์ด๋‹ค. ์šฐ์„  selenium ์„ ์„ค์น˜ํ•ด์ค€๋‹ค. @@ -45,10 +49,4 @@ ๊ณต์‹ํ™ˆํŽ˜์ด์ง€ : https://github.com/LouisBarranqueiro/hexo-theme-tranquilpeak ์ƒ˜ํ”Œ์‚ฌ์ดํŠธ : http://louisbarranqueiro.github.io/hexo-theme-tranquilpeak/ ์šฐ์„  ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค์น˜๊ณผ์ •์„ ๋‚˜์—ดํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. themes ํด๋”๋‚ด์— ํ…Œ๋งˆํŒŒ์ผ์„ ๋ฐ›์€ํ›„ ์••์ถ• ํ•ด์ œ ํ…Œ๋งˆ ํด๋” ์ด๋ฆ„์„ ๋ณ€๊ฒฝ _config.yml ํŒŒ์ผ ๋‚ด์— ํ…Œ๋งˆ ์„ค์ • ๋ถ€๋ถ„ ๋ณ€๊ฒฝ ( theme: tranquilpeak ) hexo clean โ†’ hexo generate โ†’ hexo server(or hexo deploy) ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ๋งˆ๊ฐ€ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค. ํ˜น์—ฌ๋‚˜(ํ•„์ž์ฒ˜๋Ÿผ) ๊ธฐ์กด ํ…Œ๋งˆ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ๋Š” ๋ณ„๋„์˜ ๊ณผ์ •์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค. ๊ธฐ์กด์—๋Š” css๋‚˜ js๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ์ˆ˜์ •๋˜์—ˆ๋Š”๋ฐ ์ด ํ…Œ๋งˆ๋Š” ์•ฝ๊ฐ„์˜ ๋นŒ๋“œ(?)๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ css๋‚˜ js๋“ฑ html ์š”์†Œ๋“ค์„ ์ˆ˜์ •ํ•˜์˜€๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.(ํ…Œ๋งˆํด๋” ์ตœ์ƒ์œ„์—์„œ) npm install bower install css ๋‚˜ js ๋ณ€๊ฒฝ grunt build hexo clean โ†’ hexo generate โ†’ hexo server(or hexo deploy) ๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ…Œ๋งˆ์— ์ ์šฉ๋œ ํฐํŠธ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๋ธ”๋กœ๊ทธ ๋ฅผ ์ฐธ์กฐํ•˜์˜€๋‹ค. (ํ•ด๋‹น ์•„ํ‹ฐํด์—๋‹ค ๋Œ“๊ธ€ํญํƒ„์„ ใ…Žใ…Ž;;)

๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ž

๋งˆ์ง€๋ง‰ ํฌ์ŠคํŒ…์„ ํ•œ์ง€ ๋ฒŒ์จ 3๊ฐœ์›”์ด ์ง€๋‚ฌ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฐ”๋นด๋˜๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๋ธ”๋กœ๊ทธํฌ์ŠคํŒ…์„ ํ•  ์‹œ๊ฐ„์ด ์•ˆ๋‚œ๊ฒƒ๋„ ์•„๋‹Œ๋ฐ ์–ด๋Š๋ง ๋‹ค์‹œ ์ •์‹ ์ฐจ๋ฆฌ๊ณ  ๋ธ”๋กœ๊ทธ๋ฅผ ํฌ์ŠคํŒ… ํ•˜๋ ค๊ณ ๋ณด๋‹ˆ 3๊ฐœ์›”์ด๋ผ๋Š” ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ๋ฒ„๋ ธ๋„ค์ฑ—๋ฐ”ํ€ด๊ฐ™์€ ์ผ์ƒ, ๋Š์ฆˆ๋ง‰ํžˆ ์ผ์–ด๋‚˜์„œ ํšŒ์‚ฌ์ถœ๊ทผํ•˜๊ณ  ์ •์‹ ์—†์ด ์ผํ•˜๋‹ค๊ฐ€ ํ‡ด๊ทผ, ๊ทธ๋ฆฌ๊ณ  ๋Šฆ๊ฒŒ๊นŒ์ง€ ์ž ๋ชป์ด๋ฃจ๋‹ค ๋˜ ๋‹ค์Œ๋‚ ์ด๋ฉด ๋Š์ฆˆ๋ง‰ํžˆ ์ผ์–ด๋‚˜๊ณ … ๋ญ”๊ฐ€ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค. -๋งค์ผ ์ผ๊ธฐ์“ฐ๊ธฐ : ์ผ๊ธฐ๋ผ๊ณ  ํ•ด๋ดค์ž ๊ฑฐ์ฐฝํ•œ๊ฑด ์•„๋‹ˆ๊ณ  ๋”ฑ 3๊ฐœ์›”๋งŒ ์จ๋ณด์ž. ์˜ค๋Š˜ ๋ญํ–ˆ๋Š”์ง€. ์ž๊ธฐ์ „์— ๋”ฑ 10๋ถ„์ด๋ฉด ์ข‹์„๋“ฏ ์•„์นจ์— ์ผ์ฐ ์ผ์–ด๋‚˜๊ธฐ : ์›”์ˆ˜๊ธˆ ์ˆ˜์˜์— ํ™”๋ชฉ ๋ฐฐ๋“œ๋ฏผํ„ด. ์ฃผ๋ง์—๋„ ์ผ์ฐ์ผ์–ด๋‚˜๊ณ . ์ผ์ฐ์ผ์–ด๋‚˜๋ฉด ๋จน์ด๋„ ๋” ๋จน๋Š”๋‹ค๊ณ  ํ•˜์ง€ ์•Š์•˜๋˜๊ฐ€ ๋‹ฌ๋ ฅํ™œ์šฉํ•˜๊ธฐ : ์šด๋™ํ•˜๋Š”๊ฒƒ๋„ ๊ทธ๋ ‡์ง€๋งŒ, ๋‹ฌ๋ ฅ์„ ์ž์ฃผ ๋ณด๋ฉด์„œ ๋นผ๋จน์ง€ ๋ง์•„์•ผ ํ•  ์ค‘์š”ํ•œ ๋‚ ๋“ค์€ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจํ•˜๊ณ  ๊ธฐ์–ตํ•˜์ž ๊ธฐํƒ€ : ์ฑ…์ข€ ๋งŽ์ด ์ฝ๊ณ  ์šด๋™๋„ ๊พธ์ค€ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค. ๋ฌผ๋ก  ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…๋„ ์žŠ์ง€๋ง๊ณ . ์ฒซ์ˆ ์— ๋ฐฐ๋ถ€๋ฅด๋žด. ํ•˜๋‚˜๋‘˜์”ฉ ํผ์ฆ ๋งž์ถฐ๋‚˜๊ฐ€๋“ฏ ํ•ด๋ณด๋‹ค๋ณด๋ฉด ๋‚ด ์ž์‹ ์ด ๋ฐ”๋€Œ์–ด ์žˆ๊ฒ ์ง€.

mybatis insert/update ์ฟผ๋ฆฌ์‹คํ–‰ํ›„ ๊ฒฐ๊ณผ ๊ฐ€์ ธ์˜ค๊ธฐ

Select๋ฌธ์ด ์•„๋‹Œ ๋‹ค๋ฅธ SQL Query(insert, update ๋“ฑ) ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค. ์ •ํ™•ํžˆ ์ž˜ ์ˆ˜ํ–‰๋˜์—ˆ๋‚˜์— ๋Œ€ํ•œ ํ™•์ธ. ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ˆ˜ํ–‰๋˜์—ˆ๋‚˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โ€ป ์ฐธ๊ณ  url : http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html -useGeneratedKeys, keyProperty ์˜ต์…˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋™์ƒ์„ฑํ‚ค๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด(mySql ๊ฐ™์€) ํ•ด๋‹น์˜ต์…˜์„ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ด ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋กœ๋“ค์–ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์•„๋ž˜ ๋ชจ๋ธ๊ฐ์ฒด๋ฅผ ๋„˜๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  -public Student { int id; String name; String email; Date regist_date; } ์•„๋ž˜ mybatis ๊ตฌ๋ฌธ์œผ๋กœ insert๋ฅผ ์‹œ๋„ํ•˜๊ฒŒ๋˜๋ฉด, ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธด Student ๊ฐ์ฒด์˜ id๊ฐ’์— insert ํ–ˆ์„๋•Œ์˜ key๊ฐ’(id)์ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค. -Student student = new Student(); student.setName('bla'); student.setEmail('bla@naver.com'); mapper.insertStudents(student); // ์ฟผ๋ฆฌ์‹คํ–‰ student.getId(); // ์ถ”์ถœ ๊ฐ€๋Šฅ <insert id="insertStudents" useGeneratedKeys="true" keyProperty="id" parameterType="Student"> insert into Students ( name, email ) values ( #{name}, #{email} ) </insert> selectKey ์˜ต์…˜ Oracle ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Auto Increment ๊ฐ€ ์—†๊ณ  Sequence๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์˜ต์…˜์„ ์‚ฌ์šฉํ• ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์šฐํšŒ์ ์ธ(?) ๋ฐฉ๋ฒ•์œผ๋กœ ์œ„์™€๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ชจ๋ธ์ด๋‚˜ java๊ตฌ๋ฌธ์€ ์œ„์™€ ๋™์ผํ•˜๊ณ  xml ์ฟผ๋ฆฌ ๋ถ€๋ถ„๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. -<insert id="insertStudents" parameterType="Student"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select SEQ_ID.nexyval FROM DUAL </selectKey> insert into Students (id, name , email) values (#{id}, #{name}, #{email}) </insert> ์œ„์™€๊ฐ™์€ ์ฝ”๋“œ์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— id๊ฐ’์— Sequence์— ์˜ํ•ด ๊ฐ’์„ ์…‹ํŒ…ํ•˜๊ฒŒ ๋˜๊ณ , ์ž๋™์ ์œผ๋กœ ํ•ด๋‹น ๊ฐ’์„ Student์˜ id์— setํ•˜๊ฒŒ ๋˜์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ์ˆ˜๊ฐ€ ์žˆ๋‹ค. -ํ•ญ์ƒ ํ…Œ์ด๋ธ”์˜ key๊ฐ’์—๋งŒ ํ•ด๋‹นํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. key๊ฐ’๊ณผ๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†๋Š” ๊ฐ’๋„ selectKey ๊ตฌ๋ฌธ์œผ๋กœ ๋ฆฌํ„ดํ• ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ order์˜ต์…˜์„ AFTER๋กœ ์ฃผ๊ณ  ๋ฆฌํ„ดํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ์ž…๋ ฅํ• ์‹œ id๊ฐ’์„ Sequence์—์„œ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ˆ˜๋™์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ณ , ์ž…๋ ฅํ–ˆ๋˜ id์— ๋งž๋Š” regist_date ๊ฐ’์„ ๋ฆฌํ„ด๋ฐ›์•„ ์œ„์—์„œ์ฒ˜๋Ÿผ ๋™์ผํ•˜๊ฒŒ ๊ฐ’๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค. -<insert id="insertStudents" parameterType="Student"> <selectKey keyProperty="regist_date" resultType="java.util.Date" order="AFTER"> select regist_date FROM students WHERE id = #{id} </selectKey> insert into Students (id, name , email, regist_date) values (#{id}, #{name}, #{email}, syadate) </insert>
\ No newline at end of file +๋งค์ผ ์ผ๊ธฐ์“ฐ๊ธฐ : ์ผ๊ธฐ๋ผ๊ณ  ํ•ด๋ดค์ž ๊ฑฐ์ฐฝํ•œ๊ฑด ์•„๋‹ˆ๊ณ  ๋”ฑ 3๊ฐœ์›”๋งŒ ์จ๋ณด์ž. ์˜ค๋Š˜ ๋ญํ–ˆ๋Š”์ง€. ์ž๊ธฐ์ „์— ๋”ฑ 10๋ถ„์ด๋ฉด ์ข‹์„๋“ฏ ์•„์นจ์— ์ผ์ฐ ์ผ์–ด๋‚˜๊ธฐ : ์›”์ˆ˜๊ธˆ ์ˆ˜์˜์— ํ™”๋ชฉ ๋ฐฐ๋“œ๋ฏผํ„ด. ์ฃผ๋ง์—๋„ ์ผ์ฐ์ผ์–ด๋‚˜๊ณ . ์ผ์ฐ์ผ์–ด๋‚˜๋ฉด ๋จน์ด๋„ ๋” ๋จน๋Š”๋‹ค๊ณ  ํ•˜์ง€ ์•Š์•˜๋˜๊ฐ€ ๋‹ฌ๋ ฅํ™œ์šฉํ•˜๊ธฐ : ์šด๋™ํ•˜๋Š”๊ฒƒ๋„ ๊ทธ๋ ‡์ง€๋งŒ, ๋‹ฌ๋ ฅ์„ ์ž์ฃผ ๋ณด๋ฉด์„œ ๋นผ๋จน์ง€ ๋ง์•„์•ผ ํ•  ์ค‘์š”ํ•œ ๋‚ ๋“ค์€ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจํ•˜๊ณ  ๊ธฐ์–ตํ•˜์ž ๊ธฐํƒ€ : ์ฑ…์ข€ ๋งŽ์ด ์ฝ๊ณ  ์šด๋™๋„ ๊พธ์ค€ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค. ๋ฌผ๋ก  ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…๋„ ์žŠ์ง€๋ง๊ณ . ์ฒซ์ˆ ์— ๋ฐฐ๋ถ€๋ฅด๋žด. ํ•˜๋‚˜๋‘˜์”ฉ ํผ์ฆ ๋งž์ถฐ๋‚˜๊ฐ€๋“ฏ ํ•ด๋ณด๋‹ค๋ณด๋ฉด ๋‚ด ์ž์‹ ์ด ๋ฐ”๋€Œ์–ด ์žˆ๊ฒ ์ง€.
\ No newline at end of file diff --git a/page/9/index.html b/page/9/index.html index 699b2f99..fb3e8cc1 100644 --- a/page/9/index.html +++ b/page/9/index.html @@ -1,5 +1,11 @@ -๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

Oracle + Mybatis ํ™˜๊ฒฝ์—์„œ์˜ Date ๋‹ค๋ฃจ๊ธฐ

์ƒํ™ฉ Oracle, Java 8, mybatis3 ํ™˜๊ฒฝ Date์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋ฅผ select query๋กœ ์กฐํšŒํ•˜์—ฌ Model์— ๋ฐ”์ธ๋”ฉ ์‹œํ‚ค๊ณ ์ž ํ•จ. ์ฟผ๋ฆฌ์— ์•„๋ฌด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  Date ํ˜•ํƒœ๋กœ Model์— ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋ฉด ์‹œ๋ถ„์ดˆ๊ฐ€ ์—†์–ด์ง„ 2017-01-01 00:00:00 ํ˜•ํƒœ๋กœ ๋‚จ๊ฒŒ๋จ ๊ทธ๋ž˜์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค TO_CHAR๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํฌ๋งท์— ๋งž์ถ”์–ด ํ˜•๋ณ€ํ™˜์„ ์‹œํ‚ค๊ณ  Date ๋˜๋Š” String์œผ๋กœ Model์— ๋ฐ”์ธ๋”ฉ ํ•˜๊ณค ํ–ˆ์Œ. SELECT TO_CHAR(reg_ymdt, 'YYYY-MM-DD HH24:MI:SS') AS registDate FROM ... ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋‹ˆ query ๋งŒ๋“ค๋•Œ๋งˆ๋‹ค ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•˜๊ณ , ์ž์นซ ํฌ๋งทํ˜•์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ ์œผ๋ฉด ์—‰๋šฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ฑฐ๋‚˜, Dateํ˜•์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋‹ค์‹œ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •(String to Date)์„ ํ•ด์ค˜์•ผ๋งŒ ํ•จ. .. ๊ท€์ฐจ๋‹ˆ์ฆ˜์˜ ์‹œ์ž‘ : ์‚ฝ์งˆ 1. ์‚ฝ์งˆ์˜ ์‹œ์ž‘ 1-1. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.sql.Date ์˜ ๊ฒฝ์šฐ mybatis์—์„œ๋Š” ์ž๋™์ ์œผ๋กœ org.apache.ibatis.type.SqlDateTypeHandler๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋จ mybatis 3 ๋ฌธ์„œ ์ฐธ๊ณ  ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getDate(columnName); } java.sql.ResultSet.getDate()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹ค์ œ ‘yyyy-mm-dd’ ๋งŒ ๊ฐ€์ ธ์™€ ๋ฆฌํ„ดํ•˜๊ฒŒ๋จ (์—ฌ๊ธฐ์„œ ๋””๋ฒ„๊น… ํ•ด๋ณด๋ฉด rs.getTimestamp(columnName)๊ฐ’์€ ์‹œ๋ถ„์ดˆ๊นŒ์ง€ ๋‹ค ๋“ค์–ด๊ฐ€ ์žˆ์Œ) ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๊ฐ’์ด ์—†๋Š” yyyy-mm-dd ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด์ด ๋จ 1-2. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.util.Date ์˜ ๊ฒฝ์šฐ mybatis์—์„œ๋Š” ์ž๋™์ ์œผ๋กœ org.apache.ibatis.type.DateOnlyTypeHandler๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋จ mybatis 3 ๋ฌธ์„œ ์ฐธ๊ณ  ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { java.sql.Date sqlDate = rs.getDate(columnName); if (sqlDate != null) { return new java.util.Date(sqlDate.getTime()); } return null; } ์œ„์˜ org.apache.ibatis.type.SqlDateTypeHandler ๋ณ€ํ™˜์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ ๊ณผ ๊ฐ™์ด yyyy-mm-dd ๋งŒ ๊ฐ€์ ธ์™€์„œ java.sql.Date ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ java.util.Date ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ ์•ž์„œ ์‹œ๊ฐ„๊ฐ’์„ ๋บ€ ์ •๋ณด๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋™์ผํ•˜๊ฒŒ yyyy-mm-dd ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด์ด ๋จ 2. ์‚ฝ์งˆ์™„๋ฃŒ, ํ•ด๊ฒฐ์˜ ์‹œ์ž‘ ์˜ค๋ผํด + mybatis ํ™˜๊ฒฝ์—์„œ Dateํƒ€์ž…์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€์ž…ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ๋จ. 2-1. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.sql.Date ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋“ฑ๋ก์„ ์‹œ์ผœ์ค€๋‹ค. mybatis-config.xml <typeHandlers> <typeHandler handler="com.naver.dbill.admin.common.handler.CustomDateHandler"/> </typeHandlers> CustomDateHandler.java ... import java.sql.Date; ... public class CustomDateHandler extends BaseTypeHandler<Date> { ... @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { Timestamp sqlTimestamp = rs.getTimestamp(columnName); if (sqlTimestamp != null) { return new Date(sqlTimestamp.getTime()); } return null; } ... } ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์‹œ๋ถ„์ดˆ ๊ฐ’์ด ์žˆ๋Š” ์™„์ „ํ•œ Date ํ˜•ํƒœ๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋‹ค. 2-2. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.util.Date ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋“ฑ๋ก์„ ์‹œ์ผœ์ค€๋‹ค. ๋‹จ, mybatis 3 ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด java.sql.Date ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ typeHandler๊ฐ€ JDBC์— ๋”ฐ๋ผ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์„ฑํ•œ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ž๋ฐ”ํƒ€์ž… ๊ณผ JDBCํƒ€์ž… ์„ ์ ์–ด์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์–ด ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. mybatis-config.xml <typeHandlers> <typeHandler handler="com.naver.dbill.admin.common.handler.CustomDateHandler" javaType="java.util.Date" jdbcType="DATE"/> </typeHandlers> CustomDateHandler.java ๋Š” ์œ„์™€ ๋™์ผํ•˜๋‹ค. ( import java.util.Date; ์‚ฌ์šฉ์œผ๋กœ ๋ณ€๊ฒฝ ) ์‚ฝ์งˆํ•˜๋ฉฐ ์•Œ๊ฒŒ๋œ ๋ณด๋„ˆ์Šค ์ง€์‹ java.sql.Date ๋Š” java.util.Date ์„ ์ƒ์†๋ฐ›์•˜๋‹ค. public class Date extends java.util.Date { } ๊ฒ€์ƒ‰์„ ํ•˜๋‹ค๋ณด๋ฉด ์•Œ์ˆ˜์žˆ๊ฒ ์ง€๋งŒ java.sql.Date ๋Š” JDBC๋“ฑ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๊ณ , java.util.Date ์€ ๋ณด๋‹ค ๋ฒ”์šฉ์ ์ธ ๋‚ ์งœ๋‚˜ ์‹œ๊ฐ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ๋•Œ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. toString ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด Format ํ˜•ํƒœ java.sql.Date : yyyy-mm-dd java.util.Date : EEE MMM dd HH:mm:ss zzz yyyy mybatis ์—์„œ ํ˜•๋ณ€ํ™˜์€ mybatis 3 ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์ž๋ฐ”ํƒ€์ž…๊ณผ JDBCํƒ€์ž…์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ์— ํ•ด๋‹น ํƒ€์ž… ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ •์ƒํ˜ ๋‹˜ ์กฐ์–ธ ( http://d2.naver.com/helloworld/645609 ์ž‘์„ฑํ•˜์‹ ๋ถ„ ) Oracle์˜ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์˜ˆ์ƒ ๋ฐ–์œผ๋กœ ๋™์ž‘ํ•˜๋„ค์š”.

์Šคํ”„๋งํ™˜๊ฒฝ์—์„œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ด€๋ จ ์ •๋ฆฌ

์ผ๋ฐ˜์ ์ธ ์›น ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ๋Š” Controller๋ ˆ๋ฒจ์—์„œ ์‘๋‹ต์„ ๋ฐ›๊ณ  ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌ ํ›„์— ๋‹ค์‹œ View๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ€๋Š”๊ฒŒ ํ†ต์ƒ์ ์ธ ํ๋ฆ„์ด๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. +๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
/images/profile.png

mybatis insert/update ์ฟผ๋ฆฌ์‹คํ–‰ํ›„ ๊ฒฐ๊ณผ ๊ฐ€์ ธ์˜ค๊ธฐ

Select๋ฌธ์ด ์•„๋‹Œ ๋‹ค๋ฅธ SQL Query(insert, update ๋“ฑ) ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค. ์ •ํ™•ํžˆ ์ž˜ ์ˆ˜ํ–‰๋˜์—ˆ๋‚˜์— ๋Œ€ํ•œ ํ™•์ธ. ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ˆ˜ํ–‰๋˜์—ˆ๋‚˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โ€ป ์ฐธ๊ณ  url : http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html +useGeneratedKeys, keyProperty ์˜ต์…˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋™์ƒ์„ฑํ‚ค๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด(mySql ๊ฐ™์€) ํ•ด๋‹น์˜ต์…˜์„ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ด ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋กœ๋“ค์–ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์•„๋ž˜ ๋ชจ๋ธ๊ฐ์ฒด๋ฅผ ๋„˜๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  +public Student { int id; String name; String email; Date regist_date; } ์•„๋ž˜ mybatis ๊ตฌ๋ฌธ์œผ๋กœ insert๋ฅผ ์‹œ๋„ํ•˜๊ฒŒ๋˜๋ฉด, ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธด Student ๊ฐ์ฒด์˜ id๊ฐ’์— insert ํ–ˆ์„๋•Œ์˜ key๊ฐ’(id)์ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค. +Student student = new Student(); student.setName('bla'); student.setEmail('bla@naver.com'); mapper.insertStudents(student); // ์ฟผ๋ฆฌ์‹คํ–‰ student.getId(); // ์ถ”์ถœ ๊ฐ€๋Šฅ <insert id="insertStudents" useGeneratedKeys="true" keyProperty="id" parameterType="Student"> insert into Students ( name, email ) values ( #{name}, #{email} ) </insert> selectKey ์˜ต์…˜ Oracle ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Auto Increment ๊ฐ€ ์—†๊ณ  Sequence๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์˜ต์…˜์„ ์‚ฌ์šฉํ• ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์šฐํšŒ์ ์ธ(?) ๋ฐฉ๋ฒ•์œผ๋กœ ์œ„์™€๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ชจ๋ธ์ด๋‚˜ java๊ตฌ๋ฌธ์€ ์œ„์™€ ๋™์ผํ•˜๊ณ  xml ์ฟผ๋ฆฌ ๋ถ€๋ถ„๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. +<insert id="insertStudents" parameterType="Student"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select SEQ_ID.nexyval FROM DUAL </selectKey> insert into Students (id, name , email) values (#{id}, #{name}, #{email}) </insert> ์œ„์™€๊ฐ™์€ ์ฝ”๋“œ์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— id๊ฐ’์— Sequence์— ์˜ํ•ด ๊ฐ’์„ ์…‹ํŒ…ํ•˜๊ฒŒ ๋˜๊ณ , ์ž๋™์ ์œผ๋กœ ํ•ด๋‹น ๊ฐ’์„ Student์˜ id์— setํ•˜๊ฒŒ ๋˜์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ์ˆ˜๊ฐ€ ์žˆ๋‹ค. +ํ•ญ์ƒ ํ…Œ์ด๋ธ”์˜ key๊ฐ’์—๋งŒ ํ•ด๋‹นํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. key๊ฐ’๊ณผ๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†๋Š” ๊ฐ’๋„ selectKey ๊ตฌ๋ฌธ์œผ๋กœ ๋ฆฌํ„ดํ• ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ order์˜ต์…˜์„ AFTER๋กœ ์ฃผ๊ณ  ๋ฆฌํ„ดํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ์ž…๋ ฅํ• ์‹œ id๊ฐ’์„ Sequence์—์„œ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ˆ˜๋™์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ณ , ์ž…๋ ฅํ–ˆ๋˜ id์— ๋งž๋Š” regist_date ๊ฐ’์„ ๋ฆฌํ„ด๋ฐ›์•„ ์œ„์—์„œ์ฒ˜๋Ÿผ ๋™์ผํ•˜๊ฒŒ ๊ฐ’๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค. +<insert id="insertStudents" parameterType="Student"> <selectKey keyProperty="regist_date" resultType="java.util.Date" order="AFTER"> select regist_date FROM students WHERE id = #{id} </selectKey> insert into Students (id, name , email, regist_date) values (#{id}, #{name}, #{email}, syadate) </insert>

Oracle + Mybatis ํ™˜๊ฒฝ์—์„œ์˜ Date ๋‹ค๋ฃจ๊ธฐ

์ƒํ™ฉ Oracle, Java 8, mybatis3 ํ™˜๊ฒฝ Date์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋ฅผ select query๋กœ ์กฐํšŒํ•˜์—ฌ Model์— ๋ฐ”์ธ๋”ฉ ์‹œํ‚ค๊ณ ์ž ํ•จ. ์ฟผ๋ฆฌ์— ์•„๋ฌด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  Date ํ˜•ํƒœ๋กœ Model์— ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋ฉด ์‹œ๋ถ„์ดˆ๊ฐ€ ์—†์–ด์ง„ 2017-01-01 00:00:00 ํ˜•ํƒœ๋กœ ๋‚จ๊ฒŒ๋จ ๊ทธ๋ž˜์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค TO_CHAR๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํฌ๋งท์— ๋งž์ถ”์–ด ํ˜•๋ณ€ํ™˜์„ ์‹œํ‚ค๊ณ  Date ๋˜๋Š” String์œผ๋กœ Model์— ๋ฐ”์ธ๋”ฉ ํ•˜๊ณค ํ–ˆ์Œ. SELECT TO_CHAR(reg_ymdt, 'YYYY-MM-DD HH24:MI:SS') AS registDate FROM ... ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋‹ˆ query ๋งŒ๋“ค๋•Œ๋งˆ๋‹ค ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•˜๊ณ , ์ž์นซ ํฌ๋งทํ˜•์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ ์œผ๋ฉด ์—‰๋šฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ฑฐ๋‚˜, Dateํ˜•์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋‹ค์‹œ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •(String to Date)์„ ํ•ด์ค˜์•ผ๋งŒ ํ•จ. .. ๊ท€์ฐจ๋‹ˆ์ฆ˜์˜ ์‹œ์ž‘ : ์‚ฝ์งˆ 1. ์‚ฝ์งˆ์˜ ์‹œ์ž‘ 1-1. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.sql.Date ์˜ ๊ฒฝ์šฐ mybatis์—์„œ๋Š” ์ž๋™์ ์œผ๋กœ org.apache.ibatis.type.SqlDateTypeHandler๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋จ mybatis 3 ๋ฌธ์„œ ์ฐธ๊ณ  ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getDate(columnName); } java.sql.ResultSet.getDate()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹ค์ œ ‘yyyy-mm-dd’ ๋งŒ ๊ฐ€์ ธ์™€ ๋ฆฌํ„ดํ•˜๊ฒŒ๋จ (์—ฌ๊ธฐ์„œ ๋””๋ฒ„๊น… ํ•ด๋ณด๋ฉด rs.getTimestamp(columnName)๊ฐ’์€ ์‹œ๋ถ„์ดˆ๊นŒ์ง€ ๋‹ค ๋“ค์–ด๊ฐ€ ์žˆ์Œ) ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๊ฐ’์ด ์—†๋Š” yyyy-mm-dd ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด์ด ๋จ 1-2. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.util.Date ์˜ ๊ฒฝ์šฐ mybatis์—์„œ๋Š” ์ž๋™์ ์œผ๋กœ org.apache.ibatis.type.DateOnlyTypeHandler๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋จ mybatis 3 ๋ฌธ์„œ ์ฐธ๊ณ  ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { java.sql.Date sqlDate = rs.getDate(columnName); if (sqlDate != null) { return new java.util.Date(sqlDate.getTime()); } return null; } ์œ„์˜ org.apache.ibatis.type.SqlDateTypeHandler ๋ณ€ํ™˜์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ ๊ณผ ๊ฐ™์ด yyyy-mm-dd ๋งŒ ๊ฐ€์ ธ์™€์„œ java.sql.Date ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ java.util.Date ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ ์•ž์„œ ์‹œ๊ฐ„๊ฐ’์„ ๋บ€ ์ •๋ณด๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋™์ผํ•˜๊ฒŒ yyyy-mm-dd ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด์ด ๋จ 2. ์‚ฝ์งˆ์™„๋ฃŒ, ํ•ด๊ฒฐ์˜ ์‹œ์ž‘ ์˜ค๋ผํด + mybatis ํ™˜๊ฒฝ์—์„œ Dateํƒ€์ž…์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€์ž…ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ๋จ. 2-1. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.sql.Date ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋“ฑ๋ก์„ ์‹œ์ผœ์ค€๋‹ค. mybatis-config.xml <typeHandlers> <typeHandler handler="com.naver.dbill.admin.common.handler.CustomDateHandler"/> </typeHandlers> CustomDateHandler.java ... import java.sql.Date; ... public class CustomDateHandler extends BaseTypeHandler<Date> { ... @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { Timestamp sqlTimestamp = rs.getTimestamp(columnName); if (sqlTimestamp != null) { return new Date(sqlTimestamp.getTime()); } return null; } ... } ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์‹œ๋ถ„์ดˆ ๊ฐ’์ด ์žˆ๋Š” ์™„์ „ํ•œ Date ํ˜•ํƒœ๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋‹ค. 2-2. ์˜ค๋ผํด์˜ DATEํ˜• โ†’ java.util.Date ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋“ฑ๋ก์„ ์‹œ์ผœ์ค€๋‹ค. ๋‹จ, mybatis 3 ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด java.sql.Date ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ typeHandler๊ฐ€ JDBC์— ๋”ฐ๋ผ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์„ฑํ•œ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ž๋ฐ”ํƒ€์ž… ๊ณผ JDBCํƒ€์ž… ์„ ์ ์–ด์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์–ด ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. mybatis-config.xml <typeHandlers> <typeHandler handler="com.naver.dbill.admin.common.handler.CustomDateHandler" javaType="java.util.Date" jdbcType="DATE"/> </typeHandlers> CustomDateHandler.java ๋Š” ์œ„์™€ ๋™์ผํ•˜๋‹ค. ( import java.util.Date; ์‚ฌ์šฉ์œผ๋กœ ๋ณ€๊ฒฝ ) ์‚ฝ์งˆํ•˜๋ฉฐ ์•Œ๊ฒŒ๋œ ๋ณด๋„ˆ์Šค ์ง€์‹ java.sql.Date ๋Š” java.util.Date ์„ ์ƒ์†๋ฐ›์•˜๋‹ค. public class Date extends java.util.Date { } ๊ฒ€์ƒ‰์„ ํ•˜๋‹ค๋ณด๋ฉด ์•Œ์ˆ˜์žˆ๊ฒ ์ง€๋งŒ java.sql.Date ๋Š” JDBC๋“ฑ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๊ณ , java.util.Date ์€ ๋ณด๋‹ค ๋ฒ”์šฉ์ ์ธ ๋‚ ์งœ๋‚˜ ์‹œ๊ฐ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ๋•Œ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. toString ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด Format ํ˜•ํƒœ java.sql.Date : yyyy-mm-dd java.util.Date : EEE MMM dd HH:mm:ss zzz yyyy mybatis ์—์„œ ํ˜•๋ณ€ํ™˜์€ mybatis 3 ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์ž๋ฐ”ํƒ€์ž…๊ณผ JDBCํƒ€์ž…์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ์— ํ•ด๋‹น ํƒ€์ž… ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ •์ƒํ˜ ๋‹˜ ์กฐ์–ธ ( http://d2.naver.com/helloworld/645609 ์ž‘์„ฑํ•˜์‹ ๋ถ„ ) Oracle์˜ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์˜ˆ์ƒ ๋ฐ–์œผ๋กœ ๋™์ž‘ํ•˜๋„ค์š”.

์Šคํ”„๋งํ™˜๊ฒฝ์—์„œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ด€๋ จ ์ •๋ฆฌ

์ผ๋ฐ˜์ ์ธ ์›น ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ๋Š” Controller๋ ˆ๋ฒจ์—์„œ ์‘๋‹ต์„ ๋ฐ›๊ณ  ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌ ํ›„์— ๋‹ค์‹œ View๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ€๋Š”๊ฒŒ ํ†ต์ƒ์ ์ธ ํ๋ฆ„์ด๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. httpServletRequest.getParameter() ์•„๋ž˜์†Œ์Šค์ฒ˜๋Ÿผ HttpServletRequest์˜ getParameter() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. @RequestMapping("/") public String home(HttpServletRequest httpServletRequest) { String id = httpServletRequest.getParameter("id"); return "home"; } @RequestParam ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” @RequestParam ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„ , ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์˜ ์˜ต์…˜๊ฐ’๋“ค์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ํ™•์ธํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š”๊ฒŒ ์ข‹์„๋“ฏ ์‹ถ๋‹ค. API๋ฌธ์„œ 4.3.6 ๊ธฐ์ค€ ์ด๋ฆ„ ํƒ€์ž… ์„ค๋ช… name, value (Alias for name) String ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„ required boolean ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์ˆ˜์ธ์ง€ ์—ฌ๋ถ€, ๊ธฐ๋ณธ๊ฐ’์€ true defaultValue String ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ธฐ๋ณธ๊ฐ’ ์œ„ ์˜ต์…˜๊ฐ’๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ์— ์ ์šฉํ•ด๋ณด๋ฉด ์•„๋ž˜ ์†Œ์Šค์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ์ด๋ ‡๊ฒŒ reqeust์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค. @@ -38,8 +44,4 @@ LoggerFactory ์‚ฌ์šฉ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Foo { static final Logger logger = LoggerFactory.getLogger(Foo.class); public void test() { logger.debug("ID : {}", "foo"); } } Lombok ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ import lombok.extern.slf4j.Slf4j; @Slf4j public class Foo { public void test() { log.debug("ID : {}", "foo"); } } ๋งˆ์น˜๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” WAS์—์„œ ๋กœ๊น…์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— file ๋กœ ๋กœ๊น…์„ ํ•  ํ•„์š”๋Š” ์—†์„๊ฒƒ ๊ฐ™๋‹ค.(์ผ๋ฐ˜ jar ํ˜•ํƒœ์—์„œ๋Š” ํŒŒ์ผ ๋กœ๊น…์ด ํ•„์š” ํ• ์ˆ˜๋„…) ์ฐธ๊ณ ์‚ฌ์ดํŠธ http://yookeun.github.io/java/2015/11/10/log4jtologback/ http://java.ihoney.pe.kr/397 https://logback.qos.ch/

์ž๋ฐ” 8 Date

์ด์ œ๊นŒ์ง€ ๋‚ด ๊ธฐ์–ต์œผ๋กœ๋Š” Date ๊ด€๋ จ ํด๋ž˜์Šค๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์ ์ฐจ ๋ฐ”๊ฟ”์จ์˜จ๊ฑธ๋กœ ๊ธฐ์–ต์ด ๋‚œ๋‹ค. java.util.Date > java.util.Calendar > org.joda.time ๊ทธ๋Ÿฐ๋ฐ java 8 ๋ฒ„์ „์—์„œ ๊ธฐ์กด์— ์žˆ์—ˆ๋˜ ๋ฌธ์ œ๋“ค์„ ๊ฐœ์„ ํ•ด์„œ ๋‚˜์™”๋‹ค๊ณ  ํ•œ๋‹ค. (๋„ค์ด๋ฒ„ HellowWorld ํฌ์ŠคํŒ… ์ฐธ๊ณ ) JSR-310 ์ด๋ผ๋Š” ํ‘œ์ค€๋ช…์„ธ๋กœ. ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” JAVA 8 ์—์„œ ์ œ๊ณตํ•˜๋Š” API๋กœ ๋‚ ์งœ ์—ฐ์‚ฐ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. (๋ฌผ๋ก  ์ˆ˜๋งŽ์€ ๋‚ ์งœ ์—ฐ์‚ฐ ๋ฐฉ๋ฒ•์„์ด ์žˆ์ง€๋งŒ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ถ€๋ถ„๋“ค ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•ด๋ณด์ž.) -Date > String (format) LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String > Date (format) LocalDateTime.parse("2017-01-01 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); ๋‚ ์งœ/์‹œ๊ฐ„ ์ฆ๊ฐ LocalDateTime localDateTime = LocalDateTime.of(2017, 1, 1, 10, 0, 0); localDateTime.plusDays(1); // ์ผ localDateTime.plusMonths(1); // ์›” localDateTime.plusHours(1); // ์‹œ๊ฐ„ localDateTime.plusWeeks(1); // ์ฃผ localDateTime.minusYears(1); // ๋…„ localDateTime.minusMinutes(1); // ๋ถ„ ๋” ๋‹ค์–‘ํ•œ ๋‚ด์šฉ๋“ค์€ ์•„๋ž˜ URL ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. https://docs.oracle.com/javase/tutorial/datetime/iso/overview.html

Spring Transactional ์„ค์ • ๋ฐ ์ฃผ์š”์†์„ฑ

์ง€๋‚œ๋ฒˆ์—๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์„ค์ •๊ฐ’์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ ๋ฐ” ์žˆ๋‹ค. [ Spring Transaction ์˜ต์…˜ ] ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‹ค์ œ๋กœ ์Šคํ”„๋ง ํ™˜๊ฒฝ์—์„œ ์–ด๋–ค์‹์œผ๋กœ ์„ค์ •ํ•ด์•ผ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์†์„ฑ๋“ค์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.์„ค์ • ๊ธฐ์กด xml๋ฐฉ์‹์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •์„ ํ•œ๋‹ค. -<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> ํ˜น, JavaConfig ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค. -@EnableTransactionManagement public class AppConfig { ... @Bean public PlatformTransactionManager transactionManager() throws URISyntaxException, GeneralSecurityException, ParseException, IOException { return new DataSourceTransactionManager(dataSource()); } } ์œ„์™€๊ฐ™์ด ์„ค์ •์„ ํ•ด์ฃผ๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณณ ์–ด๋””์„œ๋“  @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•ด์„œ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. -public class UserService{ @Transactional public boolean insertUser(User user){ ... } } ์ฃผ์š”์†์„ฑ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฃผ์š”์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. -์†์„ฑ ์„ค ๋ช… ์‚ฌ์šฉ ์˜ˆ isolation Transaction์˜ isolation Level. ๋ณ„๋„๋กœ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด DB์˜ Isolation Level์„ ๋”ฐ๋ฆ„. @Transactional(isolation=Isolation.DEFAULT) propagation ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ๊ทœ์น™์„ ์ •์˜ , Default=REQURIED @Transactional(propagation=Propagation.REQUIRED) readOnly ํ•ด๋‹น Transaction์„ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์ฒ˜๋ฆฌ (Default = false) @Transactional(readOnly = true) rollbackFor ์ •์˜๋œ Exception์— ๋Œ€ํ•ด์„œ๋Š” rollback์„ ์ˆ˜ํ–‰ @Transactional(rollbackFor=Exception.class) noRollbackFor ์ •์˜๋œ Exception์— ๋Œ€ํ•ด์„œ๋Š” rollback์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ. @Transactional(noRollbackFor=Exception.class) timeout ์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ rollback ์ˆ˜ํ–‰. -1์ผ ๊ฒฝ์šฐ no timeout (Default = -1) @Transactional(timeout=10) ๋งˆ์น˜๋ฉฐ ์ž์นซ ์ž˜๋ชปํ–ˆ๋‹ค๊ฐ€๋Š” ์›์น˜์•Š๋Š” ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ• ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’์€ ์ˆ™์ง€ํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™๋‹ค.
\ No newline at end of file +Date > String (format) LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String > Date (format) LocalDateTime.parse("2017-01-01 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); ๋‚ ์งœ/์‹œ๊ฐ„ ์ฆ๊ฐ LocalDateTime localDateTime = LocalDateTime.of(2017, 1, 1, 10, 0, 0); localDateTime.plusDays(1); // ์ผ localDateTime.plusMonths(1); // ์›” localDateTime.plusHours(1); // ์‹œ๊ฐ„ localDateTime.plusWeeks(1); // ์ฃผ localDateTime.minusYears(1); // ๋…„ localDateTime.minusMinutes(1); // ๋ถ„ ๋” ๋‹ค์–‘ํ•œ ๋‚ด์šฉ๋“ค์€ ์•„๋ž˜ URL ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. https://docs.oracle.com/javase/tutorial/datetime/iso/overview.html
\ No newline at end of file diff --git a/posts/a-good-developer-in-terms-of-surroundings/index.html b/posts/a-good-developer-in-terms-of-surroundings/index.html index d441c807..1e184801 100644 --- a/posts/a-good-developer-in-terms-of-surroundings/index.html +++ b/posts/a-good-developer-in-terms-of-surroundings/index.html @@ -12,8 +12,9 @@ ์‹œ๊ฐ„๊ด€๋ฆฌ ใ€€ํ•˜๋ฃจ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์„ธ์ƒ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ณตํ‰ํ•˜๊ฒŒ ์ฃผ์–ด์ง€๋Š” ๊ฒŒ ๋ฐ”๋กœ ์‹œ๊ฐ„์ด๋‹ค. ๋ˆ„๊ตฌ๋‚˜ 24์‹œ๊ฐ„์„ ์“ฐ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€๋Š” ๋ณธ์ธ์ด ์„ ํƒํ•˜๊ธฐ์— ๋‹ฌ๋ฆฐ ๋ฌธ์ œ๋‹ค. ๋ฐค๋Šฆ๊ฒŒ๊นŒ์ง€ ์ปดํ“จํ„ฐ ์•ž์— ์•‰์•„ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์ถœ๊ทผ์ด ๋Šฆ๋Š”๋‹ต์‹œ๊ณ  ์•„์นจ ๋Šฆ๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์„ ํƒ, ํ‡ด๊ทผํ•˜๊ณ  ์ง‘์— ์˜ค๋ฉด ํ”ผ๊ณคํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜๊ธฐ ์‹ซ์–ด TV๋‚˜ SNS๋ฅผ ํ•˜๋‹ค ์ž ์— ๋“œ๋Š” ์„ ํƒ, ํšŒ์‚ฌ์—์„œ ํ•˜๋Š” ๊ฐœ๋ฐœ์€ ์–ด๋Š ์ •๋„ ํ•  ์ค„ ์•„๋Š” ์ˆ˜์ค€๊นŒ์ง€ ๋˜์—ˆ์œผ๋‹ˆ ๊ตณ์ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ๊ณต๋ถ€๋Š” ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์„ ํƒ. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด ์„ ํƒ์ด ๋‹ค๋ฅผ ๋ฟ์ด์ง€ ์ž˜๋ชป๋œ ์„ ํƒ์€ ์—†๋‹ค. ์„ ํƒ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์งˆ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์œผ๋กœ OK. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ํ•‘๊ณ„๋ฅผ ๋Œ€๊ณ  ์žˆ๋‹ค๋ฉด ์‹œ๊ฐ„๊ด€๋ฆฌ๋ถ€ํ„ฐ ์ž˜ ํ•  ํ•„์š”๊ฐ€ ๋ถ„๋ช…ํžˆ ์žˆ๋‹ค. ๊ฐ€๋งŒํžˆ ๋†”๋„ ํ˜๋Ÿฌ๊ฐ€๋Š” ์‹œ๊ฐ„์ถœ์ฒ˜ : https://www.bobaedream.co.kr/view?code=strange&No=1515814/" ๊ฐ€๋งŒํžˆ ๋†”๋„ ํ˜๋Ÿฌ๊ฐ€๋Š” ์‹œ๊ฐ„ ์ถœ์ฒ˜ : https://www.bobaedream.co.kr/view?code=strange&No=1515814/ ใ€€ํ•„์ž๋Š” ํ•˜๊ณ  ์‹ถ์€ ๊ฒŒ ๋„ˆ๋ฌด๋‚˜ ๋งŽ๋‹ค. ๊ทธ์™€ ๋น„์Šทํ•œ ์–‘์œผ๋กœ ๊ผญ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ๋งŽ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋งค์›” 1์ผ์ด ๋˜๋ฉด ๋ฉ”๋ชจ์žฅ์— ํ•œ ๋‹ฌ์˜ ์ฒญ์‚ฌ์ง„์„ ๊ทธ๋ ค๋ณธ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ์žˆ์ง€๋งŒ ์ถ”์ƒ์ ์œผ๋กœ ์ ๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. ๊ทธ๋Ÿฌ๊ณ ๋Š” ๋งค์ฃผ ์ผ์š”์ผ ์ €๋…์ด ๋˜๋ฉด ๋‹ค์Œ ์ผ์ฃผ์ผ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํ•œ ๊ณ„ํš์„ ์ž‘์„ฑํ•˜๊ณ , ๋งค์ผ ์ €๋…์ด ๋˜๋ฉด ๋‚ด์ผ์˜ ํ•˜๋ฃจ๋ฅผ ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด ๋ณธ๋‹ค. ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ๊ณ„ํš ์ค‘์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ๊ฒ€ํ•˜๋ฉฐ ๋น ์ง์—†์ด ์‹œ๊ฐ„์„ ์•Œ์ฐจ๊ฒŒ ๋ณด๋‚ด๋ ค๊ณ  ์• ๋ฅผ ์“ฐ๋Š” ์—ฐ์Šต ์ค‘์ด๋‹ค. -ใ€€MBTI์˜ ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๋Œ€๋ฌธ์ž J๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ ๊ณ„ํšํ•˜๋Š” ๊ฑธ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋ง‰์ƒ ๊ณ„ํš๋Œ€๋กœ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋‹ค ๋ณด๋ฉด ๊ทธ๋ž˜๋„ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ œํ•œ๋œ ์‹œ๊ฐ„ ๋‚ด์—์„œ ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ„์„ ํ™•๋ณดํ•ด ๋ณด๋ ค ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋…ธ๋ ฅ์„ ํ•ด๋ดค๋‹ค. ์ €๋… ๋Šฆ๊ฒŒ๊นŒ์ง€ ์ฑ…์ƒ ์•ž์— ์•‰์•„์„œ ์‹œ๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ๋„ ํ•ด๋ดค์ง€๋งŒ ๋Šฆ๊ฒŒ ์ž๊ฒŒ ๋˜๋‹ˆ ๋‹ค์Œ๋‚ ์˜ ์ฒด๋ ฅ์— ์ง€์žฅ์„ ์ค„ ์ˆ˜๋ฐ–์— ์—†๋˜ ๊ตฌ์กฐ์˜€๋‹ค. ๋ฐ˜๋Œ€๋กœ ์•„์นจ์— ์ผ์ฐ ์ผ์–ด๋‚˜๋Š” ๊ฑด ์›Œ๋‚™์— ์•„์นจ์ž ์ด ๋งŽ์€ ์ฒด์งˆ์ด๋ผ ๋„ˆ๋ฌด๋‚˜๋„ ํž˜๋“ค์—ˆ์ง€๋งŒ ์‹œ๊ฐ„์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํฌ๋ง ์•„๋ž˜ ‘๋ฏธ๋ผํด ๋ชจ๋‹’์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.">
\ No newline at end of file diff --git a/posts/index.html b/posts/index.html index df7f0902..c96ea00e 100644 --- a/posts/index.html +++ b/posts/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2023

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +02-17
\ No newline at end of file diff --git a/posts/index.xml b/posts/index.xml index c26838e2..2cfb176f 100644 --- a/posts/index.xml +++ b/posts/index.xml @@ -1,4 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/posts/All Posts | ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 23 Jul 2023 10:39:22 +0900๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/posts/All Posts | ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 31 Dec 2023 15:26:10 +0900์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐhttps://taetaetae.github.io/posts/review-2023/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/posts/review-2023/๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/
(ํ•„์ž์˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์„ ๋ฏธ๋ฃจ์–ด) ๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ์—์„œ ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” CRUD(Create, Read, Update, Delete) API๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(?)๊ฐ€ ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ผ์ •์€ ์ด‰๋ฐ•ํ•œ๋ฐ ์‚ฌ๋žŒ์€ ๋ถ€์กฑํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ณต๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒŒ ๋ˆˆ์— ํ›คํžˆ ๋ณด์ด์ง€๋งŒ ๊ฐœ์„ ํ•  ์‹œ๊ฐ„์ด๋‚˜ ์—ฌ์œ ์กฐ์ฐจ ์—†์–ด ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ์  “๋Œ์•„๊ฐ€๊ฒŒ๋งŒ” ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋“ค. ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์€ ์ ์  ์—†์–ด์ง€๊ณ , ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ธก๋ฉด์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์ฑ…์ž„๊ณผ ๊ด€์‹ฌ ๊ฐ™์€ ์ƒ๊ฐ๋“ค์€ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํŽธ์˜๋งŒ ์ถ”๊ตฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด์ง์„ ํ•ด์•ผ๊ฒ ๋‹ค ๋งˆ์Œ๋จน๊ณ  ์ด๋ ฅ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋‚˜ ์—ฐ๋ง ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ํ•œ ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋Œ์•„๋ณด๋ฉด ํšŒ์‚ฌ์ผ์€ ๋ถˆ์ฒ ์ฃผ์•ผ ์ •๋ง ์—ด์‹ฌํžˆ ํ–ˆ์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•œ ๊ฑด ํšŒ์‚ฌ์ผ ๋Œ€๋น„ ์•„์ฃผ ๊ทน์†Œ์ˆ˜์— ๋ถˆ๊ณผํ•˜๋Š” ์‚ถ์ด ๊ณ„์†๋œ๋‹ค. ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž.์ถœ์ฒ˜ : https://sdtimes.com/ai/ai-enabled-tools-might-completely-change-development-one-day/" ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž. @@ -85,15 +87,4 @@ New Visualizaion!!" New Visualizaion!! ใ€€๋ฒ„์ „์—…์ด ๋˜๋ฉด์„œ ๋น„์ฅฌ์–ผ๋ผ ์ „์ฒด ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ์ดํ•ฉ์„ ํ‘œํ˜„ํ•˜๋ ค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ‘์ˆซ์ž’๋ฅผ ํ‘œํ˜„ํ•˜๋ ค ํ•˜๋Š” ๊ฒฝ์šฐ Metric์„ ํ™œ์šฉํ•˜๊ณค ํ•œ๋‹ค. ์šฐ์ธก์—์„œ Aggregation ๋ฐฉ๋ฒ•์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ•„๋“œ๋Š” ์œ ํ˜•๋ณ„๋กœ ๊ฐ๊ฐ ์„ ํƒํ•ด ์ฃผ์ž. ์•„๋ž˜ ‘Add’๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. Label์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ํ˜•ํƒœ๋กœ Aggregation์„ ํ–ˆ๋Š”์ง€๋ฅผ Label ์˜์—ญ์— ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ณด๊ธฐ ์‹ซ๋‹ค๋ฉด ์›ํ•˜๋Š” ํ…์ŠคํŠธ๋กœ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ตœ๊ทผ ์ˆ˜ ." . ใ€€๏ปฟํ™•์ง„์ž, ์‚ฌ๋ง์ž, ๊ฒฉ๋ฆฌ ํ•ด์ œ์˜ ‘์ตœ๊ทผ ๋ฐ์ดํ„ฐ’๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ๋ชฉ์ ์ด๋‹ค. ์ด ๊ฒฝ์šฐ Aggregation์„ Top Hit์œผ๋กœ ์„ ํƒํ•˜๋ฉด ํ•„๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ํ•˜๋ฃจ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด 18 row์ด๊ธฐ ๋•Œ๋ฌธ์— (์„œ์šธ, ๋ถ€์‚ฐ, …, ์ œ์ฃผ, ๊ฒ€์—ญ) 18 row ์„ ์ „๋ถ€ ๋”ํ•œ ๊ฐ’์ด ํ•˜๋ฃจ ๊ธฐ์ค€์˜ ํ•ฉ๊ณ„๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋ ฌ์„ ๋‚ ์งœ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•ด์ค˜์•ผ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ์˜ ํ•ฉ๊ณ„๊ฐ€ ๋˜๋Š” ์ ๋„ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. ๊ฐ ํƒ€์ž…๋ณ„ ํ•ฉ๊ณ„ ." . ใ€€๏ปฟ์ง€์—ญ๋ณ„๋กœ ํƒ€์ž…๋ณ„ ์ˆ˜๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด Pie ํƒ€์ž…์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ง„ํ–‰ํ•œ๋‹ค. ํƒ€์ž…๋ณ„(์˜ˆ๋กœ ๋“ค์–ด ํ™•์ง„์ด๋ฉด confirmed)๋กœ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด Aggregation์„ ‘sum’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋นˆ ์›์ด ๋‚˜์˜ค์ง€๋งŒ ๊ฐ ์ง€์—ญ๋ณ„๋กœ ์ฐจํŠธ๋ฅผ ์ž˜๋ผ์„œ ๋ด์•ผ ํ•˜๊ธฐ์— ํ•˜๋‹จ์˜ Buckets์˜ Add๋ฅผ ๋ˆ„๋ฅด๊ณ  regieon์˜ ํ•„๋“œ๋ฅผ Terms Aggregation ํ•œ๋‹ค. 18 row์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋ถ€ ๋ณด์—ฌ์•ผ ํ•˜๊ธฐ์— ์ •๋ ฌ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  option ํƒญ์—์„œ ๋ณด๋Š” ์ทจํ–ฅ์— ์•Œ๋งž๊ฒŒ ์„ค์ •๊ฐ’๋“ค์„ ๋ฐ”๊ฟ”์ค€๋‹ค. -ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.]]>Elastic Stack์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ : ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑhttps://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/Mon, 15 Feb 2021 17:50:12 +0900Authorhttps://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/ - -
๏ปฟใ€€์–ผ๋งˆ ์ „์— ํ•„์ž์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋Š ๊ต์œก ๊ธฐ๊ด€์—์„œ ElasticStack์— ๋Œ€ํ•œ ๊ฐ•์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ์‚ฌ์‹ค ๊ด€๋ จ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ง€์‹์ด ์•„์ฃผ ๊นŠ๊ณ  ํ•ด๋ฐ•ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์•ฝ๊ฐ„์˜ ๋ฐ˜๊ฐ๋ถ€ํ„ฐ ๋“ค์—ˆ์ง€๋งŒ ElasticStack์„ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ์ •๋„๋กœ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์กฐ์‹ฌ์Šค๋Ÿฝ์ง€๋งŒ ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์—ด์‹ฌํžˆ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋กœ ๊ฐ‘์ž๊ธฐ ๊ฐ•์˜๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๊ฐ„ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋„ˆ๋ฌด ์•„์‰ฝ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ƒฅ ์ค‘๋‹จํ•˜๊ธฐ์—” ์•„์‰ฌ์šด ๋งˆ์Œ์ด ๋„ˆ๋ฌด ์ปค์„œ ์ค€๋น„ํ–ˆ๋˜ ๋‚ด์šฉ ์ค‘์— ‘๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„’์€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒ ๋„์›€์ด ๋ ๊นŒ ์‹ถ์–ด ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. - ๏ปฟ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ•œ ์˜ฌํ•ด 1์›” ์ค‘์ˆœ์—” Elasticsearch ๋ฒ„์ „์ด 7.10.2์ด์—ˆ๋Š”๋ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ์ง€๊ธˆ์€ ๋ฒŒ์จ 7.11์œผ๋กœ ๋ฒ„์ „ ์—… ๋˜์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ์˜คํ”ˆ์†Œ์Šค ์ค‘์— ๋ฒ„์ „์—…์ด ๊ฐ€์žฅ ๋น ๋ฅธ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ๊ธฐ๋Šฅ์ด ํ™• ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์Šต๋“ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋ฐ”๋€Œ์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์ž‘์€ ๋‹จ์œ„๋กœ ์กฐ๊ธˆ์”ฉ ๋ฐ”๋€Œ์–ด ๊ฐ€๋Š” ๋ชจ์Šต์ด ๊ฝค ์ธ์ƒ์ ์ด๋‹ค. - ใ€€๏ปฟ์ž‘๋…„ ์ดˆ๋ถ€ํ„ฐ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์•„์ง๊นŒ์ง€๋„ ์ง„ํ–‰ ์ค‘์ด๋‹ค. ๋‚˜๋„ ์ „์—ผ๋˜๋Š” ๊ฑด ์•„๋‹๊นŒ ํ•˜๋Š” ๋‘๋ ค์›€์— ์–ด๋””์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋˜ ์‹œ์ ˆ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ๋›ฐ์–ด๋‚œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ˆ„๊ฐ€ ์‹œํ‚ค์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ๊ทธ ํ˜„ํ™ฉ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ ๋•๋ถ„์— ์ข€ ๋” ํ˜„ํ™ฉ์„ ๋ณด๊ธฐ์— ํŽธํ•ด์กŒ๊ณ  ๋”์šฑ ์กฐ์‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด์ œ๋Š” ํฌํ„ธ์‚ฌ์ดํŠธ๋‚˜ ๊ฐ์ข… ๋งค์ฒด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์ฝ”๋กœ๋‚˜19 ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒ€์ƒ‰์—”์ง„์ด์ง€๋งŒ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ElasticStack์„ ํ™œ์šฉํ•ด์„œ ‘๋‚˜๋งŒ์˜ ๋Œ€์‹œ๋ณด๋“œ’๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์˜ ์ผํšŒ์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ „๋ฐ˜์ ์ธ “ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์ถ•ํ•œ ๋’ค ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ ๋˜ํ•œ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค. ์ „์ฒด ํ๋ฆ„" ์ „์ฒด ํ๋ฆ„ - ๏ปฟ๊ธ€์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋‹ˆ ์–‘์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์–ด์ ธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜์—ฌ Elasticsearch์— ์ธ๋ฑ์‹ฑ ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ “๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ"์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ Kibana์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” 2๊ฐœ์˜ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. - ๏ปฟใ€€์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋  ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ตœ์ข… ๋ชฉํ‘œ!" ์ตœ์ข… ๋ชฉํ‘œ! -๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ์ค€๋น„ ใ€€๏ปฟ์˜ˆ์ „์—๋Š” Elasticsearch, Logstash, Kibana 3๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ELK๋ผ ๋ถˆ๋ฆฌ๋‹ค Beat๋ผ๋Š” ๊ฒฝ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ ์ œํ’ˆ์ด ๋“ฑ์žฅํ•˜๋ฉฐ ์ด ๋ชจ๋“  ๊ฑธ ElasticStack๋ผ ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ฐธ๊ณ ) ๋จผ์ € ์–ด๋–ค ๋ชฉํ‘œ์™€ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.๏ปฟ -๋ฐ์ดํ„ฐ ใ€€๏ปฟ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ์—์„œ ๊ฐ€์ ธ์˜ค๋ ค๋‹ค ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋ˆ„๋ฝ๋˜๋Š” ๋‚ ์งœ๋„ ์žˆ์—ˆ๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ์ƒ๊ฐ๋ณด๋‹ค ์ข‹์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๊ณณ์„ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊นƒํ—™์— ๊ณต๊ฐœ๊ฐ€ ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” https://coronaboard.kr/ ์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. ๏ปฟ -๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(preprocessing) ใ€€๏ปฟ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์œ„ ๊นƒํ—™์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์— ์ง€์—ญ๋ณ„ ๋ฐœ์ƒ ํ˜„ํ™ฉ. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์š”์ผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ์„œ์šธ์ง€์—ญ ๊ธฐ์ค€์œผ๋กœ 2020๋…„ 2์›” 17์ผ์— 14๋ช…์ด ๋ฐœ์ƒํ–ˆ๊ณ  2020๋…„ 2์›” 18์ผ์— ํ•œ ๋ช…๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ 14๋ช…์œผ๋กœ ‘๋ˆ„์ ’๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Œ€๋กœ ํ•ด๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ๋ณ„๋„์˜ ๊ฐ€๊ณต ์—†์ด ์ตœ๋Œ€ํ•œ ์›๋ณธ ๋ฐ์ดํ„ฐ(raw) ๊ฐ€ ์žˆ์–ด์•ผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด, ์ง‘๊ณ„ ์ˆ˜๊ฐ€ ๋ˆ„์ ๋˜์ง€ ์•Š๊ณ  ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„๋œ ์ˆ˜๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ–ˆ๋‹ค.๏ปฟ -ใ€€๏ปฟํ•„์ž๋Š” ์ฃผ๋กœ java๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜์ง€๋งŒ ๊ฐ€๋” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์„ฑ ๊ฐœ๋ฐœ์€ python์„ ํ™œ์šฉํ•˜๋Š” ํŽธ์ด๊ธฐ์— ๋‹ค์†Œ ์ด์œ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. -import csv, requests import pandas as pd CSV_URL = 'https://raw.githubusercontent.com/jooeungen/coronaboard_kr/master/kr_regional_daily.csv' # ํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌํ•ด์ œ yesterday_data = {} yesterday_data['์„œ์šธ'] = [0, 0, 0] yesterday_data['๋ถ€์‚ฐ'] = [0, 0, 0] yesterday_data['๋Œ€๊ตฌ'] = [0, 0, 0] yesterday_data['์ธ์ฒœ'] = [0, 0, 0] yesterday_data['๊ด‘์ฃผ'] = [0, 0, 0] yesterday_data['๋Œ€์ „'] = [0, 0, 0] yesterday_data['์šธ์‚ฐ'] = [0, 0, 0] yesterday_data['์„ธ์ข…'] = [0, 0, 0] yesterday_data['๊ฒฝ๊ธฐ'] = [0, 0, 0] yesterday_data['๊ฐ•์›'] = [0, 0, 0] yesterday_data['์ถฉ๋ถ'] = [0, 0, 0] yesterday_data['์ถฉ๋‚จ'] = [0, 0, 0] yesterday_data['์ „๋ถ'] = [0, 0, 0] yesterday_data['์ „๋‚จ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋ถ'] = [0, 0, 0] yesterday_data['๊ฒฝ๋‚จ'] = [0, 0, 0] yesterday_data['์ œ์ฃผ'] = [0, 0, 0] yesterday_data['๊ฒ€์—ญ'] = [0, 0, 0] flag = False csv_data = [] with requests.]]> \ No newline at end of file +ํƒ€์ž…๋ณ„ ์ถ”์ด ." . ใ€€๏ปฟํ™•์ง„, ์‚ฌ๋ง, ๊ฒฉ๋ฆฌ ํ•ด์ œ ์ค‘์— ์‚ฌ๋ง์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋ณ€ํ™”๋Ÿ‰์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์ถ•์€ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ์‚ฌ๋ง์€ ๋ง‰๋Œ€๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ผ์ธ์œผ๋กœ ํ•œ ํ™”๋ฉด์—์„œ ํ‘œํ˜„ํ•˜๋ฉด ์ด 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. Vertical bar ์„ ์„ ํƒํ•˜๊ณ  x์ถ•(Buckets > X-axis)์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ convert_date๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‚ฌ๋ง์€ ๋งค์ผ ๋ช‡ ๋ช… ์‚ฌ๋งํ–ˆ๋Š”์ง€ ๋šœ๋ ทํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ sum์œผ๋กœ, ๋‚˜๋จธ์ง€ ๋‘˜์€ ๋ˆ„์  ํ•ฉ๊ณ„๊ฐ€ ๋” ์˜๋ฏธ ์žˆ์–ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•„ Cumulative Sum์œผ๋กœ Aggregation์„ ํ•œ๋‹ค.]]> \ No newline at end of file diff --git a/posts/page/10/index.html b/posts/page/10/index.html index f9cf4319..c6c67cfc 100644 --- a/posts/page/10/index.html +++ b/posts/page/10/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2017

spring4์—์„œ json view ํ™œ์šฉํ•˜๊ธฐ(with @ResponseBody) +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2017

2016

2016 ํšŒ๊ณ  diff --git a/posts/page/2/index.html b/posts/page/2/index.html index a2d2017c..c5f7940b 100644 --- a/posts/page/2/index.html +++ b/posts/page/2/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2021

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ด๋ ฅ์„œ' ํŽธ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +09-07
\ No newline at end of file diff --git a/posts/page/3/index.html b/posts/page/3/index.html index ec6499ea..f5f5fe23 100644 --- a/posts/page/3/index.html +++ b/posts/page/3/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2020

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - '์ž๊ธฐ๊ณ„๋ฐœ' ํŽธ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +01-19
\ No newline at end of file diff --git a/posts/page/4/index.html b/posts/page/4/index.html index 12782fb7..fa20379e 100644 --- a/posts/page/4/index.html +++ b/posts/page/4/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2019

๊ฐœ๋ฐœํ•˜๊ธฐ ๋ฐ”์œ๋ฐ ๊ธ€๊นŒ์ง€ ์“ฐ๋ผ๊ณ ? (๊ธ€์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž.) +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +05-19
\ No newline at end of file diff --git a/posts/page/5/index.html b/posts/page/5/index.html index 9e5abbe4..e88a8ff0 100644 --- a/posts/page/5/index.html +++ b/posts/page/5/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2019

spring-boot์—์„œ mybatis๋กœ mysql ์—ฐ๋™ํ•˜๊ธฐ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +01-02
\ No newline at end of file diff --git a/posts/page/6/index.html b/posts/page/6/index.html index 2c6f18e0..cf7d9e20 100644 --- a/posts/page/6/index.html +++ b/posts/page/6/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2018

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ 12์›” ์„œ์šธ ๋ฐ‹์—… ํ›„๊ธฐ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file diff --git a/posts/page/7/index.html b/posts/page/7/index.html index 7d6e5f69..4061302b 100644 --- a/posts/page/7/index.html +++ b/posts/page/7/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2018

์ดˆ๊ฐ„๋‹จ API์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 1๋ถ€ (Python + Flask + Apache) +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file diff --git a/posts/page/8/index.html b/posts/page/8/index.html index f7e46ed6..a5b068b9 100644 --- a/posts/page/8/index.html +++ b/posts/page/8/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2018

linux(centOS)์—์„œ selenium ์„ค์ •ํ•˜๊ธฐ (feat. python) +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +07-09
\ No newline at end of file diff --git a/posts/page/9/index.html b/posts/page/9/index.html index e6f843b5..065895cf 100644 --- a/posts/page/9/index.html +++ b/posts/page/9/index.html @@ -1,5 +1,6 @@ -All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Posts

2017

Oracle + Mybatis ํ™˜๊ฒฝ์—์„œ์˜ Date ๋‹ค๋ฃจ๊ธฐ +All Posts - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file +01-10
\ No newline at end of file diff --git a/posts/review-2023/index.html b/posts/review-2023/index.html new file mode 100644 index 00000000..1bf8fede --- /dev/null +++ b/posts/review-2023/index.html @@ -0,0 +1,17 @@ +์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐ - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

Contents

์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐ

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

ํšŒ์‚ฌ์›์œผ๋กœ์จ์˜ ๋…ธ๋ ฅ

๋ถ€์—ฌ๋ฐ›์€ ์ผ์€ ๊ธฐ๋ณธ์ด๊ณ  ๊ทธ ์ด์ƒ์„ ์Šค์Šค๋กœ ์ฐพ์•„์„œ ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ตฌ์„ฑ์› ๋ชจ๋‘๊ฐ€ ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„์œ„๊ธฐ๋ฅผ ์ด๋Œ์–ด ๋‚˜๊ฐ€์•ผ ํ•˜๋Š” ์ผ๋‹น๋ฐฑ ‘์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž’๋กœ์จ ํšŒ์‚ฌ ์ƒํ™œ์„ ํ•ด์™”๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (์“ฐ๊ณ  ๋ณด๋‹ˆ ์ด๋ ฅ์„œ์—์„œ๋‚˜ ๋ณผ๋ฒ•ํ•œ ๋ฌธ์žฅ์ด์ง€๋งŒ;;) ํ›„๋ฐฐ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด ์ž˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ๊ณผ์ •๋“ค์ด ๊ฒฐ๊ตญ ์„œ๋น„์Šค๊ฐ€ ๋‚˜์•„๊ฐ€๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ์— ๋ณดํƒฌ์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ์„œํฌํŠธ ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘์„ ํ•ด์™”๋‹ค. ๊ฐ€๋”์€ ํŒ€ ๋‚ด์— ์Œˆ๋‹ญ(?)์ด ๋˜์–ด ๋Œ์•„๋งŒ ๊ฐ€๊ฒŒ ํ•˜๋˜ ์ผ์„ ๊ฐœ๋ฐœ์ž๋กœ์จ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด ๊ฐœ์„ ํ•ด ๋ณด์ž๋Š” ์ž์„ธ๋ฅผ ์ทจํ•ด ๋ณด๊ธฐ๋„ ํ–ˆ๊ณ  ํ•จ๊ป˜ ์ผํ•˜๋Š” ์ฃผ๋‹ˆ์–ด ๋ถ„๋“ค๊ป˜ ํ•˜๊ธฐ ์‹ซ์—ˆ์ง€๋งŒ (๊ทธ ์‹œ์ ˆ ๋‚˜๋ฅผ ๋ณด๋Š” ๊ฒƒ๋งŒ ๊ฐ™์•˜๋˜) ์ข€ ๋” ์˜ฌ๋ฐ”๋ฅธ ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์„ฑ์žฅ์„ ํ•˜๋Š” ๋ฐ”๋žŒ์œผ๋กœ ์“ด์†Œ๋ฆฌ๋ฅผ ๋ช‡ ๋ฒˆ ๊ฑด๋„จ ๊ฒƒ ๊ฐ™๋‹ค. ์ง€๋‚˜๊ณ  ๋ณด๋ฉด ์ข‹์€ ๊ฒŒ ์ข‹๋‹ค๋Š” ์‹์œผ๋กœ ๋„˜์–ด๊ฐ€๋„ ๋ ๋ฒ•ํ–ˆ๋‚˜ ์‹ถ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ์ € ์ฝ”๋”ฉ๋งŒ ํ•˜๋Š” ๊ธฐ๊ณ„๊ฐ€ ์•„๋‹ˆ๊ธฐ์—. ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด๋Ÿฐ ์ƒ๊ฐ๊ณผ ๋ง์„ ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ด์ƒํ•œ ์ฑ…์ž„๊ฐ์˜ ๋ชจ์ž๋ฅผ ์จ๋ณด๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค. +๊ธฐ์ˆ ์  ๊ธฐ์–ต์œผ๋กœ๋Š” ์  ํ‚จ์Šค IDC ์ด์ค‘ํ™”(master-slave๊ฐ€ ์•„๋‹Œ)๋ฅผ ์œ„ํ•ด ์Šค์Šค๋กœ ๊ฝค ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์นœ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ํ†ตํ•ด ์ด์ค‘ํ™”๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ํ•˜์˜€๊ณ  ์ธ์› ๋Œ€๋น„ ์—…๋ฌด๋Ÿ‰์ด ๋งŽ๋‹ค ๋ณด๋‹ˆ ๋Š˜์–ด๋งŒ ๊ฐ€๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž ์ž์ฒด์ ์œผ๋กœ ‘๊ธฐ์ˆ /ํ”„๋กœ์„ธ์Šค ๊ฐœ์„  TF’๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ๊ฐœ๋ฐœํŒ€์—์„œ ์ฑ™๊ฒจ์•ผ ํ•  ๋ถ€๋ถ„๋“ค์„ ๋†“์น˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ์žฅ์น˜๋“ค์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์—ฌ๋Ÿฌ output ์ค‘์— ํ•˜๋‚˜๋กœ ํŒ€ ๋‚ด ์ฃผ๋‹ˆ์–ด ๋ถ„๊ณผ ํ•จ๊ป˜ ํ•˜๋ฐ˜๊ธฐ ์‚ฌ๋‚ด ๊ธฐ์ˆ  ๊ณต์œ  ํ–‰์‚ฌ์—์„œ “๊ทธ๋Ÿฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋กœ ๊ดœ์ฐฎ์€๊ฐ€(feat. Github Action)“๋ผ๋Š” ์ œ๋ชฉ์œผ๋กœ ๋ฐฐํฌ ์ž๋™ํ™” ์‚ฌ๋ก€๋ฅผ ์‚ฌ๋‚ด ์˜คํ”ˆ์†Œ์Šคํ™”(Github Action Marketplace) ํ•˜์—ฌ ๋ฐœํ‘œํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค. +์‚ฌ๋‚ด ๋…์„œ๋ชจ์ž„์—์„œ ๋ชจ์ž„์žฅ์„ ์ž์ฒ˜ํ•˜์—ฌ ์ธ๋ฌธํ•™ ๋…์„œ ์†Œ๋ชจ์ž„์„ ๋งŒ๋“ค๊ณ  10์—ฌ๋ช… ์ •๋„์˜ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰์„ ํ•ด๋ณด๊ธฐ๋„ ํ•˜์˜€๊ณ , ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ ํ•œ ๋‹ฌ์— ํ•œ ๋ฒˆ์”ฉ ๋ชจ์—ฌ ์‹์‚ฌ ์ž๋ฆฌ๋ฅผ ๊ฐ€์กŒ๋˜ ๋ฏธ์‹ํšŒ ๋ชจ์ž„์„ ์šด์˜ํ•ด ๋ณด๊ธฐ๋„ ํ•˜์˜€๋‹ค. ๊ฐœ๋ฐœ๊ณผ๋Š” ๊ด€๋ จ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ชจ์ž„์„ ์šด์˜ํ•ด ๋ณด๋ฉด์„œ “๊ด€๊ณ„” ๊ทธ๋ฆฌ๊ณ  “์กฐ์ง ์šด์˜"์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ฐ„์ ‘์ ์œผ๋กœ๋‚˜๋งˆ ๋Š๊ปด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ์ข‹์€ ๊ฒฝํ—˜์œผ๋กœ ๊ธฐ์–ต๋  ๊ฒƒ ๊ฐ™๋‹ค.

‘ํƒœํƒœํƒœ’๋ผ๋Š” ๋ถ€์ผ€ ๋งŒ๋“ค๊ธฐ

์˜ค๋ž˜์ „๋ถ€ํ„ฐ ํšŒ์‚ฌ ๋ฐ–์—์„œ์˜ “๋‚˜"๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ๋“ค์„ ํ•ด์˜ค๊ณ  ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์จ ํšŒ์‚ฌ๋ผ๋Š” ์ปดํฌํŠธ ์กด์„ ๋ฒ—์–ด๋‚˜๋„ ์Šค์Šค๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๋‹จํ•œ ๋‚ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ๋“ค. ์˜ฌํ•ด ์ดˆ ํšŒ์‚ฌ ์ฃผ์ตœ๋กœ ์ง„ํ–‰๋œ DEVIEW 2023์˜ ๊ณ๋‹ค๋ฆฌ(?) ํ–‰์‚ฌ์ธ DEVIEW CAMPUS 2023์—์„œ ๋Œ€ํ•™์ƒ๋ถ„๋“ค์—๊ฒŒ ๊ฐœ๋ฐœ์ž์˜ ์„ฑ์žฅ์— ๋Œ€ํ•œ ๋‚ด์šฉ์œผ๋กœ ๋ฐœํ‘œ๋ฅผ ํ•˜๊ธฐ๋„ ํ•˜์˜€๊ณ  ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๋ฉ˜ํ† ๋ง์„ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค. ๋ฉ˜ํ† ๋ง์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋Š๋ผ์ง€๋งŒ ๋‚ด๊ฐ€ ์ทจ์—…์„ ํ–ˆ์„ ๋•Œ์™€์˜ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์˜จ๋„๋Š” ์‚ฌ๋ญ‡ ๋‹ฌ๋ผ์กŒ๋‹ค. ์ „๊ณต์ด๋‚˜ ๋‚˜์ด๋ฅผ ๋ถˆ๋ฌธํ•˜๊ณ  ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์˜ ์ˆ˜์ค€์ด ์–ด๋งˆ ๋ฌด์‹œํ•˜๊ฒŒ ์˜ฌ๋ผ์™”๊ณ  ๊ฐ€๋”์€ ๋‚˜๋„ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์„ ์งˆ๋ฌธ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ์„ ์ •๋„๋กœ ์ง€์‹์˜ ์ˆ˜์ค€์ด ๊ฝค ๋งŽ์ด ๋†’์•„์กŒ๋‹ค๋Š” ๊ฑธ ๋ชธ์†Œ ๋Š๋ผ๋Š” ์ค‘์ด๋‹ค. +์ด๋ ‡๊ฒŒ ๋ฉ˜ํ† ๋ง์„ ์ž์ฒ˜ํ•ด์„œ ํ•˜๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๋ฉ˜ํ† ๋ง์„ ํ•  ๋•Œ๋ฉด ๋ฉ˜ํ‹ฐ๋ณด๋‹ค ๋ฉ˜ํ† ๊ฐ€ ๋” ๋„์›€์„ ๋ฐ›๋Š” ๊ฒŒ ํฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์–ด๋–ค ์กฐ์–ธ์„ ํ•ด์•ผ ๋ฉ˜ํ‹ฐ๋ถ„์ด ๋„์›€์„ ์–ป์„์ง€์— ๋Œ€ํ•œ ์ƒ๊ฐ, ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ ๊ทธ์ € ๋‹ต์„ ์•Œ๋ ค์ฃผ๊ธฐ ๋ณด๋‹ค ์Šค์Šค๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํžŒํŠธ๋ฅผ ์ž˜ ์ฃผ๋Š” ๋Œ€ํ™”๋ฅผ ํ•˜๋Š” ์—ฐ์Šต. ๋ฌด์—‡๋ณด๋‹ค ์ฑ„์šฉ์‹œ์žฅ์ด ์–ผ์–ด๋ถ™์€ ์š”์ฆ˜ ๊ธฐ์ˆ  ์ˆ˜์ค€์ด ๊ฝค ๋งŽ์ด ๋†’์€ ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๊ณผ ํ•จ๊ฒŒ ๊ณ ๋ฏผํ•˜๋ฉฐ ๋ฉ˜ํ† ๋ง์„ ํ•˜๋Š” ๊ทธ ์ž์ฒด๊ฐ€ ๊ณ ์ธ๋ฌผ ๊ฐœ๋ฐœ์ž(?)๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๋‚˜ ์Šค์Šค๋กœ์˜ ์žฅ์น˜๋กœ ํ™œ์šฉ ์ค‘์ด๋‹ค. +์ข‹์•„ ๋ณด์ด๋Š” ์ฝ˜ํ…์ธ ์— ๋‚˜์˜ ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ๋ ˆ์ดํŒ… ํ•˜๋Š” ์„œ๋น„์Šค์ธ ์ปค๋ฆฌ์–ด๋ฆฌ๋ผ๋Š” ๊ณณ์— ์˜ฌํ•ด๋Š” ์•ฝ 90์—ฌ ๊ฐœ์˜ ๊ธ€์„ ์ž‘์„ฑํ–ˆ๊ณ  ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์œผ๋กœ ์–ด๋Š๋ง 1๋งŒ 3์ฒœ์—ฌ ๋ช…์ด ํŒ”๋กœ์šฐ๋ฅผ ํ•ด์ฃผ๊ณ  ๊ณ„์‹ ๋‹ค. ๊ธ€ ์“ฐ๋Š” ๊ฒƒ์— ์ง„์‹ฌ์ด๋‹ค ๋ณด๋‹ˆ ๊ธ€์„ ์“ฐ๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ์ฃผ๊ฐ„ ์กฐํšŒ ์ˆ˜ ์ƒ์œ„์— ๋žญํฌ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๊ธ€์„ ์“ฐ๋”๋ผ๋„ ๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์„ ๊ธ€์„ ์ ์–ด์•ผ๊ฒ ๋‹ค๋Š” ์ฑ…์ž„๊ฐ์ด ๋“ค๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋ƒฅ ํ•œ ๋ฒˆ ํ•ด๋ณผ๊นŒ ํ•˜๋ฉฐ ์‹œ์ž‘ํ–ˆ๋˜ ๊ธ€์“ฐ๊ธฐ๊ฐ€ ์ธ์ƒ์˜ ๋ณ€๊ณก์ ์„ ์ค„ ์ •๋„๋กœ ๊ฐ•๋ ฅํ•œ ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์žˆ๋‹ค. ๊ธ€์“ฐ๊ธฐ๋Š” ์•ž์œผ๋กœ๋„ ์ญ‰ ํ‚ต๊ณ ์ž‰ํ•  ์˜ˆ์ •์ด๋‹ค.

ํ™˜๊ฒฝ ๋ฐ”๊พธ๊ธฐ

๋‚ด ๊ธฐ์ˆ  ์ด๋ ฅ์„œ์˜ ์ œ๋ชฉ์ธ “Software Engineer Crazy for Growth"์— ๊ฑธ๋งž๊ฒŒ ๋‚˜๋Š” ์„ฑ์žฅํ•˜๋Š” ๊ฒƒ์— ๋ฏธ์นœ ๊ฒƒ์ด ํ‹€๋ฆผ์—†๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๋Š” ์„ฑ์žฅ ๋ผ์ดํŒ… ํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์— ์„ฑ์žฅ์„ ๋บ€๋‹ค๋ฉด ๊ทธ์ € API ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„๊ฐ€ ์•„๋‹๊นŒ ์กฐ์‹ฌ์Šค๋ ˆ ์ƒ๊ฐ๋„ ํ•ด๋ณธ๋‹ค. ์‹ฌ์ง€์–ด ์š”์ฆ˜์—” ai๊ฐ€ ๋„ˆ๋ฌด ๋ฐœ๋‹ฌ๋˜์–ด ์žˆ๋‹ค ๋ณด๋‹ˆ ๊ทธ๋“ค(?) ๊ณผ์˜ ๊ฒฝ์Ÿ์—์„œ ์‚ด์•„๋‚จ์œผ๋ ค๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ํ•ญ์ƒ ์„ฑ์žฅ์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ •์ฒด๋˜์–ด ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๋ฉด ํ™˜๊ฒฝ๋ถ€ํ„ฐ ๋ฐ”๊ฟ”๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ํŽธ์ด๋‹ค. ๋ฐ”๋€ ํ™˜๊ฒฝ์ด ๊ฒฐ๊ตญ ๋‚˜๋ฅผ ๋ฐ”๊ฟ”์ค„ ๊ฑฐ๋ผ ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์—. +์˜ฌํ•ด ๊ฐ€์žฅ ์ž˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํ™˜๊ฒฝ์˜ ๋ณ€ํ™” ์ค‘์— ์Šคํ„ฐ๋”” ๋ชจ์ž„์„ ๊ฐœ์„คํ•œ ๊ฒƒ์„ ๋นผ๋จน์„ ์ˆ˜ ์—†๋‹ค. ํšŒ์‚ฌ ๋ถ„๋“ค๊ณผ ์ข…์ข… ์ž์˜๋ฐ˜ ํƒ€์˜ ๋ฐ˜์œผ๋กœ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ–ˆ์—ˆ์ง€๋งŒ ๋Š˜ ํ•จ๊ป˜ํ•˜๋˜ ์‚ฌ๋žŒ๋“ค์ด๋ผ ํšŒ์‚ฌ์ผ์ด ๋ฐ”์˜๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋“ค๋กœ ์ œ๋Œ€๋กœ ๋œ ์Šคํ„ฐ๋”” ์ง„ํ–‰์ด ์•ˆ๋˜๋˜ ๊ฒฝ์šฐ๊ฐ€ ํ—ˆ๋‹คํ–ˆ๋‹ค. (๊ทธ๋ ‡๊ฒŒ ์ฑ…์žฅ์—๋Š” ์ƒˆ๋กœ์šด ์ฑ…๋“ค๋งŒ ๋Š˜์–ด๋งŒ ๊ฐ€๊ณ …) ๊ทธ๋Ÿฐ ๊ฐˆ์ฆ์œผ๋กœ ๋ธ”๋ผ์ธ๋“œ์— ์ต๋ช…์œผ๋กœ ์ž๋ฐ”/๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ‘์„ฑ์žฅ’ ์Šคํ„ฐ๋””๋ฅผ ํ•˜์ž๋Š” ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ๊ณ  40์—ฌ ๋ช… ๋„˜๊ฒŒ ์ง€์›์„ ํ•˜์…”์„œ ๋†€๋žฌ๋‹ค. ๋น„์Šทํ•œ ์—ฐ์ฐจ + ๋น„์Šทํ•œ ์ง€์—ญ + ๋‹ค์–‘ํ•œ ํšŒ์‚ฌ + 6๋ช… ๋‚ด์™ธ๋ผ๋Š” ๋‚˜๋งŒ์˜ ๊ธฐ์ค€์œผ๋กœ ์„ ๋ฐœ(?)์„ ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์„œ๋จน์„œ๋จนํ–ˆ๋˜ ์ฒซ ์˜จ๋ผ์ธ ๋ฏธํŒ…์„ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒŒ์จ 3๊ฐœ์˜ ์ฑ…์œผ๋กœ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์˜จ๋ผ์ธ๊ณผ ์˜คํ”„๋ผ์ธ ๋ชจ์ž„์„ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ณ  ์ค‘๊ฐ„๋งˆ๋‹ค ์‰ฌ์–ด๊ฐ€๋Š” ์ฃผ๊ฐ„๋„ ๋งŒ๋“ค์—ˆ๊ณ  ์˜ˆ์น˜๊ธˆ๊ณผ ๋ฒŒ๊ธˆ์ œ๋„๋กœ ์ ์ ˆํ•œ ๊ธด์žฅ๊ฐ์ด ์žˆ๋Š” ์ƒํƒœ๋กœ ์Šคํ„ฐ๋””๋ฅผ ์šด์˜ํ–ˆ๋‹ค. ๋ชจ์ธ ๊ธˆ์•ก์œผ๋กœ๋Š” ์Šคํ„ฐ๋””๊ฐ€ ๋๋‚  ๋•Œ ๊ฐ€๋ฒผ์šด ์‹์‚ฌ ์ž๋ฆฌ๋ฅผ ๊ฐ–๊ธฐ๋„ ํ•˜๊ณ . ์•„๋ฌด๋ž˜๋„ 6๋ช… ๋ชจ๋‘ ๋‹ค๋ฅธ ํšŒ์‚ฌ๋ผ ๊ฐ ํšŒ์‚ฌ์˜ ๋Œ€ํ‘œ(?)๊ฐ€ ๋œ ๋Š๋‚Œ์˜ ์ฑ…์ž„๊ฐ๋„ ์žˆ์—ˆ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๊ฐ ํšŒ์‚ฌ๋งˆ๋‹ค์˜ ๋‹ค๋ฅธ ๊ธฐ์ค€์„ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ข‹์•˜๋‹ค. ๋‚ด๋…„์—๋„ ์ด ๋ฉค๋ฒ„์™€ ํ•จ๊ป˜ ๋” ์ฒด๊ณ„์ ์ด๊ณ  ๋” ๋‹จ๋‹จํ•œ ์Šคํ„ฐ๋””๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ด ์ž๋ฆฌ๋ฅผ ๋นŒ๋ ค ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ์ „ํ•˜๊ณ  ์‹ถ๋‹ค. +ํ™˜๊ฒฝ์„ ๋ฐ”๊พผ ๊ฒƒ ์ค‘์— ๋˜ ํ•œ ๊ฐ€์ง€๋Š” ์ƒˆ๋ฒฝ์— ์Šคํ„ฐ๋”” ์นดํŽ˜๋ฅผ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ๋ช‡ ๋…„ ์ „๋ถ€ํ„ฐ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•จ์„ ์ธ์ง€ํ•˜๊ณ  ๋ฏธ๋ผํด ๋ชจ๋‹์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์นจ์ž ์ด ๋งŽ์€ ๋‚˜๋กœ์„œ๋Š” ์ƒˆ๋ฒฝ 5์‹œ์— ์ผ์–ด๋‚˜๊ธด ํ•˜์ง€๋งŒ ์†ŒํŒŒ์— ๋ˆ•๋Š”๋‹ค๋“ ์ง€ ๋‹ค์‹œ ์ด๋ถˆ ์†์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ์‚ถ์ด ๋ฐ˜๋ณต๋˜์—ˆ๋‹ค. ์ผ์–ด๋‚˜์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์•„๋ฌด๋ž˜๋„ ‘์ง‘’์ด๋ผ๋Š” ๊ณต๊ฐ„์ด ์ฃผ๋Š” ํŽธ์•ˆํ•จ ๋•Œ๋ฌธ์— ๋ฌด๋„ˆ์ง€๊ธฐ ๋„ˆ๋ฌด ์‰ฌ์› ๋‹ค. ๋Š˜ ์‹œ๊ฐ„์ด ์—†๋‹ค๋Š” ์ƒ๊ฐ์˜ ๊ฒฐ๋ก ์€ ์•„์นจ์— ์ผ์ฐ ์ผ์–ด๋‚˜ 24์‹œ๊ฐ„ ์šด์˜ํ•˜๋Š” ์Šคํ„ฐ๋”” ์นดํŽ˜์— ๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์ด์–ด์กŒ๊ณ  ์ด๋•Œ๋Š” ํšŒ์‚ฌ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ ์˜จ์ „ํžˆ “๋‚˜"๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์‚ผ๊ฐ๋Œ€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์…€์นด๋ด‰์„ ์ผ๋ถ€๋Ÿฌ ๊ฐ€์ ธ๊ฐ€ ํƒ€์ž„๋žฉ์Šค๋กœ ์ฑ…์ƒ์„ ์ฐ์œผ๋ฉฐ ๊ฐ•์ œ์ ์œผ๋กœ ํœด๋Œ€ํฐ์„ ๋งŒ์ง€์ง€ ์•Š๊ฒŒ ๋˜๋Š” ํšจ๊ณผ์™€ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค๋Š” ์ผ์„์ด์กฐ์˜ ํšจ๊ณผ๋ฅผ ๋ˆ„๋ฆฌ๋ฉฐ ํ‰์†Œ์— ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ฑ… ์ฝ๊ธฐ๋ผ๋“ ์ง€ ๋จธ๋ฆฟ์†์— ๋ณต์žกํ•œ ์ƒ๊ฐ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๊ธฐ๋„ ํ–ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ์ฐ์€ ์˜์ƒ๋“ค๋กœ ์œ ํŠœ๋ธŒ๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊นŒ ์‹ถ์—ˆ์ง€๋งŒ… ๊ณผ์—ฐ…)

์‹คํŒจํ•ด์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ๋“ค

์˜ฌํ•ด๋Š” ์•„์‰ฝ์ง€๋งŒ ๋‘ ๊ฐ€์ง€์˜ ์‹คํŒจ์˜ ๊ธฐ์–ต๋“ค์ด ์žˆ๋‹ค. ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ์ž‘๋…„์— ๋‚ด ์ปค๋ฆฌ์–ด๋ฆฌ์™€ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์ฑ…์„ ์จ๋ณด์ง€ ์•Š๊ฒ ๋ƒ๋ฉฐ ์—ฐ๋ฝ ์˜จ ์ถœํŒ์‚ฌ๋“ค์ด ๊ฝค ๋งŽ์•˜๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋งˆ์Œ์˜ ์—ฌ์œ ๋„ ์—†์—ˆ๊ณ  ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„์ด ์—†๋‹ค๋Š” ํ•‘๊ณ„๋กœ ์ง€๊ธˆ์€ ์–ด๋ ต๋‹ค๋Š” ๋‹ต์žฅ์„ ๋ณด๋‚ด๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ ์–ด๋–ค ํ•œ ์ถœํŒ์‚ฌ ๋‹ด๋‹น ์ง์›๋ถ„๊ป˜์„œ ์งœ์ž„์ƒˆ ์žˆ๊ฒŒ ๊ธฐํš์„œ๋ฅผ ์ž‘์„ฑํ•˜์…”์„œ ์ฑ…์„ ์จ๋ณด์ง€ ์•Š๊ฒ ๋ƒ๊ณ  ์ œ์•ˆ์„ ์ฃผ์…จ๋˜ ์ ์ด ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ถœํŒ์‚ฌ์™€๋Š” ๋Š๋‚Œ์ด ๋‹ฌ๋ผ์„œ ํž˜๋“  ์ƒํ™ฉ์ด์—ˆ์ง€๋งŒ ์จ๋ณด๊ฒ ๋‹ค๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ฏธํŒ…์„ ๋์— ์ฑ…์„ ์“ฐ๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ์‹œ์ž‘์„ ํ•ด๋ณด๋‹ˆ ์šฐ๋ คํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„์ด ์ •๋ง ๋‚˜์ง€ ์•Š์•˜๋‹ค. (์ง€๊ธˆ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์ง€๊ธˆ์ฒ˜๋Ÿผ ์ƒˆ๋ฒฝ์— ์“ฐ๋ฉด ๋˜์—ˆ๊ฒ ์ง€ ํ•˜๋Š” ์•„์‰ฌ์›€์ด ๋‚จ๋Š”๋‹ค.) ๊ทธ๋ž˜์„œ ๊ณ„์•ฝํ•œ ๋งˆ๊ฐ ๋‚ ์งœ๋ฅผ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฏธ๋ฃจ๊ฒŒ ๋˜์—ˆ๊ณ  ์ถœํŒ์‚ฌ ์ž…์žฅ์—์„œ๋„ ๊ณ„์† ๋ฏธ๋ฃจ๋Š” ์ˆ˜์ฐจ๋ก€ ๋ฐฐ๋ คํ•ด ์ฃผ์…จ์ง€๋งŒ ๊ฒฐ๊ตญ ์ผ์ •์„ ๋ชป ์ง€์ผœ ๊ณ„์•ฝ ํŒŒ๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค. (๋ฌผ๋ก  ์ผ์ •์„ ๋งž์ถฐ์•ผ ํ•œ๋‹ค๋Š” ๊ฒŒ ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ๋˜์–ด ์ฒ˜์Œ์œผ๋กœ ํƒˆ๋ชจ๊นŒ์ง€ ์™”์ง€๋งŒ;; ์ง€๊ธˆ์€ ๋‹คํ–‰ํžˆ ์น˜๋ฃŒ๊ฐ€ ๋˜์—ˆ๋‹ค.) ๊ธ€์“ฐ๊ธฐ๋ฅผ ์ข‹์•„ํ•˜๋Š” ๋‚˜๋กœ์„œ๋Š” ๋‚ด ์ด๋ฆ„์œผ๋กœ ์ฑ…์„ ์จ๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ƒํ™ฉ์ด๋ผ ๊ธฐํšŒ์˜€๋Š”๋ฐ ๊ฒฐ๊ตญ ๋‚ด ๋ณต์„ ๋‚ด๊ฐ€ ์ฐจ๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์ด๋ผ ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋„ ๋‚˜ ์ž์‹ ์—๊ฒŒ ๋„ˆ๋ฌด ๋ฐ‰๋‹ค. ๊ทธ ์ดํ›„๋กœ๋„ ๋˜ ๋‹ค๋ฅธ ์ถœํŒ์‚ฌ์—์„œ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ์ œ์•ˆ์ด ์™€์„œ ์ด๋ฒˆ์—” ์ œ๋Œ€๋กœ ํ•ด๋ด์•ผ์ง€ ํ•˜๋ฉฐ ๊ธ€์˜ ๋ฐฉํ–ฅ์„ฑ์— ๋Œ€ํ•ด ๋ช‡ ์ฐจ๋ก€ ๋ฏธํŒ…์„ ํ–ˆ์ง€๋งŒ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉํ–ฅ๊ณผ ์ถœํŒ์‚ฌ์—์„œ ์ƒ๊ฐํ•˜๋Š” ๊ฐ„๊ทน์„ ์ขํžˆ์ง€ ๋ชปํ•˜์—ฌ ์•„์‰ฝ๊ฒŒ๋„ ๋ฌด์‚ฐ๋˜์—ˆ๋‹ค. +์˜ฌํ•ด ์ดˆ๋ถ€ํ„ฐ ๋‹ฌ๋ฆฌ๊ธฐ๋ผ๋Š” ์šด๋™์„ ์ œ๋Œ€๋กœ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์•„๋‚ด๊ฐ€ ํ’€ ๋งˆ๋ผํ†ค์„ ๋‘ ๋ฒˆ์ด๋‚˜ ์™„์ฃผํ–ˆ๊ณ  ๊ทธ๋•Œ๋งˆ๋‹ค ๋Š˜ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋ฉฐ ์—ด์ •์„ ๋Š๊ปด๋ณด๋‹ˆ ๊ฑด๊ฐ•ํ•œ ์—ด์ •์„ ๋‚˜๋„ ๋Š๊ปด๋ณด๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฒ˜์Œ ๋›ธ ๋• 10km๋ฅผ 1์‹œ๊ฐ„ ๋‚ด๋กœ ๋‹ฌ๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ ์˜ฌํ•ด ์ด 4๋ฒˆ์˜ 10k ๋งˆ๋ผํ†ค์— ๋›ธ์ˆ˜๋ก ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜๊ธฐ๋Š”์ปค๋…• ์ ์  ๋” ๋Š๋ ค์กŒ๋‹ค. ๋‚˜ ๋‹ฌ๋ฆฌ๊ธฐํ•œ๋‹ค๊ณ  SNS๋‚˜ ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž์‹  ์žˆ๊ฒŒ ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ์ •์ž‘ ์—ฐ์Šต๋„ ์ž˜ ์•ˆ ํ–ˆ๊ณ  ์ด๋Ÿฐ์ €๋Ÿฐ ํ•‘๊ณ„๋ฅผ ๋Œ€๋ฉฐ ๊พธ์ค€ํžˆ ๋ชปํ•œ ๊ฒŒ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์‹คํŒจ์˜ ์›์ธ์ด์ง€ ์•Š๋‚˜ ์ƒ๊ฐ์„ ํ•ด๋ณธ๋‹ค.

๋‚ด๋…„์˜ ํ‚ค์›Œ๋“œ : ๊พธ์ค€ํ•จ

“์ง€๊ธˆ์ด ์•„๋‹ˆ๋ฉด ์•ˆ ๋ผ"๋ผ๋Š” ๋‚ด ์ขŒ์šฐ๋ช…์ฒ˜๋Ÿผ ์–ธ์ œ๋‚˜ ์ตœ์„ ์„ ๋‹คํ•˜๋ฉฐ ์‚ด์•„๊ฐ„๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์˜ฌํ•ด ์—ด์‹ฌํžˆ ์‚ด์•˜๋‚˜?๋ผ๋Š” ์งˆ๋ฌธ์—” ์–ธ์ œ๋‚˜ “YES!“๋ผ๊ณ  ๋‹ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ž์„œ ์ด์•ผ๊ธฐ ํ•œ๋‘ ๋ฒˆ์˜ ์‹คํŒจ๋ฅผ ํ†ตํ•ด ๋‚˜์˜ ๋ถ€์กฑํ•œ ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋˜ ๋‚˜๋ฆ„์˜ ์˜๋ฏธ ์žˆ๋˜ ์‹œ๊ฐ„์ด ์•„๋‹ˆ์—ˆ๋‚˜ ์ƒ๊ฐ์„ ํ•ด๋ณธ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๋…„์˜ ํ‚ค์›Œ๋“œ๋Š” “๊พธ์ค€ํ•จ” ์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค. 10์—ฌ ๋…„ ๋„˜๊ฒŒ ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๋ณด๋‹ˆ ํ™๊ธธ๋™์ฒ˜๋Ÿผ ์ด๋ฆฌ์ €๋ฆฌ ํŠธ๋ Œ๋“œ์— ๋”ฐ๋ผ ์›€์ง์ด๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ผ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ณด๋‹ค๋Š” ๋‚˜์˜ ์ƒ‰๊น”์„ ๋“œ๋Ÿฌ๋‚ด๋ฉฐ ๊พธ์ค€ํžˆ ๋ฒ„ํ‹ฐ๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ์š”์ฆ˜ ๋“ค์–ด ๋ถ€์ฉ ๋“ ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜น์ด๋‚˜ ๋ณ€ํ™”์—๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๊ณ  ์˜จ์ „ํžˆ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ๋“ค์— ๋Œ€ํ•ด ํšŒ์‚ฌ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ํšŒ์‚ฌ ๋ฐ–์—์„œ๋„ ์˜ํ–ฅ๋ ฅ์„ ํŽผ์น  ์ˆ˜ ์žˆ๋Š” ๋‚ด๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ์ƒ์ƒ์„ ํ•˜๋ฉฐ ์˜ฌํ•ด 2023 ๋ฆฌ๋ทฐ๋ฅผ ๋งˆ์นœ๋‹ค.


Buy me a coffeeBuy me a coffee +
\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 8b23b374..7ba2a90d 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://taetaetae.github.io/tags/a-good-developer/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/archives-2023/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/categories/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/curtule/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/categories/essay/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/posts/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/kafka/2023-02-19T23:39:22+09:00weekly1https://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/2023-02-19T23:39:22+09:00weekly1https://taetaetae.github.io/categories/review/2023-02-19T23:39:22+09:00weekly1https://taetaetae.github.io/tags/archives-2021/2022-01-02T21:45:40+09:00weekly1https://taetaetae.github.io/posts/review-2021/2022-01-02T21:45:40+09:00weekly1https://taetaetae.github.io/tags/employment/2021-10-24T16:07:11+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-employment/2021-10-24T16:07:11+09:00weekly1https://taetaetae.github.io/tags/gcp/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/heroku/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/public-offering-notice/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/categories/tech/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-3/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/bitly/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/tags/telegram/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-2/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/tags/crawling/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/tags/jsoup/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-1/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/tags/mentoring/2021-03-01T15:12:26+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-mentoring/2021-03-01T15:12:26+09:00weekly1https://taetaetae.github.io/tags/dashboard/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/posts/make-dashboards-from-elasticstack-2/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/elasticsearch/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/filebeat/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/kibana/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/logstash/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/2021-02-15T17:50:12+09:00weekly1https://taetaetae.github.io/tags/resume/2021-01-31T18:14:37+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-resume/2021-01-31T18:14:37+09:00weekly1https://taetaetae.github.io/tags/archives-2020/2020-12-31T13:31:01+09:00weekly1https://taetaetae.github.io/posts/review-2020/2020-12-31T13:31:01+09:00weekly1https://taetaetae.github.io/tags/agile/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/book/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/robert-c.-martin/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/uncle-bob/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/posts/review-the-book-clean-agile/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/openapi/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/spring-rest-docs/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/swagger/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/swagger-ui/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/posts/a-combination-of-swagger-and-spring-restdocs/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/posts/openapi-and-swagger-ui-in-spring-boot/2020-12-20T11:42:40+09:00weekly1https://taetaetae.github.io/tags/jenkins/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/posts/jenkins-job-parallel-processing-by-pipeline/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/tags/pipeline/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/tags/blog/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/github-actions/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/hugo/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/posts/blog-reorganization-by-hugo/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/log/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/tags/monitoring/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/2020/10/04/a-good-developer-in-terms-of-log-and-monitoring/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/tags/ci/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/tags/github/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/tags/pullrequest/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/2020/09/07/github-pullrequest-build/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/2020/07/12/toy-projects-second-year-review/2020-07-12T19:55:02+00:00weekly1https://taetaetae.github.io/tags/self-development/2020-06-28T20:51:03+00:00weekly1https://taetaetae.github.io/2020/06/28/a-good-developer-in-terms-of-self-development/2020-06-28T20:51:03+00:00weekly1https://taetaetae.github.io/2020/06/21/a-good-developer-in-terms-of-culture/2020-06-21T17:22:09+00:00weekly1https://taetaetae.github.io/tags/filter/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/tags/spring-boot/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/2020/04/06/spring-boot-filter/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/tags/circuit-breaker/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/tags/hystrix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/tags/netflix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/2020/03/29/better-rest-template-2-netflix-hystrix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/2020/03/26/7-years-of-development-1st-day-of-manager/2020-03-26T23:37:17+00:00weekly1https://taetaetae.github.io/tags/retryable/2020-03-22T15:30:35+00:00weekly1https://taetaetae.github.io/2020/03/22/better-rest-template-1-retryable/2020-03-22T15:30:35+00:00weekly1https://taetaetae.github.io/2020/03/08/spring-rest-docs-in-spring-boot/2020-03-08T23:16:59+00:00weekly1https://taetaetae.github.io/tags/jupyter/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/2020/02/09/jupyter-install/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/tags/python/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/tags/maven/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/module/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/structure/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/2020/01/19/spring-boot-maven-multi-module/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/archives-2019/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/tags/review/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/2019/12/29/review-2019/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/categories/blog/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/tags/writing/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/2019/10/27/a-reason-for-writing/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/tags/batch/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/tags/linux/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/2019/10/13/batch-nondisruptive-deploy/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/tags/spring/2019-09-29T17:55:50+00:00weekly1https://taetaetae.github.io/2019/09/29/woowabros-spring-batch/2019-09-29T17:55:50+00:00weekly1https://taetaetae.github.io/tags/network/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/tags/packetbeat/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/2019/09/08/network-monitor-by-packetbeat/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/tags/apache/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/load-balance/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/tomcat/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/2019/08/04/apache-load-balancing/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/fileupload/2019-07-21T22:09:58+00:00weekly1https://taetaetae.github.io/2019/07/21/spring-file-upload/2019-07-21T22:09:58+00:00weekly1https://taetaetae.github.io/2019/07/07/review-first-half-2019/2019-07-07T17:52:20+00:00weekly1https://taetaetae.github.io/tags/%EA%B8%80%EB%98%90/2019-07-07T17:52:20+00:00weekly1https://taetaetae.github.io/tags/aop/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/tags/httpservletrequestwrapper/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/tags/logging/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/2019/06/30/controller-common-logging/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/2019/05/19/d-light-togetherthon-2019/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/gdg/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/hackathon/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/java/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/tags/performance/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/2019/05/12/got-of-java-seminar/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/tags/mybatis/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/tags/mysql/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/2019/04/21/spring-boot-mybatis-mysql-xml/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/tags/aws/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/2019/04/14/aws-freetier-create-and-ssh-access/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/tags/ec2/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/tags/putty/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/2019/03/31/kafka-meetup-2019/2019-03-31T01:49:30+00:00weekly1https://taetaetae.github.io/tags/write/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/tags/write-the-docs/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/2019/03/24/write-the-docs-seoul-2019-review/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/2019/03/17/jenkins-upgrade-master-slave/2019-03-17T18:23:03+00:00weekly1https://taetaetae.github.io/2019/02/17/daily-dev-blog-3/2019-02-17T01:17:27+00:00weekly1https://taetaetae.github.io/2019/02/10/access-log-to-elastic-stack/2019-02-10T14:37:31+00:00weekly1https://taetaetae.github.io/tags/heap-dump/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/out-of-memory/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/redirect/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/2019/01/10/spring-redirect-oom/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/parallel-precess/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/tags/rabbitmq/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/tags/redis/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/2019/01/02/faster-parallel-processes/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/2018/12/31/review-2018/2018-12-31T21:33:29+00:00weekly1https://taetaetae.github.io/tags/archives-2018/2018-12-31T21:33:29+00:00weekly1https://taetaetae.github.io/2018/12/13/elastic-meetup-201812/2018-12-13T22:27:02+00:00weekly1https://taetaetae.github.io/2018/12/02/jenkins-install/2018-12-02T04:37:59+00:00weekly1https://taetaetae.github.io/2018/12/02/python-buffer/2018-12-02T01:40:11+00:00weekly1https://taetaetae.github.io/tags/deview/2018-10-14T18:26:26+00:00weekly1https://taetaetae.github.io/2018/10/14/deview-2018/2018-10-14T18:26:26+00:00weekly1https://taetaetae.github.io/2018/08/28/pycon-2018/2018-08-28T23:43:16+00:00weekly1https://taetaetae.github.io/tags/pycon/2018-08-28T23:43:16+00:00weekly1https://taetaetae.github.io/tags/cloneutils/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/tags/java-deep-copy/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/2018/08/21/how-to-use-cloneutils/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/2018/08/09/daily-dev-blog-2/2018-08-09T20:37:26+00:00weekly1https://taetaetae.github.io/tags/flask/2018-08-05T10:27:21+00:00weekly1https://taetaetae.github.io/2018/08/05/daily-dev-blog-1/2018-08-05T10:27:21+00:00weekly1https://taetaetae.github.io/2018/07/01/open-source-software-develpoer-story-review/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/open-source-software/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/oss/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/nginx/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/tags/web-server/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/2018/07/01/simple-web-server-flask-nginx/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/2018/06/29/simple-web-server-flask-apache/2018-06-29T23:00:00+00:00weekly1https://taetaetae.github.io/2018/06/27/apache-vs-nginx/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/event-driven/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/prefork-mpm/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/worker-mpm/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/anomaly-detection/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/facebook/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/prophet/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/2018/05/31/anomaly-detection/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/408/2018-04-29T17:39:36+00:00weekly1https://taetaetae.github.io/2018/04/29/apache-408-response-code/2018-04-29T17:39:36+00:00weekly1https://taetaetae.github.io/tags/apache-access-log/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/elasitcsearch/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/user-agent/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/2018/04/10/apache-access-log-user-agent/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/gzip/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/2018/04/01/apache-gzip/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/tags/mod_deflate/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/tags/restclientexception/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/2018/03/17/rest-client-exception/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/tags/resttemplate/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/tags/integration/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/tags/sonarqube/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/jenkins-sonar-github-integration/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/github-web-hook-jenkins-job-excute/2018-02-08T17:10:54+00:00weekly1https://taetaetae.github.io/tags/webhook/2018-02-08T17:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/github-with-jenkins/2018-02-08T17:10:21+00:00weekly1https://taetaetae.github.io/tags/chromedriver/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/2018/02/01/linux-selenium/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/tags/selenium/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/tags/access-log/2018-01-25T21:18:35+00:00weekly1https://taetaetae.github.io/2018/01/25/apache-access-log-to-es/2018-01-25T21:18:35+00:00weekly1https://taetaetae.github.io/2018/01/08/python-2-to-3/2018-01-08T13:44:50+00:00weekly1https://taetaetae.github.io/tags/archives-2017/2017-12-14T12:02:45+00:00weekly1https://taetaetae.github.io/2017/12/14/elastic-on-tour/2017-12-14T12:02:45+00:00weekly1https://taetaetae.github.io/2017/11/02/what-is-kafka/2017-11-02T21:30:13+00:00weekly1https://taetaetae.github.io/2017/10/16/deview-2017-review/2017-10-16T17:29:55+00:00weekly1https://taetaetae.github.io/2017/08/28/apache-keep-alive/2017-08-28T19:56:40+00:00weekly1https://taetaetae.github.io/tags/keepalive/2017-08-28T19:56:40+00:00weekly1https://taetaetae.github.io/tags/hexo/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/2017/08/27/hexo-themes-tranquilpeak/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/tags/tranquilpeak/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/2017/07/09/refresh/2017-07-09T17:16:23+00:00weekly1https://taetaetae.github.io/2017/04/04/mybatis-use-generated-keys/2017-04-04T11:41:28+00:00weekly1https://taetaetae.github.io/tags/oracle/2017-04-04T11:41:28+00:00weekly1https://taetaetae.github.io/tags/date/2017-03-23T11:16:05+00:00weekly1https://taetaetae.github.io/2017/03/23/oracle-mybatis-date/2017-03-23T11:16:05+00:00weekly1https://taetaetae.github.io/tags/modelattribute/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/reqeustparam/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/requestbody/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/spring-command-%EA%B0%9D%EC%B2%B4/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/2017/03/12/spring-parameter/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/2017/03/08/a-quarter-of-this-year/2017-03-08T13:44:21+00:00weekly1https://taetaetae.github.io/2017/03/02/github-api/2017-03-02T11:18:05+00:00weekly1https://taetaetae.github.io/tags/jq/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/tags/json/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/2017/02/28/shell-script-json/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/tags/eclipse/2017-02-27T14:37:27+00:00weekly1https://taetaetae.github.io/2017/02/27/spring-boot-eclipse/2017-02-27T14:37:27+00:00weekly1https://taetaetae.github.io/tags/lombok/2017-02-22T17:48:42+00:00weekly1https://taetaetae.github.io/2017/02/22/lombok/2017-02-22T17:48:42+00:00weekly1https://taetaetae.github.io/tags/logback/2017-02-19T15:10:45+00:00weekly1https://taetaetae.github.io/2017/02/19/logback/2017-02-19T15:10:45+00:00weekly1https://taetaetae.github.io/2017/01/10/java8-date/2017-01-10T20:55:33+00:00weekly1https://taetaetae.github.io/2017/01/08/transactional-setting-and-property/2017-01-08T17:19:30+00:00weekly1https://taetaetae.github.io/tags/transaction/2017-01-08T17:19:30+00:00weekly1https://taetaetae.github.io/2017/01/07/spring4-json/2017-01-07T15:47:59+00:00weekly1https://taetaetae.github.io/tags/jsp/2017-01-04T18:36:17+00:00weekly1https://taetaetae.github.io/2017/01/04/20170104/2017-01-04T18:36:17+00:00weekly1https://taetaetae.github.io/2017/01/01/hello-2017/2017-01-01T15:49:31+00:00weekly1https://taetaetae.github.io/2016/12/31/adieu-2016/2016-12-31T16:59:43+00:00weekly1https://taetaetae.github.io/tags/archives-2016/2016-12-31T16:59:43+00:00weekly1https://taetaetae.github.io/2016/10/08/20161008/2016-10-08T18:04:19+00:00weekly1https://taetaetae.github.io/tags/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/2016/10/06/20161006/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/tags/%EC%8B%B1%EA%B8%80%ED%86%A4/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/2016/09/23/20160923/2016-09-23T10:26:53+00:00weekly1https://taetaetae.github.io/2016/09/18/hexo_github_blog/2016-09-18T15:38:34+00:00weekly1https://taetaetae.github.io/2016/09/18/first/2016-09-18T00:34:23+00:00weekly1 \ No newline at end of file +https://taetaetae.github.io/tags/archives-2023/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/categories/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/posts/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/categories/review/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/tags/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/posts/review-2023/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/2023-12-31T15:26:10+09:00weekly1https://taetaetae.github.io/tags/a-good-developer/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/curtule/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/categories/essay/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/2023-07-23T10:39:22+09:00weekly1https://taetaetae.github.io/tags/kafka/2023-02-19T23:39:22+09:00weekly1https://taetaetae.github.io/posts/kafka-service-utilization-study-case-review/2023-02-19T23:39:22+09:00weekly1https://taetaetae.github.io/tags/archives-2021/2022-01-02T21:45:40+09:00weekly1https://taetaetae.github.io/posts/review-2021/2022-01-02T21:45:40+09:00weekly1https://taetaetae.github.io/tags/employment/2021-10-24T16:07:11+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-employment/2021-10-24T16:07:11+09:00weekly1https://taetaetae.github.io/tags/gcp/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/heroku/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/public-offering-notice/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/categories/tech/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-3/2021-04-04T18:54:00+09:00weekly1https://taetaetae.github.io/tags/bitly/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/tags/telegram/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-2/2021-03-28T11:41:33+09:00weekly1https://taetaetae.github.io/tags/crawling/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/tags/jsoup/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/posts/public-offering-notice-1/2021-03-21T19:13:49+09:00weekly1https://taetaetae.github.io/tags/mentoring/2021-03-01T15:12:26+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-mentoring/2021-03-01T15:12:26+09:00weekly1https://taetaetae.github.io/tags/dashboard/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/posts/make-dashboards-from-elasticstack-2/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/elasticsearch/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/filebeat/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/kibana/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/tags/logstash/2021-02-17T16:53:49+09:00weekly1https://taetaetae.github.io/posts/make-dashboards-from-elasticstack-1/2021-02-15T17:50:12+09:00weekly1https://taetaetae.github.io/tags/resume/2021-01-31T18:14:37+09:00weekly1https://taetaetae.github.io/posts/a-good-developer-in-terms-of-resume/2021-01-31T18:14:37+09:00weekly1https://taetaetae.github.io/tags/archives-2020/2020-12-31T13:31:01+09:00weekly1https://taetaetae.github.io/posts/review-2020/2020-12-31T13:31:01+09:00weekly1https://taetaetae.github.io/tags/agile/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/book/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/robert-c.-martin/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/uncle-bob/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/posts/review-the-book-clean-agile/2020-12-27T17:06:19+09:00weekly1https://taetaetae.github.io/tags/openapi/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/spring-rest-docs/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/swagger/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/tags/swagger-ui/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/posts/a-combination-of-swagger-and-spring-restdocs/2020-12-22T10:41:40+09:00weekly1https://taetaetae.github.io/posts/openapi-and-swagger-ui-in-spring-boot/2020-12-20T11:42:40+09:00weekly1https://taetaetae.github.io/tags/jenkins/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/posts/jenkins-job-parallel-processing-by-pipeline/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/tags/pipeline/2020-12-06T20:19:47+09:00weekly1https://taetaetae.github.io/tags/blog/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/github-actions/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/hugo/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/posts/blog-reorganization-by-hugo/2020-11-29T18:12:15+09:00weekly1https://taetaetae.github.io/tags/log/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/tags/monitoring/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/2020/10/04/a-good-developer-in-terms-of-log-and-monitoring/2020-10-04T15:39:15+00:00weekly1https://taetaetae.github.io/tags/ci/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/tags/github/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/tags/pullrequest/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/2020/09/07/github-pullrequest-build/2020-09-07T10:09:56+00:00weekly1https://taetaetae.github.io/2020/07/12/toy-projects-second-year-review/2020-07-12T19:55:02+00:00weekly1https://taetaetae.github.io/tags/self-development/2020-06-28T20:51:03+00:00weekly1https://taetaetae.github.io/2020/06/28/a-good-developer-in-terms-of-self-development/2020-06-28T20:51:03+00:00weekly1https://taetaetae.github.io/2020/06/21/a-good-developer-in-terms-of-culture/2020-06-21T17:22:09+00:00weekly1https://taetaetae.github.io/tags/filter/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/tags/spring-boot/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/2020/04/06/spring-boot-filter/2020-04-06T23:59:36+00:00weekly1https://taetaetae.github.io/tags/circuit-breaker/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/tags/hystrix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/tags/netflix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/2020/03/29/better-rest-template-2-netflix-hystrix/2020-03-29T23:09:16+00:00weekly1https://taetaetae.github.io/2020/03/26/7-years-of-development-1st-day-of-manager/2020-03-26T23:37:17+00:00weekly1https://taetaetae.github.io/tags/retryable/2020-03-22T15:30:35+00:00weekly1https://taetaetae.github.io/2020/03/22/better-rest-template-1-retryable/2020-03-22T15:30:35+00:00weekly1https://taetaetae.github.io/2020/03/08/spring-rest-docs-in-spring-boot/2020-03-08T23:16:59+00:00weekly1https://taetaetae.github.io/tags/jupyter/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/2020/02/09/jupyter-install/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/tags/python/2020-02-09T20:06:15+00:00weekly1https://taetaetae.github.io/tags/maven/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/module/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/structure/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/2020/01/19/spring-boot-maven-multi-module/2020-01-19T10:29:03+00:00weekly1https://taetaetae.github.io/tags/archives-2019/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/tags/review/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/2019/12/29/review-2019/2019-12-29T22:22:03+00:00weekly1https://taetaetae.github.io/categories/blog/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/tags/writing/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/2019/10/27/a-reason-for-writing/2019-10-27T13:51:16+00:00weekly1https://taetaetae.github.io/tags/batch/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/tags/linux/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/2019/10/13/batch-nondisruptive-deploy/2019-10-13T15:46:12+00:00weekly1https://taetaetae.github.io/tags/spring/2019-09-29T17:55:50+00:00weekly1https://taetaetae.github.io/2019/09/29/woowabros-spring-batch/2019-09-29T17:55:50+00:00weekly1https://taetaetae.github.io/tags/network/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/tags/packetbeat/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/2019/09/08/network-monitor-by-packetbeat/2019-09-08T18:11:34+00:00weekly1https://taetaetae.github.io/tags/apache/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/load-balance/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/tomcat/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/2019/08/04/apache-load-balancing/2019-08-04T19:50:43+00:00weekly1https://taetaetae.github.io/tags/fileupload/2019-07-21T22:09:58+00:00weekly1https://taetaetae.github.io/2019/07/21/spring-file-upload/2019-07-21T22:09:58+00:00weekly1https://taetaetae.github.io/2019/07/07/review-first-half-2019/2019-07-07T17:52:20+00:00weekly1https://taetaetae.github.io/tags/%EA%B8%80%EB%98%90/2019-07-07T17:52:20+00:00weekly1https://taetaetae.github.io/tags/aop/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/tags/httpservletrequestwrapper/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/tags/logging/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/2019/06/30/controller-common-logging/2019-06-30T18:39:47+00:00weekly1https://taetaetae.github.io/2019/05/19/d-light-togetherthon-2019/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/gdg/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/hackathon/2019-05-19T22:46:03+00:00weekly1https://taetaetae.github.io/tags/java/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/tags/performance/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/2019/05/12/got-of-java-seminar/2019-05-12T20:04:01+00:00weekly1https://taetaetae.github.io/tags/mybatis/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/tags/mysql/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/2019/04/21/spring-boot-mybatis-mysql-xml/2019-04-21T22:47:04+00:00weekly1https://taetaetae.github.io/tags/aws/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/2019/04/14/aws-freetier-create-and-ssh-access/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/tags/ec2/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/tags/putty/2019-04-14T17:39:03+00:00weekly1https://taetaetae.github.io/2019/03/31/kafka-meetup-2019/2019-03-31T01:49:30+00:00weekly1https://taetaetae.github.io/tags/write/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/tags/write-the-docs/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/2019/03/24/write-the-docs-seoul-2019-review/2019-03-24T21:43:14+00:00weekly1https://taetaetae.github.io/2019/03/17/jenkins-upgrade-master-slave/2019-03-17T18:23:03+00:00weekly1https://taetaetae.github.io/2019/02/17/daily-dev-blog-3/2019-02-17T01:17:27+00:00weekly1https://taetaetae.github.io/2019/02/10/access-log-to-elastic-stack/2019-02-10T14:37:31+00:00weekly1https://taetaetae.github.io/tags/heap-dump/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/out-of-memory/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/redirect/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/2019/01/10/spring-redirect-oom/2019-01-10T18:39:47+00:00weekly1https://taetaetae.github.io/tags/parallel-precess/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/tags/rabbitmq/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/tags/redis/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/2019/01/02/faster-parallel-processes/2019-01-02T12:43:44+00:00weekly1https://taetaetae.github.io/2018/12/31/review-2018/2018-12-31T21:33:29+00:00weekly1https://taetaetae.github.io/tags/archives-2018/2018-12-31T21:33:29+00:00weekly1https://taetaetae.github.io/2018/12/13/elastic-meetup-201812/2018-12-13T22:27:02+00:00weekly1https://taetaetae.github.io/2018/12/02/jenkins-install/2018-12-02T04:37:59+00:00weekly1https://taetaetae.github.io/2018/12/02/python-buffer/2018-12-02T01:40:11+00:00weekly1https://taetaetae.github.io/tags/deview/2018-10-14T18:26:26+00:00weekly1https://taetaetae.github.io/2018/10/14/deview-2018/2018-10-14T18:26:26+00:00weekly1https://taetaetae.github.io/2018/08/28/pycon-2018/2018-08-28T23:43:16+00:00weekly1https://taetaetae.github.io/tags/pycon/2018-08-28T23:43:16+00:00weekly1https://taetaetae.github.io/tags/cloneutils/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/tags/java-deep-copy/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/2018/08/21/how-to-use-cloneutils/2018-08-21T18:02:47+00:00weekly1https://taetaetae.github.io/2018/08/09/daily-dev-blog-2/2018-08-09T20:37:26+00:00weekly1https://taetaetae.github.io/tags/flask/2018-08-05T10:27:21+00:00weekly1https://taetaetae.github.io/2018/08/05/daily-dev-blog-1/2018-08-05T10:27:21+00:00weekly1https://taetaetae.github.io/2018/07/01/open-source-software-develpoer-story-review/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/open-source-software/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/oss/2018-07-01T10:00:00+00:00weekly1https://taetaetae.github.io/tags/nginx/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/tags/web-server/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/2018/07/01/simple-web-server-flask-nginx/2018-07-01T02:00:00+00:00weekly1https://taetaetae.github.io/2018/06/29/simple-web-server-flask-apache/2018-06-29T23:00:00+00:00weekly1https://taetaetae.github.io/2018/06/27/apache-vs-nginx/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/event-driven/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/prefork-mpm/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/worker-mpm/2018-06-27T17:17:33+00:00weekly1https://taetaetae.github.io/tags/anomaly-detection/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/facebook/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/prophet/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/2018/05/31/anomaly-detection/2018-05-31T17:03:41+00:00weekly1https://taetaetae.github.io/tags/408/2018-04-29T17:39:36+00:00weekly1https://taetaetae.github.io/2018/04/29/apache-408-response-code/2018-04-29T17:39:36+00:00weekly1https://taetaetae.github.io/tags/apache-access-log/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/elasitcsearch/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/user-agent/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/2018/04/10/apache-access-log-user-agent/2018-04-10T23:20:19+00:00weekly1https://taetaetae.github.io/tags/gzip/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/2018/04/01/apache-gzip/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/tags/mod_deflate/2018-04-01T17:58:11+00:00weekly1https://taetaetae.github.io/tags/restclientexception/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/2018/03/17/rest-client-exception/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/tags/resttemplate/2018-03-17T19:19:39+00:00weekly1https://taetaetae.github.io/tags/integration/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/tags/sonarqube/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/jenkins-sonar-github-integration/2018-02-08T20:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/github-web-hook-jenkins-job-excute/2018-02-08T17:10:54+00:00weekly1https://taetaetae.github.io/tags/webhook/2018-02-08T17:10:54+00:00weekly1https://taetaetae.github.io/2018/02/08/github-with-jenkins/2018-02-08T17:10:21+00:00weekly1https://taetaetae.github.io/tags/chromedriver/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/2018/02/01/linux-selenium/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/tags/selenium/2018-02-01T14:52:10+00:00weekly1https://taetaetae.github.io/tags/access-log/2018-01-25T21:18:35+00:00weekly1https://taetaetae.github.io/2018/01/25/apache-access-log-to-es/2018-01-25T21:18:35+00:00weekly1https://taetaetae.github.io/2018/01/08/python-2-to-3/2018-01-08T13:44:50+00:00weekly1https://taetaetae.github.io/tags/archives-2017/2017-12-14T12:02:45+00:00weekly1https://taetaetae.github.io/2017/12/14/elastic-on-tour/2017-12-14T12:02:45+00:00weekly1https://taetaetae.github.io/2017/11/02/what-is-kafka/2017-11-02T21:30:13+00:00weekly1https://taetaetae.github.io/2017/10/16/deview-2017-review/2017-10-16T17:29:55+00:00weekly1https://taetaetae.github.io/2017/08/28/apache-keep-alive/2017-08-28T19:56:40+00:00weekly1https://taetaetae.github.io/tags/keepalive/2017-08-28T19:56:40+00:00weekly1https://taetaetae.github.io/tags/hexo/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/2017/08/27/hexo-themes-tranquilpeak/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/tags/tranquilpeak/2017-08-27T17:52:56+00:00weekly1https://taetaetae.github.io/2017/07/09/refresh/2017-07-09T17:16:23+00:00weekly1https://taetaetae.github.io/2017/04/04/mybatis-use-generated-keys/2017-04-04T11:41:28+00:00weekly1https://taetaetae.github.io/tags/oracle/2017-04-04T11:41:28+00:00weekly1https://taetaetae.github.io/tags/date/2017-03-23T11:16:05+00:00weekly1https://taetaetae.github.io/2017/03/23/oracle-mybatis-date/2017-03-23T11:16:05+00:00weekly1https://taetaetae.github.io/tags/modelattribute/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/reqeustparam/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/requestbody/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/tags/spring-command-%EA%B0%9D%EC%B2%B4/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/2017/03/12/spring-parameter/2017-03-12T18:03:01+00:00weekly1https://taetaetae.github.io/2017/03/08/a-quarter-of-this-year/2017-03-08T13:44:21+00:00weekly1https://taetaetae.github.io/2017/03/02/github-api/2017-03-02T11:18:05+00:00weekly1https://taetaetae.github.io/tags/jq/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/tags/json/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/2017/02/28/shell-script-json/2017-02-28T17:50:44+00:00weekly1https://taetaetae.github.io/tags/eclipse/2017-02-27T14:37:27+00:00weekly1https://taetaetae.github.io/2017/02/27/spring-boot-eclipse/2017-02-27T14:37:27+00:00weekly1https://taetaetae.github.io/tags/lombok/2017-02-22T17:48:42+00:00weekly1https://taetaetae.github.io/2017/02/22/lombok/2017-02-22T17:48:42+00:00weekly1https://taetaetae.github.io/tags/logback/2017-02-19T15:10:45+00:00weekly1https://taetaetae.github.io/2017/02/19/logback/2017-02-19T15:10:45+00:00weekly1https://taetaetae.github.io/2017/01/10/java8-date/2017-01-10T20:55:33+00:00weekly1https://taetaetae.github.io/2017/01/08/transactional-setting-and-property/2017-01-08T17:19:30+00:00weekly1https://taetaetae.github.io/tags/transaction/2017-01-08T17:19:30+00:00weekly1https://taetaetae.github.io/2017/01/07/spring4-json/2017-01-07T15:47:59+00:00weekly1https://taetaetae.github.io/tags/jsp/2017-01-04T18:36:17+00:00weekly1https://taetaetae.github.io/2017/01/04/20170104/2017-01-04T18:36:17+00:00weekly1https://taetaetae.github.io/2017/01/01/hello-2017/2017-01-01T15:49:31+00:00weekly1https://taetaetae.github.io/2016/12/31/adieu-2016/2016-12-31T16:59:43+00:00weekly1https://taetaetae.github.io/tags/archives-2016/2016-12-31T16:59:43+00:00weekly1https://taetaetae.github.io/2016/10/08/20161008/2016-10-08T18:04:19+00:00weekly1https://taetaetae.github.io/tags/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/2016/10/06/20161006/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/tags/%EC%8B%B1%EA%B8%80%ED%86%A4/2016-10-06T17:03:48+00:00weekly1https://taetaetae.github.io/2016/09/23/20160923/2016-09-23T10:26:53+00:00weekly1https://taetaetae.github.io/2016/09/18/hexo_github_blog/2016-09-18T15:38:34+00:00weekly1https://taetaetae.github.io/2016/09/18/first/2016-09-18T00:34:23+00:00weekly1 \ No newline at end of file diff --git a/tags/archives-2023/index.html b/tags/archives-2023/index.html index 937a9614..56a93c5b 100644 --- a/tags/archives-2023/index.html +++ b/tags/archives-2023/index.html @@ -1,4 +1,5 @@ -archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

 archives-2023

2023

๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธ +archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„
\ No newline at end of file diff --git a/tags/archives-2023/index.xml b/tags/archives-2023/index.xml index 64c1aadb..ac1018a0 100644 --- a/tags/archives-2023/index.xml +++ b/tags/archives-2023/index.xml @@ -1,4 +1,6 @@ -archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/tags/archives-2023/archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 23 Jul 2023 10:39:22 +0900๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/ +archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/tags/archives-2023/archives-2023 - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 31 Dec 2023 15:26:10 +0900์ดˆ๋ณด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ 2023 ๋ฆฌ๋ทฐhttps://taetaetae.github.io/posts/review-2023/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/posts/review-2023/๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๋กœ ๊ดœ์ฐฎ์€๊ฐ€ - 'ํ™˜๊ฒฝ' ํŽธhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/posts/a-good-developer-in-terms-of-surroundings/
(ํ•„์ž์˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์„ ๋ฏธ๋ฃจ์–ด) ๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ์—์„œ ์ผ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” CRUD(Create, Read, Update, Delete) API๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(?)๊ฐ€ ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ผ์ •์€ ์ด‰๋ฐ•ํ•œ๋ฐ ์‚ฌ๋žŒ์€ ๋ถ€์กฑํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ณต๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒŒ ๋ˆˆ์— ํ›คํžˆ ๋ณด์ด์ง€๋งŒ ๊ฐœ์„ ํ•  ์‹œ๊ฐ„์ด๋‚˜ ์—ฌ์œ ์กฐ์ฐจ ์—†์–ด ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ์  “๋Œ์•„๊ฐ€๊ฒŒ๋งŒ” ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋“ค. ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์€ ์ ์  ์—†์–ด์ง€๊ณ , ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ธก๋ฉด์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์ฑ…์ž„๊ณผ ๊ด€์‹ฌ ๊ฐ™์€ ์ƒ๊ฐ๋“ค์€ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํŽธ์˜๋งŒ ์ถ”๊ตฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด์ง์„ ํ•ด์•ผ๊ฒ ๋‹ค ๋งˆ์Œ๋จน๊ณ  ์ด๋ ฅ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋‚˜ ์—ฐ๋ง ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ํ•œ ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋Œ์•„๋ณด๋ฉด ํšŒ์‚ฌ์ผ์€ ๋ถˆ์ฒ ์ฃผ์•ผ ์ •๋ง ์—ด์‹ฌํžˆ ํ–ˆ์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋ณธ์ธ ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•œ ๊ฑด ํšŒ์‚ฌ์ผ ๋Œ€๋น„ ์•„์ฃผ ๊ทน์†Œ์ˆ˜์— ๋ถˆ๊ณผํ•˜๋Š” ์‚ถ์ด ๊ณ„์†๋œ๋‹ค. ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž.์ถœ์ฒ˜ : https://sdtimes.com/ai/ai-enabled-tools-might-completely-change-development-one-day/" ์ฝ”๋”ฉํ•˜๋Š” ๋กœ๋ด‡์€ ๋˜์ง€ ๋ง์ž. diff --git a/tags/index.html b/tags/index.html index e24d5d08..de25fbd4 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,2 +1,2 @@ -All Tags - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Tags

archives-2018 24archives-2017 20archives-2019 19archives-2020 18jenkins 10archives-2021 9python 8a-good-developer 7elasticsearch 7spring 7spring boot 7apache 6archives-2016 6github 5logstash 5review 5java 4kafka 4kibana 4blog 3filebeat 3flask 3hexo 3linux 3mybatis 3public-offering-notice 3web server 3archives-2023 2aws 2batch 2book 2curtule 2dashboard 2date 2deview 2Filter 2json 2monitoring 2nginx 2OpenAPI 2oracle 2spring-rest-docs 2Swagger 2Swagger-ui 2Transaction 2408 1access log 1agile 1anomaly detection 1AOP 1apache access log 1bitly 1chromedriver 1ci 1circuit breaker 1cloneUtils 1crawling 1ec2 1eclipse 1Elasitcsearch 1employment 1Event Driven 1facebook 1fileupload 1gcp 1gdg 1github-actions 1gzip 1hackathon 1heap dump 1heroku 1HttpServletRequestWrapper 1hugo 1Hystrix 1integration 1java deep copy 1jq 1jsoup 1jsp 1jupyter 1keepAlive 1Load Balance 1log 1logback 1logging 1lombok 1maven 1mentoring 1mod_deflate 1ModelAttribute 1module 1mysql 1Netflix 1network 1open source software 1oss 1out of memory 1packetbeat 1parallel precess 1performance 1pipeline 1Prefork MPM 1prophet 1pullRequest 1putty 1pycon 1rabbitMQ 1redirect 1redis 1ReqeustParam 1RequestBody 1RestClientException 1RestTemplate 1resume 1retryable 1robert c. martin 1selenium 1self-development 1SonarQube 1spring command ๊ฐ์ฒด 1structure 1telegram 1tomcat 1tranquilpeak 1uncle bob 1user-agent 1Webhook 1Worker MPM 1write 1write the docs 1writing 1๊ธ€๋˜ 1๋””์ž์ธํŒจํ„ด 1์‹ฑ๊ธ€ํ†ค 1
\ No newline at end of file +All Tags - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„

All Tags

archives-2018 24archives-2017 20archives-2019 19archives-2020 18jenkins 10archives-2021 9python 8a-good-developer 7elasticsearch 7spring 7spring boot 7apache 6archives-2016 6github 5logstash 5review 5java 4kafka 4kibana 4archives-2023 3blog 3filebeat 3flask 3hexo 3linux 3mybatis 3public-offering-notice 3web server 3aws 2batch 2book 2curtule 2dashboard 2date 2deview 2Filter 2json 2monitoring 2nginx 2OpenAPI 2oracle 2spring-rest-docs 2Swagger 2Swagger-ui 2Transaction 2408 1access log 1agile 1anomaly detection 1AOP 1apache access log 1bitly 1chromedriver 1ci 1circuit breaker 1cloneUtils 1crawling 1ec2 1eclipse 1Elasitcsearch 1employment 1Event Driven 1facebook 1fileupload 1gcp 1gdg 1github-actions 1gzip 1hackathon 1heap dump 1heroku 1HttpServletRequestWrapper 1hugo 1Hystrix 1integration 1java deep copy 1jq 1jsoup 1jsp 1jupyter 1keepAlive 1Load Balance 1log 1logback 1logging 1lombok 1maven 1mentoring 1mod_deflate 1ModelAttribute 1module 1mysql 1Netflix 1network 1open source software 1oss 1out of memory 1packetbeat 1parallel precess 1performance 1pipeline 1Prefork MPM 1prophet 1pullRequest 1putty 1pycon 1rabbitMQ 1redirect 1redis 1ReqeustParam 1RequestBody 1RestClientException 1RestTemplate 1resume 1retryable 1robert c. martin 1selenium 1self-development 1SonarQube 1spring command ๊ฐ์ฒด 1structure 1telegram 1tomcat 1tranquilpeak 1uncle bob 1user-agent 1Webhook 1Worker MPM 1write 1write the docs 1writing 1๊ธ€๋˜ 1๋””์ž์ธํŒจํ„ด 1์‹ฑ๊ธ€ํ†ค 1
\ No newline at end of file diff --git a/tags/index.xml b/tags/index.xml index 0b08ddef..bbbafcb7 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -1 +1 @@ -Tags - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/tags/Tags - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 23 Jul 2023 10:39:22 +0900a-good-developerhttps://taetaetae.github.io/tags/a-good-developer/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/tags/a-good-developer/archives-2023https://taetaetae.github.io/tags/archives-2023/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/tags/archives-2023/curtulehttps://taetaetae.github.io/tags/curtule/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/tags/curtule/kafkahttps://taetaetae.github.io/tags/kafka/Sun, 19 Feb 2023 23:39:22 +0900Authorhttps://taetaetae.github.io/tags/kafka/archives-2021https://taetaetae.github.io/tags/archives-2021/Sun, 02 Jan 2022 21:45:40 +0900Authorhttps://taetaetae.github.io/tags/archives-2021/employmenthttps://taetaetae.github.io/tags/employment/Sun, 24 Oct 2021 16:07:11 +0900Authorhttps://taetaetae.github.io/tags/employment/gcphttps://taetaetae.github.io/tags/gcp/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/gcp/herokuhttps://taetaetae.github.io/tags/heroku/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/heroku/public-offering-noticehttps://taetaetae.github.io/tags/public-offering-notice/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/public-offering-notice/bitlyhttps://taetaetae.github.io/tags/bitly/Sun, 28 Mar 2021 11:41:33 +0900Authorhttps://taetaetae.github.io/tags/bitly/ \ No newline at end of file +Tags - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„https://taetaetae.github.io/tags/Tags - Tag - ๐Ÿ‘จโ€๐Ÿ’ป๊ฟˆ๊พธ๋Š” ํƒœํƒœํƒœ์˜ ๊ณต๊ฐ„Hugo -- gohugo.ioenSun, 31 Dec 2023 15:26:10 +0900archives-2023https://taetaetae.github.io/tags/archives-2023/Sun, 31 Dec 2023 15:26:10 +0900Authorhttps://taetaetae.github.io/tags/archives-2023/a-good-developerhttps://taetaetae.github.io/tags/a-good-developer/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/tags/a-good-developer/curtulehttps://taetaetae.github.io/tags/curtule/Sun, 23 Jul 2023 10:39:22 +0900Authorhttps://taetaetae.github.io/tags/curtule/kafkahttps://taetaetae.github.io/tags/kafka/Sun, 19 Feb 2023 23:39:22 +0900Authorhttps://taetaetae.github.io/tags/kafka/archives-2021https://taetaetae.github.io/tags/archives-2021/Sun, 02 Jan 2022 21:45:40 +0900Authorhttps://taetaetae.github.io/tags/archives-2021/employmenthttps://taetaetae.github.io/tags/employment/Sun, 24 Oct 2021 16:07:11 +0900Authorhttps://taetaetae.github.io/tags/employment/gcphttps://taetaetae.github.io/tags/gcp/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/gcp/herokuhttps://taetaetae.github.io/tags/heroku/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/heroku/public-offering-noticehttps://taetaetae.github.io/tags/public-offering-notice/Sun, 04 Apr 2021 18:54:00 +0900Authorhttps://taetaetae.github.io/tags/public-offering-notice/bitlyhttps://taetaetae.github.io/tags/bitly/Sun, 28 Mar 2021 11:41:33 +0900Authorhttps://taetaetae.github.io/tags/bitly/ \ No newline at end of file