{"@attributes":{"version":"2.0"},"channel":{"title":"\uae30\uacc4\uc778\uac04 John Grib","description":"\uae30\uacc4\uc778\uac04 \ube14\ub85c\uadf8\n","link":"https:\/\/johngrib.github.io\/","pubDate":"Sat, 04 Apr 2026 19:44:43 +0900","lastBuildDate":"Sat, 04 Apr 2026 19:44:43 +0900","generator":"Jekyll v3.10.0","item":[{"title":"CASIO LCW-M100TSE-1A \uc190\ubaa9\uc2dc\uacc4","description":"\ub0b4 \uc190\ubaa9\uc2dc\uacc4","pubDate":"Sat, 04 Apr 2026 19:43:53 +0900","link":"https:\/\/johngrib.github.io\/wiki\/tool\/casio-lcw-m100tse-1ajf\/","guid":"https:\/\/johngrib.github.io\/wiki\/tool\/casio-lcw-m100tse-1ajf\/"},{"title":"2026\ub144 \uae30\ub85d","description":"\uc5f0\ub9d0\uc5d0 \ud68c\uace0\ub85c \uc774\ub984\uc744 \ubcc0\uacbd\ud560 \ubb38\uc11c","pubDate":"Sat, 04 Apr 2026 17:44:54 +0900","link":"https:\/\/johngrib.github.io\/wiki\/review\/2026\/","guid":"https:\/\/johngrib.github.io\/wiki\/review\/2026\/"},{"title":"\ud574\uba38\uc2a4\ud47c\uc73c\ub85c \ud074\ub9bd\ubcf4\ub4dc \uc774\ubbf8\uc9c0 \uc800\uc7a5\ud558\uae30","description":{},"pubDate":"Sat, 17 Jan 2026 19:58:26 +0900","link":"https:\/\/johngrib.github.io\/wiki\/hammerspoon-pasteboard-image\/","guid":"https:\/\/johngrib.github.io\/wiki\/hammerspoon-pasteboard-image\/","category":"mac"},{"title":"pngpaste","description":"\ud074\ub9bd\ubcf4\ub4dc\uc758 \uc774\ubbf8\uc9c0\ub97c \ud30c\uc77c\ub85c \ucd9c\ub825\ud560 \uc218 \uc788\ub2e4","pubDate":"Sat, 17 Jan 2026 19:58:06 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/pngpaste\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/pngpaste\/"},{"title":"(\uc694\uc57d) AGENTIC MISALIGNMENT - HOW LLMS COULD BE INSIDER THREATS","description":"\uc5d0\uc774\uc804\ud2b8\uc801 \ubd88\uc77c\uce58 - LLM\uc740 \uc5b4\ub5bb\uac8c \ub0b4\ubd80\uc790 \uc704\ud611\uc774 \ub420 \uc218 \uc788\ub294\uac00","pubDate":"Sun, 04 Jan 2026 16:59:47 +0900","link":"https:\/\/johngrib.github.io\/wiki\/clipping\/agentic-misalignment-how-llms-could-be-insider-threats\/","guid":"https:\/\/johngrib.github.io\/wiki\/clipping\/agentic-misalignment-how-llms-could-be-insider-threats\/"},{"title":"2025\ub144 \ud68c\uace0","description":"\uc774\uc81c\uc11c\uc57c \ub0b4\uac00 \uc5b4\ub5a4 \uac83\uc744 \uc88b\uc544\ud558\uace0 \uc2eb\uc5b4\ud558\ub294\uc9c0\ub97c \uc54c\uac8c \ub418\uc5b4\uac00\ub294 \uac83 \uac19\ub2e4","pubDate":"Thu, 01 Jan 2026 20:01:23 +0900","link":"https:\/\/johngrib.github.io\/wiki\/review\/2025\/","guid":"https:\/\/johngrib.github.io\/wiki\/review\/2025\/"},{"title":"2024\ub144 \ud68c\uace0","description":"\uc678\ud5a5\uc801\uc73c\ub85c \uc0b4\uace0, \ucc45\uc744 \ub9ce\uc774 \uc77d\uc740 \ud55c \ud574\uc600\ub2e4","pubDate":"Mon, 29 Dec 2025 19:49:32 +0900","link":"https:\/\/johngrib.github.io\/wiki\/review\/2024\/","guid":"https:\/\/johngrib.github.io\/wiki\/review\/2024\/"},{"title":"\ub0b4\uac00 \ucc45\uc744 \uc77d\ub294 \ubc29\ubc95","description":"\ub3c5\uc11c \uad00\ub828 \ub178\ud558\uc6b0\uc640 FAQ","pubDate":"Fri, 26 Dec 2025 23:14:21 +0900","link":"https:\/\/johngrib.github.io\/wiki\/my-book-reading\/","guid":"https:\/\/johngrib.github.io\/wiki\/my-book-reading\/"},{"title":"macOS \uc804\uc6a9 \uba85\ub839\uc5b4\ub4e4","description":{},"pubDate":"Sat, 20 Dec 2025 22:15:28 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/"},{"title":"macOS man hier","description":"macOS \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc758 \ub808\uc774\uc544\uc6c3\uc5d0 \ub300\ud55c \uc124\uba85\uc11c","pubDate":"Sat, 20 Dec 2025 22:12:40 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/man-hier\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/man-hier\/"},{"title":"Vim\uc758 i_CTRL-B","description":"\ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 \uc2e4\uc218\ud558\uc5ec \uae30\ub2a5\uc774 \uc9c0\uc6cc\uc9c4 \ud0a4","pubDate":"Fri, 19 Dec 2025 23:11:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vim\/i_ctrl-b\/","guid":"https:\/\/johngrib.github.io\/wiki\/vim\/i_ctrl-b\/"},{"title":"\ud14d\uc0ac\uc2a4 \uba85\uc0ac\uc218\uc758 \uc624\ub958(Texas Sharpshooter fallacy)","description":{},"pubDate":"Sat, 13 Dec 2025 18:27:50 +0900","link":"https:\/\/johngrib.github.io\/wiki\/jargon\/texas-sharpshooter-fallacy\/","guid":"https:\/\/johngrib.github.io\/wiki\/jargon\/texas-sharpshooter-fallacy\/"},{"title":"Bash Parameters","description":{},"pubDate":"Sat, 13 Dec 2025 17:51:51 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/parameters\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/parameters\/"},{"title":"\ucf54\ub529 \ud3f0\ud2b8","description":"\ub0b4\uac00 \uc120\ud638\ud558\ub294 \ucf54\ub529 \ud3f0\ud2b8\ub97c \uae30\ub85d\ud55c\ub2e4","pubDate":"Sat, 13 Dec 2025 17:11:32 +0900","link":"https:\/\/johngrib.github.io\/wiki\/coding-font\/","guid":"https:\/\/johngrib.github.io\/wiki\/coding-font\/","category":"font config"},{"title":"fan in, fan out","description":{},"pubDate":"Wed, 08 Oct 2025 15:39:29 +0900","link":"https:\/\/johngrib.github.io\/wiki\/pattern\/fan-out\/","guid":"https:\/\/johngrib.github.io\/wiki\/pattern\/fan-out\/","category":"\ub17c\ub9ac\ud68c\ub85c"},{"title":"\ubb34\uc5b4\uc758 \ubc95\uce59 (Moore's Law)","description":{},"pubDate":"Wed, 24 Sep 2025 22:22:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/jargon\/moore-s-law\/","guid":"https:\/\/johngrib.github.io\/wiki\/jargon\/moore-s-law\/"},{"title":"MacOS Automator\ub97c \uc0ac\uc6a9\ud574 \ud130\ubbf8\ub110\uc5d0 \uae30\ub2a5 \ubd99\uc774\uae30","description":"\uad81\uc5ec\uc9c0\ucc45","pubDate":"Wed, 17 Sep 2025 17:24:39 +0900","link":"https:\/\/johngrib.github.io\/wiki\/hack\/terminal-automator\/","guid":"https:\/\/johngrib.github.io\/wiki\/hack\/terminal-automator\/"},{"title":"IntelliJ \uc774\uac83\uc800\uac83","description":"\ubb38\uc81c \ud574\uacb0\ud55c \uacbd\ud5d8\uc744 \ubaa8\uc544\ubcf8\ub2e4","pubDate":"Thu, 11 Sep 2025 21:17:18 +0900","link":"https:\/\/johngrib.github.io\/wiki\/tool\/jetbrains\/intellij\/tips\/","guid":"https:\/\/johngrib.github.io\/wiki\/tool\/jetbrains\/intellij\/tips\/","category":"java"},{"title":"2025\ub144 \uba54\ubaa8","description":"\ub098\uc758 \uc77c\uae30","pubDate":"Sun, 31 Aug 2025 16:03:07 +0900","link":"https:\/\/johngrib.github.io\/wiki\/memo\/2025\/","guid":"https:\/\/johngrib.github.io\/wiki\/memo\/2025\/"},{"title":"\uad6c\uae00\ub9c1\ud558\ub294 \ubc29\ubc95","description":"\uad6c\uae00 \ubc0f \uc5ec\ub7ec \uac80\uc0c9 \uc11c\ube44\uc2a4 \uc0ac\uc6a9\ubc95","pubDate":"Sat, 30 Aug 2025 12:23:27 +0900","link":"https:\/\/johngrib.github.io\/wiki\/googling\/","guid":"https:\/\/johngrib.github.io\/wiki\/googling\/","category":"google twitter facebook"},{"title":"ctags \uba85\ub839\uc5b4","description":"\uc18c\uc2a4\ucf54\ub4dc\ub97c \ubd84\uc11d\ud574 \uc778\ub371\uc2f1 \ud30c\uc77c\uc744 \ub9cc\ub4e0\ub2e4","pubDate":"Thu, 28 Aug 2025 22:21:04 +0900","link":"https:\/\/johngrib.github.io\/wiki\/ctags\/","guid":"https:\/\/johngrib.github.io\/wiki\/ctags\/","category":"bash vim ctags golang command clojure vim-syntax-color"},{"title":"vim quickfix","description":{},"pubDate":"Sun, 24 Aug 2025 10:28:55 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vim\/quickfix\/","guid":"https:\/\/johngrib.github.io\/wiki\/vim\/quickfix\/","category":"vim quickfix clojure"},{"title":"\uc6f9 \ube0c\ub77c\uc6b0\uc800 \uc774\uac83\uc800\uac83","description":"\uc801\uc808\ud55c \uc775\uc2a4\ud150\uc158\uc744 \uc0ac\uc6a9\ud55c\ub2e4","pubDate":"Sat, 16 Aug 2025 21:51:39 +0900","link":"https:\/\/johngrib.github.io\/wiki\/tool\/web-browser\/","guid":"https:\/\/johngrib.github.io\/wiki\/tool\/web-browser\/","category":"chrome"},{"title":"git rerere","description":"Reuse recorded resolution of conflicted merges","pubDate":"Sun, 18 May 2025 17:26:35 +0900","link":"https:\/\/johngrib.github.io\/wiki\/git\/rerere\/","guid":"https:\/\/johngrib.github.io\/wiki\/git\/rerere\/"},{"title":"Kotlin Scope Functions","description":{},"pubDate":"Sun, 30 Mar 2025 18:11:44 +0900","link":"https:\/\/johngrib.github.io\/wiki\/kotlin\/scope-functions\/","guid":"https:\/\/johngrib.github.io\/wiki\/kotlin\/scope-functions\/"},{"title":"\ud68c\uc758","description":{},"pubDate":"Mon, 10 Mar 2025 22:29:03 +0900","link":"https:\/\/johngrib.github.io\/wiki\/better-work\/meeting\/","guid":"https:\/\/johngrib.github.io\/wiki\/better-work\/meeting\/"},{"title":"2023\ub144 \ud68c\uace0","description":"\uc815\uc2e0\uc801\uc73c\ub85c \uace0\uc0dd\uc744 \uc880 \ud558\uace0 \ucc45\uc744 \ub9ce\uc774 \uc77d\uc740 \ud55c \ud574\uc600\ub2e4","pubDate":"Sun, 09 Mar 2025 14:49:26 +0900","link":"https:\/\/johngrib.github.io\/wiki\/review\/2023\/","guid":"https:\/\/johngrib.github.io\/wiki\/review\/2023\/","category":"review"},{"title":"git \uc124\uc815\ud558\uae30","description":{},"pubDate":"Sun, 02 Mar 2025 21:56:27 +0900","link":"https:\/\/johngrib.github.io\/wiki\/git\/config\/","guid":"https:\/\/johngrib.github.io\/wiki\/git\/config\/"},{"title":"awk","description":"pattern-directed scanning and processing language","pubDate":"Sun, 02 Mar 2025 20:09:43 +0900","link":"https:\/\/johngrib.github.io\/wiki\/language\/awk\/","guid":"https:\/\/johngrib.github.io\/wiki\/language\/awk\/","category":"command \uc5b8\uc5b4 brian-kernighan awk"},{"title":"delta","description":{},"pubDate":"Sun, 02 Mar 2025 17:13:42 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/delta\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/delta\/"},{"title":"df \uba85\ub839\uc5b4","description":"\ud30c\uc77c \uc2dc\uc2a4\ud15c\uc758 \ub0a8\uc740 \uc6a9\ub7c9\uc744 \uc54c\ub824\uc900\ub2e4","pubDate":"Sun, 02 Mar 2025 16:46:37 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/df\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/df\/","category":"bash command"},{"title":"AN OPEN LETTER TO HOBBYISTS By William Henry Gates III","description":"\ucef4\ud4e8\ud130 \uc560\ud638\uac00\ub4e4\uc5d0\uac8c \ubcf4\ub0b4\ub294 \ud3b8\uc9c0 by \ube4c \uac8c\uc774\uce20","pubDate":"Sat, 22 Feb 2025 12:12:26 +0900","link":"https:\/\/johngrib.github.io\/wiki\/clipping\/bill-gates\/letter-to-hobbyists\/","guid":"https:\/\/johngrib.github.io\/wiki\/clipping\/bill-gates\/letter-to-hobbyists\/","category":"\ubc88\uc5ed bill-gates"},{"title":"\ub9e5\ubd81 \uc124\uc815\ud558\uae30","description":"\uc0c8 \ub9e5\ubd81 \uc14b\ud305\ud558\uba74\uc11c \uc791\uc131\ud558\ub294 \ubb38\uc11c","pubDate":"Wed, 19 Feb 2025 22:31:14 +0900","link":"https:\/\/johngrib.github.io\/wiki\/mac\/setting\/","guid":"https:\/\/johngrib.github.io\/wiki\/mac\/setting\/","category":"mac"},{"title":"crontab","description":"maintain crontab files for individual users","pubDate":"Sun, 16 Feb 2025 15:33:38 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/crontab\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/crontab\/"},{"title":"A Relational Model of Data for Large Shared Data Banks - E. F. Codd (1970)","description":"\ub300\ud615 \uacf5\uc720 \ub370\uc774\ud130 \ubc45\ud06c\ub97c \uc704\ud55c \ub370\uc774\ud130\uc758 \uad00\uacc4\uc801 \ubaa8\ub378","pubDate":"Mon, 10 Feb 2025 22:04:39 +0900","link":"https:\/\/johngrib.github.io\/wiki\/clipping\/e-f-codd\/a-relational-model-of-data-for-large-shared-data-banks\/","guid":"https:\/\/johngrib.github.io\/wiki\/clipping\/e-f-codd\/a-relational-model-of-data-for-large-shared-data-banks\/"},{"title":"Bash \uc178 \uc2a4\ud06c\ub9bd\ud2b8 \ud750\ub984 \uc81c\uc5b4","description":{},"pubDate":"Sun, 09 Feb 2025 21:26:46 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/flow-control\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/flow-control\/"},{"title":"sed","description":"stream editor","pubDate":"Sun, 09 Feb 2025 20:40:35 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/sed\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/sed\/","category":"bash command grep"},{"title":"kill","description":"terminate or signal a process","pubDate":"Sun, 09 Feb 2025 15:53:06 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/kill\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/kill\/"},{"title":"\ube44\uc11c \ubb38\uc81c(Secretary problem)","description":"37% \ubc95\uce59","pubDate":"Sat, 08 Feb 2025 21:52:14 +0900","link":"https:\/\/johngrib.github.io\/wiki\/problem\/secretary\/","guid":"https:\/\/johngrib.github.io\/wiki\/problem\/secretary\/","category":"math"},{"title":"iTerm","description":"iTerm2 \ubb38\uc81c \ud574\uacb0 \ubc0f \uc124\uc815 \uacbd\ud5d8\uc744 \ubaa8\uc544\ubcf8\ub2e4","pubDate":"Fri, 07 Feb 2025 23:12:53 +0900","link":"https:\/\/johngrib.github.io\/wiki\/mac\/iterm\/","guid":"https:\/\/johngrib.github.io\/wiki\/mac\/iterm\/","category":"mac"},{"title":"sips \uba85\ub839\uc5b4","description":"macOS \uc804\uc6a9 \uc774\ubbf8\uc9c0 \ucc98\ub9ac \uba85\ub839\uc5b4","pubDate":"Sun, 02 Feb 2025 22:07:26 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/sips\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/sips\/"},{"title":"\ud504\ub808\ub4dc \ube0c\ub8e9\uc2a4","description":"Frederick P. Brooks, Jr.","pubDate":"Sun, 02 Feb 2025 17:28:57 +0900","link":"https:\/\/johngrib.github.io\/wiki\/people\/fred-brooks\/","guid":"https:\/\/johngrib.github.io\/wiki\/people\/fred-brooks\/"},{"title":"ripgrep, rg","description":"recursively search current directory for lines matching a pattern","pubDate":"Wed, 29 Jan 2025 21:07:12 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/rg\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/rg\/","category":"bash command"},{"title":"false positive\uc640 false negative","description":{},"pubDate":"Wed, 29 Jan 2025 20:23:57 +0900","link":"https:\/\/johngrib.github.io\/wiki\/two-type-error\/","guid":"https:\/\/johngrib.github.io\/wiki\/two-type-error\/","category":"test statistics"},{"title":"IdeaVim \uc0ac\uc6a9\ud558\uae30","description":"\uc774\uac70\ub77c\ub3c4 \uc4f0\ub294 \uc218 \ubc16\uc5d0 \uc5c6\ub2e4","pubDate":"Wed, 29 Jan 2025 17:49:22 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vim\/ideavim\/","guid":"https:\/\/johngrib.github.io\/wiki\/vim\/ideavim\/","category":"vim ideavim intellij"},{"title":"AppCleaner","description":"Mac \ucef4\ud4e8\ud130\uc5d0\uc11c \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc744 \uc0ad\uc81c\ud560 \ub54c \ubd88\ud544\uc694\ud55c \ud30c\uc77c\ub4e4\uae4c\uc9c0 \uac19\uc774 \uc0ad\uc81c\ud574\uc900\ub2e4","pubDate":"Wed, 29 Jan 2025 17:01:10 +0900","link":"https:\/\/johngrib.github.io\/wiki\/mac\/appcleaner\/","guid":"https:\/\/johngrib.github.io\/wiki\/mac\/appcleaner\/"},{"title":"footnote \ud31d\uc5c5 \uae30\ub2a5","description":"\uc8fc\uc11d \uae30\ub2a5","pubDate":"Mon, 27 Jan 2025 23:24:00 +0900","link":"https:\/\/johngrib.github.io\/wiki\/blog\/this\/footnote\/","guid":"https:\/\/johngrib.github.io\/wiki\/blog\/this\/footnote\/"},{"title":"\ud398\ub974\uc18c\ub098(persona)","description":"\ud398\ub974\uc18c\ub098 \ub514\uc790\uc778 \ubc29\ubc95\ub860","pubDate":"Sun, 12 Jan 2025 20:07:23 +0900","link":"https:\/\/johngrib.github.io\/wiki\/persona\/","guid":"https:\/\/johngrib.github.io\/wiki\/persona\/","category":"\ubc29\ubc95\ub860"},{"title":"\uc6b0\uc8fc \ud39c \uc774\uc57c\uae30","description":{},"pubDate":"Sun, 12 Jan 2025 19:54:53 +0900","link":"https:\/\/johngrib.github.io\/wiki\/legend\/space-pen\/","guid":"https:\/\/johngrib.github.io\/wiki\/legend\/space-pen\/"},{"title":"\uc544\ud30c\uce58 \uc6f9 \uc11c\ubc84\uc758 \uc2dc\uc791","description":{},"pubDate":"Sun, 12 Jan 2025 19:52:27 +0900","link":"https:\/\/johngrib.github.io\/wiki\/legend\/begining-of-apache-webserver\/","guid":"https:\/\/johngrib.github.io\/wiki\/legend\/begining-of-apache-webserver\/","category":"story"},{"title":"2024\ub144 \uba54\ubaa8","description":"\ub098\uc758 \uc77c\uae30","pubDate":"Sun, 05 Jan 2025 23:46:59 +0900","link":"https:\/\/johngrib.github.io\/wiki\/memo\/2024\/","guid":"https:\/\/johngrib.github.io\/wiki\/memo\/2024\/"},{"title":"Vimwiki \uc0ac\uc6a9\ubc95","description":"\ub85c\uceec\uc5d0\uc11c Vim\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ub098\ub9cc\uc758 \uc704\ud0a4","pubDate":"Wed, 01 Jan 2025 19:57:35 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vimwiki\/","guid":"https:\/\/johngrib.github.io\/wiki\/vimwiki\/","category":"vim wiki"},{"title":"SQLite","description":{},"pubDate":"Wed, 25 Dec 2024 16:40:19 +0900","link":"https:\/\/johngrib.github.io\/wiki\/database\/sqlite\/","guid":"https:\/\/johngrib.github.io\/wiki\/database\/sqlite\/","category":"db"},{"title":"Vim\uc758 \ubc14\uae65\uc5d0\uc11c","description":"Vim\uc744 \uc790\uc720\ub86d\uac8c, \uc18c\ubaa8\ud488\ucc98\ub7fc \uc0ac\uc6a9\ud558\uae30","pubDate":"Sun, 15 Dec 2024 18:18:03 +0900","link":"https:\/\/johngrib.github.io\/wiki\/article\/out-of-the-vim\/","guid":"https:\/\/johngrib.github.io\/wiki\/article\/out-of-the-vim\/","category":"vim-enter-\ubc1c\ud45c\uc790\ub8cc"},{"title":"Vim\uc758 gx \ud655\uc7a5\ud558\uae30","description":"VimEnter 2022 \ubc1c\ud45c\uc790\ub8cc - gx\ub97c \ud655\uc7a5\ud574\uc11c \ub2e4\uc591\ud55c \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud558\uc790","pubDate":"Sun, 15 Dec 2024 13:47:10 +0900","link":"https:\/\/johngrib.github.io\/wiki\/article\/extend-vim-gx\/","guid":"https:\/\/johngrib.github.io\/wiki\/article\/extend-vim-gx\/","category":"vim vim-enter-\ubc1c\ud45c\uc790\ub8cc"},{"title":"Vimwiki\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud55c \ub098\ub9cc\uc758 LSP\ub97c \ub9cc\ub4e4\uc790","description":"VimEnter 2023 \ubc1c\ud45c\uc790\ub8cc","pubDate":"Sun, 15 Dec 2024 13:46:20 +0900","link":"https:\/\/johngrib.github.io\/wiki\/article\/vimwiki-lsp\/","guid":"https:\/\/johngrib.github.io\/wiki\/article\/vimwiki-lsp\/","category":"vim vim-enter-\ubc1c\ud45c\uc790\ub8cc"},{"title":"\ucc38\uc870 \ud22c\uba85\uc131","description":"Referential Transparency","pubDate":"Sun, 01 Dec 2024 20:48:52 +0900","link":"https:\/\/johngrib.github.io\/wiki\/jargon\/referential-transparency\/","guid":"https:\/\/johngrib.github.io\/wiki\/jargon\/referential-transparency\/"},{"title":"Bash \uad6c\ubb38 \ud655\uc7a5","description":{},"pubDate":"Sun, 01 Dec 2024 16:46:21 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/expansion\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/expansion\/"},{"title":"Perl \ud55c \uc904 \uc0ac\uc6a9","description":{},"pubDate":"Thu, 28 Nov 2024 23:04:40 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/perl-one-liner\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/perl-one-liner\/","category":"bash command"},{"title":"2024\ub144 \ub9c1\ud06c \ubaa8\uc74c","description":"\uc5ec\uae30\ub85c \uc62e\uaca8\ub450\uace0 \ud734\ub300\ud3f0 \uc6f9 \ube0c\ub77c\uc6b0\uc800 \ud0ed \uc880 \uc904\uc774\uc790","pubDate":"Sat, 09 Nov 2024 23:21:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/links\/2024\/","guid":"https:\/\/johngrib.github.io\/wiki\/links\/2024\/"},{"title":"Destructuring","description":"\uc791\uc131\uc911\uc778 \ubb38\uc11c","pubDate":"Sun, 03 Nov 2024 22:46:21 +0900","link":"https:\/\/johngrib.github.io\/wiki\/programming\/destructuring\/","guid":"https:\/\/johngrib.github.io\/wiki\/programming\/destructuring\/","category":"clojure"},{"title":"\uad00\uc2ec\uac00\ub294 wiki blogroll","description":{},"pubDate":"Wed, 23 Oct 2024 22:10:57 +0900","link":"https:\/\/johngrib.github.io\/wiki\/blog\/roll\/","guid":"https:\/\/johngrib.github.io\/wiki\/blog\/roll\/","category":"blog"},{"title":"Java Thread","description":{},"pubDate":"Sat, 05 Oct 2024 23:32:00 +0900","link":"https:\/\/johngrib.github.io\/wiki\/java\/thread\/","guid":"https:\/\/johngrib.github.io\/wiki\/java\/thread\/"},{"title":"Thread.State","description":"java.lang.Thread.State enum","pubDate":"Sat, 05 Oct 2024 22:25:48 +0900","link":"https:\/\/johngrib.github.io\/wiki\/java\/thread\/state\/","guid":"https:\/\/johngrib.github.io\/wiki\/java\/thread\/state\/","category":"java thread"},{"title":"trap \uba85\ub839\uc5b4","description":{},"pubDate":"Fri, 04 Oct 2024 17:50:13 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/trap\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/trap\/"},{"title":"rev \uba85\ub839\uc5b4","description":"\ubb38\uc790\uc5f4\uc744 \ub4a4\uc9d1\ub294\ub2e4","pubDate":"Fri, 04 Oct 2024 15:33:15 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/rev\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/rev\/"},{"title":"Shell builtin \uba85\ub839\uc5b4","description":{},"pubDate":"Fri, 04 Oct 2024 15:19:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/builtin\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/builtin\/"},{"title":"seq","description":"print sequences of numbers","pubDate":"Fri, 04 Oct 2024 14:30:09 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/seq\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/seq\/","category":"bash command"},{"title":"pstree","description":"\ud504\ub85c\uc138\uc2a4 \ubd80\ubaa8 \uc790\uc2dd \uad00\uacc4\ub97c \ud2b8\ub9ac \ud615\ud0dc\ub85c \ubcf4\uc5ec\uc900\ub2e4","pubDate":"Thu, 03 Oct 2024 23:07:10 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/pstree\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/pstree\/"},{"title":"ps \uba85\ub839\uc5b4","description":"process status\ub97c \ubcf4\uc5ec\uc900\ub2e4","pubDate":"Thu, 03 Oct 2024 22:52:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/ps\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/ps\/"},{"title":"touch","description":"change file access and modification times","pubDate":"Wed, 02 Oct 2024 22:35:34 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/touch\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/touch\/","category":"bash command"},{"title":"Bash Arrays","description":{},"pubDate":"Sun, 29 Sep 2024 22:49:01 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/arrays\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/arrays\/"},{"title":"cat \uba85\ub839\uc5b4","description":"concatenate and print files","pubDate":"Sun, 29 Sep 2024 20:22:07 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/cat\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/cat\/"},{"title":"pipe","description":"|","pubDate":"Wed, 25 Sep 2024 21:45:11 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/pipe\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/pipe\/"},{"title":"screencapture \uba85\ub839\uc5b4","description":{},"pubDate":"Sun, 22 Sep 2024 12:42:22 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/screencapture\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/macos\/screencapture\/"},{"title":"sudo \uba85\ub839\uc5b4","description":{},"pubDate":"Sat, 21 Sep 2024 23:18:24 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/sudo\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/sudo\/"},{"title":"find","description":"walk a file hierarchy","pubDate":"Sat, 21 Sep 2024 23:12:31 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/find\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/find\/","category":"bash command"},{"title":"moreutils","description":{},"pubDate":"Fri, 20 Sep 2024 17:21:43 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/moreutils\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/moreutils\/"},{"title":"chronic \uba85\ub839\uc5b4","description":"\uba85\ub839\uc774 \uc2e4\ud328\ud55c \uacbd\uc6b0\uc5d0\ub9cc \uacb0\uacfc\ub97c \ucd9c\ub825\ud55c\ub2e4","pubDate":"Fri, 20 Sep 2024 17:18:47 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/chronic\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/chronic\/"},{"title":"date \uba85\ub839\uc5b4","description":"\ub0a0\uc9dc\ub098 \uc2dc\uac04\uc744 \ucd9c\ub825\ud558\uac70\ub098 \uc124\uc815\ud55c\ub2e4","pubDate":"Thu, 19 Sep 2024 22:50:44 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/date\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/date\/","category":"bash command"},{"title":"man \uba85\ub839\uc5b4","description":"\uc720\ub2c9\uc2a4 \uba54\ub274\uc5bc \ud398\uc774\uc9c0\ub97c \ucc3e\uc544\ubcf4\ub294 \uba85\ub839","pubDate":"Wed, 18 Sep 2024 18:14:25 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/man\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/man\/","category":"bash command c"},{"title":"getopts \uba85\ub839\uc5b4","description":{},"pubDate":"Wed, 18 Sep 2024 15:55:51 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/getopts\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/getopts\/"},{"title":"echo \uba85\ub839\uc5b4","description":"\ud14d\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud55c\ub2e4","pubDate":"Wed, 18 Sep 2024 12:34:36 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/echo\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/echo\/"},{"title":"bash","description":{},"pubDate":"Wed, 18 Sep 2024 09:12:37 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/"},{"title":"bc","description":"An arbitrary precision calculator language","pubDate":"Wed, 18 Sep 2024 09:04:52 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bc\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bc\/","category":"bash command"},{"title":"tr \uba85\ub839\uc5b4","description":"translate characters","pubDate":"Sun, 15 Sep 2024 21:11:42 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/tr\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/tr\/","category":"bash command"},{"title":"tail \uba85\ub839\uc5b4","description":"display the last part of a file","pubDate":"Tue, 10 Sep 2024 22:46:27 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/tail\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/tail\/","category":"bash command"},{"title":"ts \uba85\ub839\uc5b4","description":"\ud45c\uc900 \uc785\ub825\uc5d0 \ud0c0\uc784\uc2a4\ud0ec\ud504\ub97c \ubd99\uc5ec \ucd9c\ub825\ud574\uc900\ub2e4","pubDate":"Tue, 10 Sep 2024 22:05:51 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/ts\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/ts\/"},{"title":"jq","description":"Command-line JSON processor","pubDate":"Sun, 08 Sep 2024 22:55:35 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/jq\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/jq\/","category":"bash command"},{"title":"gron \uba85\ub839\uc5b4","description":"JSON\uc744 greppable \ud558\uac8c \ud45c\ud604\ud574\uc900\ub2e4","pubDate":"Sun, 08 Sep 2024 22:55:21 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/gron\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/gron\/"},{"title":"Redirection","description":{},"pubDate":"Sun, 08 Sep 2024 18:42:44 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/redirection\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/bash\/redirection\/"},{"title":"Alan J. Perlis","description":"\ud29c\ub9c1\uc0c1 \ucd5c\ucd08 \uc218\uc0c1\uc790 (1966\ub144)","pubDate":"Sun, 08 Sep 2024 14:47:58 +0900","link":"https:\/\/johngrib.github.io\/wiki\/people\/alan-j-perlis\/","guid":"https:\/\/johngrib.github.io\/wiki\/people\/alan-j-perlis\/"},{"title":"Comrade","description":"IntelliJ\ub97c NeoVim \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30","pubDate":"Sun, 08 Sep 2024 12:47:23 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vim\/comrade\/","guid":"https:\/\/johngrib.github.io\/wiki\/vim\/comrade\/"},{"title":"Vim \uc758 CLI \uc635\uc158\ub4e4","description":"\uc791\uc131 \uc911\uc778 \ubb38\uc11c","pubDate":"Sat, 07 Sep 2024 17:48:49 +0900","link":"https:\/\/johngrib.github.io\/wiki\/vim\/cli-options\/","guid":"https:\/\/johngrib.github.io\/wiki\/vim\/cli-options\/"},{"title":"vipe \uba85\ub839\uc5b4","description":"bash \ud30c\uc774\ud504 \uc0ac\uc774\uc5d0 vi \ud3b8\uc9d1\uc744 \ub07c\uc6cc\ub123\uc744 \uc218 \uc788\ub2e4","pubDate":"Mon, 02 Sep 2024 20:59:31 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/vipe\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/vipe\/"},{"title":"sponge \uba85\ub839\uc5b4","description":{},"pubDate":"Sun, 01 Sep 2024 21:43:30 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/sponge\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/sponge\/"},{"title":"\ubb34\ud611\uc9c0 \uc8fc\uc778\uacf5 \uc81c\uc784\uc2a4 \uace0\uc2ac\ub9c1(James Gosling)","description":"\uc911\ud559\uc0dd \ub54c \uc804\uc0b0\ud559\uacfc\uc5d0 \uce68\uc785\ud574 \ub3c5\ud559\uc73c\ub85c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ud130\ub4dd","pubDate":"Sat, 31 Aug 2024 20:51:27 +0900","link":"https:\/\/johngrib.github.io\/wiki\/people\/james-gosling\/","guid":"https:\/\/johngrib.github.io\/wiki\/people\/james-gosling\/","category":"story james-gosling \uc778\ubb3c gnu emacs"},{"title":"pee \uba85\ub839\uc5b4","description":"\ud45c\uc900 \uc785\ub825\uc744 \ud32c\uc544\uc6c3\ud55c\ub2e4","pubDate":"Sat, 31 Aug 2024 17:04:39 +0900","link":"https:\/\/johngrib.github.io\/wiki\/cmd\/pee\/","guid":"https:\/\/johngrib.github.io\/wiki\/cmd\/pee\/"},{"title":"macOS \ucd08\ubcf4\ub97c \uc704\ud55c \ud130\ubbf8\ub110 \uc0ac\uc6a9 \uac00\uc774\ub4dc - Week 07","description":"\uc791\uc131\uc911\uc778 \ubb38\uc11c","pubDate":"Sat, 31 Aug 2024 16:52:32 +0900","link":"https:\/\/johngrib.github.io\/wiki\/mac\/terminal-guide\/07\/","guid":"https:\/\/johngrib.github.io\/wiki\/mac\/terminal-guide\/07\/"},{"title":"Next JWP Study 16","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \uc5ec\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub9c8\uc9c0\ub9c9-\ub9d0\uc500\" id=\"markdown-toc-\ub9c8\uc9c0\ub9c9-\ub9d0\uc500\">\ub9c8\uc9c0\ub9c9 \ub9d0\uc500<\/a>    <ul>\n      <li><a href=\"#\uad50\uc218\ub2d8\uc774-\uacfc\uac70\ub85c-\ub3cc\uc544\uac00-\uc790\ubc14-\uc6f9-\ubc31\uc5d4\ub4dc-\uac1c\ubc1c\uc790\ub97c-\uc2dc\uc791\ud55c\ub2e4\uba74\" id=\"markdown-toc-\uad50\uc218\ub2d8\uc774-\uacfc\uac70\ub85c-\ub3cc\uc544\uac00-\uc790\ubc14-\uc6f9-\ubc31\uc5d4\ub4dc-\uac1c\ubc1c\uc790\ub97c-\uc2dc\uc791\ud55c\ub2e4\uba74\">\uad50\uc218\ub2d8\uc774 \uacfc\uac70\ub85c \ub3cc\uc544\uac00 \uc790\ubc14 \uc6f9 \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74<\/a><\/li>\n      <li><a href=\"#\ud6a8\uacfc\uc801\uc73c\ub85c-\ud559\uc2b5\ud558\ub294-\ubc29\ubc95\ub860\ub3c4-\uacf5\ubd80\ud560-\uac83\" id=\"markdown-toc-\ud6a8\uacfc\uc801\uc73c\ub85c-\ud559\uc2b5\ud558\ub294-\ubc29\ubc95\ub860\ub3c4-\uacf5\ubd80\ud560-\uac83\">\ud6a8\uacfc\uc801\uc73c\ub85c \ud559\uc2b5\ud558\ub294 \ubc29\ubc95\ub860\ub3c4 \uacf5\ubd80\ud560 \uac83<\/a><\/li>\n      <li><a href=\"#\uc790\ubc14-\uc6f9-\uac1c\ubc1c-\uad00\ub828-\ucd94\ucc9c-\uc11c\uc801\" id=\"markdown-toc-\uc790\ubc14-\uc6f9-\uac1c\ubc1c-\uad00\ub828-\ucd94\ucc9c-\uc11c\uc801\">\uc790\ubc14 \uc6f9 \uac1c\ubc1c \uad00\ub828 \ucd94\ucc9c \uc11c\uc801<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5f4-\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \uc5ec\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-06-01 19:00:03 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc624\ub298\uc740 8\uc8fc \uacfc\uc815\uc758 \ub9c8\uc9c0\ub9c9 \uc218\uc5c5.<\/li>\n  <li>\uc218\uc5c5 \uc2dc\uc791\uc2dc\uc5d0 \ud654\uc7ac \uacbd\ubcf4\uac00 \uc6b8\ub9bc.\n    <ul>\n      <li>\ub300\ud53c\ub97c \uc8fc\uc800\ud558\ub294 \uc0ac\ub78c\ub4e4\ub3c4 \uc788\uc5c8\uc9c0\ub9cc \uacb0\uad6d \ubaa8\ub450 \uc548\uc804\ud558\uac8c \uac74\ubb3c \ubc14\uae65\uc73c\ub85c \ube60\uc838\ub098\uac14\ub2e4.<\/li>\n      <li>\uc6d0\uce59\uc5d0 \ucda9\uc2e4\ud55c \ud68c\uc0ac\ub97c \ub2e4\ub2cc\ub2e4\ub294 \uac83\uc774 \uae30\uc058\ub2e4.<\/li>\n      <li>\ub2e4\ud589\ud788 \uc9c4\uc9dc \ud654\uc7ac\uac00 \uc544\ub2c8\uc5c8\uc73c\ubbc0\ub85c(\uacbd\ubcf4\uae30 \uc624\uc791\ub3d9), <code class=\"language-plaintext highlighter-rouge\">19:35<\/code>\uc5d0 \uac15\uc758\uc2e4\ub85c \ubcf5\uadc0\ud558\uc5ec \uc218\uc5c5\uc744 \uacc4\uc18d \ub4e4\uc744 \uc218 \uc788\uc5c8\ub2e4.<\/li>\n      <li>\ud654\uc7ac \uacbd\ubcf4\uc5d0 \ub300\ud55c \uc548\uc804 \ubd88\uac10\uc99d\ub3c4 \uc77c\uc885\uc758 '\uae68\uc9c4 \ucc3d\ubb38'\uc73c\ub85c \ubcfc \uc218 \uc788\uc9c0 \uc54a\uc744\uae4c?<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\ub9c8\uc9c0\ub9c9-\ub9d0\uc500\">\ub9c8\uc9c0\ub9c9 \ub9d0\uc500<\/h1>\n\n<h2 id=\"\uad50\uc218\ub2d8\uc774-\uacfc\uac70\ub85c-\ub3cc\uc544\uac00-\uc790\ubc14-\uc6f9-\ubc31\uc5d4\ub4dc-\uac1c\ubc1c\uc790\ub97c-\uc2dc\uc791\ud55c\ub2e4\uba74\">\uad50\uc218\ub2d8\uc774 \uacfc\uac70\ub85c \ub3cc\uc544\uac00 \uc790\ubc14 \uc6f9 \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74<\/h2>\n\n<p>\uc2dc\uc791\ud558\ub294 \ub2e8\uacc4<\/p>\n\n<ul>\n  <li>\uae30\ubcf8: Spring Boot + Spring<\/li>\n  <li>DB: Spring Data JPA, ORM \ud504\ub808\uc784\uc6cc\ud06c, \uad00\uacc4\ud615 DB, DB Migration \ub3c4\uad6c\n    <ul>\n      <li>ORM\uc740 \ud604\uc7ac \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub354\ub77c\ub3c4 \ubbf8\ub798\ub97c \uc704\ud574\u2026<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc778\uc99d, \uc778\uac00: Spring Security<\/li>\n  <li>Clean code: \uac1d\uccb4\uc9c0\ud5a5, \ud14c\uc2a4\ud2b8, \ub9ac\ud329\ud1a0\ub9c1<\/li>\n  <li>\ube4c\ub4dc \ub3c4\uad6c: \uba54\uc774\ube10 \ub610\ub294 \uadf8\ub798\ub4e4<\/li>\n  <li>Logging: SLF4J, Logback<\/li>\n  <li>\uc790\ub3d9\ud654: \uc258 \uc2a4\ud06c\ub9bd\ud2b8<\/li>\n  <li>\uc18c\uc2a4 \ucf54\ub4dc \uad00\ub9ac: Git<\/li>\n<\/ul>\n\n<p>\ud55c \ub2e8\uacc4 \ub354 \ub098\uc544\uac04\ub2e4\uba74<\/p>\n\n<ul>\n  <li>\ud504\ub808\uc784\uc6cc\ud06c, \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c1\uc811 \uad6c\ud604<\/li>\n  <li>\uae30\ucd08 \uc9c0\uc2dd: \ub124\ud2b8\uc6cc\ud06c, HTTP<\/li>\n  <li>DB: No SQL<\/li>\n  <li>Restful API, react.js, angular.js<\/li>\n  <li>\ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d, Reactive Programming<\/li>\n  <li>\ubcf4\uc548\uacfc \uc131\ub2a5: Cache(\uc11c\ubc84\uce21 Cache, \uc815\uc801\uc778 \uc790\uc6d0 Cache), Message Queue, SSL<\/li>\n  <li>\uc790\ub3d9\ud654: Ansible, Docker<\/li>\n  <li>\uac1c\ubc1c\ubb38\ud654 \ubc0f \ud504\ub85c\uc138\uc2a4<\/li>\n<\/ul>\n\n<h2 id=\"\ud6a8\uacfc\uc801\uc73c\ub85c-\ud559\uc2b5\ud558\ub294-\ubc29\ubc95\ub860\ub3c4-\uacf5\ubd80\ud560-\uac83\">\ud6a8\uacfc\uc801\uc73c\ub85c \ud559\uc2b5\ud558\ub294 \ubc29\ubc95\ub860\ub3c4 \uacf5\ubd80\ud560 \uac83<\/h2>\n\n<p>\ucd94\ucc9c \uc11c\uc801<\/p>\n\n<ul>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?barcode=9788901150598\">\uc2b5\uad00\uc758 \ud798<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788995540213&amp;orderClick=LAG&amp;Kc=\">\uc774\ub108 \uac8c\uc784: \ubc30\uc6b0\uba70 \uc990\uac81\uac8c \uc77c\ud558\ub294 \ubc95(\uc808\ud310)<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788973378869&amp;orderClick=LAG&amp;Kc=\">\ubab0\uc785\uc758 \uc990\uac70\uc6c0<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9791186805282&amp;orderClick=LAH&amp;Kc=\">1\ub9cc \uc2dc\uac04\uc758 \uc7ac\ubc1c\uacac: \ub178\ub825\uc740 \uc65c \uc6b0\ub9ac\ub97c \ubc30\uc2e0\ud558\ub294\uac00<\/a><\/li>\n<\/ul>\n\n<h2 id=\"\uc790\ubc14-\uc6f9-\uac1c\ubc1c-\uad00\ub828-\ucd94\ucc9c-\uc11c\uc801\">\uc790\ubc14 \uc6f9 \uac1c\ubc1c \uad00\ub828 \ucd94\ucc9c \uc11c\uc801<\/h2>\n\n<ul>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788965400677&amp;orderClick=LAH&amp;Kc=\">\uc790\ubc14 \uc6f9 \uac1c\ubc1c \uc6cc\ud06c\ubd81<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788966261161&amp;orderClick=LAH&amp;Kc=\">Effective Java<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788960773431&amp;orderClick=LAH&amp;Kc=\">\ud1a0\ube44\uc758 SPRING<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788960777330&amp;orderClick=LAH&amp;Kc=\">JPA \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788966261024&amp;orderClick=LAH&amp;Kc=\">TDD by example<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788979149715&amp;orderClick=LAH&amp;Kc=\">Refactoring<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788998139766&amp;orderClick=LAH&amp;Kc=\">\uac1d\uccb4\uc9c0\ud5a5\uc758 \uc0ac\uc2e4\uacfc \uc624\ud574<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788969090010&amp;orderClick=LAH&amp;Kc=\">\uac1d\uccb4 \uc9c0\ud5a5\uacfc \ub514\uc790\uc778 \ud328\ud134<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788966260959&amp;orderClick=LAH&amp;Kc=\">Clean Code<\/a><\/li>\n  <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788992939850&amp;orderClick=LAH&amp;Kc=\">\ub3c4\uba54\uc778 \uc8fc\ub3c4 \uc124\uacc4<\/a><\/li>\n  <li><a href=\"https:\/\/www.amazon.com\/Working-Effectively-Legacy-Michael-Feathers\/dp\/0131177052\">Working Effectively with Legacy Code 1st Edition<\/a>\n    <ul>\n      <li><a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?ejkGb=KOR&amp;mallGb=KOR&amp;barcode=9788989975922&amp;orderClick=LAH&amp;Kc=\">\ub808\uac70\uc2dc \ucf54\ub4dc \ud65c\uc6a9 \uc804\ub7b5<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>Isolation level\uc5d0 \ub300\ud574\uc11c\ub294 SQL 92 \ubb38\uc11c\ub97c \ucc38\uace0 (Table9, 69\ucabd)\n    <ul>\n      <li><a href=\"https:\/\/www.contrib.andrew.cmu.edu\/~shadow\/sql\/sql1992.txt\">SQL 92<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-KlMu_0pZySnFa_fxo_n\">Test, OOP \ud53c\ub4dc\ubc31<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-Kiheahir0nyud31unoI\">Spring Profile \ubc0f \uc11c\ubc84 \ubc30\ud3ec<\/a><\/li>\n      <li><a href=\"http:\/\/blog.restcase.com\/rest-api-error-codes-101\/\">REST API Error Codes 101<\/a><\/li>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-spring-boot\/tree\/step12-spring-profile\">\ucc38\uace0\uc6a9 \uad50\uc218\ub2d8 \uc800\uc7a5\uc18c<\/a><\/li>\n      <li>DB migration \ub3c4\uad6c\n        <ul>\n          <li><a href=\"https:\/\/flywaydb.org\/\">flywaydb<\/a><\/li>\n          <li><a href=\"http:\/\/www.liquibase.org\/\">liquibase<\/a><\/li>\n        <\/ul>\n      <\/li>\n      <li><a href=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/nextstep-real.appspot.com\/o\/lesson-attachments%2F-KgqHzXq92AfQVxeZor5%2F8-2-3.%20%EC%B5%9C%EC%A2%85%20%EC%A0%95%EB%A6%AC.pdf?alt=media&amp;token=893d17ee-b6fc-4927-bed7-f973c55abb09\">\ucd5c\uc885 \uc815\ub9ac.pdf<\/a><\/li>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-book\/tree\/master\/chapter1\">\ucd08\ubcf4 \uc6f9 \uac1c\ubc1c\uc790\ub97c \uc704\ud558\uc5ec<\/a><\/li>\n      <li><a href=\"https:\/\/www.youtube.com\/watch?v=3mgMwObtaQ0\">\uc790\ubc14 \uc6f9 \uac1c\ubc1c\uc790\uc758 \ud559\uc2b5 \ub85c\ub4dc\ub9f5<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"https:\/\/slipp.net\/\">\uad50\uc218\ub2d8\uaed8 \uc9c8\ubb38<\/a><\/li>\n<\/ul>\n","pubDate":"Thu, 01 Jun 2017 19:52:40 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/06\/01\/jwp-16\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/06\/01\/jwp-16\/","category":"study jwp"},{"title":"Next JWP Study 15","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ub2e4\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#restful-api-\uc124\uacc4\" id=\"markdown-toc-restful-api-\uc124\uacc4\">Restful API \uc124\uacc4<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5f4-\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ub2e4\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-29 19:00:01 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\ucc45 \ucd94\ucc9c: <a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?mallGb=KOR&amp;ejkGb=KOR&amp;barcode=9788931004090&amp;orderClick=JAj\">\ub0b4\uac00 \ubbff\ub294 \uc138\uc0c1 by E.F. \uc288\ub9c8\ud5c8<\/a><\/li>\n  <li>\uc624\ub298\uc740 Restful API \uc124\uacc4 \uc2e4\uc2b5\uc744 \ud574\ubcf8\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"restful-api-\uc124\uacc4\">Restful API \uc124\uacc4<\/h1>\n\n<p>\uad50\uc218\ub2d8 \ucd94\ucc9c \uc77d\uc5b4\ubcfc\ub9cc\ud55c \uae00\ub4e4<\/p>\n\n<ul>\n  <li><a href=\"http:\/\/www.vinaysahni.com\/best-practices-for-a-pragmatic-restful-api\">Best Practices for Designing a Pragmatic RESTful API<\/a><\/li>\n  <li><a href=\"https:\/\/pages.apigee.com\/rs\/apigee\/images\/api-design-ebook-2012-03.pdf\">PDF: Web API Design Crafting Interfaces that Developers Love<\/a><\/li>\n  <li><a href=\"https:\/\/martinfowler.com\/articles\/richardsonMaturityModel.html\">Martin Fowler - steps toward the glory of REST<\/a><\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>REST\ub97c \ucc98\uc74c \uc81c\uc548\ud55c \ub85c\uc774 \ud544\ub529\uc758 \ub17c\ubb38 \ub9c1\ud06c. \ub2e4 \uc77d\uae30 \ubc88\uac70\ub86d\ub2e4\uba74 <strong>CHAPTER 5: Representational State Transfer (REST)<\/strong>\ub77c\ub3c4 \uc77d\uc5b4\ub450\uba74 \uad1c\ucc2e\ub2e4.\n    <ul>\n      <li><a href=\"https:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/top.htm\">Architectural Styles and the Design of Network-based Software Architectures by Roy Thomas Fielding<\/a><\/li>\n      <li><a href=\"https:\/\/www.google.co.kr\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwjVj5Hj-JTUAhXEo5QKHQWdCTMQFgg2MAE&amp;url=https%3A%2F%2Fwww.ics.uci.edu%2F~fielding%2Fpubs%2Fdissertation%2Ffielding_dissertation.pdf&amp;usg=AFQjCNEEwS3STct3jnKXToOQXO15Q4cY1g\">PDF \ud30c\uc77c<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"http:\/\/www.vinaysahni.com\/best-practices-for-a-pragmatic-restful-api\">Best Practices for Designing a Pragmatic RESTful API<\/a><\/li>\n  <li>\n    <p><a href=\"https:\/\/pages.apigee.com\/rs\/apigee\/images\/api-design-ebook-2012-03.pdf\">PDF: Web API Design Crafting Interfaces that Developers Love<\/a><\/p>\n  <\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-Kihe6YpYKTxWlvaE-xz\">RESTful API \uc124\uacc4<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-Kj6o0MYeqXWkmV7uR_s\">\ud14c\uc2a4\ud2b8\ub97c \ud65c\uc6a9\ud55c Restful API \uac1c\ubc1c<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-KiheRpKnPav7jqwECvw\">\ud14c\uc2a4\ud2b8, \uac1d\uccb4 \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/li>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-spring-boot\/tree\/step10-delete-question-completed\">\uacfc\uc81c \ucc38\uace0\uc6a9 \uad50\uc218\ub2d8 \uc800\uc7a5\uc18c<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Mon, 29 May 2017 19:54:06 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/29\/jwp-15\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/29\/jwp-15\/","category":"study jwp"},{"title":"Next JWP Study 14","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ub124 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ud504\ub85c\uadf8\ub798\ubc0d-\ub2e8\uc0c1-\ubcc0\ud654\ub97c-\uc5b4\ub5bb\uac8c-\ub9cc\ub4e4\uc5b4\uac08-\uac83\uc778\uac00\" id=\"markdown-toc-\ud504\ub85c\uadf8\ub798\ubc0d-\ub2e8\uc0c1-\ubcc0\ud654\ub97c-\uc5b4\ub5bb\uac8c-\ub9cc\ub4e4\uc5b4\uac08-\uac83\uc778\uac00\">\ud504\ub85c\uadf8\ub798\ubc0d \ub2e8\uc0c1: \ubcc0\ud654\ub97c \uc5b4\ub5bb\uac8c \ub9cc\ub4e4\uc5b4\uac08 \uac83\uc778\uac00?<\/a><\/li>\n  <li><a href=\"#immutable-\uac1d\uccb4-\uba54\ubaa8\" id=\"markdown-toc-immutable-\uac1d\uccb4-\uba54\ubaa8\">immutable \uac1d\uccb4 \uba54\ubaa8<\/a><\/li>\n  <li><a href=\"#orm---jpa\" id=\"markdown-toc-orm---jpa\">ORM - JPA<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5f4-\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ub124 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-25 19:00:00 +0900<\/code> \ubb34\ub835\uc5d0 \uc2dc\uc791\ud588\uc744 \uac83\uc73c\ub85c \ucd94\uce21.\n    <ul>\n      <li>\uc774\ubc88 \uc218\uc5c5\uc5d4 \ub0b4\uac00 3 \ubd84 \uc815\ub3c4 \uc9c0\uac01\ud588\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc624\ub298\uc740 ORM\uc744 \uc0ac\uc6a9\ud574 \ubcf8\ub2e4.<\/li>\n  <li>\uc774\uc81c \uc885\uac15\uae4c\uc9c0 \uc218\uc5c5 \ub450 \ubc88 \ub0a8\uc558\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"\ud504\ub85c\uadf8\ub798\ubc0d-\ub2e8\uc0c1-\ubcc0\ud654\ub97c-\uc5b4\ub5bb\uac8c-\ub9cc\ub4e4\uc5b4\uac08-\uac83\uc778\uac00\">\ud504\ub85c\uadf8\ub798\ubc0d \ub2e8\uc0c1: \ubcc0\ud654\ub97c \uc5b4\ub5bb\uac8c \ub9cc\ub4e4\uc5b4\uac08 \uac83\uc778\uac00?<\/h1>\n\n<p>\ud68c\uace0\ub97c \ud1b5\ud574 \uc5bb\uc740 \uae68\ub2ec\uc74c\uc744 \ud1a0\ub300\ub85c \uc791\uc740 \uc131\uacf5\uc744 \ubc18\ubcf5\ud574 \uac00\ub294 \uc0ac\uc774\ud074.<\/p>\n\n<p>\uc791\uc740 \ubcc0\ud654\ub4e4\uc758 \ub204\uc801\uc73c\ub85c \uc778\ud55c \ud070 \ubcc0\ud654\uc758 \ubc1c\uc0dd\uc744 \uae30\ub300\ud558\ub294 \ubc29\uc2dd\uc774 \ub9c8\uc74c\uc5d0 \ub4e0\ub2e4.<\/p>\n\n<h1 id=\"immutable-\uac1d\uccb4-\uba54\ubaa8\">immutable \uac1d\uccb4 \uba54\ubaa8<\/h1>\n\n<p>\uc5b4\uc9c0\uac04\ud55c \uacbd\uc6b0\uc5d4 \uadf8\ub0e5 \ubd88\ubcc0 \uac1d\uccb4\ub97c \uc4f0\ub294 \ucabd\uc774 \uc88b\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.\n\uc790\uc798\ud55c \ubc84\uadf8\uac00 \uc904\uc5b4\ub4e4\uace0, \uc77d\uae30\ub3c4 \ub354 \ud3b8\ud558\ub2e4. \uc0ac\uc774\ub4dc \uc774\ud399\ud2b8\ub97c \uad00\ub9ac\ud558\uae30\ub3c4 \uc88b\ub2e4.<\/p>\n\n<p>Java\uc5d0\uc11c\ub294 \ubd88\ubcc0 \uac1d\uccb4\uc758 \uc0ac\uc6a9\uc774 \uaf64 \ubc88\uac70\ub85c\uc6b4 \ud3b8\uc774\ubbc0\ub85c\nScala \uac19\uc740 \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\ub3c4 \uc88b\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<p>\ub367\ubd99\uc774\uc790\uba74 \uac1d\uccb4 \ubfd0 \uc544\ub2c8\ub77c \ubcc0\uc218\uc758 \uc0ac\uc6a9\ub3c4 \uc790\uc81c\ud558\uace0,\n\uac00\ub2a5\ud55c \ud55c \uc0c1\uc218\ub9cc\uc744 \uc0ac\uc6a9\ud574\uc11c \ucf54\ub529\ud558\ub294 \uac83\ub3c4 \uc88b\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<h1 id=\"orm---jpa\">ORM - JPA<\/h1>\n\n<p>\uc774 \ucc45 \ud55c \uad8c\uc774\uba74 \ub41c\ub2e4.<\/p>\n\n<p><a href=\"http:\/\/www.acornpub.co.kr\/book\/jpa-programmig\">\uc790\ubc14 ORM \ud45c\uc900 JPA \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/p>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-Kk9mNZRospN5eO7duC0\">\ud504\ub85c\uadf8\ub798\ubc0d \ub2e8\uc0c1<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-Kihe0w5_EXX4St6SZcT\">ORM \ubc0f Spring Data JPA<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Sat, 27 May 2017 18:00:40 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/27\/jwp-14\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/27\/jwp-14\/","category":"study jwp"},{"title":"Next JWP Study 13","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \uc138 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5f4-\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \uc138 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-22 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\ud68c\uace0\uc5d0 \ub300\ud55c \uc774\uc57c\uae30\n    <ul>\n      <li>\ud68c\uace0\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \ud65c\ub3d9 \uc911 \ud558\ub098.<\/li>\n      <li>\ud68c\uace0\ub97c \ud560 \ub54c \ud300\uc6d0\uac04\uc758 \uac10\uc815 \uacf5\uc720\ub3c4 \ub9e4\uc6b0 \uc911\uc694\ud558\ub2e4.\n        <ul>\n          <li>\uac10\uc0ac \uba54\uc2dc\uc9c0 \ub0a8\uae30\uae30<\/li>\n          <li>\uc11c\ub85c, \uc2a4\uc2a4\ub85c \uce6d\ucc2c\ud558\uae30<\/li>\n        <\/ul>\n      <\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<p>\uc774\ubc88 \uc218\uc5c5 \ub0b4\uc6a9\uc740 \ub2e4\uc18c \uae4c\ub2e4\ub86d\uace0 \ub09c\uc774\ub3c4\uac00 \ub192\uc558\ub2e4.\n\uad50\uc218\ub2d8 \ub808\ud30c\uc9c0\ud1a0\ub9ac\ub97c \ubcf4\uace0 \uacf1\uc539\uc5b4 \ubcf4\ub294 \uc2dc\uac04\uc774 \ud544\uc694\ud560\ub4ef.<\/p>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/slipp\/jwp-spring-boot\/tree\/step2-refactoring\">\uad50\uc218\ub2d8 \ub808\ud30c\uc9c0\ud1a0\ub9ac<\/a><\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-KihdwAUJKQvBDvkGCmQ\">AOP \uac1c\ub150 \ubc0f \ub85c\uadf8\uc778 \uae30\ubc18 \ud14c\uc2a4\ud2b8<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-KkPXQQuTJB7TSIF7f4a\">Spring AOP \ubc0f LoggingAspect<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Tue, 23 May 2017 22:05:44 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/23\/jwp-13\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/23\/jwp-13\/","category":"study jwp"},{"title":"Next JWP Study 12","description":"<h1 id=\"\uc5f4-\ub450-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ub450 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-18 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc624\ub298\ubd80\ud130\ub294 Spring Boot\ub97c \uacf5\ubd80\ud55c\ub2e4.<\/li>\n  <li>\uc624\ub298\uc758 \ubaa9\ud45c\ub294 \uad50\uc218\ub2d8\uc744 \ub530\ub77c Spring Boot \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc791\uc131\ud558\uace0, \ubc30\ud3ec\uae4c\uc9c0 \ud558\ub294 \uac83.\n    <ul>\n      <li>\uadf8\ub7ec\ub098 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4dc\ub294 \uacfc\uc815\uc5d0\uc11c \ub108\ubb34 \ub9ce\uc740 \uc2dc\uac04\uc774 \uc18c\uc694\ub418\ub294 \uc0ac\ub78c\ub4e4\uc774 \uba87 \uba85 \uc788\uc5c8\ub2e4.<\/li>\n      <li>\uadf8 \uc911\uc5d0 \ub098\ub3c4 \uc788\uc5c8\ub2e4. (\uc544\ub9c8 \ub0b4\uac00 \uc81c\uc77c \uc624\ub798 \uac78\ub9b0\ub4ef \ud558\ub2e4)<\/li>\n      <li>\ud504\ub85c\uc81d\ud2b8 \uc14b\ud305\uc5d0 \uc2dc\uac04\uc774 \ub108\ubb34 \uc624\ub798 \uac78\ub824, \uc218\uc5c5 \ubaa9\ud45c\uac00 \ubc14\ub00c\uc5c8\ub2e4.\n        <ul>\n          <li>\ubc30\ud3ec\ub294 \ud3ec\uae30\ud558\uace0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc791\uc131 \uc644\ub8cc\ub97c \ubaa9\ud45c\ub85c.<\/li>\n        <\/ul>\n      <\/li>\n    <\/ul>\n  <\/li>\n  <li>IntelliJ\uc5d0\uc11c \uc0c8\ub85c\uc6b4 Spring Boot \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \ube4c\ub4dc\ud558\ub294 \uacfc\uc815\uc774 \ub108\ubb34 \ud798\ub4e4\uc5c8\ub2e4.\n    <ul>\n      <li>\ubb58 \uc5b4\ub5bb\uac8c \ud574\ub3c4 \uc790\uafb8 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\ub2e4.<\/li>\n      <li>\ub450 \uc2dc\uac04 \uac00\uae4c\uc774 \uc0bd\uc9c8\uc744 \ud588\uace0 \uaddc\uc9c4\ub2d8\uc758 \ub3c4\uc6c0\uc73c\ub85c \uac00\uae4c\uc2a4\ub85c \uc14b\ud305\uc744 \uc644\ub8cc\ud558\uace0 \ucf54\ub529\uc5d0 \ub4e4\uc5b4\uac08 \uc218 \uc788\uc5c8\ub2e4.<\/li>\n      <li>\uc774\ud6c4\uc5d4 \uac1c\uc778\uc801\uc73c\ub85c \uae09\ud55c \uc77c\uc774 \uc0dd\uaca8 \uc77c\ucc0d \uc9d1\uc73c\ub85c \ub3cc\uc544\uac14\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ucc45 \uc18c\uac1c : <a href=\"https:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?mallGb=KOR&amp;ejkGb=KOR&amp;barcode=9788966260836\">\uac1d\uccb4\uc9c0\ud5a5 \uc124\uacc4\uc640 \uc2e4\ucc9c<\/a>\n    <ul>\n      <li>\uc624\ub298\uc758 \uac15\uc758 \ub0b4\uc6a9\uc740 \uc774 \ucc45\uacfc \uad00\ub828\uc774 \uae4a\uc74c.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\uc544\ub9c8\ucd94\uc5b4\uc640-\ud504\ub85c\uc758-\ucc28\uc774\">\uc544\ub9c8\ucd94\uc5b4\uc640 \ud504\ub85c\uc758 \ucc28\uc774<\/h1>\n\n<ul>\n  <li>\n    <p>\ucc45 \uc18c\uac1c: <a href=\"https:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?mallGb=KOR&amp;ejkGb=KOR&amp;barcode=9791186805282\">1\ub9cc \uc2dc\uac04\uc758 \uc7ac\ubc1c\uacac<\/a><\/p>\n  <\/li>\n  <li>\uc2ec\ub9ac\ud559\uc790 \ub9d0\ucf64 \uae00\ub798\ub4dc\uc6f0\uc774 \ub9cc\ub4e0 1\ub9cc \uc2dc\uac04\uc758 \ubc95\uce59\uc744 \ube44\ud310\ud558\ub294 \ucc45\uc73c\ub85c \ubcf4\uc778\ub2e4.<\/li>\n  <li>1\ub9cc \uc2dc\uac04\uc758 \ubc95\uce59\uc740 \ubc18\ub840\uac00 \ucda9\ubd84\ud788 \ub9ce\uae30 \ub54c\ubb38\uc5d0 \uacfc\ud559 \uc774\ub860\uc73c\ub85c\uc11c\ub294 \uacb0\ud568\uc774 \ub9ce\ub2e4\uace0 \uc0dd\uac01\ud574\uc654\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c\ub294 \uc0dd\uac01\ud574\uc654\ub358 \uac83\ub4e4\uacfc \ud070 \ucc28\uc774\uac00 \uc5c6\uc744 \uac83 \uac19\uc544\uc11c \ucc45 \uc790\uccb4\uc5d0 \ud070 \ud765\ubbf8\uac00 \uc0dd\uae30\uc9c4 \uc54a\ub294\ub2e4. \ub098\uc911\uc5d0 \uc11c\uc810 \uac00\uc11c \ub300\ucda9 \ud6d1\uc5b4\ubcfc \uc0dd\uac01.<\/li>\n<\/ul>\n\n<h1 id=\"\uacfc\uc81c-\uc218\ud589\">\uacfc\uc81c \uc218\ud589<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc744 \ub05d\uae4c\uc9c0 \ub4e3\uc9c0 \ubabb\ud588\uc73c\ubbc0\ub85c \ubb34\uc5c7\uc774 \uacfc\uc81c\uc778\uc9c0 \uc54c\uc9c0 \ubabb\ud55c\ub2e4.<\/li>\n  <li>\ub530\ub77c\uc11c \uc218\uc5c5 \uad50\uc7ac\ub97c \ubcf4\uace0 \uc218\uc5c5 \uc2dc\uac04\uc5d0 \ub530\ub77c\ud558\uc9c0 \ubabb\ud55c \uac83\uc744 \uc644\ub8cc\ud560 \uac83\uc744 \ubaa9\ud45c\ub85c \uc0bc\uace0 \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uc600\ub2e4.<\/li>\n  <li>\uadf8\ub7f0\ub370 \uc774\ubc88 \uc8fc\ub9d0\uc5d4 \uc774\ub7f0 \uc800\ub7f0 \uc77c\ub85c \uc2dc\uac04\uc774 \ubd80\uc871\ud574\uc11c \uacfc\uc81c\uc5d0 \uc3df\uc744 \uc2dc\uac04\uc774 \ucda9\ubd84\ud558\uc9c0 \ubabb\ud558\uc5ec, \uad50\uc218\ub2d8\uc758 \uc800\uc7a5\uc18c\ub97c \ucc38\uace0\ud558\uace0 \ub530\ub77c \ud574 \ubcf4\ub294 \uc815\ub3c4\ub85c \ub9cc\uc871\ud558\uae30\ub85c \ud588\ub2e4.<\/li>\n  <li>\ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc9c0 \uc54a\uace0 \uc6f9 \uac1c\ubc1c\uc744 \ud55c\ub2e4\ub294 \ub2e4\uc18c \ubaa8\uc21c\ub41c \uac83 \uac19\uc740 \ubc29\uc2dd\uc5d0 \uc810\ucc28 \uc775\uc219\ud574\uc9c0\uace0 \uc788\ub2e4. \ub108\ubb34 \uc88b\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uacfc\uc81c \uc644\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-spring-boot\">\ucc38\uace0 \uc790\ub8cc: \uad50\uc218\ub2d8\uc758 \uc800\uc7a5\uc18c<\/a><\/li>\n      <li><a href=\"https:\/\/github.com\/johngrib\/test-spring-boot\/tree\/step1-johngrib\">\ub0b4 \uacfc\uc81c \uc218\ud589 \uacb0\uacfc<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KihchAcnJJxzb909TBT\/lessons\/-KjqDMIMMiyhMCImA8Hw\">\uc810\uc9c4\uc801 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c by \ud14c\uc2a4\ud2b8<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n","pubDate":"Sat, 20 May 2017 20:44:40 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/20\/jwp-12\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/20\/jwp-12\/","category":"study jwp"},{"title":"Next JWP Study 11","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\ud55c-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\ud55c-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ud55c \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#mockito-\ud14c\uc2a4\ud2b8-\uc2e4\uc2b5\" id=\"markdown-toc-mockito-\ud14c\uc2a4\ud2b8-\uc2e4\uc2b5\">Mockito \ud14c\uc2a4\ud2b8 \uc2e4\uc2b5<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h2 id=\"\uc5f4-\ud55c-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ud55c \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h2>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-15 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc774\uc81c \uc218\uc5c5\uc774 3\uc8fc \ub0a8\uc558\ub2e4.\n    <ul>\n      <li>\ub2e4\uc74c \uc8fc \ubd80\ud130\ub294 5\ud68c\uc5d0 \uac78\uccd0 Spring Boot\ub97c \ud559\uc2b5\ud55c\ub2e4.<\/li>\n      <li>\ub9c8\uc9c0\ub9c9 \uc218\uc5c5\uc5d4 \uac1c\ubc1c\ud55c Spring Boot \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec\ub97c \uc2e4\uc2b5\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc774\ub860 \uc218\uc5c5\n    <ul>\n      <li>\ube48 \ucee8\ud14c\uc774\ub108 \uc124\uc815 \uad00\ub9ac<\/li>\n      <li>Spring life cycle<\/li>\n      <li>Property Source \ubc0f \ud658\uacbd \ubcc0\uc218<\/li>\n      <li>Java Bean Validation<\/li>\n      <li>DI \uae30\ubc18 \ub2e8\uc704 \ud14c\uc2a4\ud2b8<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud53c\uc790\/\ub9e5\uc8fc \ud30c\ud2f0\n    <ul>\n      <li>\uc57d 21\uc2dc\ubd80\ud130 \ud53c\uc790\/\ub9e5\uc8fc \ud30c\ud2f0\ub97c \ud558\uba70 \ub2f4\uc18c\ub97c \ub098\ub204\uc5c8\ub2e4.<\/li>\n      <li>\ub098\ub294 \ud53c\uc790\/\ub9e5\uc8fc\/\ucf5c\ub77c \ubaa8\ub450 \uc548 \uba39\ub294 \uc74c\uc2dd\ub4e4\uc774\ub77c \uc0dd\uc218\ub9cc \ub9c8\uc168\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h2 id=\"mockito-\ud14c\uc2a4\ud2b8-\uc2e4\uc2b5\">Mockito \ud14c\uc2a4\ud2b8 \uc2e4\uc2b5<\/h2>\n\n<p>Mockito\ub97c \uc0ac\uc6a9\ud558\ub2c8 \uc5b4\ub835\uc9c0 \uc54a\uace0 \uae54\ub054\ud558\uac8c \ub05d\ub0bc \uc218 \uc788\uc5c8\ub2e4.\n\uc57d\uac04 \uc6b0\ub824\uc2a4\ub7ec\uc6b4 \uc810\uc774 \uc788\uae34 \ud558\uc9c0\ub9cc \uc544\uc9c1\uc740 Mockito\ub97c \uc798 \ubaa8\ub974\ub2c8 \uc880 \ub354 \uc775\uc219\ud574\uc9c0\uba74 \uc0dd\uac01\ud574\ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@RunWith<\/span><span class=\"o\">(<\/span><span class=\"nc\">MockitoJUnitRunner<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">)<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">QnaServiceTest<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"nd\">@Mock<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">QuestionDao<\/span> <span class=\"n\">questionDao<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@Mock<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">AnswerDao<\/span> <span class=\"n\">answerDao<\/span><span class=\"o\">;<\/span>\n\n\n    <span class=\"kd\">private<\/span> <span class=\"nc\">QnaService<\/span> <span class=\"n\">qnaService<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@Before<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setup<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">qnaService<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">QnaService<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">,<\/span> <span class=\"n\">answerDao<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc640 \uc9c8\ubb38\ud55c \uc0ac\ub78c\uc774 \uac19\uc544\uc57c \ud55c\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Positive_\uc9c8\ubb38\ud55c_\uc0ac\ub78c\uacfc_\uc0ad\uc81c\ud558\ub824\ub294_\uc0ac\ub78c\uc774_\uac19\uc73c\uba74_\uc0ad\uc81c\ud560_\uc218_\uc788\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc640 \uc9c8\ubb38\ud55c \uc0ac\ub78c\uc774 \uac19\uc544\uc57c \ud55c\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span><span class=\"o\">(<\/span><span class=\"n\">expected<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">CannotOperateException<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Negative_\uc9c8\ubb38\ud55c_\uc0ac\ub78c\uacfc_\uc0ad\uc81c\ud558\ub824\ub294_\uc0ac\ub78c\uc774_\ub2e4\ub974\uba74_\uc0ad\uc81c\ud560_\uc218_\uc5c6\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">otherUser<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc0ad\uc81c\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">otherUser<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \ub2f5\ubcc0\uc774 \uc5c6\ub294 \uacbd\uc6b0 \uc0ad\uc81c\uac00 \uac00\ub2a5\ud558\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Positive_\ub2f5\ubcc0\uc774_\uc5c6\ub294_\uacbd\uc6b0_\uc0ad\uc81c\uac00_\uac00\ub2a5\ud558\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">answerDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findAllByQuestionId<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"nc\">Collections<\/span><span class=\"o\">.<\/span><span class=\"na\">EMPTY_LIST<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \ub2f5\ubcc0\uc774 \uc5c6\ub294 \uacbd\uc6b0 \uc0ad\uc81c\uac00 \uac00\ub2a5\ud558\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span><span class=\"o\">(<\/span><span class=\"n\">expected<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">CannotOperateException<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Negative_\ub2f5\ubcc0\uc774_\uc788\ub2e4\uba74_\uc0ad\uc81c\ud560_\uc218_\uc5c6\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Answer<\/span> <span class=\"n\">answer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Answer<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub2f5\ubcc0\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">());<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">answerDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findAllByQuestionId<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">asList<\/span><span class=\"o\">(<\/span><span class=\"n\">answer<\/span><span class=\"o\">));<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \uc9c8\ubb38\uc790\uc640 \ub2f5\ubcc0\uc790\uac00 \uac19\uc740 \uacbd\uc6b0 \uc0ad\uc81c\uac00 \uac00\ub2a5\ud558\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Positive_\ub2f5\ubcc0\uc774_\uc788\uc5b4\ub3c4_\uc9c8\ubb38\uc790\uc640_\ub2f5\ubcc0\uc790\uac00_\uac19\ub2e4\uba74_\uc0ad\uc81c\ud560_\uc218_\uc788\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Answer<\/span> <span class=\"n\">answer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Answer<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">());<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">answerDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findAllByQuestionId<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">asList<\/span><span class=\"o\">(<\/span><span class=\"n\">answer<\/span><span class=\"o\">));<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"c1\">\/\/ \uc9c8\ubb38\uc790\uc640 \ub2f5\ubcc0\uc790\uac00 \ub2e4\ub978 \uacbd\uc6b0 \ub2f5\ubcc0\uc744 \uc0ad\uc81c\ud560 \uc218 \uc5c6\ub2e4.<\/span>\n    <span class=\"nd\">@Test<\/span><span class=\"o\">(<\/span><span class=\"n\">expected<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">CannotOperateException<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"n\">Negative_\ub2f5\ubcc0\uc774_\uc788\uc744_\ub54c_\uc9c8\ubb38\uc790\uc640_\ub2f5\ubcc0\uc790\uac00_\ub2e4\ub974\uba74_\uc0ad\uc81c\ud560_\uc218_\uc5c6\ub2e4<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">CannotOperateException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\uc9c8\ubb38\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"name\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"email\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Question<\/span> <span class=\"n\">question<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Question<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub2f5\ubcc0\ud558\ub294 \uc0ac\ub78c \uc544\uc774\ub514\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\uc81c\ubaa9\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"mi\">0<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">Answer<\/span> <span class=\"n\">answer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Answer<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserId<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"\ub0b4\uc6a9\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"o\">(),<\/span> <span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">());<\/span>\n\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">questionDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findById<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">);<\/span>\n        <span class=\"n\">when<\/span><span class=\"o\">(<\/span><span class=\"n\">answerDao<\/span><span class=\"o\">.<\/span><span class=\"na\">findAllByQuestionId<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">())).<\/span><span class=\"na\">thenReturn<\/span><span class=\"o\">(<\/span><span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">asList<\/span><span class=\"o\">(<\/span><span class=\"n\">answer<\/span><span class=\"o\">));<\/span>\n\n        <span class=\"n\">qnaService<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteQuestion<\/span><span class=\"o\">(<\/span><span class=\"n\">question<\/span><span class=\"o\">.<\/span><span class=\"na\">getQuestionId<\/span><span class=\"o\">(),<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<h2 id=\"links\">Links<\/h2>\n\n<ul>\n  <li>\uacfc\uc81c \uc644\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/github.com\/johngrib\/jwp-spring\/tree\/step2-johngrib\">Mockito \ud14c\uc2a4\ud2b8 \uc2e4\uc2b5<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9qPOW42m1nnuoyvXz\/lessons\/-KiY-AXcRm8DhRdOy5Rv\">DI \uae30\ubc18 \ub2e8\uc704 \ud14c\uc2a4\ud2b8<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Tue, 16 May 2017 21:36:06 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/16\/jwp-11\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/16\/jwp-11\/","category":"study jwp mockito DI"},{"title":"Next JWP Study 10","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5f4-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5f4-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\" id=\"markdown-toc-\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1: \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/li>\n  <li><a href=\"#di-\ud504\ub808\uc784\uc6cc\ud06c-1\ub2e8\uacc4-\uc2e4\uc2b5\" id=\"markdown-toc-di-\ud504\ub808\uc784\uc6cc\ud06c-1\ub2e8\uacc4-\uc2e4\uc2b5\">DI \ud504\ub808\uc784\uc6cc\ud06c 1\ub2e8\uacc4 \uc2e4\uc2b5<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5f4-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5f4 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-11 19:03:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc624\ub298\uc740 \uc9c0\ub09c \uc2dc\uac04 feedback \ud6c4 DI\ub97c \uad6c\ud604\ud558\ub294 \uc5f0\uc2b5\uc744 \ud55c\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1: \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/h1>\n\n<ul>\n  <li>\uc5b4\ub5bb\uac8c \uc77c\ud560 \uac83\uc778\uac00?<\/li>\n  <li>\ub0b4\uac00 \uc77c\uc9c0\ub97c \uc791\uc131\ud558\ub294 \ubc29\uc2dd\uc744 \uacf5\uc720\ud558\uc600\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"di-\ud504\ub808\uc784\uc6cc\ud06c-1\ub2e8\uacc4-\uc2e4\uc2b5\">DI \ud504\ub808\uc784\uc6cc\ud06c 1\ub2e8\uacc4 \uc2e4\uc2b5<\/h1>\n\n<ul>\n  <li>\uc694\uad6c\uc0ac\ud56d<\/li>\n<\/ul>\n\n<blockquote>\n  <p>\uc0c8\ub85c \ub9cc\ub4e0 MVC \ud504\ub808\uc784\uc6cc\ud06c\ub294 \uc790\ubc14 \ub9ac\ud50c\ub809\uc158\uc744 \ud65c\uc6a9\ud574 @Controller \uc560\ub178\ud14c\uc774\uc158\uc774 \uc124\uc815\ub418\uc5b4 \uc788\ub294 \ud074\ub798\uc2a4\ub97c \ucc3e\uc544 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uace0, URL \ub9e4\ud551 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud588\ub2e4. \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uac01 \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \ubc0f \uc758\uc874\uad00\uacc4 \uc124\uc815\uc744 \uc560\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc790\ub3d9\ud654\ud55c\ub2e4.<\/p>\n<\/blockquote>\n\n<blockquote>\n  <p>\uba3c\uc800 \uc560\ub178\ud14c\uc774\uc158\uc740 \uac01 \ud074\ub798\uc2a4 \uc5ed\ud560\uc5d0 \ub9de\ub3c4\ub85d \ucee8\ud2b8\ub864\ub7ec\ub294 \uc774\ubbf8 \ucd94\uac00\ub418\uc5b4 \uc788\ub294 @Controller, \uc11c\ube44\uc2a4\ub294 @Service, DAO\ub294 @Repository \uc560\ub178\ud14c\uc774\uc158\uc744 \uc124\uc815\ud55c\ub2e4. \uc774 3\uac1c\uc758 \uc124\uc815\uc73c\ub85c \uc0dd\uc131\ub41c \uac01 \uc778\uc2a4\ud134\uc2a4 \uac04\uc758 \uc758\uc874\uad00\uacc4\ub294 @Inject \uc560\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<\/blockquote>\n\n<ul>\n  <li>\n    <p>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step10-johngrib\">GitHub<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/p>\n  <\/li>\n  <li>\n    <p>\uad50\uc218\ub2d8\uc740 \ub2e4\ub4e4 \ubd80\ub2f4\uc2a4\ub7fd\uaca0\uc9c0\ub9cc \uc7ac\uadc0\ub97c \uc0ac\uc6a9\ud574\uc57c \ud560 \uac83\uc774\ub77c\uba70 \uc7ac\uadc0\ub97c \uac15\uc870\ud558\uc168\uc9c0\ub9cc, \ub098\ub294 \uc624\ud788\ub824 for loop\ubcf4\ub2e4 \uc7ac\uadc0\ub97c \uc120\ud638\ud558\ub294 \ud3b8\uc774\ubbc0\ub85c \uc790\uc2e0\ub9cc\ub9cc\ud558\uac8c \uc791\uc5c5\uc744 \uc2dc\uc791\ud588\ub2e4.<\/p>\n  <\/li>\n  <li>\n    <p>\uadf8\ub7ec\ub098 \uba87 \uac00\uc9c0 \uba54\uc11c\ub4dc\uac00 \uc774\ubbf8 \uad6c\ud604\ub418\uc5b4 \uc788\ub2e4\ub294 \uac78 \uc0dd\uac01\ud558\uc9c0 \ubabb\ud588\uace0, (<code class=\"language-plaintext highlighter-rouge\">BeanFactoryUtils.getInjectedConstructor<\/code>\ub098, <code class=\"language-plaintext highlighter-rouge\">BeanFactoryUtils.findConcreteClass<\/code> \ub4f1) Repository \ub3c4 \uad6c\ud604\ub41c \uac8c \uc788\ub2e4\ub294 \uac78 \ubc1c\uacac\ud558\uc9c0 \ubabb\ud574\uc11c 3 \uc2dc\uac04 \uac00\uae4c\uc774 \uac08\ud53c\ub97c \uc7a1\uc9c0 \ubabb\ud558\uace0 \ud5e4\uba54\uc774\ub2e4 \uac04\uc2e0\ud788 \ud78c\ud2b8\ub97c \ubcf4\uace0 \uc219\uc81c\ub97c \ud560 \uc218 \uc788\uc5c8\ub2e4.<\/p>\n  <\/li>\n  <li>\n    <p>\uc77c\uc694\uc77c\uae4c\uc9c0 \ub04c\uace0 \uc624\uae34 \ud588\uc9c0\ub9cc(\u2026) \uacfc\uc81c\ub97c \uc644\uc218\ud560 \uc218 \uc788\uc5b4\uc11c \ub2e4\ud589\uc774\ub77c \uc0dd\uac01\ud55c\ub2e4.<\/p>\n  <\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step10-johngrib\">\uacfc\uc81c \uc644\ub8cc<\/a><\/li>\n  <li><a href=\"https:\/\/www.martinfowler.com\/articles\/injection.html#FormsOfDependencyInjection\">Martin Fowler: Inversion of Control Containers and the Dependency Injection pattern<\/a><\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-Ki7rZnr3DpctbqOtJQn\">\uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d: \uc5b4\ub5bb\uac8c \uc77c\ud560 \uac83\uc778\uac00?<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9qPOW42m1nnuoyvXz\/lessons\/-KiXzwhTznbMAcSlMO7w\">DI \ud504\ub808\uc784\uc6cc\ud06c 1\ub2e8\uacc4 \uc2e4\uc2b5 \ubc0f \ud78c\ud2b8<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Sun, 14 May 2017 14:10:50 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/14\/jwp-10\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/14\/jwp-10\/","category":"study jwp"},{"title":"Next JWP Study 09","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc544\ud649-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc544\ud649-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc544\ud649 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\" id=\"markdown-toc-\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1: \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/li>\n  <li><a href=\"#\uba54\ubaa8-spring-annotation\" id=\"markdown-toc-\uba54\ubaa8-spring-annotation\">\uba54\ubaa8: Spring Annotation<\/a><\/li>\n  <li><a href=\"#\uba54\ubaa8-refactoring-fp-oop\" id=\"markdown-toc-\uba54\ubaa8-refactoring-fp-oop\">\uba54\ubaa8: Refactoring, FP, OOP<\/a><\/li>\n  <li><a href=\"#spring-mvc-\uc2e4\uc2b5\" id=\"markdown-toc-spring-mvc-\uc2e4\uc2b5\">Spring MVC \uc2e4\uc2b5<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc544\ud649-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc544\ud649 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-05-08 19:01:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc0ac\ub0b4 \uad50\uc721\uc7a5\uc774 \uc644\uc131\ub418\uc5b4, \uc774\uc81c\ubd80\ud130\ub294 \uc18c\ub9c8 \ubbf8\uc220\uad00\uc5d0 \uac00\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4.\n    <ul>\n      <li>\ub2e4\ub9cc \uad50\uc721\uc7a5 \ub0b4\ubd80 \uc2dc\uc124\uc740 \uc544\uc9c1 \uc815\ube44\uac00 \ud544\uc694\ud55c \ub4ef\ud558\ub2e4. \uac04\uc774 \ucc45\uc0c1\uacfc \uc758\uc790\ub97c \uc0ac\uc6a9\ud588\uace0, \uad50\uc721\uc7a5 \uc55e\ucabd\uc5d0 \ucef4\ud4e8\ud130\ub97c \ub458 \uc218 \uc5c6\uc5b4, \ubc15\uc7ac\uc131 \uad50\uc218\ub2d8\uc774 \uc55e\ub4a4\ub85c \uc774\ub3d9\ud558\uba70 \uac15\uc758\ud558\uc154\uc57c \ud588\uc74c.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc624\ub298\uc740 MVC \ud504\ub808\uc784\uc6cc\ud06c \uc2e4\uc2b5 \ud53c\ub4dc\ubc31\uc744 \ud558\uace0, Spring \uc2e4\uc2b5\uc744 \ud55c\ub2e4.<\/li>\n  <li>QnA\uac00 \ub2e4\ub978 \uc2dc\uac04\ubcf4\ub2e4 \ud65c\ubc1c\ud55c \ud3b8\uc774\uc5c8\ub2e4. \ub9ac\ud329\ud1a0\ub9c1\uc5d0 \ub300\ud55c \uc774\uc57c\uae30\uac00 \uc8fc\ub97c \uc774\ub8e8\uc5c8\uc74c.<\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1-\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1: \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/h1>\n\n<ul>\n  <li>\uad8c\uc704: \ub3d9\uc758\ud560 \uc218 \uc5c6\ub294 \uad8c\uc704\uc5d0 \uad74\ubcf5\ud558\uc9c0 \ub9d0 \uac83.<\/li>\n<\/ul>\n\n<h1 id=\"\uba54\ubaa8-spring-annotation\">\uba54\ubaa8: Spring Annotation<\/h1>\n\n<p>\uc2a4\ud504\ub9c1\uc5d4 \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub3c4\uc785\ub418\uc9c0 \uc54a\uc558\ub358 \uc2dc\uc808\ub3c4 \uc788\uc5c8\ub2e4. \uc5b4\ub178\ud14c\uc774\uc158 \uc5c6\uc774\ub3c4 \ud6cc\ub96d\ud55c \uc2a4\ud504\ub9c1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4dc\ub294 \uac83\uc740 \uac00\ub2a5\ud560 \uac83\uc774\ub2e4. \uadf8\ub7ec\ub098 \uc2a4\ud504\ub9c1 \uc5b4\ub178\ud14c\uc774\uc158\uc758 \uc874\uc7ac\ub97c \uc54c\uba74\uc11c\ub3c4 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc0ac\ub78c\uc740 \ub9e4\uc6b0 \ub4dc\ubb3c \uac70\ub77c\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<p>\ub0b4 \uad00\uc810\uc5d0\uc11c \ud604\uc7ac\uc758 \uc2a4\ud504\ub9c1\uc740 \uac70\ub300\ud55c \ub9ac\ud50c\ub809\uc158 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub2e4. \uc2a4\ud504\ub9c1\uc740 \ub9ac\ud50c\ub809\uc158\uc744 \uc0ac\uc6a9\ud55c \uc5b4\ub178\ud14c\uc774\uc158 \uae30\ub2a5\uc744 \uc794\ub729 \uad6c\ud604\ud574 \ub193\uc74c\uc73c\ub85c\uc368, \uc0ac\uc6a9\uc790\uac00 \ub9ac\ud50c\ub809\uc158\uc758 \ud544\uc694\ub97c \ub290\ub07c\uc9c0 \ubabb\ud558\uac8c \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n\n<p>\ub098\ub294 \ub9ac\ud50c\ub809\uc158\uc774 Java\ub2f5\uc9c0 \uc54a\uc740 \uae30\ub2a5\uc774\ub77c\uace0 \uc0dd\uac01\ud55c\ub2e4. Java\uc758 \uc911\uc694\ud55c \ud2b9\uc9d5\uc778 \uac15\ud55c \ud0c0\uc785\uacfc IDE \uc9c0\uc6d0\uc744 \ubb34\uc2dc\ud558\ub294 \ucf54\ub4dc\uac00 \uc0dd\uc0b0\ub418\uae30 \ub54c\ubb38\uc774\ub2e4. \uac8c\ub2e4\uac00 \uacb0\uacfc\ubb3c\uc740 Exception\uc774 \uc794\ub729 \ubd99\uc5b4 \uc788\uc5b4 \ucc38\uae30 \uc5b4\ub824\uc6b4 \uace0\uc57d\ud55c \ub0c4\uc0c8\uac00 \ub09c\ub2e4. \ud558\uc9c0\ub9cc Java\uc758 \ubb38\ubc95\ub9cc\uc73c\ub85c\ub294 \uba87\uba87 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \ub54c \ud55c\uacc4\uac00 \uc788\uc73c\ub2c8 \uc6b8\uba70 \uaca8\uc790 \uba39\uae30\ub85c \uc0ac\uc6a9\ud560 \uc218 \ubc16\uc5d0 \uc5c6\ub2e4.<\/p>\n\n<p>\ud558\uc9c0\ub9cc \uc2a4\ud504\ub9c1\uc774 \uc788\ub2e4\uba74 \uc0ac\uc6a9\uc790\uc758 \ucf54\ub4dc\uc5d0\uc11c\ub294 \ub9ac\ud50c\ub809\uc158\uc774 \uc0ac\ub77c\uc9c0\uac8c \ub41c\ub2e4. \uc2a4\ud504\ub9c1 \uc5b4\ub178\ud14c\uc774\uc158\uc740 \ud658\uc0c1\uc801\uc778 \uae30\ub2a5\uc774\ub2e4. \ud074\ub798\uc2a4\uc640 \uba54\uc11c\ub4dc\uc5d0 \uc5b4\ub178\ud14c\uc774\uc158 \uc2a4\ud0ec\ud504\ub9cc \ucf85\ucf85 \ucc0d\uc5b4 \ub193\uc73c\uba74 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc54c\uc544\uc11c \ub9ac\ud50c\ub809\uc158\uc73c\ub85c \ucc98\ub9ac\ud574\uc900\ub2e4. \uc774\ub294 \ub0b4\uac00 \uc88b\uc544\ud558\ub294 \uc2a4\ud2f0\ube0c \ub9e5\ucf54\ub12c\uc758 '\ucd5c\uc885 \ubaa9\ud45c'\uc640\ub3c4 \uac78\ub9de\ub294 \uc77c\uc774\ub2e4.<\/p>\n\n<blockquote>\n  <p>\ucd5c\uc885 \ubaa9\ud45c\ub294 \ud55c\ubc88\uc5d0 \uc0dd\uac01\ud574\uc57c \ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc591\uc744 \ucd5c\uc18c\ud654\ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n<\/blockquote>\n\n<p>\uc2a4\ud504\ub9c1\uc740 Java \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc815\uc810\uc774\ub77c\ub294 \uc0dd\uac01\uae4c\uc9c0 \ub4e4\uace0 \uc788\ub2e4. \uadf8\ub7ec\ub098 \uc774\uac83\uc774 \uacfc\uc5f0 \ubc14\ub78c\uc9c1\ud55c \uc77c\uc77c\uae4c? \ub85c\ub4dc \uc874\uc2a8\uc774 \uc5b4\ub178\ud14c\uc774\uc158 \ub3c4\uc785\uc744 \ubc18\ub300\ud588\ub2e4\ub294 \uc774\uc57c\uae30\ub97c \uc5bc\ud54f \ub4e4\uc740 \uac83 \uac19\uc740\ub370, \uc544\ub9c8\ub3c4 \uc2a4\ud504\ub9c1 \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc778\ud55c \ucee4\ud50c\ub9c1\uc744 \uac71\uc815\ud588\ub358 \ubaa8\uc591\uc774\ub2e4.<\/p>\n\n<p>\ub8e8\ube44 \uc628 \ub808\uc77c\uc988\uc5d0 \ub300\ud55c \ube44\ud310\uc744 \ucc3e\uc544\ubcf4\ub294 \uac83\ub3c4 \uc88b\uc744 \uac83 \uac19\ub2e4.<\/p>\n\n<h1 id=\"\uba54\ubaa8-refactoring-fp-oop\">\uba54\ubaa8: Refactoring, FP, OOP<\/h1>\n\n<p>OOP Language\uc5d0\uc11c Functional Language\ub85c \ub118\uc5b4\uac00\ub294 \uc791\uc5c5\uc744 \ud574 \ubcf8 \uc801\uc774 \uc788\uc5c8\ub2e4. Java\uc5d0\uc11c Scala\ub85c. \uc804\uccb4\uc801\uc778 \uad6c\uc870\ub294 OOP \ud615\uc2dd\uc73c\ub85c \uc7a1\uace0 \uba54\uc11c\ub4dc \ub2e8\uc704\uc5d0\uc11c\ub294 FP \ubc29\uc2dd\uc73c\ub85c \ucf54\ub529\ud558\ub294 \ucabd\uc73c\ub85c \uc791\uc5c5\uc744 \ud588\ub294\ub370 \uc369 \ub9cc\uc871\uc2a4\ub7ec\uc6e0\ub2e4.<\/p>\n\n<p>\uadf8\ub7ec\ub098 \ub3cc\uc774\ucf1c \uc0dd\uac01\ud574\ubcf4\ub2c8 \uc544\uc26c\uc6b4 \ub9c8\uc74c\uc774 \ub4e0\ub2e4.<\/p>\n\n<p>\uc804\uccb4\uc801\uc778 \uad6c\uc870\ub97c OOP\ub85c \uc7a1\uace0, \uba54\uc11c\ub4dc \ub2e8\uc704\uc5d0\uc11c FP\uc758 \uc774\ub150\uc744 \uad6c\ud604\ud55c \uac83\uc740\u2026 \ud604\uc2e4\uc801\uc778 \ub300\uc548\uc774\uae34 \ud588\uc9c0\ub9cc FP\ub77c \ubd80\ub974\uae30\uc5d0\ub294 \ub9ce\uc774 \ubd80\uc871\ud588\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4. \ud328\ub7ec\ub2e4\uc784\uc774 \ubc14\ub00c\uc9c0 \uc54a\uc558\uae30 \ub54c\ubb38\uc774\ub2e4. \uacb0\uacfc\ubb3c\uc740 \uc5ec\uc804\ud788 \uac1d\uccb4\ub4e4 \uc0ac\uc774\uc758 \uc0c1\ud638\uc791\uc6a9\uc774\uc5c8\ub2e4.<\/p>\n\n<p>Java\uc5d0\uc11c\ub294 \ud568\uc218\ub97c \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud574 \ub9ac\ud134\ud558\uac70\ub098, \uc77c\ubc18 \ub3d9\uc0ac\ucc98\ub7fc \uc791\ub3d9\ud558\ub294 \uc5ec\ub7ec \uac1c\uc758 \uae30\ubcf8 \ud568\uc218\ub97c \ud569\uc131\ud574 \ud55c \ubc88\ub9cc \uc0ac\uc6a9\ud558\uac70\ub098 \ud558\ub294 \uc77c\ub4e4\uc774 \uc5b4\ub835\uac70\ub098 \ub54c\ub85c\ub294 \ubd88\uac00\ub2a5\ud558\ub2e4. OOP \ud558 FP \uc2a4\ud0c0\uc77c\uc758 \uba54\uc11c\ub4dc \uad6c\ud604\uc774\ub780 \uad81\uc5ec\uc9c0\ucc45\uc740, \ud568\uc218\uac00 \uc2a4\uc2a4\ub85c \uc874\uc7ac\ud560 \uc218 \uc5c6\uc73c\uba70 \ud074\ub798\uc2a4\uc5d0 \ub0b4\uc7ac\ub418\uc5b4\uc57c \ud558\ub294 \uad6c\uc870\uc774\uae30 \ub54c\ubb38\uc5d0 \uadf8\ub807\uac8c \uc791\uc5c5\ud560 \uc218 \ubc16\uc5d0 \uc5c6\ub294 Java\uc758 \ubb38\ubc95, Java\uc758 OOP \ud328\ub7ec\ub2e4\uc784\uc5d0 \uc9c0\ub098\uce58\uac8c \uc775\uc219\ud588\uae30 \ub54c\ubb38\uc5d0 \ube44\ub86f\ub41c \uac83\uc774\uc5c8\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<p>\ubb3c\ub860 \ub098\ub294 \uadf8 \uacbd\ud5d8\uc774 \ub098\uc05c \uacbd\ud5d8\uc774\uc5c8\ub2e4\uace0\ub294 \uc0dd\uac01\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc88b\uc740 \uacbd\ud5d8\uc5d0 \uac00\uae5d\ub2e4. FP \uc5b8\uc5b4\ub85c \ub118\uc5b4\uac14\uc74c\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 \uc548\ud0c0\uae5d\uac8c\ub3c4 \ud328\ub7ec\ub2e4\uc784\uc774 \uc804\ud658\uc5d0 \uc2e4\ud328\ud55c \uacbd\ud5d8\uc77c \ubfd0\uc774\ub2e4. OOP \ucf54\ub4dc\ub294 FP \uba54\uc11c\ub4dc\ub97c \ubfcc\ub824\uc918\ub3c4 \uacc4\uc18d OOP \ucf54\ub4dc\uc77c \uc218 \ubc16\uc5d0 \uc5c6\ub2e4\ub294 \uad50\ud6c8\uc744 \uc5bb\uc5c8\ub2e4.<\/p>\n\n<h1 id=\"spring-mvc-\uc2e4\uc2b5\">Spring MVC \uc2e4\uc2b5<\/h1>\n\n<p>\uac15\uc758\ub294 Spring \uc544\ud0a4\ud14d\ucc98\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc774 \uc8fc\ub97c \uc774\ub8e8\uc5c8\ub2e4.<\/p>\n\n<p>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp-spring\/tree\/step1-johngrib\">GitHub<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/p>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/johngrib\/jwp-spring\/tree\/step1-johngrib\">step1 \uacfc\uc81c \uc644\ub8cc<\/a><\/li>\n  <li><a href=\"https:\/\/sangwook.github.io\/2016\/06\/14\/ruby-rails-solnic.html\">\"Rails \uc774\uc81c \uc548 \uc368\" \ub97c \uc77d\uace0<\/a><\/li>\n  <li><a href=\"http:\/\/solnic.eu\/2016\/05\/22\/my-time-with-rails-is-up.html\">My time with Rails is up<\/a><\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-Ki7rZnr3DpctbqOtJQn\">\uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d: \uad8c\uc704<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9leY0VnZi2akOLdkW\/lessons\/-KiczjAzomD4tthzbxCE\">MVC \ud504\ub808\uc784\uc6cc\ud06c 3\ub2e8\uacc4 \uc2e4\uc2b5 \ud53c\ub4dc\ubc31<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9leY0VnZi2akOLdkW\/lessons\/-KiXzmz-fArFcxPxgjH_\">Spring MVC \uc2e4\uc2b5<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Tue, 09 May 2017 10:45:58 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/09\/jwp-09\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/09\/jwp-09\/","category":"study jwp"},{"title":"Vim \uc0ac\uc6a9\uc2dc \ud55c\/\uc601 \uc804\ud658 \ubb38\uc81c \ud574\uacb0\ud558\uae30","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc9dc\uc99d\ub098\ub294-\ud55c\uc601\uc804\ud658\uc744-\uc644\ubcbd\ud788-\ud574\uacb0\ud574-\ubcf4\uc790\" id=\"markdown-toc-\uc9dc\uc99d\ub098\ub294-\ud55c\uc601\uc804\ud658\uc744-\uc644\ubcbd\ud788-\ud574\uacb0\ud574-\ubcf4\uc790\">\uc9dc\uc99d\ub098\ub294 \ud55c\uc601\uc804\ud658\uc744 \uc644\ubcbd\ud788 \ud574\uacb0\ud574 \ubcf4\uc790<\/a>    <ul>\n      <li><a href=\"#langmap\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\" id=\"markdown-toc-langmap\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\"><code class=\"language-plaintext highlighter-rouge\">langmap<\/code>\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/a><\/li>\n      <li><a href=\"#\uad6c\ub984-\uc785\ub825\uae30\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\" id=\"markdown-toc-\uad6c\ub984-\uc785\ub825\uae30\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\">\uad6c\ub984 \uc785\ub825\uae30\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/a><\/li>\n      <li><a href=\"#karabiner\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\" id=\"markdown-toc-karabiner\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\">karabiner\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/a><\/li>\n      <li><a href=\"#hammerspoon\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\" id=\"markdown-toc-hammerspoon\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\">hammerspoon\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h2 id=\"\uc9dc\uc99d\ub098\ub294-\ud55c\uc601\uc804\ud658\uc744-\uc644\ubcbd\ud788-\ud574\uacb0\ud574-\ubcf4\uc790\">\uc9dc\uc99d\ub098\ub294 \ud55c\uc601\uc804\ud658\uc744 \uc644\ubcbd\ud788 \ud574\uacb0\ud574 \ubcf4\uc790<\/h2>\n\n<p>Vim\uc744 \uc0ac\uc6a9\ud560 \ub54c \uac00\uc7a5 \uc9dc\uc99d\ub098\ub294 \uc77c\uc740 \ud55c\uad6d\uc5b4\ub85c \uc8fc\uc11d\uc744 \uc801\ub2e4\uac00 Normal \ubaa8\ub4dc\ub85c \ub4e4\uc5b4\uac14\uc744 \ub54c \ud55c\uad6d\uc5b4 \uae00\uc790\uac00 \uc785\ub825\ub418\uc5b4 \uba85\ub839\uc774 \uc81c\ub300\ub85c \uba39\ud788\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uc77c \uac83\uc774\ub2e4.<\/p>\n\n<p><code class=\"language-plaintext highlighter-rouge\">&lt;Esc&gt;<\/code>\ub97c \uc785\ub825\ud560 \ub54c\ub9c8\ub2e4 \uc601\ubb38\uc73c\ub85c \ubc14\ub00c\uba74 \uc88b\uc740\ub370, \ubc29\ubc95\uc744 \ubaa8\ub97c \ub54c\uc5d0\ub294 \uc77c\uc77c\uc774 \uc601\ubb38\uc73c\ub85c \uc804\ud658\ud574\uc8fc\uace0 \ubaa8\ub4dc\ub97c \ubcc0\uacbd\ud574\uc8fc\ub294 \uc218\uace0\ub97c \ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n\n<p>\uc9c0\uae08\uc774\uc57c \uc774\ub7f0 \uc800\ub7f0 \uaf3c\uc218\ub4e4\uc744 \uc801\uc6a9\ud574\ub194\uc11c \uc0dd\uac01\ud560 \ud544\uc694\uac00 \uc5c6\ub294 \ubb38\uc81c\uc774\uae34 \ud558\ub2e4.<\/p>\n\n<p>\uadf8\ub7ec\ub098 \uc774\uac78 \uc544\uc608 \uc78a\uace0 \uc0b4\ub2e4\uac00 \ub098\uc911\uc5d0 \ub2e4 \uae4c\uba39\uace0 \uc0c8\ub85c\uc6b4 \ud658\uacbd\uc5d0\uc11c \uc0bd\uc9c8\ud560 \uc77c\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \uae00\uc744 \ub0a8\uaca8\ub450\uae30\ub85c \ud588\ub2e4.<\/p>\n\n<h3 id=\"langmap\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\"><code class=\"language-plaintext highlighter-rouge\">langmap<\/code>\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/h3>\n\n<p><code class=\"language-plaintext highlighter-rouge\">langmap<\/code>\uc744 \uc0ac\uc6a9\ud558\uba74 \uaf2d \uc601\ubb38\uc774 \uc544\ub2c8\uc5b4\ub3c4 Normal \ubaa8\ub4dc\uc5d0\uc11c \uba85\ub839\uc744 \uc785\ub825\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n<div class=\"language-viml highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"k\">set<\/span> <span class=\"nb\">langmap<\/span><span class=\"p\">=<\/span>\u3141<span class=\"k\">a<\/span><span class=\"p\">,<\/span>\u3160<span class=\"k\">b<\/span><span class=\"p\">,<\/span>\u314a<span class=\"k\">c<\/span><span class=\"p\">,<\/span>\u3147<span class=\"k\">d<\/span><span class=\"p\">,<\/span>\u3137<span class=\"k\">e<\/span><span class=\"p\">,<\/span>\u3139<span class=\"k\">f<\/span><span class=\"p\">,<\/span>\u314e<span class=\"k\">g<\/span><span class=\"p\">,<\/span>\u3157<span class=\"k\">h<\/span><span class=\"p\">,<\/span>\u3151<span class=\"k\">i<\/span><span class=\"p\">,<\/span>\u3153<span class=\"k\">j<\/span><span class=\"p\">,<\/span>\u314f<span class=\"k\">k<\/span><span class=\"p\">,<\/span>\u3163<span class=\"k\">l<\/span><span class=\"p\">,<\/span>\u3161<span class=\"k\">m<\/span><span class=\"p\">,<\/span>\u315c<span class=\"k\">n<\/span><span class=\"p\">,<\/span>\u3150<span class=\"k\">o<\/span><span class=\"p\">,<\/span>\u3154<span class=\"k\">p<\/span><span class=\"p\">,<\/span>\u3142<span class=\"k\">q<\/span><span class=\"p\">,<\/span>\u3131<span class=\"k\">r<\/span><span class=\"p\">,<\/span>\u3134s<span class=\"p\">,<\/span>\u3145<span class=\"k\">t<\/span><span class=\"p\">,<\/span>\u3155<span class=\"k\">u<\/span><span class=\"p\">,<\/span>\u314d<span class=\"k\">v<\/span><span class=\"p\">,<\/span>\u3148<span class=\"k\">w<\/span><span class=\"p\">,<\/span>\u314c<span class=\"k\">x<\/span><span class=\"p\">,<\/span>\u315b<span class=\"k\">y<\/span><span class=\"p\">,<\/span>\u314bz\n<\/code><\/pre><\/div><\/div>\n\n<p>Vim \uc790\uccb4\uc758 \uc124\uc815\ub9cc\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc774\ub77c \uc369 \uad1c\ucc2e\uc740 \ubc29\ubc95. \uadf8\ub7ec\ub098 \uba85\ub839\uc744 \uc785\ub825\ud560 \ub54c\ub9c8\ub2e4 \ud55c\uad6d\uc5b4 \uae00\uc1e0\uc758 \uc794\uc0c1\uc774 \ub0a8\uc544\uc11c \ubcf4\uae30 \uaec4\ub044\ub7fd\uace0 \uc2e0\uacbd\uc4f0\uc778\ub2e4. <code class=\"language-plaintext highlighter-rouge\">langmap<\/code>\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 IDE Vim plugin \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub2e4\ub294 \uac83\ub3c4 \ubb38\uc81c.<\/p>\n\n<h3 id=\"\uad6c\ub984-\uc785\ub825\uae30\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\"><a href=\"http:\/\/gureum.io\/\">\uad6c\ub984 \uc785\ub825\uae30<\/a>\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/h3>\n\n<p>mac \uc774\ub77c\uba74 \uad6c\ub984 \uc785\ub825\uae30\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc27d\uac8c \ud574\uacb0 \uac00\ub2a5\ud558\ub2e4.<br \/>\n\uad6c\ub984 \uc785\ub825\uae30\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc5c4\uccad\ub09c \uc635\uc158\ub4e4\uc774 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n<ul>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;Esc&gt;<\/code>\ub97c \uc785\ub825\ud560 \ub54c\ub9c8\ub2e4 \uc601\ubb38\uc73c\ub85c \ubcc0\uacbd<\/li>\n  <li>\uc601\ubb38\uc73c\ub85c \uc804\ud658\ud558\ub294 \ub2e8\ucd95\ud0a4 \uc9c0\uc815<\/li>\n<\/ul>\n\n<p>\uc785\ub825\uae30 \uc790\uccb4\ub97c \ubc14\uafb8\ub294 \uac83\uc774\uae30 \ub54c\ubb38\uc5d0 Vim \uc774\uac74 IDE Vim Plugin \uc774\uac74 \uc124\uc815\uc744 \ubc14\uafd4\uc904 \ud544\uc694\uac00 \uc5c6\ub2e4.\n\ud2b9\ud788 \uc601\ubb38 \uc804\ud658 \ub2e8\ucd95\ud0a4\ub97c <code class=\"language-plaintext highlighter-rouge\">&lt;C-c&gt;<\/code> \ub098 <code class=\"language-plaintext highlighter-rouge\">&lt;C-[&gt;<\/code> \ub4f1\uc73c\ub85c \uc124\uc815\ud574 \uc8fc\ub294 \uac83\ub3c4 \uac00\ub2a5\ud574\uc11c \ud65c\uc6a9\ud558\uae30 \uc88b\ub2e4.\n\ubcf5\uc7a1\ud558\uac8c \uc124\uc815\ud558\uae30 \uadc0\ucc2e\ub2e4\uba74 \uac00\uc7a5 \uc774\uc0c1\uc801\uc778 \ud574\uacb0\ucc45\uc774\ub77c \uc0dd\uac01\ud55c\ub2e4. \uc2e4\uc81c\ub85c \uad6c\ub984 \uc785\ub825\uae30 \uc124\uc815\ub9cc\uc73c\ub85c\ub3c4 1\ub144\uc774 \ub118\uac8c \uc798 \uc37c\ub2e4.<\/p>\n\n<p>\ud558\uc9c0\ub9cc \ub124\uc774\ud2f0\ube0c \uc785\ub825\uae30\uac00 \uc544\ub2c8\ub77c\uc11c \uadf8\ub7f0\uc9c0, mac Sierra \ubd80\ud130\ub294 iTerm \uc5d0\uc11c \uc18d\ub3c4 \uc800\ud558 \ubb38\uc81c\uac00 \uc788\ub2e4. Normal \uba85\ub839\uc5b4 \uba87 \uac1c \ube60\ub974\uac8c \uc785\ub825\ud558\uae30\ub9cc \ud574\ub3c4 \ub51c\ub808\uc774\uac00 \uc0dd\uaca8\uc11c \uc880 \ub2f5\ub2f5\ud558\ub2e4.<\/p>\n\n<p>\ub610\ud55c IntelliJ IDEA \uc758 Vim Plugin\uc778 Ideavim \uacfc \uc0c1\uc131\uc774 \ubcc4\ub85c \uc88b\uc9c0 \uc54a\ub2e4. \uad6c\ub984 \uc785\ub825\uae30 \uc635\uc158\uc5d0 IntelliJ \uad00\ub828 \uc124\uc815\uc774 \uc788\uae34 \ud558\uc9c0\ub9cc, \uc124\uc815\uc744 \ud574\ub3c4 \uc0ac\uc6a9\ud558\ub2e4 \ubcf4\uba74 \ubaa8\ub4dc \uc804\ud658\uc774 \ud55c \ubc88\uc5d0 \uc548 \ub418\ub294 \ub4f1\uc758 \ubd88\ub9cc\uc871\uc2a4\ub7ec\uc6b4 \uc0c1\ud669\uc744 \uc790\uc8fc \ub9cc\ub098\uac8c \ub41c\ub2e4.<\/p>\n\n<h3 id=\"karabiner\ub97c-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\">karabiner\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/h3>\n\n<p>\uad6c karabiner \uc5d0\uc11c\ub294 \uc544\ub798\uc640 \uac19\uc740 \uc124\uc815\uc744 \uc368\uc11c \ud55c \ubc88\uc5d0 \ud574\uacb0\uc774 \uac00\ub2a5\ud588\ub2e4.\n\ub098\ub294 <code class=\"language-plaintext highlighter-rouge\">F15<\/code> \ud0a4\ub97c <code class=\"language-plaintext highlighter-rouge\">Capslock<\/code> \uc5d0 \ub9e4\ud551\ud574 \ub450\uc5c8\uc5c8\uae30 \ub54c\ubb38\uc5d0, <code class=\"language-plaintext highlighter-rouge\">&lt;Esc&gt;<\/code> \ub300\uc2e0 <code class=\"language-plaintext highlighter-rouge\">Capslock<\/code>\ub9cc \ub204\ub974\uba74 \ud3b8\ub9ac\ud558\uac8c \ubaa8\ub4dc \uc804\ud658\uc744 \ud560 \uc218 \uc788\uc5c8\ub2e4.<\/p>\n\n<div class=\"language-xml highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nt\">&lt;vkchangeinputsourcedef&gt;<\/span>\n    <span class=\"nt\">&lt;name&gt;<\/span>KeyCode::VK_CHANGE_INPUTSOURCE_TO_ENGLISH<span class=\"nt\">&lt;\/name&gt;<\/span>\n    <span class=\"nt\">&lt;inputsourceid_equal&gt;<\/span>com.apple.keylayout.ABC<span class=\"nt\">&lt;\/inputsourceid_equal&gt;<\/span>\n<span class=\"nt\">&lt;\/vkchangeinputsourcedef&gt;<\/span>\n\n<span class=\"nt\">&lt;item&gt;<\/span>\n    <span class=\"nt\">&lt;identifier&gt;<\/span>F15_abc_escape<span class=\"nt\">&lt;\/identifier&gt;<\/span>\n    <span class=\"nt\">&lt;name&gt;<\/span>F15 : abc \ub85c inputsource \uc804\ud658 \ud6c4, ESC \uc785\ub825<span class=\"nt\">&lt;\/name&gt;<\/span>\n    <span class=\"nt\">&lt;autogen&gt;<\/span>\n        __KeyOverlaidModifier__\n        KeyCode::F15,\n        KeyCode::VK_MODIFIER_EXTRA1,\n        KeyCode::VK_CHANGE_INPUTSOURCE_TO_ENGLISH,\n        KeyCode::ESCAPE,\n    <span class=\"nt\">&lt;\/autogen&gt;<\/span>\n<span class=\"nt\">&lt;\/item&gt;<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>\ubb38\uc81c\ub294 mac Sierra \ubd80\ud130 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac8c \ub418\uc5c8\ub2e4\ub294 \uc810. karabiner \uac00 Sierra\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc774\uc81c\ub294 \uc54c\uc544\ubd10\uc57c \uc18c\uc6a9\uc774 \uc5c6\ub294 \ubc29\ubc95\uc774\ub2e4. \uc5ec\uae30\uc5d0 \ucd94\uac00\ud55c \uc774\uc720\ub294 \uadf8\ub0e5 \uae30\ub85d\uc744 \ub0a8\uaca8 \ub193\uace0 \uc2f6\uc5b4\uc11c\uc774\ub2e4.<\/p>\n\n<p>karabiner \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac8c \ub418\uc790, karabiner\uc758 \uac1c\ubc1c\uc790\ubd84\uc774 <a href=\"https:\/\/github.com\/tekezo\/Karabiner-Elements\">karabiner-elements<\/a>\ub97c \uae09\ud788 \uac1c\ubc1c\ud574 \ub0b4\ub193\uae34 \ud588\uc9c0\ub9cc karabiner \ub97c \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5c8\ub358 \uae30\ub2a5 \ub300\ubd80\ubd84\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uc0c1\ud0dc. \ud604\uc7ac\ub85c\uc11c\ub294 \uadf8\ub0e5 \ud0a4 1:1 \ub9e4\ud551 \ubc16\uc5d0 \uc548 \ub41c\ub2e4.<\/p>\n\n<h3 id=\"hammerspoon\uc744-\uc0ac\uc6a9\ud558\ub294-\ubc29\ubc95\">hammerspoon\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95<\/h3>\n\n<p>\ub0b4\uac00 \uac00\uc7a5 \uc120\ud638\ud558\ub294 \ubc29\ubc95\uc774\ub2e4. <a href=\"http:\/\/www.hammerspoon.org\/\">hammerspoon<\/a>\uc740 mac\uc744 \uc704\ud55c \uc77c\uc885\uc758 \ub9e4\ud06c\ub85c \ud234\ub85c\uc11c, Windows \uc9c4\uc601\uc758 <a href=\"https:\/\/autohotkey.com\/\">autohotkey<\/a>\uc640 \ube44\uc2b7\ud55c \ub290\ub08c\uc73c\ub85c \uc4f8 \uc218 \uc788\ub2e4. \uae30\ub2a5\ub3c4 \ube44\uc2b7\ud558\uace0 \ud560 \uc218 \uc788\ub294 \uc77c\ub3c4 \ube44\uc2b7. \ub2e4\ub9cc lua \ub97c \uc4f0\uae30 \ub54c\ubb38\uc5d0 autohotkey \ubcf4\ub2e4\ub294 \uc880 \ub354 \uc4f8\ub9cc\ud55c \uc5b8\uc5b4\ub85c \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\ub2e4.<\/p>\n\n<p>hammerspoon\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\ub97c \ud2b9\uc815 \ud0a4\uc5d0 \ubc14\uc778\ub529\ud574\uc8fc\uba74 \ud574\ub2f9 \ud0a4\ub97c \uc785\ub825\ud560 \ub54c\ub9c8\ub2e4 \ubb34\uc870\uac74 \uc601\ubb38\uc73c\ub85c \ubcc0\uacbd\ub418\uace0, <code class=\"language-plaintext highlighter-rouge\">&lt;C-c&gt;<\/code>\ub97c \ucd94\uac00\ub85c \uc785\ub825\ud558\uae30 \ub54c\ubb38\uc5d0 Vim \uc5d0\uc11c\ub294 Normal \ubaa8\ub4dc\ub85c \ubcc0\uacbd\ub41c\ub2e4.<\/p>\n\n<div class=\"language-lua highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">local<\/span> <span class=\"n\">inputEnglish<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"com.apple.keylayout.ABC\"<\/span>\n\n<span class=\"kd\">local<\/span> <span class=\"n\">input_source<\/span> <span class=\"o\">=<\/span> <span class=\"n\">hs<\/span><span class=\"p\">.<\/span><span class=\"n\">keycodes<\/span><span class=\"p\">.<\/span><span class=\"n\">currentSourceID<\/span><span class=\"p\">()<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"p\">(<\/span><span class=\"n\">input_source<\/span> <span class=\"o\">==<\/span> <span class=\"n\">inputEnglish<\/span><span class=\"p\">)<\/span> <span class=\"k\">then<\/span>\n    <span class=\"n\">hs<\/span><span class=\"p\">.<\/span><span class=\"n\">eventtap<\/span><span class=\"p\">.<\/span><span class=\"n\">keyStroke<\/span><span class=\"p\">({},<\/span> <span class=\"s1\">'right'<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">hs<\/span><span class=\"p\">.<\/span><span class=\"n\">keycodes<\/span><span class=\"p\">.<\/span><span class=\"n\">currentSourceID<\/span><span class=\"p\">(<\/span><span class=\"n\">inputEnglish<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"n\">hs<\/span><span class=\"p\">.<\/span><span class=\"n\">eventtap<\/span><span class=\"p\">.<\/span><span class=\"n\">keyStroke<\/span><span class=\"p\">({<\/span><span class=\"s1\">'control'<\/span><span class=\"p\">},<\/span> <span class=\"s1\">'c'<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<ul>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;Esc&gt;<\/code> \uac00 \uc544\ub2c8\ub77c <code class=\"language-plaintext highlighter-rouge\">&lt;C-c&gt;<\/code> \uac00 \uc785\ub825\ub418\uac8c \ud55c \uc774\uc720\ub294 iTerm \uc5d0\uc11c <code class=\"language-plaintext highlighter-rouge\">Meta<\/code> \ud0a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uadf8\ub098\ub9c8 \uc801\uc808\ud55c \ubc29\ubc95\uc774 <code class=\"language-plaintext highlighter-rouge\">&lt;Esc&gt;<\/code>\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83 \ubfd0\uc774\uae30 \ub54c\ubb38\uc774\ub2e4.<\/li>\n<\/ul>\n\n<p>\uc544\ubb34\ud2bc \uc774 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uba74 \ub124\uc774\ud2f0\ube0c \uc785\ub825\uae30\ub97c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ucee4\uc11c \uc6c0\uc9c1\uc784\uc774 \uad6c\ub984 \uc785\ub825\uae30\uc5d0 \ube44\ud574 \uc5c4\uccad\ub098\uac8c \ube60\ub974\uace0, IntelliJ\uc758 Ideavim\uc5d0\uc11c\ub098 \ud130\ubbf8\ub110 Vim\uc5d0\uc11c\ub098 \ub611\uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\ub2e4. hammerspoon\uc744 \uc801\uadf9\uc801\uc73c\ub85c \uc5ec\ub7ec \ubc29\ud5a5\uc73c\ub85c \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \ub0b4\uac8c\ub294 \ud604\uc7ac \uac00\uc7a5 \uc801\uc808\ud55c \ubc29\ubc95\uc774\ub77c \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<h2 id=\"links\">Links<\/h2>\n\n<ul>\n  <li><a href=\"http:\/\/gureum.io\/\">\uad6c\ub984 \uc785\ub825\uae30<\/a><\/li>\n  <li><a href=\"https:\/\/github.com\/tekezo\/Karabiner-Elements\">karabiner-elements<\/a><\/li>\n  <li><a href=\"https:\/\/autohotkey.com\/\">autohotkey<\/a><\/li>\n  <li><a href=\"http:\/\/www.hammerspoon.org\/\">hammerspoon<\/a><\/li>\n<\/ul>\n\n","pubDate":"Thu, 04 May 2017 22:05:30 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/04\/input-source\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/04\/input-source\/","category":"vim \uad6c\ub984\uc785\ub825\uae30 hammerspoon karabiner input-source"},{"title":"Next JWP Study 08","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5ec\ub35f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5ec\ub35f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5ec\ub35f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\" id=\"markdown-toc-\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/a><\/li>\n  <li><a href=\"#reflection\" id=\"markdown-toc-reflection\">Reflection<\/a><\/li>\n  <li><a href=\"#mvc-framework-\uad6c\ud604\" id=\"markdown-toc-mvc-framework-\uad6c\ud604\">MVC Framework \uad6c\ud604<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5ec\ub35f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5ec\ub35f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-27 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc624\ub298\uc740 Reflection \uc5f0\uc2b5\uc744 \ud558\uace0, annotation \uae30\ubc18\uc758 MVC Framework\ub97c \ub9cc\ub4e4\uc5b4 \ubcf8\ub2e4.\n    <ul>\n      <li>Reflection\uc5d0 \uc775\uc219\ud55c \uc0ac\ub78c\uc740 Framework \ub9cc\ub4e4\uae30\ub85c \ubc14\ub85c \ub4e4\uc5b4\uac00\uae30\ub85c \ud55c\ub2e4.<\/li>\n      <li>\ub098\ub294 Reflection\uc5d0 \uc775\uc219\ud55c \ud3b8\uc774\ub77c\uace0 \uc2a4\uc2a4\ub85c \ud310\ub2e8\ud558\uace0 Framework \ub9cc\ub4e4\uae30\ub85c \ubc14\ub85c \ub4e4\uc5b4\uac14\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/h1>\n\n<ul>\n  <li>\ubab0\uc785\n    <ul>\n      <li>\ubab0\uc785\uc740 \ub2e8\uc21c\ud788 \uc791\uc5c5 \ub2a5\ub960\uc5d0\ub9cc \uc601\ud5a5\uc744 \uc8fc\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, \uc0b6\uacfc \ud589\ubcf5\uacfc\ub3c4 \uad00\ub828\uc774 \uc788\ub2e4.<\/li>\n      <li>\uadf8\ub807\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ubab0\uc785\ud560 \uac83\uc778\uac00?<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"reflection\">Reflection<\/h1>\n\n<p>\ub098\ub294 Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \ub54c Reflection\uc744 \uc990\uaca8 \uc4f0\ub294 \ud3b8\uc774\uc9c0\ub9cc Reflection\uc744 \uc369 \uc88b\uc544\ud558\uc9c0\ub294 \uc54a\ub294\ub2e4.\nReflection\uc744 \uc368\uc11c \ucf54\ub529\ud558\uace0 \uc788\ub2e4 \ubcf4\uba74 Java\uc758 \uc544\uc774\ub374\ud2f0\ud2f0\uac00 \ud76c\uc11d\ub418\ub294 \ub290\ub08c\uc774 \ub4e4\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n<p>\ub098\ub294 Java \ubb38\ubc95\uc0c1\uc758 \ud55c\uacc4\uac00 Reflection\uc5d0\uc11c \ub4dc\ub7ec\ub09c\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.\n\uadf8\ub9ac\uace0 Reflection\uc774 Java\uc758 \uc7a5\uc810\uc5d0 \ud574\ub97c \ub07c\uce5c\ub2e4\uace0 \ubcf8\ub2e4.<\/p>\n\n<p>\ub098\ub294 \ub531\ud788 \uc790\uc2e0 \uc788\ub294 \uc5b8\uc5b4\uac00 \uc5c6\uace0, Java\uc5d0 \ub300\ud574\uc11c\ub3c4 \uc544\uc9c1 \ucd08\uc2ec\uc790\uc5d0 \uc18d\ud55c\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.\n\uc815\uc801 \ud0c0\uc785 \uc5b8\uc5b4\ubcf4\ub2e4\ub294 \ub3d9\uc801 \ud0c0\uc785 \uc5b8\uc5b4\uac00 \ub354 \uc131\uaca9\uc5d0 \ub9de\ub294 \ud3b8\uc774\ub2e4.\n\uadf8\ub7fc\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 \ubb54\uac00 \uc0c8\ub85c\uc6b4 \uac83\uc744 \ub9cc\ub4e4 \ub54c, \ub098\ub294 Java\ub97c \ud56d\uc0c1 \uc911\uc694\ud55c \uc120\ud0dd\uc9c0 \uc911\uc758 \ud558\ub098\ub85c \uace0\ub824\ud55c\ub2e4.\n\uc65c\ub0d0\ud558\uba74 Java\ub294 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0\uc11c \uaf64 \ub9ce\uc740 \uc2e4\uc218\ub97c \uac78\ub7ec\ub0bc \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.\n\uadf8\uac8c \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc5d0 Java IDE\uc758 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ub300\uaddc\ubaa8 \ub9ac\ud329\ud1a0\ub9c1\uc774\ub098 \uc2a4\ub9c8\ud2b8\ud55c \uc790\ub3d9\uc644\uc131\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n<p>\uadf8\ub7f0\ub370 Reflection\uc744 \uc801\uadf9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0\uc11c \uc5bb\uc744 \uc218 \uc788\ub294 \uc774\ub4dd\uc744 \uc0c1\ub2f9\ubd80\ubd84 \ud3ec\uae30\ud574\uc57c \ud55c\ub2e4.\n\ub0b4 \uae30\uc900\uc73c\ub85c Java\ub97c \uc120\ud0dd\ud560 \uc911\uc694\ud55c \uc774\uc720\uac00 \uc0ac\ub77c\uc9c0\ub294 \uc148\uc774\ub2e4.<\/p>\n\n<p>\ud558\uc9c0\ub9cc \uadf8\ub7fc\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 Java\ub294 \ud604\ub300 \uc0b0\uc5c5\uc5d0 \uc788\uc5b4 \uc911\uc694\ud55c \uc5b8\uc5b4\uc774\uace0\n\uadf8\ub7ec\ud55c Java\uc758 \ud55c\uacc4\ub97c \uadf9\ubcf5\ud558\uac8c \ud574 \uc8fc\ub294 Reflection\uc740 \uc8fc\uc694 \ud504\ub808\uc784\uc6cc\ud06c\ub4e4\uc5d0 \uc758\ud574 \ub110\ub9ac \uc0ac\uc6a9\ub418\uace0 \uc788\ub2e4.\n\ubb3c\ub860 Reflection\uc774 \uc81c\ud55c \uc5c6\uc774 \uc0ac\uc6a9\ub418\ub294 \uac74 \uc544\ub2cc \ubaa8\uc591\uc774\ub2e4.\nReflection\uc740 \ud504\ub85c\uadf8\ub7a8 \uac00\ub3d9\uc2dc\uc5d0\ub9cc \uc0ac\uc6a9\ud558\uace0, \uac00\ub2a5\ud55c \ud55c \uac80\uc99d\ub41c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc218\ub85d\ub41c \uac83\ub9cc \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4\ub294\n\uc554\ubb35\uc801\uc778 \uc6d0\uce59\uc774 \uacf5\uc720\ub418\uace0 \uc788\ub294 \ub290\ub08c\uc774\ub2e4.<\/p>\n\n<p>\ud3f4 \uadf8\ub808\uc774\uc5c4\uc774 Java\ub97c \ub450\uace0 \uc2e4\uc218 \uc608\ubc29\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd98 \uc5b8\uc5b4\ub77c\uace0 \ud588\ub358 \uac8c \uc0dd\uac01\ub09c\ub2e4.\n<a href=\"http:\/\/paulgraham.com\/javacover.html\">\ud3f4 \uadf8\ub808\uc774\uc5c4\uc740 Java\ub97c \uae4c\uba74\uc11c<\/a> \uadf8\ub7f0 \ub9d0\uc744 \ud588\uc9c0\ub9cc,\n\uc0ac\uc2e4 Java\ub294 \uc2e4\uc218 \uc608\ubc29\uc5d0 \uad49\uc7a5\ud788 \ub6f0\uc5b4\ub09c \uc5b8\uc5b4\uc774\uae30 \ub54c\ubb38\uc5d0 \uc8fc\ub958 \uc5b8\uc5b4\uac00 \ub418\uc5c8\uace0\n\uc55e\uc73c\ub85c\ub3c4 \uaf64 \uc624\ub7ab\ub3d9\uc548 \uc0b0\uc5c5\uacc4\uc5d0\uc11c \uc0ac\ub791\ubc1b\uc744 \uac70\ub77c\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<p>\uadf8\ub7ec\uace0\ubcf4\ub2c8 \ub798\ub9ac \uc6d4\uc740 <a href=\"https:\/\/youtu.be\/LR8fQiskYII?t=1m39s\">Java\uac00 \uc88b\uc740 \uc758\ubbf8\uc758 \ud604\ub300\ud310 Cobol<\/a>\uc774\ub77c \ud588\uc5c8\ub358 \uac83 \uac19\ub2e4.\n<del>(\uc5b4\ub290 \ubb38\uc11c\uc5d0\uc11c \ub9d0\ud588\ub294\uc9c0\ub294 \uc798 \uae30\uc5b5\uc774 \uc548 \ub098\ub294\ub370 \ub9c1\ud06c\ub97c \ucc3e\uc544\ub2e4 \ubd99\uc5ec\ub193\uc744 \uc608\uc815\uc774\ub2e4)<\/del><\/p>\n\n<h1 id=\"mvc-framework-\uad6c\ud604\">MVC Framework \uad6c\ud604<\/h1>\n\n<ul>\n  <li>\uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step8-johngrib\">GitHub Repository<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/li>\n  <li>Reflection\uc744 \uc0ac\uc6a9\ud574\uc11c <code class=\"language-plaintext highlighter-rouge\">@Controller<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uacfc <code class=\"language-plaintext highlighter-rouge\">@RequestMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc218\uc9d1\ud558\uace0, \uadf8\uc5d0 \ub530\ub77c \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub3c4\ub85d \uc218\uc815\ud558\uc600\ub2e4. \uc544\ub798\ub294 <code class=\"language-plaintext highlighter-rouge\">UserController.java<\/code>\uc758 \ub0b4\uc6a9\uc744 \ucd95\uc57d\ud55c \uac83\uc774\ub2e4.<\/li>\n<\/ul>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Controller<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/users\"<\/span><span class=\"o\">)<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">AbstractController<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">Logger<\/span> <span class=\"n\">log<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">LoggerFactory<\/span><span class=\"o\">.<\/span><span class=\"na\">getLogger<\/span><span class=\"o\">(<\/span><span class=\"nc\">UserController<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">UserDao<\/span> <span class=\"n\">userDao<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">UserDao<\/span><span class=\"o\">.<\/span><span class=\"na\">getInstance<\/span><span class=\"o\">();<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">list<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/form\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">form<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"\/create\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">method<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">RequestMethod<\/span><span class=\"o\">.<\/span><span class=\"na\">POST<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">create<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"\/update\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">method<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">RequestMethod<\/span><span class=\"o\">.<\/span><span class=\"na\">POST<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">update<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">req<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/updateForm\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">updateForm<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/profile\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">profile<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">response<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ \uc0dd\ub7b5<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<ul>\n  <li>url\uc5d0 \uc911\ubcf5\uc774 \ub9ce\uc544\uc11c <code class=\"language-plaintext highlighter-rouge\">Controller<\/code>\uc5d0 prefix\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\ub3c4\ub85d \uc791\uc5c5\ud574 \ubd24\ub2e4.<\/li>\n  <li>\ud558\ub098\ud558\ub098\uc758 \uba54\uc11c\ub4dc\uac00 \uac01\uac01\uc758 Request\ub97c \ub2f4\ub2f9\ud558\uac8c \ub418\ub2c8 \uc5ec\ub7ec Controller \ud074\ub798\uc2a4\ub97c \ud558\ub098\ub85c \ud569\uce60 \uc218 \uc788\uc5c8\ub2e4.<\/li>\n  <li>\uc774\uc815\ub3c4\uba74 \uc77c\ub2e8 \ub9cc\uc871. Spring\uc774\ub791 \ube44\uc2b7\ud55c \ubaa8\uc591\uc774 \ub098\uc624\ub124.<\/li>\n  <li>\uc544, <code class=\"language-plaintext highlighter-rouge\">DispatcherServlet<\/code>\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \ubaa8\uc591\uc744 \uac16\ucd94\uac8c \ub418\uc5c8\ub2e4.<\/li>\n<\/ul>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@WebServlet<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"dispatcher\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">urlPatterns<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"\/\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">loadOnStartup<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"o\">)<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">DispatcherServlet<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">HttpServlet<\/span> <span class=\"o\">{<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">serialVersionUID<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1L<\/span><span class=\"o\">;<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">Logger<\/span> <span class=\"n\">logger<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">LoggerFactory<\/span><span class=\"o\">.<\/span><span class=\"na\">getLogger<\/span><span class=\"o\">(<\/span><span class=\"nc\">DispatcherServlet<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"nc\">ControllerMapping<\/span> <span class=\"n\">controllerMap<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@Override<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">init<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">ServletException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">controllerMap<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ControllerMapping<\/span><span class=\"o\">(<\/span><span class=\"n\">core<\/span><span class=\"o\">.<\/span><span class=\"na\">annotation<\/span><span class=\"o\">.<\/span><span class=\"na\">Controller<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"next.controller\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@Override<\/span>\n    <span class=\"kd\">protected<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">service<\/span><span class=\"o\">(<\/span><span class=\"nc\">HttpServletRequest<\/span> <span class=\"n\">req<\/span><span class=\"o\">,<\/span> <span class=\"nc\">HttpServletResponse<\/span> <span class=\"n\">resp<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">ServletException<\/span><span class=\"o\">,<\/span> <span class=\"nc\">IOException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">String<\/span> <span class=\"n\">requestUri<\/span> <span class=\"o\">=<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"na\">getRequestURI<\/span><span class=\"o\">();<\/span>\n        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">debug<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Method : {}, Request URI : {}\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"na\">getMethod<\/span><span class=\"o\">(),<\/span> <span class=\"n\">requestUri<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"kd\">final<\/span> <span class=\"nc\">ControllerData<\/span> <span class=\"n\">controllerData<\/span> <span class=\"o\">=<\/span> <span class=\"n\">controllerMap<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"na\">getMethod<\/span><span class=\"o\">(),<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"na\">getRequestURI<\/span><span class=\"o\">());<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"n\">mav<\/span> <span class=\"o\">=<\/span> <span class=\"n\">controllerData<\/span><span class=\"o\">.<\/span><span class=\"na\">execute<\/span><span class=\"o\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">);<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">View<\/span> <span class=\"n\">view<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mav<\/span><span class=\"o\">.<\/span><span class=\"na\">getView<\/span><span class=\"o\">();<\/span>\n\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">view<\/span><span class=\"o\">.<\/span><span class=\"na\">render<\/span><span class=\"o\">(<\/span><span class=\"n\">mav<\/span><span class=\"o\">.<\/span><span class=\"na\">getModel<\/span><span class=\"o\">(),<\/span> <span class=\"n\">req<\/span><span class=\"o\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">);<\/span>\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Exception : {}\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">e<\/span><span class=\"o\">);<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">ServletException<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"k\">return<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step8-johngrib\">step8 \uacfc\uc81c \uc644\ub8cc<\/a><\/li>\n  <li><a href=\"http:\/\/www.journaldev.com\/4098\/java-heap-space-vs-stack-memory\">JournalDev : Java Heap Space vs Stack \u2013 Memory Allocation in Java<\/a><\/li>\n  <li><a href=\"http:\/\/paulgraham.com\/javacover.html\">Paul Graham : Java's Cover<\/a><\/li>\n  <li><a href=\"http:\/\/blog.fupfin.com\/?p=102\">Paul Graham : Java's Cover(\ud55c\uad6d\uc5b4)<\/a>\n    <ul>\n      <li>\ud3f4 \uadf8\ub808\uc774\uc5c4\uc740 Java\ub97c \ub9e4\uc6b0 \uae4c\ub294 \uc785\uc7a5\uc778\ub370, Java\ub97c \uc0ac\ub791\ud558\ub294 \uc0ac\ub78c\uc774\ub77c\uba74 \uc774 \uae00\uc744 \uc77d\uae30 \uc804\uc5d0 \uc2ec\ud638\ud761\uc744 \ud558\uace0, \uadf8\uac00 \uc5c4\uccad\ub098\uac8c \ud558\ub4dc\ucf54\uc5b4\ud55c Lisp \ud574\ucee4\ub77c\ub294 \uc810\uc744 \uc5fc\ub450\uc5d0 \ub450\uae38 \ubc14\ub780\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"https:\/\/youtu.be\/LR8fQiskYII?t=1m39s\">Larry Wall : 5 Programming Languages Everyone Should Know<\/a><\/li>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/www.ted.com\/talks\/mihaly_csikszentmihalyi_on_flow?language=ko#t-1033416\">TED : \ubbf8\ud558\uc774 \uce59\uc13c\ud2b8\ubbf8\ud558\uc774\uc758 \ubab0\uc785<\/a><\/li>\n      <li><a href=\"http:\/\/egloos.zum.com\/agile\/v\/5749946\">\ub2f9\uc2e0\uc774 \uc81c\uc790\ub9ac \uac78\uc74c\uc778 \uc774\uc720 : \uc9c0\ub8e8\ud558\uac70\ub098 \ubd88\uc548\ud558\uac70\ub098<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9lXoEYVTp6w6Nkl3t\/lessons\/-Kh_ghT2zXD6EMC6Ix5e\">\uc0c1\ud0dc \uc810\uac80\uc5d0 \ub530\ub978 \ud53c\ub4dc\ubc31<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9leY0VnZi2akOLdkW\/lessons\/-Khyfd6JtntTR9BwsGVR\">\uc790\ubc14 Reflection \uc2e4\uc2b5<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9leY0VnZi2akOLdkW\/lessons\/-KhyffvIV_kFgKjRrGOi\">MVC \ud504\ub808\uc784\uc6cc\ud06c 3\ub2e8\uacc4 \uc2e4\uc2b5<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<p>\ub9c1\ud06c\ub97c \ucc3e\uc544 \uc77c\uc77c\uc774 \ub2ec\uc544\ub193\ub294 \uac74 \uaf64 \uadc0\ucc2e\uc740 \uc77c\uc774\uc9c0\ub9cc, \ud55c\ud3b8\uc73c\ub85c\ub294 \uaf64 \uc7ac\ubbf8\uc788\ub294 \uc77c\uc774\uae30\ub3c4 \ud558\ub2e4.<\/p>\n","pubDate":"Mon, 01 May 2017 07:33:10 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/05\/01\/jwp-08\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/05\/01\/jwp-08\/","category":"study jwp"},{"title":"Next JWP Study 07","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc77c\uacf1-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc77c\uacf1-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc77c\uacf1 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\" id=\"markdown-toc-\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/a>    <ul>\n      <li><a href=\"#\uac10\uc0c1--\uace0\ud750\uc758-\ud3b8\uc9c0\ub97c-\uc77d\uace0\" id=\"markdown-toc-\uac10\uc0c1--\uace0\ud750\uc758-\ud3b8\uc9c0\ub97c-\uc77d\uace0\">\uac10\uc0c1 : \uace0\ud750\uc758 \ud3b8\uc9c0\ub97c \uc77d\uace0<\/a><\/li>\n      <li><a href=\"#\uc0ac\uc871--\ub808\ud37c\ub7f0\uc2a4-\uccb4\ud06c---\uc778\uc6a9\ub41c-\ubc18-\uace0\ud750\uc758-\ud3b8\uc9c0\uc5d0-\ub300\ud574\" id=\"markdown-toc-\uc0ac\uc871--\ub808\ud37c\ub7f0\uc2a4-\uccb4\ud06c---\uc778\uc6a9\ub41c-\ubc18-\uace0\ud750\uc758-\ud3b8\uc9c0\uc5d0-\ub300\ud574\">\uc0ac\uc871 : \ub808\ud37c\ub7f0\uc2a4 \uccb4\ud06c - \uc778\uc6a9\ub41c \ubc18 \uace0\ud750\uc758 \ud3b8\uc9c0\uc5d0 \ub300\ud574<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#\uc911\uac04-\uc810\uac80\" id=\"markdown-toc-\uc911\uac04-\uc810\uac80\">\uc911\uac04 \uc810\uac80<\/a>    <ul>\n      <li><a href=\"#\uc911\uac04-\uc810\uac80\uc744-\uc704\ud55c-\uc2e4\uc2b5-\ud658\uacbd-\uc124\uc815\" id=\"markdown-toc-\uc911\uac04-\uc810\uac80\uc744-\uc704\ud55c-\uc2e4\uc2b5-\ud658\uacbd-\uc124\uc815\">\uc911\uac04 \uc810\uac80\uc744 \uc704\ud55c \uc2e4\uc2b5 \ud658\uacbd \uc124\uc815<\/a><\/li>\n      <li><a href=\"#\uc694\uad6c\uc0ac\ud56d\" id=\"markdown-toc-\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/a><\/li>\n      <li><a href=\"#\uba54\ubaa8\" id=\"markdown-toc-\uba54\ubaa8\">\uba54\ubaa8<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc77c\uacf1-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc77c\uacf1 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-24 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.\n    <ul>\n      <li>\ub9e4 \uc2dc\uac04 \uc815\uac01\uc5d0 \uc2dc\uc791\ud558\ub294 \uac8c \uc2e0\uae30\ud558\ub2e4. \uc2dc\uacc4 \ubcf4\uace0 \uae30\ub2e4\ub9ac\uace0 \uc788\ub2e4\uac00 00 \ucd08\uac00 \ub418\uba74 \ubc14\ub85c \uc2dc\uc791\ud558\uc2dc\ub294 \ub4ef.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ub9e4 \uc218\uc5c5 \uc2dc\uc791 \uc804\uc5d0 \uc77c\ucc0d \ucd9c\uc11d\ud574\uc11c \ucc45\uc0c1 \uc14b\ud305\ud574\uc8fc\uc2dc\ub294 \ubd84\ub4e4\uac8c \uac10\uc0ac \uc778\uc0ac.<\/li>\n  <li>\uc624\ub298\uc740 \uc911\uac04 \uc810\uac80\uc744 \ud55c\ub2e4.\n    <ul>\n      <li>\uadf8\ub3d9\uc548 \uc791\uc131\ud55c \ucf54\ub4dc\ub4e4\uc744 \uc0ac\uc6a9\ud558\uc5ec \uacfc\uc81c\ub97c \uc218\ud589\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ubaa9\uc694\uc77c\uc5d0\ub294 \uacfc\uc81c\uc5d0 \ub300\ud55c \ud53c\ub4dc\ubc31\uc744 \ud558\uace0, annotation \uae30\ubc18 MVC \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uad6c\ud604\ud560 \uc608\uc815.<\/li>\n  <li>AJAX\uc758 \uc7a5\ub2e8\uc810\uc5d0 \ub300\ud55c \ub17c\uc758.<\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/h1>\n\n<ul>\n  <li>\ube48\uc13c\ud2b8 \ubc18 \uace0\ud750\uac00 \ud14c\uc624\uc5d0\uac8c \uc4f4 \ud3b8\uc9c0 \uc911<\/li>\n<\/ul>\n\n<blockquote>\n  <p>\uc5f4\uc2ec\ud788 \ub178\ub825\ud558\ub2e4\uac00, \uac11\uc790\uae30 \ub098\ud0dc\ud574\uc9c0\uace0 \uc798 \ucc38\ub2e4\uac00 \uc870\uae09\ud574\uc9c0\uace0, \ud76c\ub9dd\uc5d0 \ubd80\ud480\uc5c8\ub2e4\uac00 \uc808\ub9dd\uc5d0 \ube60\uc9c0\ub294 \uc77c\uc744 \ub610 \ub2e4\uc2dc \ubc18\ubcf5\ud558\uace0 \uc788\ub2e4.<br \/>\n\uadf8\ub798\ub3c4 \uacc4\uc18d\ud574\uc11c \ub178\ub825\ud558\uba74 \uc218\ucc44\ud654\ub97c \ub354 \uc798 \uc774\ud574\ud560 \uc218 \uc788\uaca0\uc9c0.<br \/>\n\uadf8\uac8c \uc26c\uc6b4 \uc77c\uc774\uc5c8\ub2e4\uba74 \uadf8 \uc18d\uc5d0\uc11c \uc544\ubb34\ub7f0 \uc990\uac70\uc6c0\ub3c4 \uc5bb\uc744 \uc218 \uc5c6\uc5c8\uc744 \uac83\uc774\ub2e4.<br \/>\n\uadf8\ub7ec\ub2c8 \uacc4\uc18d\ud574\uc11c \uadf8\ub9bc\uc744 \uadf8\ub824\uc57c\uaca0\ub2e4.<\/p>\n<\/blockquote>\n\n<h2 id=\"\uac10\uc0c1--\uace0\ud750\uc758-\ud3b8\uc9c0\ub97c-\uc77d\uace0\">\uac10\uc0c1 : \uace0\ud750\uc758 \ud3b8\uc9c0\ub97c \uc77d\uace0<\/h2>\n\n<p>\uace0\ud750\uc758 \ud3b8\uc9c0\ub97c \uc77d\uc5b4\ubcf4\ub2c8 \uadf8\uac00 \ubc18\ubcf5\uc801\uc73c\ub85c \ucc3e\uc544\uc624\ub294 \uc808\ub9dd \uc18d\uc5d0\uc11c \uadf8\ub9bc\uc744 \uadf8\ub838\uc74c\uc744 \uc54c \uc218 \uc788\ub2e4.\n\uace0\ud750\ub294 \uc0b4\uc544\uc788\uc744 \ub54c \uc778\uc815\ubc1b\uc740 \uc0ac\ub78c\uc774 \uc544\ub2c8\ub2e4.\n\uadf8\ub294 \uc0b6\uc758 \ub9c9\ubc14\uc9c0\uc5d0 \uc774\ub974\ub7ec \uc218\ucc44\ud654\ub97c \uc774\ud574\ud558\uac8c \ub418\uc5c8\uc744\uae4c?<\/p>\n\n<p>\ub3cc\uc774\ucf1c\ubcf4\uba74 \ub098 \ub610\ud55c \ub298 \ubd88\uc548\uc5d0 \ube60\uc838 \uc788\ub294 \uac83 \uac19\ub2e4.\n\ubd88\uc548\ud574\uc11c \ub9e4\uc77c \uacf5\ubd80\ub97c \ud558\uace0, \uc6b4\ub3d9\uc744 \ud558\uace0, \ucc45\uc744 \uc77d\ub294\ub2e4.\n\ud2b9\ucd9c\ub09c \uc0ac\ub78c\ub4e4\uc744 \ubcf4\uba74 \uace0\ud750\ucc98\ub7fc \uc808\ub9dd\uc5d0 \ube60\uc9c4\ub2e4.\n\uc9c8\ud22c\uc2ec\ubcf4\ub2e4 \ubd88\uc548\uc5d0 \ud729\uc2f8\uc5ec \uc9d1\uc73c\ub85c \ub3cc\uc544\uc640 \ud640\ub9b0\ub4ef\uc774 \uacf5\ubd80\ub97c \ud55c\ub2e4.\n\uacb0\uacfc\uc801\uc73c\ub85c \ubd88\uc548\uc740 \ub098\uc758 \uc800\ub825\uc77c\uc9c0\ub3c4 \ubaa8\ub974\uaca0\ub2e4.\n\ubd88\uc548\uc774 \uc788\uae30\uc5d0 \uc870\uae08\uc529\uc774\ub77c\ub3c4 \uc2e4\ub825\uc774 \ud5a5\uc0c1\ub418\uace0 \ub354 \ub098\uc740 \ubbf8\ub798\ub97c \uc900\ube44\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n<p>\ub298\uc0c1 \ubd88\uc548\uc744 \uc548\uace0 \uc788\ub294\ub370\ub3c4 \uadf8 \ubabb\uc9c0 \uc54a\uc740 \ud589\ubcf5\uc744 \ub290\ub07c\ub294 \uac78 \ubcf4\uba74\n\ubd88\uc548\uacfc \ud589\ubcf5\uc740 \uc544\ub9c8 \ub2e4\ub978 \ub808\uc774\uc5b4\uc5d0 \uac78\uccd0 \uc788\ub294 \uac10\uc815\uc778 \uac83 \uac19\ub2e4.\n\uc911\ucca9\uc774 \uac00\ub2a5\ud558\uac70\ub098, \uacf5\uc874 \uac00\ub2a5\ud55c \uc2ec\uc801 \uc0c1\ud0dc\uc778 \ubaa8\uc591.<\/p>\n\n<h2 id=\"\uc0ac\uc871--\ub808\ud37c\ub7f0\uc2a4-\uccb4\ud06c---\uc778\uc6a9\ub41c-\ubc18-\uace0\ud750\uc758-\ud3b8\uc9c0\uc5d0-\ub300\ud574\">\uc0ac\uc871 : \ub808\ud37c\ub7f0\uc2a4 \uccb4\ud06c - \uc778\uc6a9\ub41c \ubc18 \uace0\ud750\uc758 \ud3b8\uc9c0\uc5d0 \ub300\ud574<\/h2>\n\n<p>\uc704\uc758 \uc778\uc6a9\ub41c \ubc88\uc5ed\ub41c \ubc18 \uace0\ud750\uc758 \ud3b8\uc9c0\ub294 <a href=\"https:\/\/books.google.co.kr\/books?id=ydalAwAAQBAJ&amp;lpg=PT60&amp;ots=N3otvB4h94&amp;dq=%EB%B0%98%20%EA%B3%A0%ED%9D%90%20%EA%B7%B8%EB%9E%98%EB%8F%84%20%EA%B3%84%EC%86%8D%ED%95%B4%EC%84%9C%20%EB%85%B8%EB%A0%A5%ED%95%98%EB%A9%B4%20%EC%88%98%EC%B1%84%ED%99%94%EB%A5%BC%20%EB%8D%94%20%EC%9E%98%20%EC%9D%B4%ED%95%B4%ED%95%A0%20%EC%88%98%20%EC%9E%88%EA%B2%A0%EC%A7%80&amp;hl=ko&amp;pg=PT60#v=onepage&amp;q&amp;f=false\">\ubc18 \uace0\ud750, \uc601\ud63c\uc758 \ud3b8\uc9c0<\/a>\uc5d0 \uc218\ub85d\ub41c \uac83\uc774\ub2e4. \uadf8\ub7f0\ub370 \uac11\uc790\uae30 \uc6d0\ubb38\uc774 \uc5b4\ub5a4\uc9c0 \uad81\uae08\ud574\uc84c\uc73c\ubbc0\ub85c, <a href=\"http:\/\/vangoghletters.org\/\">vangoghletters.org<\/a>\uc5d0\uc11c \ud574\ub2f9 \ud3b8\uc9c0\ub97c \ucc3e\uc544\ubcf4\uc558\ub2e4.<\/p>\n\n<p>\uadf8\ub9ac\uace0 <a href=\"http:\/\/vangoghletters.org\/vg\/letters\/let199\/letter.html\">\ud574\ub2f9 \ud3b8\uc9c0<\/a>\ub97c \ucc3e\uc544\ub0c8\ub2e4.<\/p>\n\n<p>\ub9c1\ud06c\ub85c \ub4e4\uc5b4\uac00 <code class=\"language-plaintext highlighter-rouge\">original text<\/code>\ud0ed\uc744 \ud074\ub9ad\ud558\uba74 \ub124\ub35c\ub780\ub4dc\uc5b4\ub85c \ub41c \uc6d0\ubb38\uc744 \uc77d\uc744 \uc218 \uc788\uace0, <code class=\"language-plaintext highlighter-rouge\">translation<\/code>\ud0ed\uc744 \ud074\ub9ad\ud558\uba74 \uc601\uc5b4 \ubc88\uc5ed\ubcf8\uc744 \uc77d\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n<p>\ub124\ub35c\ub780\ub4dc\uc758 \ubc18 \uace0\ud750 \ubc15\ubb3c\uad00\uc5d0\uc11c \uc6b4\uc601\ud558\ub294 \uc6f9 \uc0ac\uc774\ud2b8\uc774\ubbc0\ub85c \uacf5\uc2e0\ub825\uc744 \uc778\uc815\ubc1b\uc744 \uc218 \uc788\ub294 \ubc88\uc5ed\uc774\ub77c \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<p>\uadf8\ub7f0\ub370 \uc601\uc5b4\ub85c \ubc88\uc5ed\ub41c \ubb38\uc7a5\uc740 [\ubc18 \uace0\ud750, \uc601\ud63c\uc758 \ud3b8\uc9c0] \ucc45\uc5d0 \uc218\ub85d\ub41c \uac83\uacfc \uaf64 \ub2e4\ub978 \ub290\ub08c\uc774\uc5c8\ub2e4.\n\uc544\ub798\uc758 \ud55c\uad6d\uc5b4 \ubc88\uc5ed\uc740 \ub0b4\uac00 \ud55c \uac83\uc774\ub2e4.<\/p>\n\n<blockquote>\n  <p>Now I\u2019m going through a similar period of struggle and despondency, of patience and impatience, of hope and desolation. But I must plod on and anyway, after a while I\u2019ll understand more about making watercolours. If it were that easy, one wouldn\u2019t take any pleasure in it.<\/p>\n<\/blockquote>\n\n<ul>\n  <li>\uc774\uc81c \ub098\ub294 \ud22c\uc7c1\uacfc \ub099\ub2f4, \uc778\ub0b4\uc640 \uc870\ubc14\uc2ec, \ud76c\ub9dd\uacfc \ud669\ud3d0\ud568\uc758 \uc2dc\uae30\ub97c \uacaa\uace0 \uc788\ub2e4. \uadf8\ub7ec\ub098 \uafb8\uc900\ud788 \ub0b4 \uae38\uc744 \uac00\ub2e4\ubcf4\uba74, \uc218\ucc44\ud654\ub97c \ub354 \uc798 \uc774\ud574\ud560 \uc218 \uc788\uaca0\uc9c0.\n\uadf8\uac8c \uc26c\uc6b4 \uc77c\uc774\uc5c8\ub2e4\uba74 \uadf8 \uc18d\uc5d0\uc11c \uc544\ubb34\ub7f0 \uc990\uac70\uc6c0\ub3c4 \uc5bb\uc744 \uc218 \uc5c6\uc5c8\uc744 \uac83\uc774\ub2e4.<\/li>\n<\/ul>\n\n<p>\uadf8\ub7f0\ub370 \ub2e4\uc74c \ubb38\uc7a5\ubd80\ud130 \ub0b4\uc6a9\uc774 \ub2e4\ub974\ub2e4.<\/p>\n\n<blockquote>\n  <p>And it\u2019s exactly the same with painting.<\/p>\n<\/blockquote>\n\n<ul>\n  <li>\uadf8\ub9ac\uace0 \uadf8\uac83\uc740 \uadf8\ub9bc\uc744 \uadf8\ub9ac\ub294 \uc77c\uacfc \uc644\uc804\ud788 \ub611\uac19\ub2e4.<\/li>\n<\/ul>\n\n<p>\ubc18 \uace0\ud750\ub294 \"\uadf8\ub7ec\ub2c8 \uacc4\uc18d\ud574\uc11c \uadf8\ub9bc\uc744 \uadf8\ub824\uc57c\uaca0\ub2e4\"\uace0 \ud558\uc9c0 \uc54a\uc558\ub2e4. \uace0\ud750\ub294 \uc790\uc2e0\uc758 \uc0b6\/\uacf5\ubd80 \uacfc\uc815\uc774 \uad34\ub86d\uace0 \uc5b4\ub835\uc9c0\ub9cc \ub098\ub984\uc758 \uc990\uac70\uc6c0\ub3c4 \uc788\ub2e4\uace0 \ub9d0\ud558\uace0 \uc788\uace0, \uadf8\uac83\uc774 \uadf8\ub9bc \uadf8\ub9ac\ub294 \uacfc\uc815\uacfc \uc0c1\uc9d5\uc801\uc73c\ub85c \uc77c\uce58\ud55c\ub2e4\uace0 \ub9d0\ud558\uace0 \uc788\ub2e4.<\/p>\n\n<p>\uadf8\ub807\ub2e4\uba74 \ub2e4\uc74c \ubb38\uc7a5\uc5d0\ub294 \uadf8\ub7f0 \ub9d0\uc774 \ub098\uc62c\uae4c? \uc548\ud0c0\uae5d\uac8c\ub3c4 \ube44\uc2b7\ud55c \ub9d0\uc740 \uc804\ud600 \ub098\uc624\uc9c0 \uc54a\uc558\ub2e4.\n\ub0a0\uc528\uae4c\uc9c0 \ub098\ube60\uc11c \uc62c \uaca8\uc6b8\uc5d4 \ubcc4\ub85c \uc990\uac81\uc9c0\ub294 \ubabb\ud588\uc9c0\ub9cc \uc0b6\uc744 \uc990\uae30\uace0 \uc788\uace0, \uc774\uc81c \uc790\uc2e0\uc758 \uc2a4\ud29c\ub514\uc624\uac00 \uc788\uc5b4 \ub108\ubb34 \uc88b\ub2e4\uace0\u2026 \uc5b8\uc81c \ud55c\ubc88 \ucc3e\uc544\uc640\uc11c \uc790\uc2e0\uacfc \ud568\uaed8 \ucee4\ud53c\ub098 \ub9c8\uc2dc\uc790\ub294 \ub4f1\uc758 \uc774\uc57c\uae30\ub97c \ud558\uace0 \uc788\ub2e4.<\/p>\n\n<blockquote>\n  <p>Moreover, the weather is bad, and this winter I haven\u2019t yet gone out for pleasure. Still, I enjoy life and, in particular, having my own studio is too wonderful for words. When will you come and have coffee or tea with me? Soon I hope. You can stay here too, if necessary, that would be nice and companionable. And I even have flowers, and a couple of boxes of bulbs. And I\u2019ve also acquired another ornament for my studio, I got a great bargain on some splendid woodcuts from The Graphic, some of them prints not of the clich\u00e9s but of the blocks themselves. Just what I\u2019ve been wanting for years.<\/p>\n<\/blockquote>\n\n<h1 id=\"\uc911\uac04-\uc810\uac80\">\uc911\uac04 \uc810\uac80<\/h1>\n\n<ul>\n  <li>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step7-johngrib\">GitHub<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/li>\n<\/ul>\n\n<h2 id=\"\uc911\uac04-\uc810\uac80\uc744-\uc704\ud55c-\uc2e4\uc2b5-\ud658\uacbd-\uc124\uc815\">\uc911\uac04 \uc810\uac80\uc744 \uc704\ud55c \uc2e4\uc2b5 \ud658\uacbd \uc124\uc815<\/h2>\n\n<ul>\n  <li>\uc790\uc2e0\uc758 \uacc4\uc815\uc73c\ub85c fork\ud55c jwp-basic \ud504\ub85c\uc81d\ud2b8\uc758 \ube0c\ub79c\uce58\ub97c step7-self-check \uc73c\ub85c \uc774\ub3d9\ud55c\ub2e4.<\/li>\n  <li>src\/test\/java \ub514\ub809\ud1a0\ub9ac\uc758 next.WebServerLauncher\uc758 main \uba54\uc11c\ub4dc\ub97c \uc2e4\ud589\ud55c \ud6c4 http:\/\/localhost:8080 \uc73c\ub85c \uc811\uadfc\ud55c\ub2e4.<\/li>\n<\/ul>\n\n<h2 id=\"\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/h2>\n\n<ol>\n  <li>\uc11c\ubc84 \ucd08\uae30\ud654 \uacfc\uc815\uc744 \uc124\uba85\ud560 \uac83.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">http:\/\/localhost:8080<\/code>\uc73c\ub85c \uc811\uadfc\ud574\uc11c \uc9c8\ubb38 \ubaa9\ub85d\uc774 \ubcf4\uc774\uae30\uae4c\uc9c0 \uc18c\uc2a4 \ucf54\ub4dc\uc758 \ud638\ucd9c \uc21c\uc11c \ubc0f \ud750\ub984\uc744 \uc124\uba85\ud558\ub77c.<\/li>\n  <li>\uc9c8\ubb38\ud558\uae30 \uae30\ub2a5\uc744 \uad6c\ud604\ud55c\ub2e4.<\/li>\n  <li>\ub85c\uadf8\uc778\ud55c \uc0ac\uc6a9\uc790\ub9cc \uc9c8\ubb38\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uc218\uc815\ud55c\ub2e4.<\/li>\n  <li>\uc0c1\uc138\ubcf4\uae30 \ud654\uba74\uc758 JSP\uc5d0 \ud558\ub4dc\ucf54\ub529 \ub41c \ubd80\ubd84\uc744 JSTL\uacfc EL\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc218\uc815\ud560 \uac83.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">CharacterEncodingFilter<\/code>\uc5d0 \uc5b4\ub178\ud14c\uc774\uc158 \uc124\uc815\uc744 \ud558\uc5ec \ud55c\uae00 \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uac83.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">ShowController<\/code>\uac00 \uba40\ud2f0 \uc2a4\ub808\ub4dc \uc0c1\ud669\uc5d0\uc11c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc218\uc815\ud558\uace0, \ubb38\uc81c \uc6d0\uc778\uc744 \uc124\uba85\ud55c\ub2e4.<\/li>\n  <li>\ub2f5\ubcc0\uc744 \ucd94\uac00\ud558\uba74 \ub313\uae00 \uc218\uac00 1\uc529 \uc99d\uac00\ud558\ub3c4\ub85d \uc218\uc815\ud55c\ub2e4.<\/li>\n  <li>QnA \uc804\uccb4 \ub9ac\uc2a4\ud2b8\ub97c JSON\uc73c\ub85c \ub3cc\ub824\uc8fc\ub294 api\ub97c \uad6c\ud604\ud560 \uac83.<\/li>\n  <li>\uc0c1\uc138\ubcf4\uae30 \ud654\uba74\uc758 \ub2f5\ubcc0 \uc0ad\uc81c \uae30\ub2a5\uc744 AJAX\ub85c \uad6c\ud604\ud560 \uac83.<\/li>\n  <li>\uc9c8\ubb38 \uc218\uc815 \uae30\ub2a5 \uad6c\ud604\ud560 \uac83.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">JdbcTemplate<\/code>\uc774 \ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub85c \uc791\ub3d9\ub418\ub3c4\ub85d \uc218\uc815\ud55c\ub2e4.<\/li>\n  <li>\uc9c8\ubb38 \uc0ad\uc81c \uae30\ub2a5\uc744 \uad6c\ud604\ud55c\ub2e4.<\/li>\n  <li>\uc9c8\ubb38 \uc0ad\uc81c \uae30\ub2a5 \uad6c\ud604\uc5d0 \ub300\ud55c \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud55c\ub2e4.<\/li>\n<\/ol>\n\n<h2 id=\"\uba54\ubaa8\">\uba54\ubaa8<\/h2>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>* 94f6966 - [\uc694\uad6c\uc0ac\ud56d 12] JdbcTemplate Single Instance \uc720\uc9c0\ud558\ub3c4\ub85d \uc218\uc815 (11 hours ago)&lt;John Grib&gt;\n* dd271b0 - [\uc694\uad6c\uc0ac\ud56d 11] \uc9c8\ubb38 \uc218\uc815 \uae30\ub2a5 \uad6c\ud604(API\ub9cc \uad6c\ud604) (11 hours ago)&lt;John Grib&gt;\n* 3d3a7f9 - [\uc694\uad6c\uc0ac\ud56d 10] AJAX \ub2f5\ubcc0 \uc0ad\uc81c \uae30\ub2a5 \uad6c\ud604 (12 hours ago)&lt;John Grib&gt;\n* 561ae58 - [\uc694\uad6c\uc0ac\ud56d 9] JSON API \ucd94\uac00 : \/api\/qna\/list (12 hours ago)&lt;John Grib&gt;\n* 5e047bb - [\uc694\uad6c\uc0ac\ud56d 8] \ub2f5\ubcc0\uc744 \ub2ec\uba74 \ub313\uae00 \uce74\uc6b4\ud2b8\uac00 \uc99d\uac00\ud558\ub3c4\ub85d \uc218\uc815 (13 hours ago)&lt;John Grib&gt;\n* c70df2a - [\uc694\uad6c\uc0ac\ud56d 7] ShowController\uc5d0\uc11c \ubc1c\uc0dd \uac00\ub2a5\ud55c \uba40\ud2f0 \uc2a4\ub808\ub4dc \ubb38\uc81c\ub97c \uc218\uc815\ud55c\ub2e4 (13 hours ago)&lt;John Grib&gt;\n* a483e1d - [\uc694\uad6c\uc0ac\ud56d 6] CharacterEncodingFilter\uc5d0 WebFilter annotation \uc801\uc6a9 (13 hours ago)&lt;John Grib&gt;\n* 2ff4dba - [\uc694\uad6c\uc0ac\ud56d 5] \uc0c1\uc138\ubcf4\uae30 \ud654\uba74 \ub2f5\ubcc0 \ubaa9\ub85d\uc744 DB \uc870\ud68c\ud558\uc5ec \ucd9c\ub825 (13 hours ago)&lt;John Grib&gt;\n* a08eff7 - [\uc694\uad6c\uc0ac\ud56d 4] \ub85c\uadf8\uc778\ud55c \uc0ac\uc6a9\uc790\ub9cc \uc9c8\ubb38\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uc218\uc815\ud55c\ub2e4. (13 hours ago)&lt;John Grib&gt;\n* f3b24ee - [\uc694\uad6c\uc0ac\ud56d 3] \uc9c8\ubb38\ud558\uae30 \uae30\ub2a5 \uad6c\ud604 (14 hours ago)&lt;John Grib&gt;\n* c0cdc93 - \uc694\uad6c\uc0ac\ud56d 1, 2 (14 hours ago)&lt;John Grib&gt;\n<\/code><\/pre><\/div><\/div>\n\n<ul>\n  <li>\ucee4\ubc0b \ub85c\uadf8\ub97c \ubcf4\ub2c8 \ub300\ucda9 3 \uc2dc\uac04 \uc815\ub3c4 \uc791\uc5c5\ud55c \ubaa8\uc591\uc774\ub2e4.<\/li>\n  <li>\ub098\ub294 <code class=\"language-plaintext highlighter-rouge\">JdbcTemplate<\/code> \uc2f1\uae00 \uc778\uc2a4\ud134\uc2a4 \ubb38\uc81c\uae4c\uc9c0\ub9cc \ud588\ub2e4.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 11\uc740 API\ub9cc \uad6c\ud604\ud588\ub2e4. \ud504\ub860\ud2b8\uc5d4\ub4dc \uc791\uc5c5\uc740 \ub108\ubb34 \ubc88\uac70\ub86d\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-Ki7rZnr3DpctbqOtJQn\">\uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d: \ube48\uc13c\ud2b8 \ubc18 \uace0\ud750<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9lXoEYVTp6w6Nkl3t\/lessons\/-Kh_ex_NZl4wAzOYTaJm\">\uc911\uac04 \uc0c1\ud0dc \uc810\uac80<\/a><\/li>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-basic\/tree\/step7-self-check\">Step7 self-check<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li>\ube48\uc13c\ud2b8 \ubc18 \uace0\ud750\n    <ul>\n      <li><a href=\"https:\/\/www.vangoghmuseum.nl\/\">Van Gogh Museum<\/a><\/li>\n      <li><a href=\"http:\/\/vangoghletters.org\/\">vangoghletters.org<\/a><\/li>\n      <li><a href=\"http:\/\/vangoghletters.org\/vg\/letters\/let199\/letter.html\">To Theo van Gogh. The Hague, Sunday, 8 or Monday, 9 January 1882.<\/a><\/li>\n      <li><a href=\"https:\/\/books.google.co.kr\/books?id=ydalAwAAQBAJ&amp;lpg=PT60&amp;ots=N3otvB4h94&amp;dq=%EB%B0%98%20%EA%B3%A0%ED%9D%90%20%EA%B7%B8%EB%9E%98%EB%8F%84%20%EA%B3%84%EC%86%8D%ED%95%B4%EC%84%9C%20%EB%85%B8%EB%A0%A5%ED%95%98%EB%A9%B4%20%EC%88%98%EC%B1%84%ED%99%94%EB%A5%BC%20%EB%8D%94%20%EC%9E%98%20%EC%9D%B4%ED%95%B4%ED%95%A0%20%EC%88%98%20%EC%9E%88%EA%B2%A0%EC%A7%80&amp;hl=ko&amp;pg=PT60#v=onepage&amp;q&amp;f=false\">\ubc18 \uace0\ud750, \uc601\ud63c\uc758 \ud3b8\uc9c0: \uc2b5\uc791\uc5d0\uc758 \ubab0\ub450<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n","pubDate":"Wed, 26 Apr 2017 21:49:43 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/26\/jwp-07\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/26\/jwp-07\/","category":"study jwp"},{"title":"Next JWP Study 06","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5ec\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\" id=\"markdown-toc-\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/a>    <ul>\n      <li><a href=\"#\ub098\ub294-\ud589\ubcf5\ud55c\uac00\" id=\"markdown-toc-\ub098\ub294-\ud589\ubcf5\ud55c\uac00\">\ub098\ub294 \ud589\ubcf5\ud55c\uac00?<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#jdbc-\ub77c\uc774\ube0c\ub7ec\ub9ac-\uad6c\ud604\" id=\"markdown-toc-jdbc-\ub77c\uc774\ube0c\ub7ec\ub9ac-\uad6c\ud604\">JDBC \ub77c\uc774\ube0c\ub7ec\ub9ac \uad6c\ud604<\/a>    <ul>\n      <li><a href=\"#\uba54\ubaa8\" id=\"markdown-toc-\uba54\ubaa8\">\uba54\ubaa8<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc5ec\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc5ec\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-20 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.<\/li>\n  <li>\uc624\ub298\uc740 MVC \ud328\ud134\uc744 \uacf5\ubd80\ud558\uace0, JDBC \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1--\uc0b6\uacfc-\ud504\ub85c\uadf8\ub798\ubc0d\">\ub2e8\uc0c1 : \uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d<\/h1>\n\n<ul>\n  <li>\ucc45 \uc18c\uac1c : <a href=\"http:\/\/www.kyobobook.co.kr\/product\/detailViewKor.laf?barcode=9788995540213\">\uc774\ub108 \uac8c\uc784<\/a>\n    <ul>\n      <li>\ud589\ubcf5\ud558\uac8c \uc77c\ud558\uba70 \ud68c\uc0ac \ub2e4\ub2c8\ub294 \uc0ac\ub78c\uc5d0\uac8c\ub294 \ud544\uc694 \uc5c6\ub294 \ucc45\uc774\ub77c \ud55c\ub2e4.<\/li>\n      <li>\ub0b4\uac8c\ub294 \ud544\uc694 \uc5c6\ub294 \ucc45\uc778\ub4ef.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h2 id=\"\ub098\ub294-\ud589\ubcf5\ud55c\uac00\">\ub098\ub294 \ud589\ubcf5\ud55c\uac00?<\/h2>\n\n<p>\ub098\ub294 \ud589\ubcf5\ud55c \ud65c\ub3d9\uc5d0 \ub300\ud574 \ub450 \uac00\uc9c0 \uc870\uac74\uc774 \uc788\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<ol>\n  <li>\ubd88\ud589\u2212\u2212 : \ubd88\ud589\uc744 \uc81c\uac70\ud560 \uc218 \uc788\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n  <li>\ud589\ubcf5++ : \ud589\ubcf5\uc744 \uc99d\uac00\uc2dc\ucf1c\uc57c \ud55c\ub2e4.<\/li>\n<\/ol>\n\n<p>\ub098\ub294 \ud589\ubcf5\ud55c\uac00? \ub098\ub294 \ud589\ubcf5\ud558\ub2e4. \ub2e8\uc5b8\ud560 \uc218 \uc788\ub2e4. \uc801\uc5b4\ub3c4 \uae00\uc744 \uc4f0\uace0 \uc788\ub294 \uc9c0\uae08\uc740 \uadf8\ub807\uac8c \uc0dd\uac01\ud55c\ub2e4.\n\uadf8\ub9ac\uace0 \uc774 \ud589\ubcf5\uc5d0 \ud504\ub85c\uadf8\ub798\ubc0d\uc774 \uc801\uc9c0 \uc54a\uac8c \uc88b\uc740 \uc601\ud5a5\uc744 \uc8fc\uace0 \uc788\ub2e4\uace0\ub3c4 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n\n<ul>\n  <li>\ud504\ub85c\uadf8\ub798\ubc0d\uc740 \ub0b4 \uc0b6\uc5d0 \ubc1c\uc0dd\ud588\ub358 \uc801\uc9c0 \uc54a\uc740 \ubd88\ud589\ub4e4\uc744 \uac04\uc811\uc801\uc73c\ub85c \uc81c\uac70\ud574 \uc8fc\uc5c8\ub2e4.\n    <ul>\n      <li>\uc774\uc81c\ub294 \uc6d4\uae09\uc774 \uaf2c\ubc15\uaf2c\ubc15 \ub098\uc628\ub2e4.<\/li>\n      <li>\uc774\uc804\uc758 \ub2e4\ub978 \uc9c1\uc5c5\ub4e4\uc744 \uac00\uc84c\uc744 \ub54c\ub294 \uc0b6\uc774 \ub108\ubb34 \ud798\ub4e4\uc5c8\ub2e4.<\/li>\n      <li>\uc549\uc544\uc11c \ud558\ub294 \uc77c\uc774 \ud558\uace0 \uc2f6\uc5c8\ub2e4. -&gt; \uc549\uc544\uc11c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ud558\uba74 \ud589\ubcf5\ud55c\uac00?\n    <ul>\n      <li>\uad34\ub85c\uc6b8 \ub54c\ub3c4 \uc885\uc885 \uc788\uc9c0\ub9cc, \uc804\uccb4\uc801\uc73c\ub85c \uc990\uac81\uace0 \ud765\ubbf8\uc9c4\uc9c4\ud55c \ub098\ub0a0\uc774\ub77c \uc0dd\uac01\ud55c\ub2e4.<\/li>\n      <li>\ud68c\uc0ac \uc77c \uc678\uc5d0\ub3c4 \uac1c\uc778 \ud504\ub85c\uc81d\ud2b8\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uac83\ub4e4\uc744 \ub9cc\ub4e4\uc5b4\ub0b4\ub294 \uae30\uc068\uc774 \uc788\ub2e4.<\/li>\n      <li>\ub2e4\ub978 \ub370\uc2a4\ud06c \uc7a1\uc5d0 \ube44\ud574 \uc5c4\uccad\ub098\uac8c \uc7ac\ubbf8\uc788\ub294 \ud3b8\uc774\uc5b4\uc11c, \ud68c\uc0ac\uc5d0\uc11c \uc77c\ub9cc \ud558\uace0 \uc788\uc5b4\ub3c4 \uc2dc\uac04 \uac00\ub294 \uc904 \ubaa8\ub97c \uc815\ub3c4\ub85c \ud479 \ube60\uc838 \uc788\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/li>\n      <li>\ud504\ub85c\uadf8\ub798\ubc0d \uacf5\ubd80\ub294 \ub9ce\uc774 \uc7ac\ubbf8\uc788\ub294 \ud3b8\uc774\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"jdbc-\ub77c\uc774\ube0c\ub7ec\ub9ac-\uad6c\ud604\">JDBC \ub77c\uc774\ube0c\ub7ec\ub9ac \uad6c\ud604<\/h1>\n\n<ul>\n  <li>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step2-johngrib\">GitHub<\/a>\uc5d0 \uc62c\ub824 \ub450\uc5c8\ub2e4.\n    <ul>\n      <li><a href=\"https:\/\/github.com\/slipp\/jwp-basic\/pull\/5\">Pull Request<\/a>\ub3c4 \ub0a0\ub824 \ub450\uc5c8\ub2e4.<\/li>\n      <li>\uc791\uc5c5\ud55c \uacb0\uacfc \ub9c8\uc9c0\ub9c9\uc5d0 \ub098\uc628 <code class=\"language-plaintext highlighter-rouge\">UserDao.java<\/code>\uc758 \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserDao<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">insert<\/span><span class=\"o\">(<\/span><span class=\"nc\">User<\/span> <span class=\"n\">user<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">SQLException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">sql<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"INSERT INTO USERS VALUES (${userId}, ${password}, ${name}, ${email})\"<\/span><span class=\"o\">;<\/span>\n        <span class=\"k\">new<\/span> <span class=\"nf\">JdbcTemplate<\/span><span class=\"o\">().<\/span><span class=\"na\">update<\/span><span class=\"o\">(<\/span><span class=\"n\">sql<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">update<\/span><span class=\"o\">(<\/span><span class=\"nc\">User<\/span> <span class=\"n\">user<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">SQLException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">sql<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"UPDATE USERS SET password = ${password}, name = ${name}, email = ${email} WHERE userId = ${userId}\"<\/span><span class=\"o\">;<\/span>\n        <span class=\"k\">new<\/span> <span class=\"nf\">JdbcTemplate<\/span><span class=\"o\">().<\/span><span class=\"na\">update<\/span><span class=\"o\">(<\/span><span class=\"n\">sql<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">User<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">findAll<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">SQLException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">String<\/span> <span class=\"n\">sql<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"SELECT userid, password, name, email FROM USERS\"<\/span><span class=\"o\">;<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">JdbcTemplate<\/span><span class=\"o\">().<\/span><span class=\"na\">select<\/span><span class=\"o\">(<\/span><span class=\"n\">sql<\/span><span class=\"o\">,<\/span> <span class=\"nc\">User<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nc\">User<\/span> <span class=\"nf\">findByUserId<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">userId<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">SQLException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">String<\/span> <span class=\"n\">sql<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"SELECT userId, password, name, email FROM USERS WHERE userid=${userId}\"<\/span><span class=\"o\">;<\/span>\n        <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">User<\/span><span class=\"o\">(<\/span><span class=\"n\">userId<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">);<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">JdbcTemplate<\/span><span class=\"o\">().<\/span><span class=\"na\">selectOne<\/span><span class=\"o\">(<\/span><span class=\"n\">sql<\/span><span class=\"o\">,<\/span> <span class=\"nc\">User<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<ul>\n  <li>\ud559\uc2b5\uc6a9\uc73c\ub85c \uc9e0 \uac70\ub77c \ud5c8\uc220\ud55c \uc810\uc774 \ub9ce\ub2e4. \uac00\ub839, \uc774\uac78 \uc9c4\uc9dc\ub85c \uc4f0\ub824\uba74 Injection \ubc29\uc5b4 \ucf54\ub4dc\ub97c \ucd94\uac00\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">Reflection<\/code>\uc744 \uc0ac\uc6a9\ud574\uc11c \uac1d\uccb4\uc758 <code class=\"language-plaintext highlighter-rouge\">get<\/code>\uba54\uc11c\ub4dc \ud638\ucd9c\ub85c \uc790\ub3d9\uc73c\ub85c \uac12\uc774 \ub4e4\uc5b4\uac00\ub3c4\ub85d \ud574 \uc8fc\uc5c8\ub2e4.\n    <ul>\n      <li><code class=\"language-plaintext highlighter-rouge\">Statement<\/code>\uac00 <code class=\"language-plaintext highlighter-rouge\">?<\/code>\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc774 \ub9c8\uc74c\uc5d0 \uc548 \ub4e4\uc5c8\uae30 \ub54c\ubb38. \ud639\uc2dc\ub77c\ub3c4 \uc21c\uc11c\uac00 \uc5b4\uae0b\ub098\uba74 \uc640\uc7a5\ucc3d \uae68\uc9c8 \uc218 \uc788\ub2e4\ub294 \uac8c \ub9c8\uc74c\uc5d0 \ub4e4\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc7ac\ubbf8\uc788\uac8c \uc791\uc5c5\ud55c \uac74 \uc88b\uc558\ub294\ub370, \ud558\ub2e4\ubcf4\ub2c8 \uacfc\uc789\uc774 \uc880 \uc788\uc5c8\ub2e4. \uc624\ubc84 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \uc2a4\uba5c.<\/li>\n  <li>\uc544\uc9c1\uae4c\uc9c0 \ub0b4\uac8c Java\ub294 \ub108\ubb34 \ub2f5\ub2f5\ud558\uace0 \uc218\ub2e4\uc2a4\ub7ec\uc6b4 \uc5b8\uc5b4\ub2e4. \ubb54\uac00 \ud558\ub824\uba74 \ub108\ubb34 \ub9ce\uc774 \uc368\uc57c \ud55c\ub2e4. \ubb3c\ub860 Java6 \uc4f0\ub358 \ub54c\uc640 Java8\uc744 \uc4f0\ub294 \uc9c0\uae08\uc744 \uac10\ud788 \ube44\uad50\ud560 \uc218\ub294 \uc5c6\uc9c0\ub9cc.<\/li>\n<\/ul>\n\n<h2 id=\"\uba54\ubaa8\">\uba54\ubaa8<\/h2>\n<ul>\n  <li>\uc9c0\ub09c \uc218\uc5c5\ub4e4 \uc911 \uac00\uc7a5 \uc7ac\ubbf8\uc788\ub294 \uc2dc\uac04\uc774\uc5c8\ub2e4.<\/li>\n  <li>JDBC \ub77c\uc774\ube0c\ub7ec\ub9ac \uad6c\ud604\uc740 \uc774\uc804\uc5d0 \ud574 \ubcf4\ub824\ub294 \ub9c8\uc74c\uc744 \uba39\uc5c8\ub2e4\uac00 \uc2e4\ucc9c\ud558\uc9c0 \ubabb\ud588\ub358 \uc8fc\uc81c\uc600\ub294\ub370, \uc774\ubc88 \uae30\ud68c\uc5d0 \uc2dc\ub3c4\ud558\uac8c \ub418\uc5c8\ub2e4.\n    <ul>\n      <li>\uc57d 2 \uc2dc\uac04 \ub3d9\uc548 \ub290\ub080 \uc810\uc774 \ub9ce\uc558\ub2e4.<\/li>\n      <li>\ubbf8\uc9c4\ud55c \uc2e4\ucc9c\ub825\uc5d0 \ub300\ud574 \ubc18\uc131\ud588\ub2e4.<\/li>\n      <li>\ubcf4\ud1b5 \uac15\uc88c\ub77c \ud558\uba74 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\ubc95\uc744 \uc18c\uac1c\ud558\uac70\ub098 \ud558\ub294\ub370, \ubc15\uc7ac\uc131 \uad50\uc218\ub2d8\uc758 \uc218\uc5c5\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud568\uaed8 \ub9cc\ub4e4\uc5b4\uac00\ub294 \ubc29\uc2dd\uc774\ub77c \uc880 \ub354 \uae4a\uc774 \uc788\uac8c \uacf5\ubd80\ud560 \uc218 \uc788\ub294 \uac83 \uac19\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud15c\ud50c\ub9bf \uba54\uc18c\ub4dc \ud328\ud134\uc740 \uc608\uc804\uc5d0 \uac8c\uc784 \ub9cc\ub4e4 \ub54c \uaf64 \ub9ce\uc774 \uc37c\uc5c8\ub294\ub370, \uc6f9 \uac1c\ubc1c \uc911\uc5d0\ub294 \ub0a8\uc774 \ub9cc\ub4e0 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub9cc \uac00\uc838\ub2e4 \uc4f0\ub2e4 \ubcf4\ub2c8 \uc4f8 \uc77c\uc774 \uac70\uc758 \uc5c6\uc5c8\ub358 \uac83 \uac19\ub2e4.<\/li>\n  <li>DB\ub294 H2\ub97c \uc0ac\uc6a9\ud588\ub2e4.<\/li>\n<\/ul>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>$ # H2 DB \ubc31\uadf8\ub77c\uc6b4\ub4dc \uad6c\ub3d9. \uad6c\ub3d9\uc774 \ub05d\ub098\uba74 \uc6f9 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uad00\ub9ac \ucf58\uc194\uc774 \uc5f4\ub9b0\ub2e4.\n$ java -jar h2-1.3.167.jar &amp;\n<\/code><\/pre><\/div><\/div>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-Ki7rZnr3DpctbqOtJQn\">\uc0b6\uacfc \ud504\ub85c\uadf8\ub798\ubc0d - \ucc45 \uc18c\uac1c: \uc774\ub108 \uac8c\uc784<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9l9BNDgvymNo6IxDs\/lessons\/-KgrP2wkZA3uUvzWxiAs\">JDBC \ub77c\uc774\ube0c\ub7ec\ub9ac \uc2e4\uc2b5<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Template_method_pattern\">Template method pattern<\/a><\/li>\n<\/ul>\n","pubDate":"Sat, 22 Apr 2017 23:36:10 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/22\/jwp-06\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/22\/jwp-06\/","category":"study jwp"},{"title":"Next JWP Study 05","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub2e4\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\uc900\ube44\ubb3c\" id=\"markdown-toc-\uc900\ube44\ubb3c\">\uc900\ube44\ubb3c<\/a>    <ul>\n      <li><a href=\"#\uacfc\uc81c-\uad6c\ud604\" id=\"markdown-toc-\uacfc\uc81c-\uad6c\ud604\">\uacfc\uc81c \uad6c\ud604<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#\ub2e8\uc0c1--\uac1d\uccb4\uc9c0\ud5a5-\uc5f0\uc2b5-\ubc29\ubc95\uc740\" id=\"markdown-toc-\ub2e8\uc0c1--\uac1d\uccb4\uc9c0\ud5a5-\uc5f0\uc2b5-\ubc29\ubc95\uc740\">\ub2e8\uc0c1 : \uac1d\uccb4\uc9c0\ud5a5 \uc5f0\uc2b5 \ubc29\ubc95\uc740?<\/a>    <ul>\n      <li><a href=\"#\uba54\ubaa8--\ub0b4-\uc0dd\uac01\" id=\"markdown-toc-\uba54\ubaa8--\ub0b4-\uc0dd\uac01\">\uba54\ubaa8 : \ub0b4 \uc0dd\uac01<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\ub2e4\uc12f-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub2e4\uc12f \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-17 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.\n    <ul>\n      <li>\uc624\ub298\uc740 \ub9ac\ud329\ud1a0\ub9c1 \ud6c4 Servlet, MVC \uad6c\ud604 \uc21c\uc73c\ub85c \ud559\uc2b5.<\/li>\n      <li>\uc55e\uc73c\ub85c 2\uc8fc\uac04\uc740 MVC + JDBC + AJAX \uad6c\ud604 \uc2e4\uc2b5\uc774 \uc608\uc815\ub418\uc5b4 \uc788\ub2e4.<\/li>\n      <li>\uc774\ud6c4\ub85c\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uad6c\ud604\ud558\uba74\uc11c Spring \uacf5\ubd80\ud560 \uc900\ube44\ub97c \ud55c\ub2e4.<\/li>\n      <li>JSP \uc218\uc5c5\uc740 \ud328\uc2a4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\uc900\ube44\ubb3c\">\uc900\ube44\ubb3c<\/h1>\n\n<ul>\n  <li>\uc624\ub298 \uc218\uc5c5\uc740 \uc900\ube44\ubb3c\uc774 \uc788\uc5c8\ub2e4.\n    <ul>\n      <li>https:\/\/github.com\/slipp\/jwp-basic \uc800\uc7a5\uc18c\ub97c \uc790\uc2e0\uc758 \uacc4\uc815\uc73c\ub85c fork\ud55c\ub2e4.<\/li>\n      <li>fork\ud55c jwp-basic \uc800\uc7a5\uc18c\ub97c \ub85c\uceec PC\ub85c clone\ud55c \ud6c4 master \ube0c\ub79c\uce58\ub97c step0-getting-started \ube0c\ub79c\uce58\ub85c \ubcc0\uacbd\ud55c\ub2e4.<\/li>\n      <li>IntelliJ IDEA\uc5d0\uc11c maven \ud504\ub85c\uc81d\ud2b8\ub85c import\ud55c\ub2e4.<\/li>\n      <li>src\/test\/java \ub514\ub809\ud1a0\ub9ac\uc758 next.WebServerLauncher\ub97c \uc2e4\ud589\ud55c \ud6c4 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c http:\/\/localhost:8080 \uc811\uc18d\ud574 \uc9c8\ubb38\/\ub2f5\ubcc0 \uac8c\uc2dc\ud310 \uc11c\ube44\uc2a4 \ud654\uba74\uc774 \ub098\ud0c0\ub098\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h2 id=\"\uacfc\uc81c-\uad6c\ud604\">\uacfc\uc81c \uad6c\ud604<\/h2>\n<ul>\n  <li><a href=\"https:\/\/github.com\/johngrib\/jwp-basic\/tree\/step1-johngrib\">Github Repository<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/li>\n  <li>HTTP \uc6f9 \uc11c\ubc84 \uad6c\ud604\ud560 \ub54c \ub9cc\ub4e4\uc5c8\ub358 <code class=\"language-plaintext highlighter-rouge\">Annotation<\/code>\uacfc <code class=\"language-plaintext highlighter-rouge\">ReflectionUtil<\/code>, <code class=\"language-plaintext highlighter-rouge\">ControllerRegister<\/code>\ub4f1\uc744 \uadf8\ub300\ub85c \ubcf5\ubd99\u2026 \uc544\ub2c8 \uc7ac\ud65c\uc6a9\ud574\uc11c \uc644\ub8cc\ud588\ub2e4.<\/li>\n  <li>\ucc28\uc774\uac00 \uc788\ub2e4\uba74: \uc9c0\ub09c\ubc88\uc5d0\ub294 Controller <code class=\"language-plaintext highlighter-rouge\">interface<\/code>\ub97c \uc791\uc131\ud55c \ubc18\uba74, \uc774\ubc88\uc5d0\ub294 Controller\ub97c <code class=\"language-plaintext highlighter-rouge\">abstract class<\/code>\ub85c \uc791\uc131\ud588\ub2e4. forward method\ub97c \ubd84\ub9ac\ud558\uae30 \uc704\ud55c \ubaa9\uc801.<\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1--\uac1d\uccb4\uc9c0\ud5a5-\uc5f0\uc2b5-\ubc29\ubc95\uc740\">\ub2e8\uc0c1 : \uac1d\uccb4\uc9c0\ud5a5 \uc5f0\uc2b5 \ubc29\ubc95\uc740?<\/h1>\n<ul>\n  <li>\uac8c\uc784\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uae30<\/li>\n  <li>\ub9c8\uc74c \ub9de\ub294 \uc0ac\ub78c\ub4e4\uacfc \uc11c\ub85c Code \ub9ac\ubdf0<\/li>\n  <li>\uae30\ud0c0 \ub4f1\ub4f1\u2026<\/li>\n<\/ul>\n\n<h2 id=\"\uba54\ubaa8--\ub0b4-\uc0dd\uac01\">\uba54\ubaa8 : \ub0b4 \uc0dd\uac01<\/h2>\n\n<p>\uc774\uac74 \ub531\ud788 \uac1d\uccb4\uc9c0\ud5a5\uc744 \uc704\ud55c \ubc29\ubc95\uc740 \uc544\ub2c8\uc9c0\ub9cc \uac1d\uccb4\uc9c0\ud5a5 \uc5f0\uc2b5\uc5d0\ub3c4 \ub3c4\uc6c0\uc774 \ub418\ub294 \ubc29\ubc95\uc774\ub77c \uc0dd\uac01\ud574\uc11c \uba54\ubaa8\ud55c\ub2e4.<\/p>\n\n<p>\uacc4\uc18d\ud574\uc11c \uc0c8\ub85c\uc6b4 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud574\ubcf4\ub418, \uac19\uc740 \ud504\ub85c\uadf8\ub7a8\uc744 \uc7ac\uac1c\ubc1c\ud558\ub294 \uacbd\ud5d8\uc774 \uaf64 \ud6a8\uacfc\uc801\uc774\uc5c8\ub358 \uac83 \uac19\ub2e4.\n\uc5f4 \ubc88 \uc2a4\ubb34 \ubc88 \ubc18\ubcf5 \uac1c\ubc1c\ud560 \ud544\uc694\uae4c\uc9c0\ub294 \uc5c6\uace0, \ub611\uac19\uc740 \ud504\ub85c\uadf8\ub7a8\uc744 \ud55c \ubc88 \ub354 \uac1c\ubc1c\ud574\ubcf4\ub294 \uc815\ub3c4\uac00 \uc88b\uc558\ub2e4. \uc138 \ubc88\uc9f8\ubd80\ud130\ub294 \uad34\ub85c\uc6b4 \ub290\ub08c\uc774 \ub4e0\ub2e4.<\/p>\n\n<p>\uc694\uc57d\ud558\uc790\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb34\uac04\uc9c0\uc625 \uc0ac\uc774\ud074\uc774\ub77c \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n<ol>\n  <li>\uac1c\ubc1c<\/li>\n  <li>\uc7ac\uac1c\ubc1c<\/li>\n  <li>\ud68c\uace0, \ub9ac\ubdf0 : \uad50\ud6c8\uc744 \uc5bb\ub294\ub2e4.<\/li>\n  <li>\ub2e4\ub978 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c \uacc4\ud68d\uc744 \uc138\uc6b4\ub2e4.<\/li>\n  <li>1\ub85c \ub3cc\uc544\uac04\ub2e4.<\/li>\n<\/ol>\n\n<ul>\n  <li>\ub2e4\uc74c \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c \uc0ac\uc6a9\ud560\ub9cc\ud55c \ucf54\ub4dc\uac00 \uc788\ub2e4\uba74 \ub77c\uc774\ube0c\ub7ec\ub9ac\ud654\ud574\uc11c \uc870\uae08\uc774\ub098\ub9c8 \ubb34\uac04\uc9c0\uc625\uc744 \ud3b8\ud558\uac8c \ud55c\ub2e4.<\/li>\n  <li>\ub9dd\ud588\ub2e4 \uc2f6\uc73c\uba74 \ub2e4 \uc9c0\uc6cc\ub3c4 \ub41c\ub2e4. \uc5c5\ubb34\ub77c\uba74 \ud070\uc77c\ub098\uaca0\uc9c0\ub9cc \uc774\uac74 \uc5f0\uc2b5\uc774\ub2c8\uae4c. \uac8c\ub2e4\uac00 git\ub3c4 \uc788\uace0, \uacbd\ud5d8\ub3c4 \ub0a8\uc544 \uc788\ub2e4. Fred Brooks\ub3c4 \uc5b4\ucc28\ud53c \uc5b8\uc820\uac04 \ubc84\ub9ac\uac8c \ub420 \ud14c\ub2c8\uae4c \ud55c \ubc88\uc740 \ubc84\ub9b4 \ub9c8\uc74c\uc744 \uac16\uace0 \ucf54\ub529\ud558\ub77c\uace0 \ud588\uc5c8\uc9c0 \uc544\ub9c8.<\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uac15\uc758 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-KgqHPfpV1xrdi1_T9ne\/lessons\/-KhesAfA5zcP22Y7bZOZ\">\uac1d\uccb4\uc9c0\ud5a5 \uc5f0\uc2b5 \ubc29\ubc95\uc740?<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9l1h-u-6DhIWzcnjo\/lessons\/-KgDx_w1lA2CAXtHFpxE\">HTTP \uc6f9 \uc11c\ubc84\uc640 Servlet<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Mon, 17 Apr 2017 15:20:00 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/17\/jwp-05\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/17\/jwp-05\/","category":"study jwp"},{"title":"Next JWP Study 04","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub124 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\ub124-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub124 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-13 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.\n    <ul>\n      <li>\uc774\ub860 \uc218\uc5c5, \ub9ac\ud329\ud1a0\ub9c1 \ub77c\uc774\ube0c \ucf54\ub529, AWS \ubc30\ud3ec \uc2e4\uc2b5 \uc21c\uc73c\ub85c \uc9c4\ud589\ub418\uc5c8\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc774\ub860 \uc218\uc5c5\n    <ul>\n      <li>HTTP Status Code\uc5d0 \ub300\ud558\uc5ec<\/li>\n      <li>302\uc640 200\uc758 \ucc28\uc774\uc810\uc740?<\/li>\n      <li>Cookie\uc640 Session\uc758 \ucc28\uc774\uc810\uc740?<\/li>\n      <li>Session \ubc29\uc2dd\uc758 \ubb38\uc81c\uc810\uc740?<\/li>\n      <li>Session \ubc29\uc2dd \ubb38\uc81c\uc810\uc758 \ud574\uacb0\ucc45\uc740?\n        <ul>\n          <li>Sticky Session, Session Storage, Session Clustering, HA Proxy \uc0ac\uc6a9 \ub4f1\ub4f1.<\/li>\n        <\/ul>\n      <\/li>\n    <\/ul>\n  <\/li>\n  <li>\n    <p>\ub9ac\ud329\ud1a0\ub9c1 \uc2dc\ubc94<\/p>\n  <\/li>\n  <li>AWS \ubc30\ud3ec \uc2e4\uc2b5\n    <ul>\n      <li>AWS EC2 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\ud574\uc11c \uc811\uc18d\uae4c\uc9c0.\n        <ul>\n          <li>\ub098\ub294 \uc218\uc5c5 \uc804\uc5d0 Tmux\uc5d0\uc11c \uc811\uc18d\ud574\ub193\uace0 \uc218\uc5c5 \uc911 Tmux\ub85c \uc7ac\uc811\uc18d\ud574\uc11c \ud3b8\ud558\uac8c \uc791\uc5c5\ud588\ub2e4.<\/li>\n        <\/ul>\n      <\/li>\n      <li>Java, Maven, Git \uc124\uce58.<\/li>\n      <li>AWS Security Group \uc124\uc815 \ud6c4, \uc6f9 \ud398\uc774\uc9c0 \uc5f4\ub9ac\ub098 \ud655\uc778.<\/li>\n      <li>\uc790\ub3d9 \ubc30\ud3ec \uc258 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li>\uac15\uc758 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9koDWsc8jpIgwbgR5\/lessons\/-KfFQQPBEByK_-XOYbD5\">AWS \uc6d0\uaca9 \uc11c\ubc84\uc5d0 \ubc30\ud3ec<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n","pubDate":"Thu, 13 Apr 2017 12:15:32 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/13\/jwp-04\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/13\/jwp-04\/","category":"study jwp aws"},{"title":"Next JWP Study 03","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc138 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\ub2e8\uc0c1--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\" id=\"markdown-toc-\ub2e8\uc0c1--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\">\ub2e8\uc0c1 : \uc88b\uc740 \uac1c\ubc1c\uc790\ub780?<\/a>    <ul>\n      <li><a href=\"#\ub098\uc758-\uc0dd\uac01--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\" id=\"markdown-toc-\ub098\uc758-\uc0dd\uac01--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\">\ub098\uc758 \uc0dd\uac01 : \uc88b\uc740 \uac1c\ubc1c\uc790\ub780?<\/a>        <ul>\n          <li><a href=\"#\uc88b\uc740-\uac1c\ubc1c\uc790\uc758-\uc774\ub370\uc544\" id=\"markdown-toc-\uc88b\uc740-\uac1c\ubc1c\uc790\uc758-\uc774\ub370\uc544\">\uc88b\uc740 \uac1c\ubc1c\uc790\uc758 \uc774\ub370\uc544<\/a><\/li>\n          <li><a href=\"#\ub108\ubb34-\ub6f0\uc5b4\ub09c-\uac1c\ubc1c\uc790\uc758-\ub51c\ub808\ub9c8\" id=\"markdown-toc-\ub108\ubb34-\ub6f0\uc5b4\ub09c-\uac1c\ubc1c\uc790\uc758-\ub51c\ub808\ub9c8\">\ub108\ubb34 \ub6f0\uc5b4\ub09c \uac1c\ubc1c\uc790\uc758 \ub51c\ub808\ub9c8<\/a><\/li>\n          <li><a href=\"#\uadf8-\uc678-\uc0dd\uac01\ub4e4-\uba54\ubaa8\" id=\"markdown-toc-\uadf8-\uc678-\uc0dd\uac01\ub4e4-\uba54\ubaa8\">\uadf8 \uc678 \uc0dd\uac01\ub4e4 \uba54\ubaa8<\/a><\/li>\n        <\/ul>\n      <\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uc138-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uc138 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-10 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.\n    <ul>\n      <li>\uc774\ubc88\uc5d0\ub294 \uc774\ub860 \uc218\uc5c5, \uc2e4\uc2b5 \uc21c\uc73c\ub85c \uc9c4\ud589\ub418\uc5c8\ub2e4.<\/li>\n      <li>\uc2e4\uc2b5 \uc2dc\uac04\uc5d0 \uc694\uad6c\uc0ac\ud56d\uc744 \ub9c8\uc800 \uad6c\ud604\ud558\uace0, \ub9ac\ud329\ud1a0\ub9c1\ub3c4 \ud558\ub294 \uac83\uc774 \ubaa9\ud45c.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud3b8\uc548\ud558\uace0 \uc790\uc720\ub85c\uc6b4 \ubd84\uc704\uae30\uc758 \uc218\uc5c5\uc744 \uc9c0\ud5a5.\n    <ul>\n      <li>\uc608 : \ub2e4 \ud55c \uc0ac\ub78c\uc740 \uc9d1\uc5d0 \uac00\ub3c4 \ub41c\ub2e4.<\/li>\n      <li>\ub098\ub294 \uc219\uc81c\ub85c \uc694\uad6c\uc0ac\ud56d\uc744 \ub2e4 \uad6c\ud604\ud574 \uc654\uace0 \ub9ac\ud329\ud1a0\ub9c1\ub3c4 \ud588\uc73c\ubbc0\ub85c, \uad50\uc218\ub2d8\uaed8 \uad6c\ud604\ud55c \ub0b4\uc6a9\uc744 \ubcf4\uc5ec\ub4dc\ub9ac\uace0 \uc2e4\uc2b5 \uc0dd\ub7b5\ud558\uace0 \uc9d1\uc5d0 \uac14\uc74c.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc774\ub860 \uac15\uc758\n    <ul>\n      <li>HTTP \uae30\ubcf8, OSI 7 \uacc4\uce35, \ucf58\ud150\uce20 \ud6a8\uc728\uc131 \ucd5c\uc801\ud654, \ubcf4\uc548 \ub4f1.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\ub2e8\uc0c1--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\">\ub2e8\uc0c1 : \uc88b\uc740 \uac1c\ubc1c\uc790\ub780?<\/h1>\n\n<ul>\n  <li>\ubc15\uc7ac\uc131 \uad50\uc218\ub2d8\uacfc \ub2e4\ub978 \uc0ac\ub78c\ub4e4\uc758 \uc758\uacac\uc744 \ub4e4\uc5b4\ubcfc \uc218 \uc788\ub294 \uc2dc\uac04\uc774\uc5c8\ub2e4.<\/li>\n  <li>\uc720\uba85\ud55c \ucc45\ub4e4\uc744 \ubd10\ub3c4 \uadf8\ub807\uace0, \uc88b\uc740 \uac1c\ubc1c\uc790\uc758 \uc720\ud615\uc740 \uac70\uc758 \ub69c\ub837\ud55c \uac83 \uac19\ub2e4.<\/li>\n<\/ul>\n\n<h2 id=\"\ub098\uc758-\uc0dd\uac01--\uc88b\uc740-\uac1c\ubc1c\uc790\ub780\">\ub098\uc758 \uc0dd\uac01 : \uc88b\uc740 \uac1c\ubc1c\uc790\ub780?<\/h2>\n\n<h3 id=\"\uc88b\uc740-\uac1c\ubc1c\uc790\uc758-\uc774\ub370\uc544\">\uc88b\uc740 \uac1c\ubc1c\uc790\uc758 \uc774\ub370\uc544<\/h3>\n<blockquote>\n  <p>\"\ud589\ubcf5\ud55c \uac00\uc815\uc740 \ubaa8\ub450 \ubaa8\uc2b5\uc774 \ube44\uc2b7\ud558\uace0, \ubd88\ud589\ud55c \uac00\uc815\uc740 \ubaa8\ub450 \uc81c\uac01\uac01\uc758 \ubd88\ud589\uc744 \uc548\uace0 \uc788\ub2e4.\"<\/p>\n<\/blockquote>\n\n<p><strong>\uc548\ub098 \uce74\ub808\ub2c8\ub098<\/strong>\uc758 \uccab \ubb38\uc7a5\uc774\ub2e4. (\ub808\ud504 \ud1a8\uc2a4\ud1a0\uc774, \uc548\uc9c4\ud76c \uc5ed. [\uc548\ub098 \uce74\ub808\ub2c8\ub098] 1\uad8c, \ubbfc\uc74c\uc0ac 2009)<\/p>\n\n<p>\uc88b\uc740 \uac1c\ubc1c\uc790\uc5d0 \ub300\ud55c \ub17c\uc758\ub3c4 \uc774\uc640 \ube44\uc2b7\ud558\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<br \/>\n\uc88b\uc740 \uac1c\ubc1c\uc790\ub4e4\uc740 \ub300\uac1c \ube44\uc2b7\ud55c \ud2b9\uc131\uc744 \uac16\uace0 \uc788\uc744 \uac83\uc73c\ub85c <strong>\uc608\uacac<\/strong>\ub41c\ub2e4.<br \/>\n\uadf8\ub7ec\ub098 \ubcf4\ud1b5 <strong>\uc88b\uc740 \uac1c\ubc1c\uc790\uc640 \uac70\ub9ac\uac00 \uc880 \uc788\ub294 \uac1c\ubc1c\uc790<\/strong>\ub4e4\uc740 \ub2e4 \ub098\ub984\uc758 \ub3c5\ud2b9\ud55c \uc774\uc720\ub4e4\uc774 \uc788\ub2e4.<br \/>\n\ucf54\ub529\uc744 \ubabb\ud55c\ub2e4\uac70\ub098, \uc131\uaca9\uc774 \ub098\uc058\ub2e4\uac70\ub098, \uacf5\ubd80\ub97c \uc548\ud55c\ub2e4\uac70\ub098, \u2026<\/p>\n\n<h3 id=\"\ub108\ubb34-\ub6f0\uc5b4\ub09c-\uac1c\ubc1c\uc790\uc758-\ub51c\ub808\ub9c8\">\ub108\ubb34 \ub6f0\uc5b4\ub09c \uac1c\ubc1c\uc790\uc758 \ub51c\ub808\ub9c8<\/h3>\n\n<p>\ud68c\uc0ac\uc5d0\uc11c \uc77c\ud558\ub294 \uac1c\ubc1c\uc790\uc758 \uc870\uac74\uc5d0 \ud55c\uc815\ud558\uc5ec \uace0\uc6a9\uc8fc \uad00\uc810\uc5d0\uc11c \uc0dd\uac01\ud574\ubcf4\uba74 \uc5b4\ub5a8\uae4c.\n\uc88b\uc740 \uac1c\ubc1c\uc790\ub294 1\uc778\ubd84 \uc774\uc0c1\uc758 \uc77c\uc744 \ud558\ub294 \uac1c\ubc1c\uc790\uc77c\uae4c?\n\ud68c\uc0ac\uc758 \ubaa8\ub4e0 \uac83\uc744 \uc54c\uace0 \ubaa8\ub4e0 \uc5c5\ubb34\uc5d0 \uc9c0\uc6d0\uc774 \uac00\ub2a5\ud55c <code class=\"language-plaintext highlighter-rouge\">static public<\/code> \uac1c\ubc1c\uc790\ub294 \uc5b4\ub5a8\uae4c?<\/p>\n\n<p>\uc81c\ub7f4\ub4dc \uc640\uc778\ubc84\uadf8\ub294 <strong>\ud504\ub85c\uadf8\ub798\ubc0d \uc2ec\ub9ac\ud559<\/strong>\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc37c\ub2e4.<br \/>\n(\uc81c\ub7f4\ub4dc \uc640\uc778\ubc84\uadf8, \uc870\uc0c1\ubbfc \uc5ed. [\ud504\ub85c\uadf8\ub798\ubc0d \uc2ec\ub9ac\ud559] 6\uc7a5. \ud504\ub85c\uadf8\ub798\ubc0d \ud504\ub85c\uc81d\ud2b8, \uc778\uc0ac\uc774\ud2b8 2008)<\/p>\n\n<blockquote>\n  <p>\uc808\ub300 \uc5c6\uc5b4\uc11c\ub294 \uc548 \ub420 \ud504\ub85c\uadf8\ub798\uba38\uac00 \uc788\ub2e4\uba74, \ud55c\uc2dc\ub77c\ub3c4 \ube68\ub9ac \uadf8\ub97c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc81c\uac70\ud558\ub77c.<\/p>\n<\/blockquote>\n\n<p>\uc758\ubbf8\ub294 \ub69c\ub837\ud558\ub2e4. \ub300\uccb4 \ubd88\uac00\ub2a5\ud55c \ud504\ub85c\uadf8\ub798\uba38\ub294 \uace0\uc6a9\uc8fc\uc640 \uad00\ub9ac\uc790\uc5d0\uac8c \ub9ac\uc2a4\ud06c\uac00 \ub41c\ub2e4.\n\ub6f0\uc5b4\ub09c \uac1c\ubc1c\uc790\uc774\uba74\uc11c \ub3d9\uc2dc\uc5d0 \ud575\uc2ec \uc778\ub825\uc778 \uc0ac\ub78c\uc740 \ud68c\uc0ac\uc758 \ub300\ub4e4\ubcf4\uac00 \ub418\uae30 \ub9c8\ub828\uc774\uc9c0\ub9cc\n\uc5b4\ub290\ub0a0 \uac11\uc790\uae30 \uadf8\uac00 \uc608\uc0c1\uce58 \ubabb\ud55c \uc911\ubcd1\uc5d0 \uac78\ub824 \uc4f0\ub7ec\uc9c4\ub2e4\uba74? \uad50\ud1b5\uc0ac\uace0\ub97c \ub2f9\ud55c\ub2e4\uba74?\n\ud68c\uc0ac\ub294 \uc704\uae30\uc5d0 \ucc98\ud558\uac8c \ub41c\ub2e4.<\/p>\n\n<p>\ub530\ub77c\uc11c \uace0\uc6a9\uc8fc \uc785\uc7a5\ub9cc \uace0\ub824\ud588\uc744 \ub54c<\/p>\n<ul>\n  <li>\ub9ac\uc2a4\ud06c \ucd5c\uc18c\ud654\ub97c \uc704\ud574 \uac1c\ubc1c\uc790\ub294 \ubaa8\ub4c8\ud654 \ub418\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n  <li>\uac1c\ubcc4\uc801\uc73c\ub85c \ub6f0\uc5b4\ub098\uc9c0\ub9cc \ub300\uccb4 \uac00\ub2a5\ud55c \uc778\ub825\ub4e4\ub85c \ud300\uc744 \uad6c\uc131\ud574\uc57c \ud55c\ub2e4.<\/li>\n<\/ul>\n\n<p>\uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uacfc \ud1b5\ud558\ub294 \uc810\uc774 \uc788\ub2e4\ub294 \uc0dd\uac01\uc774 \ub4e0\ub2e4.\n\uc18c\ud504\ud2b8\uc6e8\uc5b4\ub9cc \ub9ac\ud329\ud1a0\ub9c1\uc774 \ud544\uc694\ud55c \uac83\uc774 \uc544\ub2c8\ub2e4.\n\ud68c\uc0ac\uc758 \ub9ce\uc740 \uc778\ub825\ub4e4\uc774 \ud55c \uc0ac\ub78c\uc5d0\uac8c \uc758\uc874\ud558\uace0 \uc788\ub2e4\uba74,\n\uc88b\uc9c0 \ubabb\ud55c \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc5d0\uc11c \ub098\ub294 \ub098\uc05c \ub0c4\uc0c8\uac00 \uc870\uc9c1\uc5d0\uc11c\ub3c4 \ubc1c\uc0dd\ud55c\ub2e4\uace0 \ub9d0\ud560 \uc218 \uc788\uc744 \uac83 \uac19\ub2e4.<\/p>\n\n<h3 id=\"\uadf8-\uc678-\uc0dd\uac01\ub4e4-\uba54\ubaa8\">\uadf8 \uc678 \uc0dd\uac01\ub4e4 \uba54\ubaa8<\/h3>\n<ul>\n  <li>\uac1c\ubc1c\uc790\ub294 \ud6cc\ub96d\ud55c \ud504\ub85c\uadf8\ub798\ubc0d \uc6d0\uce59\uc744 \uc0b6\uc5d0\uc11c\ub3c4 \uc2e4\ucc9c\ud558\ub294 \uc0ac\ub78c\uc774 \ub418\uc5b4\uc57c \ud560\uae4c?\n    <ul>\n      <li>YES. \ub098\ub294 \uc77c\uad00\uc131\uc744 \uc911\uc694\ud558\uac8c \uc0dd\uac01\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud55c \uc0ac\ub78c\uc758 \uac1c\ubc1c\uc790\uc758 POWER\uac00 \uacfc\uac70\ubcf4\ub2e4 \uc904\uc5b4\ub4e0 \uac83\uc740 \uc0ac\uc2e4\uc774\ub2e4.\n    <ul>\n      <li>\uadf8\ub807\ub2e4\uba74 \ud604\uc7ac \uc2dc\uc810\uc5d0\uc11c\ub294 \uc88b\uc740 \uac1c\ubc1c\uc790\ubcf4\ub2e4 \uc88b\uc740 \ud300\uc5d0 \ub300\ud55c \ub17c\uc758\uac00 \uc880 \ub354 \uc758\ubbf8\uc788\uc9c0 \uc54a\uc744\uae4c?<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/www.ntu.edu.sg\/home\/ehchua\/programming\/webprogramming\/HTTP_Basics.html\">In Introduction to HTTP Basics<\/a><\/li>\n  <li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Transport_Layer_Security\">Transport Layer Security<\/a><\/li>\n  <li><a href=\"https:\/\/en.wikipedia.org\/wiki\/OSI_model\">OSI Model<\/a><\/li>\n  <li>\uac15\uc758 \uc790\ub8cc\n    <ul>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9koDWsc8jpIgwbgR5\/lessons\/-KfB3f2A8L1WBm542DxB\">\uc6f9 \uc11c\ubc84 \uad6c\ud604\uc5d0 \ub530\ub978 \ud53c\ub4dc\ubc31<\/a><\/li>\n      <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9koDWsc8jpIgwbgR5\/lessons\/-Kh6E1kW6zxxKIX0MPzo\">HTTP \ud559\uc2b5\uc5d0 \ub530\ub978 \ud65c\uc6a9<\/a><\/li>\n      <li><a href=\"https:\/\/developers.google.com\/web\/fundamentals\/performance\/optimizing-content-efficiency\/\">\ucf58\ud150\uce20 \ud6a8\uc728\uc131 \ucd5c\uc801\ud654<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc0ac\uc774\ud2b8 \uc131\ub2a5 \ubd84\uc11d \ub3c4\uad6c\n    <ul>\n      <li><a href=\"https:\/\/developers.google.com\/speed\/pagespeed\/?hl=ko-KR&amp;utm_source=PSI&amp;utm_medium=incoming-link&amp;utm_campaign=PSI\">PageSpeed Tools : \uc0ac\uc774\ud2b8 \uc131\ub2a5 \ubd84\uc11d<\/a><\/li>\n      <li><a href=\"http:\/\/yslow.org\/\">YSlow<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n","pubDate":"Mon, 10 Apr 2017 22:47:18 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/10\/jwp-03\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/10\/jwp-03\/","category":"study jwp \uac1c\ubc1c\uc790 \ud504\ub85c\uadf8\ub798\ubc0d-\uc2ec\ub9ac\ud559 Gerald-Weinberg"},{"title":"Next JWP Study 02","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\ub450-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\ub450-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub450 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a>    <ul>\n      <li><a href=\"#\uac1d\uccb4\uc9c0\ud5a5-\uc0dd\ud65c-\uccb4\uc870\" id=\"markdown-toc-\uac1d\uccb4\uc9c0\ud5a5-\uc0dd\ud65c-\uccb4\uc870\">\uac1d\uccb4\uc9c0\ud5a5 \uc0dd\ud65c \uccb4\uc870<\/a><\/li>\n      <li><a href=\"#for-\ub8e8\ud504\ub97c-\ucabc\uac1c\uc57c-\ud560\uae4c\" id=\"markdown-toc-for-\ub8e8\ud504\ub97c-\ucabc\uac1c\uc57c-\ud560\uae4c\"><code class=\"language-plaintext highlighter-rouge\">for<\/code> \ub8e8\ud504\ub97c \ucabc\uac1c\uc57c \ud560\uae4c<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#\ucf54\ub529-\uc2e4\uc2b5-\ubc0f-\uacfc\uc81c--http-\uc6f9-\uc11c\ubc84-\uad6c\ud604\" id=\"markdown-toc-\ucf54\ub529-\uc2e4\uc2b5-\ubc0f-\uacfc\uc81c--http-\uc6f9-\uc11c\ubc84-\uad6c\ud604\">\ucf54\ub529 \uc2e4\uc2b5 \ubc0f \uacfc\uc81c : HTTP \uc6f9 \uc11c\ubc84 \uad6c\ud604<\/a>    <ul>\n      <li><a href=\"#\uc694\uad6c\uc0ac\ud56d\" id=\"markdown-toc-\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#\uacfc\uc81c-\ud6c4\uae30\" id=\"markdown-toc-\uacfc\uc81c-\ud6c4\uae30\">\uacfc\uc81c \ud6c4\uae30<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\ub450-\ubc88\uc9f8-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\ub450 \ubc88\uc9f8 \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-06 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791.\n    <ul>\n      <li>\uc624\ub298\ubd80\ud130 \ub2e4\uc74c \uc8fc \ubaa9\uc694\uc77c <strong>2017-04-13<\/strong> \uae4c\uc9c0\ub294 HTTP Web Server \uac1c\ubc1c \uc2e4\uc2b5\uc744 \ud55c\ub2e4.<\/li>\n      <li>\uadf8 \ub2e4\uc74c\uc8fc \uc6d4\uc694\uc77c\uc778 <strong>2017-04-17<\/strong> \uc5d0\ub294 \uad50\uc218\ub2d8\uc758 \ub77c\uc774\ube0c \ucf54\ub529\uc774 \uc608\uc815\ub418\uc5b4 \uc788\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ub2e8\uc0c1 : \ud504\ub85c\uadf8\ub798\ubc0d \uc5f0\uc2b5 \uc5b4\ub5bb\uac8c \ud560 \uac83\uc778\uac00?\n    <ul>\n      <li>\uc791\uc740 \ud504\ub85c\uadf8\ub7a8\uc744 \ubc18\ubcf5\uc801\uc73c\ub85c, \ub2e4\uc591\ud558\uac8c \uad6c\ud604\ud574 \ubcf4\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\n    <p>\uad50\uc218\ub2d8 \ub77c\uc774\ube0c \ucf54\ub529 \ubc0f TDD \uc2dc\ubc94.<\/p>\n  <\/li>\n  <li>TDD \uc2e4\ucc9c\ubc95\uc5d0 \ub300\ud55c \ub17c\uc758 \ubc0f Q &amp; A.\n    <ul>\n      <li>TDD \uacbd\ud5d8\uc5d0 \ub300\ud55c \ubc1c\ud45c.<\/li>\n      <li>TDD\ub97c \ud558\ub824\uba74 \uac1d\uccb4\uc9c0\ud5a5 \ucca0\ud559\uc744 \uc798 \ud65c\uc6a9\ud574\uc57c \ud55c\ub2e4.<\/li>\n      <li>\ub85c\uc9c1 \uc704\uc8fc\ub85c \uac00\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n      <li>\uacfc\ub3c4\ud55c \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub294 \uc9c0\uc591\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ub9c8\ud2f4 \ud30c\uc6b8\ub7ec\uc640 \uc9c1\uc6d0\ub4e4\uc774 \uc9c0\uc740 \ucc45 <a href=\"http:\/\/wikibook.co.kr\/thoughtworks-anthology\/\">The ThoughtWorks Anthology<\/a>\uc5d0 \ub098\uc628 <strong>\uac1d\uccb4\uc9c0\ud5a5 \uc0dd\ud65c \uccb4\uc870<\/strong> \uc18c\uac1c.\n    <ul>\n      <li>\uc88b\uc544\ud558\ub294 \ucc45\uc774\uc5c8\uae30\uc5d0 \ubc18\uac00\uc6e0\ub2e4.<\/li>\n      <li>\uc9d1\uc5d0 \ub3cc\uc544\uc640 <strong>\uac1d\uccb4\uc9c0\ud5a5 \uc0dd\ud65c \uccb4\uc870<\/strong> \ucc55\ud130\ub97c \ub2e4\uc2dc \uc77d\uc5b4 \ubcf4\uc558\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h2 id=\"\uac1d\uccb4\uc9c0\ud5a5-\uc0dd\ud65c-\uccb4\uc870\">\uac1d\uccb4\uc9c0\ud5a5 \uc0dd\ud65c \uccb4\uc870<\/h2>\n<ol>\n  <li>\ud55c \uba54\uc11c\ub4dc\uc5d0 \uc624\uc9c1 \ud55c \ub2e8\uacc4\uc758 \ub4e4\uc5ec\uc4f0\uae30\ub9cc \ud55c\ub2e4.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">else<\/code> \uc608\uc57d\uc5b4<sub>keyword<\/sub>\ub97c \uc4f0\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n  <li>\ubaa8\ub4e0 \uc6d0\uc2dc\uac12\uacfc \ubb38\uc790\uc5f4\uc744 \ud3ec\uc7a5<sub>wrap<\/sub>\ud55c\ub2e4.<\/li>\n  <li>\ud55c \uc904\uc5d0 \uc810\uc744 \ud558\ub098\ub9cc \ucc0d\ub294\ub2e4.<\/li>\n  <li>\uc904\uc5ec\uc4f0\uc9c0 \uc54a\ub294\ub2e4(\ucd95\uc57d\uae08\uc9c0).<\/li>\n  <li>\ubaa8\ub4e0 \uc5d4\ud2f0\ud2f0<sub>entity<\/sub>\ub97c \uc791\uac8c \uc720\uc9c0\ud55c\ub2e4.<\/li>\n  <li>2\uac1c \uc774\uc0c1\uc758 \uc778\uc2a4\ud134\uc2a4 \ubcc0\uc218\ub97c \uac00\uc9c4 \ud074\ub798\uc2a4\ub97c \uc4f0\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n  <li>\uc81c\uc77c \ud074\ub798\uc2a4<sub>first-class<\/sub> \ucf5c\ub809\uc158\uc744 \uc4f4\ub2e4.<\/li>\n  <li>\uac8c\ud130<sub>getter<\/sub>\/\uc138\ud130<sub>setter<\/sub>\/\ud504\ub85c\ud37c\ud2f0<sub>property<\/sub>\ub97c \uc4f0\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n<\/ol>\n\n<p>\uaf64 \uae50\uae50\ud55c \uccb4\uc870 \uac19\uc9c0\ub9cc, \uc870\uae08\ub9cc \uc0dd\uac01\ud574\ubcf4\uba74 \uac1c\ubc1c\uc790\uc758 \uba4d\uccad\ud55c \uc2e4\uc218\ub97c \ucd5c\ub300\ud55c \uc608\ubc29\ud558\ub294 \uc88b\uc740 \uc2b5\uad00\ub4e4\uc784\uc744 \uc54c \uc218 \uc788\ub2e4.<\/p>\n\n<p>\ubb38\ub4dd \uc2a4\ud2f0\ube0c \ub9e5\ucf54\ub12c\uc774 <em>Code Complete<\/em> \uc5d0\uc11c \ud55c \ub9d0\uc774 \uc0dd\uac01\ub0ac\ub2e4.<\/p>\n\n<blockquote>\n  <p>\ucd5c\uc885 \ubaa9\ud45c\ub294 \ud55c\ubc88\uc5d0 \uc0dd\uac01\ud574\uc57c \ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc591\uc744 \ucd5c\uc18c\ud654\ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n<\/blockquote>\n\n<h2 id=\"for-\ub8e8\ud504\ub97c-\ucabc\uac1c\uc57c-\ud560\uae4c\"><code class=\"language-plaintext highlighter-rouge\">for<\/code> \ub8e8\ud504\ub97c \ucabc\uac1c\uc57c \ud560\uae4c<\/h2>\n<p>Q &amp; A \uc2dc\uac04\uc5d0 <code class=\"language-plaintext highlighter-rouge\">for<\/code> loop\uc5d0 \ub300\ud55c \uc774\uc57c\uae30\uac00 \ub098\uc654\ub2e4.<\/p>\n\n<p>\ub450 \uac00\uc9c0 \uc77c\uc744 \ud558\ub294 \ud558\ub098\uc758 <code class=\"language-plaintext highlighter-rouge\">for<\/code> loop\ub97c \uad50\uc218\ub2d8\uc774 \ud55c \uac00\uc9c0 \uc77c\uc744 \ud558\ub294 \ub450 \uac1c\uc758 <code class=\"language-plaintext highlighter-rouge\">for<\/code>\ub8e8\ud504\ub85c \ucabc\uac30\ub294\ub370 \ub204\uad70\uac00 \uc774\ub7f0 \ub9d0\uc744 \ud588\ub2e4.<\/p>\n\n<blockquote>\n  <p>\"for \ub8e8\ud504\uac00 \ub450 \ubc88 \ub3cc\uc544\uc11c \uae30\ubd84\uc774 \ub098\uc069\ub2c8\ub2e4.\"<\/p>\n<\/blockquote>\n\n<p>\uc9c0\uadf9\ud788 \uc815\uc0c1\uc801\uc774\uace0 \uc0c1\uc2dd\uc801\uc778 \ubc18\uc751\uc774\ub2e4. \uadf8\ub7ec\ub098 \uc774\uac83\uc740 \ubc18\ub860 \ubd88\uac00\ub2a5\ud55c \ub3c4\uadf8\ub9c8\uc77c\uae4c? \ubcf5\uc7a1\ud55c <code class=\"language-plaintext highlighter-rouge\">for<\/code> \ub8e8\ud504\ub294 \ubc84\uadf8\uc758 \uc628\uc0c1\uc774\ub2e4. \uc0c8\ubcbd \ub450 \uc2dc\uc5d0 \ub05d\uc774 \uc548 \ubcf4\uc774\ub294 <code class=\"language-plaintext highlighter-rouge\">for<\/code> \ub8e8\ud504\ub97c \ud22c\ub35c\ub300\uba70 \ubd84\ud574\ud574 \ubcf8 \uacbd\ud5d8\uc744 \ub204\uad6c\ub098 \uac16\uace0 \uc788\uc9c0 \uc54a\ub098? \ub098\ub294 \uc57d 3\ub144 \uc804, Scala\ub97c \uc0ac\uc6a9\ud558\uae30 \uc2dc\uc791\ud588\uc744 \ubb34\ub835\ubd80\ud130 \ub8e8\ud504\ub97c \ucabc\uac1c\ub294 \uc2b5\uad00\uc744 \uac16\uac8c \ub418\uc5c8\ub294\ub370 \ub098 \ubfd0\ub9cc \uc544\ub2c8\ub77c \uc8fc\uc704\uc758 \ub3d9\ub8cc\ub4e4\uc774 (\uc544\uc8fc \ubbf8\ubb18\ud55c \ucc28\uc774\uc774\uae34 \ud558\uc9c0\ub9cc) \uc870\uae08\uc529 \ub354 \ud589\ubcf5\ud574\uc9c4 \ub180\ub77c\uc6b4 \uacbd\ud5d8\uc774 \uc788\ub2e4.<\/p>\n\n<p>\ucc3e\uc544\ubcf4\ub2c8 \uc774 \uac74\uc5d0 \ub300\ud574\uc11c\ub3c4 \uc2a4\ud2f0\ube0c \ub9e5\ucf54\ub12c\uc774 <em>Code Complete<\/em> \uc5d0 \ub0a8\uaca8 \ub193\uc740 \ub9d0\uc774 \uc788\ub2e4.<\/p>\n\n<blockquote>\n  <p>\ub8e8\ud504\uac00 \ud55c\ubc88\uc5d0 \ub450 \uac00\uc9c0 \uc77c\uc744 \ud558\uae30 \uc704\ud574\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub2e4\ub294 \uc0ac\uc2e4\ub9cc\uc73c\ub85c\ub294 \ub450 \uac00\uc9c0 \uae30\ub2a5\uc744 \ub3d9\uc2dc\uc5d0 \uc218\ud589\ud574\ub3c4 \ub41c\ub2e4\ub294 \uac83\uc744 \uc815\ub2f9\ud654\ud558\uc9c0 \ubabb\ud55c\ub2e4. \ud558\ub098\uc758 \ub8e8\ud504\ub294 \ubc18\ub4dc\uc2dc \ud55c \uac00\uc9c0 \uc77c\ub9cc \uc218\ud589\ud558\uace0 \uadf8 \uc791\uc5c5\uc744 \uc81c\ub300\ub85c \uc218\ud589\ud574\uc57c \ud55c\ub2e4\ub294 \uba74\uc5d0\uc11c, \ub8e8\ud2f4\uacfc \uac19\uc544\uc57c \ud55c\ub2e4. \ub9cc\uc57d \ub8e8\ud504 \ud558\ub098\ub9cc\uc73c\ub85c\ub3c4 \ucda9\ubd84\ud55c \ucf54\ub4dc\uc5d0 \ub450 \uac1c\uc758 \ub8e8\ud504\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ube44\ud6a8\uc728\uc801\uc778 \uac83\ucc98\ub7fc \ubcf4\uc778\ub2e4\uba74, \ub450 \uac1c\uc758 \ub8e8\ud504\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud55c \ud6c4, \ud6a8\uc728\uc131\uc744 \uc704\ud574\uc11c \uacb0\ud569\ub420 \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \uc8fc\uc11d\uc73c\ub85c \uc791\uc131\ud558\uc5ec, \ub450 \uac1c\uc758 \ub8e8\ud504\ub97c \ud558\ub098\ub85c \ud1b5\ud569\ud558\uae30 \uc804\uc5d0 \ubca4\uce58\ub9c8\ud06c \uacb0\uacfc\uac00 \ud574\ub2f9 \ucf54\ub4dc \uc139\uc158\uc5d0\uc11c \uc131\ub2a5 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud55c\ub2e4\ub294 \uac83\uc744 \ubcf4\uace0\ud560 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9ac\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n<\/blockquote>\n\n<p>\uc0dd\uac01\ud574 \ubcfc \uac83\ub4e4.<\/p>\n<ul>\n  <li><code class=\"language-plaintext highlighter-rouge\">O(2n)<\/code>\uc640 <code class=\"language-plaintext highlighter-rouge\">O(n)<\/code>\uc758 \uad00\uacc4.<\/li>\n  <li>\ub7f0\ud0c0\uc784 \uc2dc\uac04\ubcf4\ub2e4 \uac1c\ubc1c\/\uc720\uc9c0\ubcf4\uc218 \uc2dc\uac04\uc744 \uc911\uc694\ud558\uc2dc\ub294 \uad00\uc810.\n    <ul>\n      <li>\uc0b0\uc5c5\uc758 \uc720\ud615\uc5d0 \ub530\ub77c \uc120\ud638\ud558\ub294 \uc5b8\uc5b4\uac00 \ub2e4\ub978 \uc774\uc720\ud558\uace0\ub3c4 \uad00\ub828\uc774 \uc788\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"\ucf54\ub529-\uc2e4\uc2b5-\ubc0f-\uacfc\uc81c--http-\uc6f9-\uc11c\ubc84-\uad6c\ud604\">\ucf54\ub529 \uc2e4\uc2b5 \ubc0f \uacfc\uc81c : HTTP \uc6f9 \uc11c\ubc84 \uad6c\ud604<\/h1>\n\n<ul>\n  <li>\uc774 \uc791\uc5c5\uc740 \ubc15\uc7ac\uc131 \uad50\uc218\ub2d8\uc758 <a href=\"https:\/\/github.com\/slipp\/web-application-server\">web-application-server<\/a>\ub97c fork\ud558\uc5ec \uc218\ud589\ud558\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n  <li>\ub2e4\uc74c \uc2dc\uac04\uae4c\uc9c0 \ucd5c\uc18c\ud55c \uc694\uad6c\uc0ac\ud56d 5 \uae4c\uc9c0\ub294 \uc791\uc5c5\ud574 \uc62c \uac83.<\/li>\n<\/ul>\n\n<h2 id=\"\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/h2>\n\n<ul>\n  <li>\uc694\uad6c\uc0ac\ud56d 1 : \uc6f9\uc11c\ubc84 \uad6c\uc0c9 \uac16\ucd94\uae30\n    <ul>\n      <li>http:\/\/localhost:8080\/index.html \ub85c \uc811\uc18d\ud588\uc744 \ub54c webapp \ub514\ub809\ud1a0\ub9ac\uc758 index.html \ud30c\uc77c\uc744 \uc77d\uc5b4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc751\ub2f5\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 2 : \ud68c\uc6d0\uac00\uc785 \uad6c\ud604.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 3 : \ud68c\uc6d0\uac00\uc785 \uad6c\ud604\uae30\ub2a5\uc744 post \ubc29\uc2dd\uc73c\ub85c \ubcc0\uacbd\ud558\uae30.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 4 : \ud68c\uc6d0 \uac00\uc785\uc744 \uc644\ub8cc\ud558\uba74 \/index.html\ub85c \uc774\ub3d9\ud558\uac8c \ud55c\ub2e4.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 5 : \ub85c\uadf8\uc778 \uad6c\ud604, \ub85c\uadf8\uc778 \uc131\uacf5\/\uc2e4\ud328\uc2dc \ud398\uc774\uc9c0 \ub9ac\ub2e4\uc774\ub809\ud2b8.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 6 : \ub85c\uadf8\uc778 \uc0c1\ud0dc\uc5d0\uc11c \/user\/list\ub85c \uc811\uadfc\ud558\uba74 \uc0ac\uc6a9\uc790 \ubaa9\ub85d \ucd9c\ub825.<\/li>\n  <li>\uc694\uad6c\uc0ac\ud56d 7 : css \uc9c0\uc6d0.<\/li>\n<\/ul>\n\n<h1 id=\"\uacfc\uc81c-\ud6c4\uae30\">\uacfc\uc81c \ud6c4\uae30<\/h1>\n\n<ul>\n  <li>\ub9cc\ub4e4\ub2e4\ubcf4\ub2c8 <code class=\"language-plaintext highlighter-rouge\">Annotation<\/code> \uae30\ubc18\uc758 Controller Interface \ud615\ud0dc\uc758 \uc6f9 \uc11c\ubc84\ub97c \uad6c\ud604\ud558\uac8c \ub418\uc5c8\ub2e4.<\/li>\n  <li>\ud3c9\uc18c <code class=\"language-plaintext highlighter-rouge\">Annotation<\/code>\uc744 \uc790\ubc14 \uc9c4\uc601\uc758 \uc77c\uc885\uc758 <strong>\ud751\ub9c8\uc220<\/strong> \uc774\ub77c\uace0 \uc0dd\uac01\ud574\uc11c \ubcc4\ub85c \uc88b\uc544\ud558\uc9c0 \uc54a\uc558\ub294\ub370, \uc9c1\uc811 \ubb54\uac00 \ub9cc\ub4dc\ub294 \ub370 \uc0ac\uc6a9\ud574\ubcf4\ub2c8 \uc5c4\uccad \ud3b8\ub9ac\ud558\ub2e4. <code class=\"language-plaintext highlighter-rouge\">Annotation<\/code>\uc5d0 \ub300\ud55c \ud638\uc758\uac00 \ubb34\ub7ed\ubb34\ub7ed.<\/li>\n  <li>\n    <p>\ub098\ub294 immutable \uac1c\ub150\uc744 \uc88b\uc544\ud574\uc11c \uac00\ub2a5\ud55c \ud55c \ubcc0\uc218\ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 <code class=\"language-plaintext highlighter-rouge\">final<\/code> \uc0c1\uc218\ub97c \uc0ac\uc6a9\ud558\uba70, \uc911\uc694 <code class=\"language-plaintext highlighter-rouge\">Map<\/code>\uacfc <code class=\"language-plaintext highlighter-rouge\">List<\/code>\ub294 <code class=\"language-plaintext highlighter-rouge\">unmodifiable<\/code>\uc744 \uc50c\uc6cc\uc92c\ub2e4. Java \ubb38\ubc95\uc0c1 \uaf2d \ud0a4\uc6cc\ub4dc\ub97c \ud558\ub098\uc529 \ub354 \ud0c0\uc774\ud551\ud574\uc57c \ud574\uc11c \ub108\ubb34 \uadc0\ucc2e\uc558\ub2e4. Java\uc758 \ubb38\ubc95\uc740 \ub0b4 \uc5b8\uc5b4 \uc2b5\uad00\uc0c1\uc73c\ub85c\ub294 \ubab9\uc2dc \uc218\ub2e4\uc2a4\ub7fd\ub2e4. Vim\uc774 \uc544\ub2c8\ub77c IntelliJ\uc758 \uc870\uc545\ud55c Vim \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \ucf54\ub529\uc744 \ud588\ub354\ub2c8 \uc190\uac00\ub77d\uc774 \uc5bc\uc5bc\ud558\ub2e4.<\/p>\n  <\/li>\n  <li>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/web-application-server\/tree\/02-http\">Github repository<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.\n    <ul>\n      <li><a href=\"https:\/\/github.com\/johngrib\/web-application-server\/blob\/02-http\/src\/main\/java\/webserver\/RequestHandler.java\">RequestHandler<\/a> : \uc774\uac70 \ub9ac\ud329\ud1a0\ub9c1\ud558\ub290\ub77c \uac78\ub9b0 \uc2dc\uac04\uc774 \uc804\uccb4 \uac1c\ubc1c \uc2dc\uac04\uc758 80% \ub294 \ub418\ub294 \uac83 \uac19\ub2e4.<\/li>\n      <li><a href=\"https:\/\/github.com\/johngrib\/web-application-server\/blob\/02-http\/src\/main\/java\/controller\/UserLogin.java\">UserLogin \ud074\ub798\uc2a4<\/a> : Spring \ucc98\ub7fc <code class=\"language-plaintext highlighter-rouge\">Controller<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ub9cc\ub4e4\uc5b4 \uc801\uc6a9\ud574 \ubcf4\uc558\ub2e4. \uc7ac\ubc0c\uc5c8\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/slipp\/web-application-server\">web-application-server<\/a><\/li>\n  <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\/-Kf9koDWsc8jpIgwbgR5\/lessons\">\uac15\uc758 \uc790\ub8cc<\/a><\/li>\n  <li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Redirections\">MDN - Http Redirections<\/a><\/li>\n  <li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Cookies\">MDN - Http Cookies<\/a><\/li>\n<\/ul>\n","pubDate":"Sat, 08 Apr 2017 21:29:47 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/08\/jwp-02\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/08\/jwp-02\/","category":"study jwp \uc18c\ud2b8\uc6cd\uc2a4-\uc564\uc194\ub7ec\uc9c0 martin-fowler oop"},{"title":"Next JWP Study 01","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uccab-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\" id=\"markdown-toc-\uccab-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uccab \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/a><\/li>\n  <li><a href=\"#\uccab-\ucf54\ub529-\uacfc\uc81c--\ubb38\uc790\uc5f4-\uacc4\uc0b0\uae30\" id=\"markdown-toc-\uccab-\ucf54\ub529-\uacfc\uc81c--\ubb38\uc790\uc5f4-\uacc4\uc0b0\uae30\">\uccab \ucf54\ub529 \uacfc\uc81c : \ubb38\uc790\uc5f4 \uacc4\uc0b0\uae30<\/a>    <ul>\n      <li><a href=\"#\uc694\uad6c\uc0ac\ud56d\" id=\"markdown-toc-\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/a><\/li>\n      <li><a href=\"#\ud504\ub85c\uadf8\ub798\ubc0d-\uc694\uad6c\uc0ac\ud56d\" id=\"markdown-toc-\ud504\ub85c\uadf8\ub798\ubc0d-\uc694\uad6c\uc0ac\ud56d\">\ud504\ub85c\uadf8\ub798\ubc0d \uc694\uad6c\uc0ac\ud56d<\/a><\/li>\n      <li><a href=\"#\ucd94\uac00-\uc694\uad6c\uc0ac\ud56d\" id=\"markdown-toc-\ucd94\uac00-\uc694\uad6c\uc0ac\ud56d\">\ucd94\uac00 \uc694\uad6c\uc0ac\ud56d<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#\uccab-\ucf54\ub529-\uacfc\uc81c-\ud6c4\uae30\" id=\"markdown-toc-\uccab-\ucf54\ub529-\uacfc\uc81c-\ud6c4\uae30\">\uccab \ucf54\ub529 \uacfc\uc81c \ud6c4\uae30<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"\uccab-\uc218\uc5c5-\uc774\ubaa8\uc800\ubaa8\">\uccab \uc218\uc5c5 \uc774\ubaa8\uc800\ubaa8<\/h1>\n\n<ul>\n  <li>\uccab \uc218\uc5c5\uc740 <code class=\"language-plaintext highlighter-rouge\">2017-04-03 19:00:00 +0900<\/code>\uc5d0 \uc2dc\uc791\ub410\ub2e4.<\/li>\n  <li>\ud68c\uc0ac\uc758 \ub3d9\ub8cc \uac1c\ubc1c\uc790\ub4e4\uc774 30\uba85 \uc815\ub3c4 \ubaa8\uc5ec \uc218\uc5c5\uc744 \ub4e3\ub294\ub2e4.\n    <ul>\n      <li>\uc218\uac15\uc0dd\ub4e4\uc758 \uacbd\ub825\/\uae30\uc220 \uc2a4\ud0dd\uc774 \ub2e4\uc591\ud558\uae30 \ub54c\ubb38\uc5d0 \uac74\uc758\uc0ac\ud56d\uc744 \uc81c\uc2dc\ud558\uba74 \ubc14\ub85c \ubc18\uc601\ub420 \uac83\uc774\ub77c \ud55c\ub2e4.<\/li>\n      <li>\uc218\uc5c5 \uc2dc\uac04\uc740 19\uc2dc~22\uc2dc. \uaf64 \ub2a6\uc740 \uc2dc\uac04\uc5d0 \uc218\uc5c5\uc774 \ub05d\ub09c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ub2e8\uc704 \ud14c\uc2a4\ud2b8\uc640 \ub9ac\ud329\ud1a0\ub9c1 \ub17c\uc758.\n    <ul>\n      <li>TDD \ubc29\uc2dd\uc740 \uac1c\uc778\uc801\uc73c\ub85c \uc88b\uc544\ud558\uace0 \uc990\uae30\ub294 \ud3b8\uc774\ub77c \ub17c\uc758\uac00 \ub098\uc640 \uc990\uac70\uc6e0\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc9d1\uc5d0 \uac00\ub294 \uae38\uc5d0 \ubc15\uc7ac\uc131 \uad50\uc218\ub2d8\uc744 \uc9c0\ud558\ucca0\uc5d0\uc11c \ubd4c \uac83 \uac19\uc740\ub370 \uae34\uac00\ubbfc\uac00 \ud558\ub2e4\uac00 \uc778\uc0ac\ub97c \ubabb\ud588\ub2e4!<\/li>\n<\/ul>\n\n<h1 id=\"\uccab-\ucf54\ub529-\uacfc\uc81c--\ubb38\uc790\uc5f4-\uacc4\uc0b0\uae30\">\uccab \ucf54\ub529 \uacfc\uc81c : \ubb38\uc790\uc5f4 \uacc4\uc0b0\uae30<\/h1>\n\n<h2 id=\"\uc694\uad6c\uc0ac\ud56d\">\uc694\uad6c\uc0ac\ud56d<\/h2>\n\n<ul>\n  <li>\uc27c\ud45c(,) \ub610\ub294 \ucf5c\ub860(:)\uc744 \uad6c\ubd84\uc790\ub85c \uac00\uc9c0\ub294 \ubb38\uc790\uc5f4\uc744 \uc804\ub2ec\ud558\ub294 \uacbd\uc6b0 \uad6c\ubd84\uc790\ub97c \uae30\uc900\uc73c\ub85c \ubd84\ub9ac\ud55c \uac01 \uc22b\uc790\uc758 \ud569\uc744 \ubc18\ud658 (\uc608: \u201c\u201d =&gt; 0, \"1,2\" =&gt; 3, \"1,2,3\" =&gt; 6, \u201c1,2:3\u201d =&gt; 6)<\/li>\n  <li>\uc55e\uc758 \uae30\ubcf8 \uad6c\ubd84\uc790(\uc27c\ud45c, \ucf5c\ub860)\uc678\uc5d0 \ucee4\uc2a4\ud140 \uad6c\ubd84\uc790\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\ub2e4. \ucee4\uc2a4\ud140 \uad6c\ubd84\uc790\ub294 \ubb38\uc790\uc5f4 \uc55e\ubd80\ubd84\uc758 \u201c\/\/\u201d\uc640 \u201c\\n\u201d \uc0ac\uc774\uc5d0 \uc704\uce58\ud558\ub294 \ubb38\uc790\ub97c \ucee4\uc2a4\ud140 \uad6c\ubd84\uc790\ub85c \uc0ac\uc6a9\ud55c\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \u201c\/\/;\\n1;2;3\u201d\uacfc \uac19\uc774 \uac12\uc744 \uc785\ub825\ud560 \uacbd\uc6b0 \ucee4\uc2a4\ud140 \uad6c\ubd84\uc790\ub294 \uc138\ubbf8\ucf5c\ub860(;)\uc774\uba70, \uacb0\uacfc \uac12\uc740 6\uc774 \ubc18\ud658\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n  <li>\ubb38\uc790\uc5f4 \uacc4\uc0b0\uae30\uc5d0 \uc22b\uc790 \uc774\uc678\uc758 \uac12 \ub610\ub294 \uc74c\uc218\ub97c \uc804\ub2ec\ud558\ub294 \uacbd\uc6b0 RuntimeException \uc608\uc678\ub97c throw\ud55c\ub2e4.<\/li>\n<\/ul>\n\n<h2 id=\"\ud504\ub85c\uadf8\ub798\ubc0d-\uc694\uad6c\uc0ac\ud56d\">\ud504\ub85c\uadf8\ub798\ubc0d \uc694\uad6c\uc0ac\ud56d<\/h2>\n\n<ul>\n  <li>indent(\ub4e4\uc5ec\uc4f0\uae30) depth\ub97c 2\ub2e8\uacc4\uc5d0\uc11c 1\ub2e8\uacc4\ub85c \uc904\uc5ec\ub77c.<\/li>\n  <li>depth\uc758 \uacbd\uc6b0 if\ubb38\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 1\ub2e8\uacc4\uc758 depth\uac00 \uc99d\uac00\ud55c\ub2e4. if\ubb38 \uc548\uc5d0 while\ubb38\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 depth\uac00 2\ub2e8\uacc4\uac00 \ub41c\ub2e4.<\/li>\n  <li>else\ub97c \uc0ac\uc6a9\ud558\uc9c0 \ub9c8\ub77c.<\/li>\n  <li>method\uac00 \ud55c \uac00\uc9c0 \uc77c\ub9cc \ud558\ub3c4\ub85d \ucd5c\ub300\ud55c \uc791\uac8c \ub9cc\ub4e4\uc5b4\ub77c.<\/li>\n<\/ul>\n\n<h2 id=\"\ucd94\uac00-\uc694\uad6c\uc0ac\ud56d\">\ucd94\uac00 \uc694\uad6c\uc0ac\ud56d<\/h2>\n\n<blockquote>\n  <p>\uc55e\uc758 \uc694\uad6c\uc0ac\ud56d\uc744 \ubaa8\ub450 \ub9cc\uc871\ud558\ub3c4\ub85d \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uacbd\uc6b0 \ub2e4\uc74c \uc694\uad6c\uc0ac\ud56d\uc744 \ucd94\uac00\uc801\uc73c\ub85c \ub3c4\uc804\ud574 \ubcf8\ub2e4.<\/p>\n<\/blockquote>\n\n<ul>\n  <li>\uc22b\uc790 \uac12\uc744 \uc704\ud574 int\uacfc \uac19\uc740 primitive type\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud558\uc9c0 \ub9d0\uace0 \uc790\ubc14 \uac1d\uccb4\ub97c \uc0dd\uc131\ud574 \uad6c\ud604\ud574 \ubcf8\ub2e4.<\/li>\n  <li>\ubb38\uc790\uc5f4\uc744 split\ud558\ub294 \uaddc\uce59\uc774 \ud604\uc7ac\ub294 \uae30\ubcf8 \uad6c\ubd84\uc790\uc640 custom \uad6c\ubd84\uc790 \ub450 \uac00\uc9c0\uac00 \uc788\ub2e4. \uc55e\uc73c\ub85c \ubb38\uc790\uc5f4\uc744 split\ud558\ub294 \uaddc\uce59\uc774 \uacc4\uc18d\ud574\uc11c \ucd94\uac00\ub420 \uac83\uc73c\ub85c \uc608\uc0c1\ud55c\ub2e4. \uaddc\uce59\uc774 \ucd94\uac00\ub418\ub354\ub77c\ub3c4 \uc601\ud5a5\uc744 \ucd5c\uc18c\ud654\ud558\uba74\uc11c \ud655\uc7a5 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\ud604\ud55c\ub2e4.<\/li>\n  <li>java 8\uc5d0 \ucd94\uac00\ub41c \ub78c\ub2e4\ub97c \ud65c\uc6a9\ud574 \uc704 \uc694\uad6c\uc0ac\ud56d\uc744 \uad6c\ud604\ud574 \ubcf8\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"\uccab-\ucf54\ub529-\uacfc\uc81c-\ud6c4\uae30\">\uccab \ucf54\ub529 \uacfc\uc81c \ud6c4\uae30<\/h1>\n\n<ul>\n  <li>\ub0b4 \uad6c\ud604 \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/johngrib\/jwp_calculator\">Github repository<\/a>\uc5d0 \uc62c\ub824\ub450\uc5c8\ub2e4.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">else<\/code>\ub97c \uc4f0\uc9c0 \uc54a\uace0, \uac00\uae09\uc801\uc774\uba74 \uc778\ub374\ud2b8\ub97c \uc801\uc740 depth\ub85c \uc720\uc9c0\ud558\ub294 \uac83\uc740 \ub0b4\uac00 \uc120\ud638\ud558\ub294 \uc2a4\ud0c0\uc77c\uc774\uae30\ub3c4 \ud558\ub2e4.<\/li>\n  <li>\ud328\ud134 \uc0dd\uac01\ud558\uc9c0 \uc54a\uace0 \uc9c1\uac10\uc5d0 \ub530\ub77c \ucc2c\ucc2c\ud788 \uad6c\ud604\ud588\ub294\ub370 \uaf64 \uc990\uac70\uc6e0\ub2e4.<\/li>\n  <li>\uaddc\uce59 \ucd94\uac00\uc640 \ubcc0\uacbd \uac00\ub2a5\uc131\uc744 \uac00\uc7a5 \uc911\uc694\ud55c \uc870\uac74\uc73c\ub85c \uc790\uc758\uc801\uc73c\ub85c \ud310\ub2e8\ud558\uace0 \uc791\uc5c5\ud588\ub2e4.<\/li>\n  <li>\ucd94\uac00 \uc694\uad6c\uc0ac\ud56d \uc911 primitive type\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac74 pass \ud588\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/nextstep-real.appspot.com\/o\/lesson-attachments%2F-KgqHzXq92AfQVxeZor5%2F%EA%B3%BC%EC%A0%95%20%EC%86%8C%EA%B0%9C.pdf?alt=media&amp;token=23006ea0-85e7-479c-86a8-770d499e7f5d\">\uac15\uc758 \uc2ac\ub77c\uc774\ub4dc<\/a><\/li>\n<\/ul>\n\n","pubDate":"Wed, 05 Apr 2017 21:52:28 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/05\/jwp-01\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/05\/jwp-01\/","category":"study jwp"},{"title":"emacs \uc0ac\uc6a9 \uc2dc\uc791!","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#why-emacs\" id=\"markdown-toc-why-emacs\">Why Emacs?<\/a><\/li>\n  <li><a href=\"#emacs-download\" id=\"markdown-toc-emacs-download\">Emacs download<\/a><\/li>\n  <li><a href=\"#evil\" id=\"markdown-toc-evil\">EVIL<\/a>    <ul>\n      <li><a href=\"#evil-\uc124\uce58\" id=\"markdown-toc-evil-\uc124\uce58\">EVIL \uc124\uce58<\/a><\/li>\n      <li><a href=\"#emacs-\uc885\ub8cc\" id=\"markdown-toc-emacs-\uc885\ub8cc\">Emacs \uc885\ub8cc<\/a><\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<h1 id=\"why-emacs\">Why Emacs?<\/h1>\n\n<p>\ub098\ub294 \ucf54\ub4dc\ub294 \ubb3c\ub860\uc774\uace0 \ubaa8\ub4e0 \uae00\uc744 Vim\uc5d0\uc11c \uc791\uc131\ud55c\ub2e4. \uc138\uc0c1\uc5d0 Vim\ub9cc\ud07c \ud3b8\ub9ac\ud558\uace0 \ucf8c\uc801\ud55c \ud14d\uc2a4\ud2b8 \ud3b8\uc9d1 \ub3c4\uad6c\ub294 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4. Vim\uc5d0 \ub300\ud55c \uc560\uc815\uc774 \uc788\ub2e4. \ud558\uc9c0\ub9cc \ud3c9\uc0dd Vim\ub9cc \uc4f8 \uac83\uc778\uac00? Emacs\ub3c4 \uad81\uae08\ud558\ub2e4. \uae30\uc655\uc774\uba74 \ub458 \ub2e4 \uc368\ubcf4\uace0 \uc7a5\uc810\ub4e4\ub9cc \ucde8\ud569\ud574\ubcf4\uace0 \uc2f6\ub2e4. \uadf8\ub0e5 \uc2dc\uc791\ud558\uba74 \uc9c4\uc785\uc7a5\ubcbd\uc774 \ub192\uc744 \ud14c\ub2c8 \uc608\uc804\ubd80\ud130 \ub208\ub3c5\ub4e4\uc778 Evil \ubaa8\ub4dc\ub85c \uc2dc\uc791\ud574\ubcf4\uace0\uc790 \ud55c\ub2e4.<\/p>\n\n<h1 id=\"emacs-download\">Emacs download<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/emacsformacosx.com\/\">Emacs For Mac OS X<\/a>\uc5d0\uc11c GUI \ubc84\uc804\uc744 \ubc1b\uc744 \uc218 \uc788\ub2e4.<\/li>\n  <li>\ud130\ubbf8\ub110\uc5d0\uc11c\ub294 <code class=\"language-plaintext highlighter-rouge\">brew install emacs<\/code>\ub85c \uc27d\uac8c \uc124\uce58\ud560 \uc218 \uc788\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"evil\"><a href=\"https:\/\/github.com\/emacs-evil\/evil\">EVIL<\/a><\/h1>\n\n<ul>\n  <li>EVIL\uc740 <code class=\"language-plaintext highlighter-rouge\">e<\/code>xtensible <code class=\"language-plaintext highlighter-rouge\">vi<\/code> <code class=\"language-plaintext highlighter-rouge\">l<\/code>ayer for Emacs\uc758 \uc904\uc784\ub9d0\uc778 \ubaa8\uc591\uc774\ub2e4.<\/li>\n  <li>EVIL\uc740 Emacs\uc704\uc5d0 Vi\ub97c \uc62c\ub9ac\ub294 \uac83\uc774\ubbc0\ub85c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Editor_war\">\ud3b8\uc9d1\uae30 \uc804\uc7c1<\/a>\uc758 \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 \uc2e0\uc131\ubaa8\ub3c5\uc774\ub77c\uace0\ub3c4 \ud560 \uc218 \uc788\ub2e4.<\/li>\n<\/ul>\n\n<h2 id=\"evil-\uc124\uce58\">EVIL \uc124\uce58<\/h2>\n\n<p><a href=\"https:\/\/github.com\/emacs-evil\/evil#install\">Evil\uc758 Install<\/a>\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc5c5\ud574 \uc8fc\uc5c8\ub2e4.<\/p>\n\n<p>\ub2e4\uc6b4\ub85c\ub4dc \ud55c\ub2e4.<\/p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>$ git clone git@github.com:emacs-evil\/evil.git\n$ cd ~\/.emacs.d\/\n$ ln -s ~\/git\/evil\/\n<\/code><\/pre><\/div><\/div>\n\n<p><code class=\"language-plaintext highlighter-rouge\">~\/.emacs<\/code>\ud30c\uc77c\uc5d0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucd94\uac00\ud55c\ub2e4.<\/p>\n\n<div class=\"language-lisp highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">(<\/span><span class=\"nv\">add-to-list<\/span> <span class=\"ss\">'load-path<\/span> <span class=\"s\">\"~\/.emacs.d\/evil\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">(<\/span><span class=\"nb\">require<\/span> <span class=\"ss\">'evil<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">(<\/span><span class=\"nv\">evil-mode<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>\uc774\ub807\uac8c \ud558\uace0 Emacs\ub97c \uc2e4\ud589\ud558\ub2c8 hjkl \ud0a4\ub85c \ucee4\uc11c\ub97c \uc6c0\uc9c1\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n<h2 id=\"emacs-\uc885\ub8cc\">Emacs \uc885\ub8cc<\/h2>\n\n<p>\uc885\ub8cc\ub294 <code class=\"language-plaintext highlighter-rouge\">&lt;c-x&gt;&lt;c-c&gt;<\/code>\ub85c \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n<h1 id=\"links\">Links<\/h1>\n\n<ul>\n  <li><a href=\"https:\/\/emacsformacosx.com\/\">Emacs For Mac OS X<\/a><\/li>\n  <li><a href=\"https:\/\/github.com\/emacs-evil\/evil#install\">Evil Install<\/a><\/li>\n  <li><a href=\"https:\/\/raw.githubusercontent.com\/emacs-evil\/evil\/master\/doc\/evil.pdf\">Evil PDF manual<\/a><\/li>\n  <li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Editor_war\">Editor war<\/a><\/li>\n<\/ul>\n\n","pubDate":"Mon, 03 Apr 2017 16:33:24 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/03\/emacs-start\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/03\/emacs-start\/","category":"emacs evil"},{"title":"Next JWP Study 00","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#nextstep-jwp\" id=\"markdown-toc-nextstep-jwp\">NextStep JWP<\/a><\/li>\n  <li><a href=\"#\uc218\uc5c5-\uc804-\uc900\ube44\uc0ac\ud56d\" id=\"markdown-toc-\uc218\uc5c5-\uc804-\uc900\ube44\uc0ac\ud56d\">\uc218\uc5c5 \uc804 \uc900\ube44\uc0ac\ud56d<\/a>    <ul>\n      <li><a href=\"#aws-\uc778\uc2a4\ud134\uc2a4-\uc0dd\uc131-\ubc0f-ssh\ub97c-\ud1b5\ud55c-\uc811\uc18d\" id=\"markdown-toc-aws-\uc778\uc2a4\ud134\uc2a4-\uc0dd\uc131-\ubc0f-ssh\ub97c-\ud1b5\ud55c-\uc811\uc18d\">AWS \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \ubc0f ssh\ub97c \ud1b5\ud55c \uc811\uc18d<\/a><\/li>\n      <li><a href=\"#\uc8fc\uc758-\uc0ac\ud56d\" id=\"markdown-toc-\uc8fc\uc758-\uc0ac\ud56d\">\uc8fc\uc758 \uc0ac\ud56d<\/a><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n<h1 id=\"nextstep-jwp\">NextStep JWP<\/h1>\n\n<p>4\uc6d4 3\uc77c, \uc989 \ub2e4\uc74c\uc8fc \uc6d4\uc694\uc77c\ubd80\ud130 \ud68c\uc0ac\uc5d0\uc11c <a href=\"http:\/\/www.javajigi.net\/\">\uc790\ubc14\uc9c0\uae30<\/a> \ubc15\uc7ac\uc131 \ub2d8\uc758 <a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\">NextStep JWP<\/a>\uc218\uc5c5\uc744 \ub4e3\uac8c \ub418\uc5c8\ub2e4.<\/p>\n\n<p>\ub0b4\uac00 \uc218\uac15 \uc9c0\uc6d0\uc744 \ud55c \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n<ul>\n  <li>\ubc15\uc7ac\uc131\ub2d8\uc758 NextStep \uc218\uc5c5\uc740 \uba85\uac15\uc758\ub85c \uc720\uba85\ud558\uace0, \uc774\ubc88 \uae30\ud68c\uc5d0 \ud68c\uc0ac \ub3c8\uc73c\ub85c \uad50\uc721\uc744 \ubc1b\uc744 \uc218 \uc788\ub2e4.<\/li>\n  <li>Java\ub85c\ub294 \uc8fc\ub85c \uc720\uc9c0\ubcf4\uc218 \uc791\uc5c5\ub9cc \ud574\uc654\uae30 \ub54c\ubb38\uc5d0 \ubc11\ubc14\ub2e5\ubd80\ud130 \uc2dc\uc791\ud558\ub294 \ud1b5\ud569\ub41c \ud559\uc2b5\uc758 \ud544\uc694\uc131\uc744 \ub290\ub07c\uace0 \uc788\uc5c8\ub2e4.<\/li>\n  <li>\ub9c8\uce68 \uc694\uc998 \ud558\ub294 \uc77c\uc774 PHP \ub808\uac70\uc2dc\ub97c Java\ub85c \uc774\ud589\ud558\ub294 \uc791\uc5c5\uacfc \uad00\ub828\uc774 \uc788\ub2e4.<\/li>\n  <li>\ubd80\uac00\uc801\uc73c\ub85c AWS\uc640 Spring\uc744 \ubc30\uc6cc\ubcf4\uace0 \uc2f6\ub2e4.<\/li>\n<\/ul>\n\n<h1 id=\"\uc218\uc5c5-\uc804-\uc900\ube44\uc0ac\ud56d\">\uc218\uc5c5 \uc804 \uc900\ube44\uc0ac\ud56d<\/h1>\n\n<p>\uc218\uc5c5 \uc804 \uc790\uc2e0\uc758 \ucef4\ud4e8\ud130 \ud658\uacbd\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc900\ube44\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n<ul>\n  <li>JDK 8.0<\/li>\n  <li>STS \ub610\ub294 IntelliJ IDEA<\/li>\n  <li>Git \uc124\uce58<\/li>\n  <li>Github \uacc4\uc815 \uc0dd\uc131<\/li>\n  <li>\ud06c\ub86c \uc124\uce58<\/li>\n  <li><a href=\"https:\/\/nextstep.camp\/courses\/-KgDNT4rfavb_BzYLBXr\">\uc218\uac15\uc2e0\uccad<\/a>\ud558\uae30<\/li>\n  <li>AWS \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \ubc0f ssh\ub97c \ud1b5\ud55c \uc811\uc18d(2\uc8fc\ucc28\uae4c\uc9c0 \uc9c4\ud589\ud574\ub3c4 \uad1c\ucc2e\uc74c)<\/li>\n<\/ul>\n\n<p>\ubaa8\ub450 \ud3c9\uc18c\uc5d0 \uc798 \uc4f0\uace0 \uc788\ub294 \uac83\ub4e4\uc744 \uc4f0\uba74 \ub420\ub4ef. AWS \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\ub9cc \ud574\ub450\uba74 \ub418\uaca0\ub2e4.<\/p>\n\n<h2 id=\"aws-\uc778\uc2a4\ud134\uc2a4-\uc0dd\uc131-\ubc0f-ssh\ub97c-\ud1b5\ud55c-\uc811\uc18d\">AWS \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \ubc0f ssh\ub97c \ud1b5\ud55c \uc811\uc18d<\/h2>\n\n<p>\uc544\ub9c8\uc874 \uc544\uc774\ub514 \uc788\uc73c\ub2c8\uae4c \uc0c8\ub85c \uc0dd\uc131\ud560 \ud544\uc694\ub294 \uc5c6\ub2e4.<\/p>\n\n<p>\ubc15\uc7ac\uc131 \ub2d8\uc758 <a href=\"https:\/\/www.youtube.com\/watch?v=RvWC4njEKUY&amp;feature=youtu.be\">AWS \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \ubc0f SSH\ub97c \ud1b5\ud55c \ub85c\uadf8\uc778<\/a>\uc744 \ucc38\uace0\ud558\uc5ec \uc544\ub798\uc640 \uac19\uc774 \uc791\uc5c5\ud558\uc600\ub2e4.<\/p>\n\n<ul>\n  <li>AWS\uc5d0 \ub85c\uadf8\uc778\ud558\uc5ec EC2 \uc120\ud0dd.<\/li>\n  <li>Launch Instance\ub97c \ud074\ub9ad\ud558\uc5ec \uc0c8\ub85c\uc6b4 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e0\ub2e4.<\/li>\n  <li><a href=\"https:\/\/ap-northeast-2.console.aws.amazon.com\/ec2\/v2\/home?region=ap-northeast-2#LaunchInstanceWizard:\">\uc11c\ubc84 \uc120\ud0dd \ud654\uba74<\/a> : <code class=\"language-plaintext highlighter-rouge\">Ubuntu Server 16.04 LTS (HVM), SSD Volume Type<\/code> \uc120\ud0dd.\n    <ul>\n      <li>\uc774\ud6c4 <code class=\"language-plaintext highlighter-rouge\">Free tier eligible<\/code> \ub531\uc9c0\uac00 \ubd99\uc5b4 \uc788\ub294 \uc124\uc815\uc744 \uc120\ud0dd\ud55c\ub2e4.<\/li>\n      <li>Next \ubc84\ud2bc \ud074\ub9ad.<\/li>\n    <\/ul>\n  <\/li>\n  <li>Step 3: Default \uc124\uc815, Next \ud074\ub9ad.<\/li>\n  <li>Step 4: Default \uc124\uc815, Next \ud074\ub9ad.<\/li>\n  <li>Step 5: Default \uc124\uc815, Next \ud074\ub9ad.<\/li>\n  <li>Step 6: Configure Security Group\n    <ul>\n      <li><code class=\"language-plaintext highlighter-rouge\">Security group name<\/code>\uc744 <code class=\"language-plaintext highlighter-rouge\">my security group<\/code>\uc73c\ub85c \uc218\uc815.<\/li>\n      <li>Add Rule: HTTP - TCP - 80 \ud3ec\ud2b8 \ucd94\uac00.<\/li>\n      <li>Add Rule: Custom TCP Rule - TCP - 8080 \ud3ec\ud2b8 \ucd94\uac00.<\/li>\n      <li>Review and Launch \ud074\ub9ad.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\uc9c0\uae08\uae4c\uc9c0 \uc124\uc815\ud55c \ub0b4\uc6a9\uc744 \ud55c \ubc88\uc5d0 \ubcfc \uc218 \uc788\ub2e4.\n    <ul>\n      <li>Launch \ud074\ub9ad.<\/li>\n    <\/ul>\n  <\/li>\n  <li>Key pair\ub294 \uc801\ub2f9\ud788 \uc54c\uc544\uc11c \uac16\uace0 \uc788\ub294 \uac83\uc744 \uc4f0\uac70\ub098 \uc0c8\ub85c \ub9cc\ub4e4\uac70\ub098 \ud55c\ub2e4.<\/li>\n  <li>Launch Instances \ud074\ub9ad.<\/li>\n  <li>View Instances \ubc84\ud2bc\uc73c\ub85c \uc778\uc2a4\ud134\uc2a4\ub4e4\uc758 \ud604\uc7ac \uc0c1\ud0dc\ub97c \ubcfc \uc218 \uc788\ub2e4.\n    <ul>\n      <li>\ubc29\uae08 \uc0dd\uc131\ud55c \uc11c\ubc84\ub97c \uc120\ud0dd\ud55c \ub2e4\uc74c, \uc544\ub798\ucabd\uc744 \ubcf4\uba74 DNS\uc640 IP\uac00 \uc788\ub2e4. \uc77c\ub2e8 IP\ub97c \ubcf5\uc0ac\ud55c\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li>\ud130\ubbf8\ub110\uc744 \uc5f4\uace0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud55c\ub2e4.\n    <div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>$ ssh -i {pem \ud30c\uc77c} ubuntu@{ip\uc8fc\uc18c}\n<\/code><\/pre><\/div>    <\/div>\n  <\/li>\n<\/ul>\n\n<p>\uadf8\ub7ac\ub354\ub2c8 \ub2e4\uc74c\uacfc \uac19\uc740 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nPermissions 0644 for '\/Users\/xxx\/xxx\/foo.pem' are too open.\nIt is required that your private key files are NOT accessible by others.\nThis private key will be ignored.\nLoad key \"\/Users\/xxx\/xxx\/foo.pem\": bad permissions\nPermission denied (publickey).\n<\/code><\/pre><\/div><\/div>\n\n<p>too open permission \ubb38\uc81c\uc774\ub2c8 \ub2e4\uc74c\uacfc \uac19\uc774 400\uc73c\ub85c \ubcc0\uacbd\ud574\uc8fc\uba74 \ub41c\ub2e4.<\/p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>$ chmod 400 foo.pem\n<\/code><\/pre><\/div><\/div>\n\n<p>\uc811\uc18d\uc5d0 \uc131\uacf5\ud558\uba74 \uc77c\ub2e8 \ub2e4\uc74c\uacfc \uac19\uc774 \ud55c\uae00 \uc124\uc815\ubd80\ud130 \ud574\uc8fc\uc790.<\/p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>sudo locale-gen ko_KR.UTF-8\n<\/code><\/pre><\/div><\/div>\n\n<p>\uc774\ub7ec\uba74 \ud559\uc2b5\ud560 \uc900\ube44\ub294 \uc644\ub8cc\ub41c \uac83\uc774\ub2e4.<\/p>\n\n<h2 id=\"\uc8fc\uc758-\uc0ac\ud56d\">\uc8fc\uc758 \uc0ac\ud56d<\/h2>\n<ul>\n  <li>\ud639\uc2dc \uc694\uae08 \ud3ed\ud0c4\uc774 \ud130\uc9c8 \uc218 \uc788\uc73c\ub2c8 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc778\uc2a4\ud134\uc2a4\ub294 stop \ud558\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n  <li>\uc778\uc2a4\ud134\uc2a4\ub294 start \ud560 \ub54c\ub9c8\ub2e4 DNS\uc640 IP\uac00 \ubc14\ub00c\ubbc0\ub85c \ub2e4\uc74c\uc5d0 \ub2e4\uc2dc \uc2dc\uc791\ud560 \ub54c\uc5d0\ub294 \uc0c8\ub85c\uc6b4 IP\ub97c \uc0ac\uc6a9\ud574 \uc811\uc18d\ud574\uc57c \ud55c\ub2e4.<\/li>\n<\/ul>\n\n","pubDate":"Sun, 02 Apr 2017 12:15:32 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/04\/02\/jwp-00-prepare\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/04\/02\/jwp-00-prepare\/","category":"study jwp aws"},{"title":"\ud154\ub808\uadf8\ub7a8 \ubd07 \uc2a4\ucf08\ub808\ud1a4 \ub9cc\ub4e4\uae30","description":"<ul id=\"markdown-toc\">\n  <li><a href=\"#\uc900\ube44\ubb3c\" id=\"markdown-toc-\uc900\ube44\ubb3c\">\uc900\ube44\ubb3c<\/a><\/li>\n  <li><a href=\"#\ud154\ub808\uadf8\ub7a8-api-token-\uc5bb\uae30\" id=\"markdown-toc-\ud154\ub808\uadf8\ub7a8-api-token-\uc5bb\uae30\">\ud154\ub808\uadf8\ub7a8 API TOKEN \uc5bb\uae30<\/a><\/li>\n  <li><a href=\"#\ucf54\ub529\" id=\"markdown-toc-\ucf54\ub529\">\ucf54\ub529<\/a><\/li>\n  <li><a href=\"#webjs\ub294-\uc65c-\uc788\ub294-\uac70\uc8e0\" id=\"markdown-toc-webjs\ub294-\uc65c-\uc788\ub294-\uac70\uc8e0\">web.js\ub294 \uc65c \uc788\ub294 \uac70\uc8e0?<\/a><\/li>\n  <li><a href=\"#config-variable-\uc124\uc815\" id=\"markdown-toc-config-variable-\uc124\uc815\">Config Variable \uc124\uc815<\/a><\/li>\n  <li><a href=\"#\ubc30\ud3ec\" id=\"markdown-toc-\ubc30\ud3ec\">\ubc30\ud3ec<\/a><\/li>\n  <li><a href=\"#\ud14c\uc2a4\ud2b8\" id=\"markdown-toc-\ud14c\uc2a4\ud2b8\">\ud14c\uc2a4\ud2b8<\/a><\/li>\n  <li><a href=\"#sleep-\ubc29\uc9c0-\ucc98\ub9ac\" id=\"markdown-toc-sleep-\ubc29\uc9c0-\ucc98\ub9ac\">sleep \ubc29\uc9c0 \ucc98\ub9ac<\/a><\/li>\n  <li><a href=\"#links\" id=\"markdown-toc-links\">Links<\/a><\/li>\n<\/ul>\n\n<p>\uc2ec\uc2ec\ud574\uc11c \ud154\ub808\uadf8\ub7a8 \ubd07\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uc558\ub2e4.<br \/>\n\ubd07\uc744 \ub9cc\ub4e0 \uacfc\uc815\uc744 \uc694\uc57d\ud574 \ub0a8\uaca8\ubcf8\ub2e4.<\/p>\n\n<h2 id=\"\uc900\ube44\ubb3c\">\uc900\ube44\ubb3c<\/h2>\n<ol>\n  <li>\ud154\ub808\uadf8\ub7a8 API TOKEN<\/li>\n  <li><a href=\"https:\/\/heroku.com\/\">Heroku<\/a> \uacc4\uc815\n    <ul>\n      <li>\ubb34\ub8cc\ub85c \ubd07\uc744 \ub3cc\ub9ac\uae30 \uc704\ud574 Heroku\ub97c \uc120\ud0dd\ud588\ub2e4.<\/li>\n    <\/ul>\n  <\/li>\n  <li><a href=\"https:\/\/uptimerobot.com\/\">uptimerobot.com<\/a> \uacc4\uc815\n    <ul>\n      <li>Heroku \uc571\uc758 sleep \uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud55c \uaf3c\uc218.<\/li>\n    <\/ul>\n  <\/li>\n<\/ol>\n\n<h2 id=\"\ud154\ub808\uadf8\ub7a8-api-token-\uc5bb\uae30\">\ud154\ub808\uadf8\ub7a8 API TOKEN \uc5bb\uae30<\/h2>\n<p>\ud154\ub808\uadf8\ub7a8\uc5d0\uc11c <a href=\"https:\/\/telegram.me\/botfather\">@BotFather<\/a>\ub97c \ucc3e\uc544 \ub2e4\uc74c \uc21c\uc11c\ub300\ub85c \ub9d0\uc744 \uac78\uba74 \ub41c\ub2e4.<\/p>\n\n<ol>\n  <li><code class=\"language-plaintext highlighter-rouge\">\/start<\/code> : @BotFather\ub97c \ud65c\uc131\ud654\ud55c\ub2e4.<\/li>\n  <li><code class=\"language-plaintext highlighter-rouge\">\/newbot<\/code> : \uc0c8\ub85c\uc6b4 \ubd07\uc744 \ub9cc\ub4e4\uc5b4\ub2ec\ub77c\uace0 \uc694\uccad\ud55c\ub2e4.<\/li>\n<\/ol>\n\n<p>\uc774\ud6c4\ub85c\ub294 @BotFather\uac00 \ubd07\uc758 \uc774\ub984\uc744 \ubb3c\uc5b4\ubcf4\ub2c8 \uc801\ub2f9\ud55c \uc774\ub984\uc744 \uc694\uccad\ud558\uba74 \ub41c\ub2e4.\n\uadf8\ub7ec\uba74 @BotFather\uac00 \ub2f5\ubcc0\uc73c\ub85c API TOKEN\uc744 \ubcf4\ub0b4\uc900\ub2e4.<\/p>\n\n<p>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/core.telegram.org\/bots\">\uacf5\uc2dd \ubb38\uc11c<\/a> \ucc38\uace0.<\/p>\n\n<h2 id=\"\ucf54\ub529\">\ucf54\ub529<\/h2>\n\n<p><em>package.json<\/em><\/p>\n<div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"telegram-bot\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"1.0.0\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"main\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"index.js\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"test\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"echo <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">Error: no test specified<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> &amp;&amp; exit 1\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"start\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"node index.js\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"dev_start\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"export $(cat .config) &amp;&amp; node index.js\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"repository\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"git\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"url\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"git+https:\/\/github.com\/johngrib\/telegram-bot.git\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"author\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"John Grib\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"license\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"MIT\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"bugs\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"url\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"https:\/\/github.com\/johngrib\/telegram-bot\/issues\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"homepage\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"https:\/\/github.com\/johngrib\/telegram-bot#readme\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"dependencies\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"express\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"^4.15.2\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"get-json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"0.0.3\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"node-telegram-bot-api\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"^0.27.0\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/code><\/pre><\/div><\/div>\n\n<p><em>index.js<\/em><\/p>\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/bot<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/web<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p><em>bot.js<\/em> : bot\uc758 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc774 \ub4e4\uc5b4\uac08 \uacf3\uc774\ub2e4.<\/p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">TelegramBot<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">node-telegram-bot-api<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">getToken<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">(){<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">token<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">TELEGRAM_TOKEN<\/span><span class=\"p\">;<\/span>\n    <span class=\"k\">return<\/span> <span class=\"kd\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nx\">token<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">};<\/span>\n<span class=\"p\">})();<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">bot<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">TelegramBot<\/span><span class=\"p\">(<\/span><span class=\"nx\">getToken<\/span><span class=\"p\">(),<\/span> <span class=\"p\">{<\/span><span class=\"na\">polling<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">});<\/span>\n\n<span class=\"nx\">bot<\/span><span class=\"p\">.<\/span><span class=\"nx\">onText<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/<\/span><span class=\"se\">\\\/<\/span><span class=\"sr\">echo <\/span><span class=\"se\">(<\/span><span class=\"sr\">.+<\/span><span class=\"se\">)<\/span><span class=\"sr\">\/<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">msg<\/span><span class=\"p\">,<\/span> <span class=\"nx\">match<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">chatId<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">msg<\/span><span class=\"p\">.<\/span><span class=\"nx\">chat<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">;<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">resp<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">match<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n\n    <span class=\"nx\">bot<\/span><span class=\"p\">.<\/span><span class=\"nx\">sendMessage<\/span><span class=\"p\">(<\/span><span class=\"nx\">chatId<\/span><span class=\"p\">,<\/span> <span class=\"nx\">resp<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p><em>web.js<\/em> : http end-point\ub97c \ub9cc\ub4e4\uc5b4 \uc900\ub2e4.<\/p>\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">var<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">var<\/span> <span class=\"nx\">packageInfo<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/package.json<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kd\">var<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">express<\/span><span class=\"p\">();<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"kd\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span><span class=\"p\">({<\/span> <span class=\"na\">version<\/span><span class=\"p\">:<\/span> <span class=\"nx\">packageInfo<\/span><span class=\"p\">.<\/span><span class=\"nx\">version<\/span> <span class=\"p\">});<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"kd\">var<\/span> <span class=\"nx\">server<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nx\">listen<\/span><span class=\"p\">(<\/span><span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">PORT<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">var<\/span> <span class=\"nx\">host<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">server<\/span><span class=\"p\">.<\/span><span class=\"nx\">address<\/span><span class=\"p\">().<\/span><span class=\"nx\">address<\/span><span class=\"p\">;<\/span>\n    <span class=\"kd\">var<\/span> <span class=\"nx\">port<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">server<\/span><span class=\"p\">.<\/span><span class=\"nx\">address<\/span><span class=\"p\">().<\/span><span class=\"nx\">port<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Web server started at http:\/\/%s:%s<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">host<\/span><span class=\"p\">,<\/span> <span class=\"nx\">port<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<h2 id=\"webjs\ub294-\uc65c-\uc788\ub294-\uac70\uc8e0\">web.js\ub294 \uc65c \uc788\ub294 \uac70\uc8e0?<\/h2>\n\n<p>\uc0ac\uc2e4 bot.js\ub9cc \uc788\uc5b4\ub3c4 \ubd07\uc740 \ub3cc\uc544\uac04\ub2e4. \uc989 web.js\ub294 \uc77c\uc885\uc758 \uad70\ub354\ub354\uae30 \ucf54\ub4dc\ub77c \ud560 \uc218 \uc788\ub2e4.<br \/>\n\uc774\uac8c \ud544\uc694\ud55c \uc774\uc720\ub294 \uc774 \ucf54\ub4dc\ub97c Heroku\uc5d0\uc11c \uad6c\ub3d9\ud558\uae30\ub85c \uacb0\uc815\ud588\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n<p>Heroku\ub294 \uc77c\uc815 \uc2dc\uac04 \ub3d9\uc548 deploy\ud55c \uc571\uc5d0 \uc811\uc18d \uc694\uccad\uc774 \uc5c6\uc744 \uacbd\uc6b0, \uc571\uc744 sleep \uc2dc\ucf1c\ubc84\ub9b0\ub2e4.\n\ubb3c\ub860 sleep \uc774 \ub41c\ub2e4\uace0 \ud574\uc11c \uc601\uc6d0\ud55c \uc7a0\uc5d0 \ube60\uc9c0\uac70\ub098 \ud558\ub294 \uac74 \uc544\ub2c8\uace0, \ub2e4\uc74c \uc694\uccad\uc774 \uc788\uc744 \ub54c\uae4c\uc9c0 \uc8fd\uc5ec \ub193\ub294 \uac83\uc774\ub2e4.\n\uc0c8\ub85c\uc6b4 \uc694\uccad\uc744 \ubc1b\uc73c\uba74 \uc571\uc744 \uc0c8\ub85c \uad6c\ub3d9\ud55c \ub2e4\uc74c \uc6f9 \ud398\uc774\uc9c0\ub97c \ubcf4\uc5ec\uc900\ub2e4.\n\ud3c9\ubc94\ud55c \ube14\ub85c\uadf8\ub098 \uc6f9 \uc0ac\uc774\ud2b8\ub77c\uba74 sleep \uc0c1\ud0dc\ub77c\uace0 \ud574\ub3c4 10~30\ucd08 \uc815\ub3c4\ub9cc \uae30\ub2e4\ub9ac\uba74 \ub418\ub294 \uac83\uc774\ub2e4.<\/p>\n\n<p>\ud558\uc9c0\ub9cc \uc2e4\ud5d8\uc744 \ud574\ubcf4\ub2c8 \ubd07\uc740 \uc6f9\uc774 \uc544\ub2c8\uc5b4\uc11c \uadf8\ub7f0\uc9c0 \ud55c \ubc88 sleep \uc0c1\ud0dc\ub85c \ube60\uc838\ub4e4\uba74 \ub2e4\uc2dc\ub294 \uae68\uc5b4\ub098\uc9c0 \uc54a\uc558\ub2e4.<\/p>\n\n<p>\uadf8\ub798\uc11c \ub098\uc628 \uaf3c\uc218\uac00 http end point\ub97c \ub9cc\ub4e0 \ub2e4\uc74c, \uc8fc\uae30\uc801\uc73c\ub85c ping\uc744 \ubcf4\ub0b4\uc8fc\ub294 \uc11c\ube44\uc2a4\uc5d0 \ubd07\uc758 http end point\ub97c \ub4f1\ub85d\ud574\uc11c \ubd07\uc774 \uc7a0\ub4e4\uc9c0 \uc54a\ub3c4\ub85d \ud574\uc8fc\ub294 \uac83\uc774\ub2e4. \uc774\ub7f0 \uc11c\ube44\uc2a4\ub4e4 \uc911 \ud558\ub098\uac00 \ubc14\ub85c <a href=\"https:\/\/uptimerobot.com\/\">uptimerobot.com<\/a>. \ubb34\ub8cc\ub85c \uac00\uc785\ud560 \uc218 \uc788\uace0, \uc0ac\uc6a9\ubc95\ub3c4 \ub2e8\uc21c\ud558\ub2e4.<\/p>\n\n<p>\uc704\uc758 \ucf54\ub4dc\ub97c Heroku\uc5d0 \ubc30\ud3ec\ud55c \ub2e4\uc74c, uptimerobot\uc5d0 uri\ub97c \ub4f1\ub85d\ud574 \ub450\uba74 \ubd07 \uc2a4\ucf08\ub808\ud1a4\uc774 \uc644\uc131\ub418\ub294 \uc148\uc774\ub2e4.<\/p>\n\n<h2 id=\"config-variable-\uc124\uc815\">Config Variable \uc124\uc815<\/h2>\n\n<p>\ubc30\ud3ec\ud558\uae30 \uc804\uc5d0 Heroku Dashboard \uc5d0\uc11c Config Variable\uc5d0 <code class=\"language-plaintext highlighter-rouge\">TELEGRAM_TOKEN<\/code>\uc744 \ub4f1\ub85d\ud574 \uc900\ub2e4.<br \/>\n\uc774\ub807\uac8c \ub4f1\ub85d\ud55c \uac12\uc740 node.js \ucf54\ub4dc\uc5d0\uc11c <code class=\"language-plaintext highlighter-rouge\">process.env.TELEGRAM_TOKEN<\/code> \uc73c\ub85c \uc811\uadfc\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n<h2 id=\"\ubc30\ud3ec\">\ubc30\ud3ec<\/h2>\n\n<p>Heroku\ub294 \ubc30\ud3ec\uac00 \uc26c\uc6cc\uc11c \uc88b\ub2e4.<\/p>\n<div class=\"language-sh highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nv\">$ <\/span>git push heroku master\n<\/code><\/pre><\/div><\/div>\n\n<h2 id=\"\ud14c\uc2a4\ud2b8\">\ud14c\uc2a4\ud2b8<\/h2>\n\n<p>\ubd07\uc774 \uc798 \ub3cc\uc544\uac00\ub294\uc9c0 \ud154\ub808\uadf8\ub7a8\uc73c\ub85c \ud655\uc778\ud574 \ubcf8\ub2e4. \uc704\uc758 \ucf54\ub4dc\ub300\ub85c\ub77c\uba74 <code class=\"language-plaintext highlighter-rouge\">\/echo test<\/code> \ub4f1\uc73c\ub85c \ud655\uc778 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n<h2 id=\"sleep-\ubc29\uc9c0-\ucc98\ub9ac\">sleep \ubc29\uc9c0 \ucc98\ub9ac<\/h2>\n\n<p><a href=\"https:\/\/uptimerobot.com\/\">uptimerobot.com<\/a>\uc5d0 \ubd07\uc758 \ub3c4\uba54\uc778 \uc8fc\uc18c\ub97c \ub4f1\ub85d\ud574 \uc900\ub2e4.<\/p>\n\n<h2 id=\"links\">Links<\/h2>\n<ul>\n  <li><a href=\"https:\/\/github.com\/johngrib\/telegram-bot\">https:\/\/github.com\/johngrib\/telegram-bot<\/a><\/li>\n  <li><a href=\"https:\/\/mvalipour.github.io\/node.js\/2015\/11\/10\/build-telegram-bot-nodejs-heroku\">https:\/\/mvalipour.github.io\/node.js\/2015\/11\/10\/build-telegram-bot-nodejs-heroku<\/a><\/li>\n<\/ul>\n","pubDate":"Sun, 12 Mar 2017 21:08:16 +0900","link":"https:\/\/johngrib.github.io\/blog\/2017\/03\/12\/telegram-bot\/","guid":"https:\/\/johngrib.github.io\/blog\/2017\/03\/12\/telegram-bot\/","category":"node-js telegram heroku chatbot bot"}]}}