๐ ๊ธ๋ 6๊ธฐ ํฌ์คํ
1. ๋ฏธ์น๋๋ก ๋์ ๋ 7์์ ํ๊ณ
2. ์ฌ์ฉ์๊ฐ ๊ฒ์๋ฌผ์ ์์ฑํ ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ
3. Spring AOP - (1) ํ๋ก์ ํจํด, ๋ฐ์ฝ๋ ์ดํฐ ํจํด
4. [MySQL] - ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level)
5. Spring AOP - (2) AOP ๊ฐ๋ ๋ฐ ์ค์ต
6. ์ธํ ๋ฆฌ์ ์ด(IntelliJ) - ๋๋ฒ๊น (Debugging) ํ๊ธฐ
7. [Java, ๋์์ธํจํด] - ์ฑ๊ธํด ํจํด(Singleton Pattern)
8. ์๊ฐ ์ฝ๋๋ฆฌ๋ทฐ Ver_0.1: ์ปค๋ฆฌ์ด ์ฑ์ฅ CODE ์ธ๋ฏธ๋ ์ ๋ฆฌ
9. ํฌ์คํธ๋งจ(API ํ ์คํธ) ํ์ฉํ๊ธฐ
๐ ์ธํ ๋ฆฌ์ ์ด(IntelliJ) - ๋๋ฒ๊น (Debugging)ํ๊ธฐ
์๋ ํ์ธ์, ์ด๋ฒ ์๊ฐ์ ์ ๋ฆฌํ ๋ด์ฉ์ ์ธํ ๋ฆฌ์ ์ด์์ ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋จผ์ ๋๋ฒ๊น ์ ์ฌ์ ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ฒ๊น (debugging) ๋๋ ๋๋ฒ๊ทธ(debug)๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๋จ๊ณ ์ค์ ๋ฐ์ํ๋ ์์คํ ์ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ฅ๋ ๋น์ ์์ ์ฐ์ฐ(๋ฒ๊ทธ)๋ฅผ ์ฐพ์๋ด์ ๊ทธ ์์ธ์ ๋ฐํ๊ณ ์์ ํ๋ ์์ ๊ณผ์ ์ ๋ปํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๋ฒ๊น ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธ ์์ ์ฒดํฌ, ๊ธฐ๊ณ๋ฅผ ์ฌ์ฉํ๋ ํ ์คํธ, ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ํ ์คํธํ๋ ๋ฒ์ด ์๋ค.
๋๋ฒ๊น ์ ์ ํ๋ ๋ฅ๋ ฅ์ ๊ฐ๋ฐ์์๊ฒ ์ ๋ง ์ค์ํ๋ค ๋ผ๋ ์ธ๊ธ์ ๋ง์ด ๋ค์ด์์์ต๋๋ค.
์ ๋ง ๋ค์ํ ์๋ฃ๋ค๊ณผ ์์๋ค์ด ์กด์ฌํ์ง๋ง, ์ ๊ฐ ์ฆ๊ฒจ ๋ณด๋ ๋ฐฑ๊ธฐ์ ๋๊ณผ ์๋ฆฌ๋์ ์์์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฃ๋ค์ด ์กด์ฌํฉ๋๋ค.
๋ ๋์ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๋ ํ "๊ฐ๋ฐ์๋ผ๋ฉด ๋๋ฒ๊ฑฐ ์ฌ์ฉ๋ฒ์ ๊ผญ ์์์ผ์ฃ "
์ฝ๋ฉ์ ์์๊ณผ ๋, ๋๋ฒ๊น | ์ค๋ ฅ์๋ ๊ฐ๋ฐ์์ ํ์ ๋ฌด๊ธฐ ๐๐
๊ทธ๋ผ ์ด๋ฌํ ๋๋ฒ๊น ๋ฅ๋ ฅ์ ์ ์ค์ํ์ง, ๊ฐ๋จํ ์ฌ๋ก๋ฅผ ํตํด ์ค๋ช ํ๊ณ ์ดํ ์ ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋ฐ๋๊ตฌ์ธ ์ธํ ๋ฆฌ์ ์ด์์ ๋๋ฒ๊น ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ฏ ๋๋ฒ๊น ์ํฉ
ํด๋น ์ฝ๋๋ ์คํ๋ง๋ถํธ์ ์์ ๋ก๊ทธ์ธ(google)์ ๊ตฌํํ๋ ์ผ๋ถ ์ฝ๋์ ๋๋ค.
์ ์ ํ์ฌ ์ํฉ์ ์์ ๋ก๊ทธ์ธ์ ํ๋ ์ธ์ฆ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ๊ธ, ๋ค์ด๋ฒ, ์นด์นด์ค ๋ฑ ์ด๋ ํ ์๋ณ์์ธ์ง์ ๋ฐ๋ผ ๊ตฌํ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๊ธฐ์ ์๋ณ์๋ฅผ ์์๋ผ ํ์๊ฐ ์์์ต๋๋ค.
๋ฐ๋ผ์ ๋๋ฒ๊น ์ ํตํด ํด๋น ์ฝ๋์์ ๊ฐ ๋ณ์๋ค์ด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํด๋ณด์์ต๋๋ค.
authentication ๋ณ์์ authorizedClientRegistrationId ๋ผ๋ ๋ณ์๊ฐ์ผ๋ก "google" ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ง๋ง Authentication์ ์ธํฐํ์ด์ค์ด๊ณ , OAuth2AuthenticationToken์ ํด๋์ค ์ ๋๋ค.
Authentication ์ธํฐํ์ด์ค์์๋ authorizedClientRegistrationId ๋ณ์๋ฅผ ์ฝ์ด์ฌ ์ ์๋ ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ OAuth2AuthenticationToken ์๋ฃํ์ผ๋ก ํ๋ณํ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
Authentication ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ธ OAuth2AuthenticationToken ํด๋์ค์ ์กด์ฌํ๋ getAuthorizedClientRegistrationId() ๋ฉ์๋๋ฅผ ํตํด ์ธ์ฆ ํด๋ผ์ด์ธํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก๋ ๋ค์ ์ฝ๋๋ฅผ ํตํด ์ธ์ฆ ํด๋ผ์ด์ธํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
final String socialType = ((OAuth2AuthenticationToken) authentication).getAuthorizedClientRegistrationId();
์ด์ ๊ฐ์ด ๋๋ฒ๊น ์ ํตํด ๋ธ๋ ์ดํฌ ํฌ์ธํธ ์ง์ ์์ ๊ฐ ๋ณ์์ ์ด๋ ํ ๋ฐ์ดํฐ๋ค์ด ์กด์ฌํ๋์ง ํ์ธํ ์ ์๊ณ , ์ด๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง๋ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์์ํ๊ฒ ๊ฐ์ ๋ฝ์์ฌ ์ ์์์ต๋๋ค.
๋๋ฒ๊น ์ด ์๋ ๋ก๊ทธ๋ System.out.println() ๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฌธ์ ํตํด ํ์ธํด์ผ ํ๋ค๋ฉด (์ ๋ผ๋ฉด) ๋ค์๊ณผ ๊ฐ์ด ์งํํ ๊ฒ ๊ฐ๋ค์.
๋ณ์์ ๊ฐ์ ํ๋ํ๋ ํ์ธํด๊ฐ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์์ฌ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์คํํ๋ฉด์ ๋ฐ์ํ๋ ์๊ฐ์ ์ธ ๋น์ฉ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ ์์ผ๋ก ๋๋ฒ๊น ์ ํตํด ์๊ฐ์ ์๊ปด๋ณด๋๋ก ํฉ์๋ค :)
๐ฏ ์ธํ ๋ฆฌ์ ์ด ๋๋ฒ๊น
๋จผ์ ์ธํ ๋ฆฌ์ ์ด์์ ๋๋ฒ๊น ๋ชจ๋๋ ์ฐ์ธก ์๋จ ๋ฒ๋ ํ์๋ฅผ ํตํด ์งํํ ์ ์์ต๋๋ค.
(๋จ์ถํค๋ ํ์ฌ ํฌ์ปค์ค๊ฐ ์๋ ๊ณณ์ Ctrl + Shift + D, ์๋จ ํญ์ด ๊ฐ๋ฆฌํค๋ ๊ณณ์ Crtl + D ์ ๋๋ค.)
๋๋ฒ๊ทธ๋ ์ฝ๋์์ ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ฅผ ์ค์ ํจ์ผ๋ก์ ์ง์ ํ ์ ์์ต๋๋ค.
๋ธ๋ ์ดํฌํฌ์ธํธ(breakpoint), ์ค๋จ์ , ์ค์ง์ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํ๋ก๊ทธ๋จ์ ์๋์ ์ผ๋ก ์ ์ ๋๋ ์์ ๋ฉ์ถ๊ฒ ํ๋ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ๋ฃ๋ ๊ฒ์ด๋ค.
๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฝ๋ ์ผ์ชฝ ์ซ์๊ฐ ์๋๊ณณ์ ๋ง์ฐ์ค ์ผ์ชฝ์ ํด๋ฆญํ๋ฉด ์ค์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์์ ํ์ฌ ์ค์ ํ ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋จ์ Run > View Breakpoints...(Shift + Command + F8) ๋ฅผ ํด๋ฆญํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
๋๋ฒ๊น ๋ชจ๋๋ฅผ ์คํํด๋ณด๋ฉด ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๊ฝค ๋ง์ ์์ด์ฝ๋ค์ด ์กด์ฌํฉ๋๋ค.
์ ๋ ๊ทธ๋์ ์ฃผ๋ก Step Over๋ Step Into, Step Out์ ๋๋ง ์ฌ์ฉ์ ํด์์๋๋ฐ์, ์ด๋ฒ ๊ธฐํ์ ์ข ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ๐
(์ ๋ ์์ด์ฝ์ ์ปค์คํ ํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ์ธํ ๋ฆฌ์ ์ด๋ผ๋ ์์ด์ฝ ๋ชจ์์ ๋ค๋ฅด๊ฒ ๋ํ๋ ์ ์์ต๋๋ค.)
Resume(Option + Command + R)
- ๋ค์ Break Point๋ก ์ด๋ํฉ๋๋ค.
์ ์ปค์์์ Resume๋ฅผ ํด๋ฆญํ๋ฉด ์๋ ๋ค์ Break Point๋ก ์ด๋ํฉ๋๋ค.
Show Execution Point(Option + F10)
- ์ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ํ์ฌ ์คํ ํฌ์ธํธ๋ก ์ปค์๊ฐ ๋ฐ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
Step Over(F8)
- ์ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ํ์ฌ ์คํ ์ง์ ์์ ๋ค์ ์ค๋ก ์ด๋ํฉ๋๋ค.
Step Into(F7)
- ์ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ๋ด๋ถ(๋ฉ์๋)๋ก ์ด๋ํฉ๋๋ค.
Force Step Into(Option + Shift + F7)
- ๋ค์ ์คํ๋๋ ๋ผ์ธ์ผ๋ก ์ด๋ํ์ง๋ง, Step Into์๋ ๋ค๋ฅด๊ฒ *Stepping์ ๋ฌด์ํ๊ณ ์งํํฉ๋๋ค.
*Stepping ๊ธฐ๋ฅ์ ๋๋ฒ๊ทธ์ ์ค์ ๊ธฐ๋ฅ ์ค ํ๋๋ก ๋๋ฒ๊น ์ค ๊ฑด๋๋ธ ์ ์๋ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
Stepping ์ค์ ์ ์ํด Command + Shift + a -> Stepping ์ค์ ์ฐฝ์ผ๋ก ์ด๋ํฉ๋๋ค.
์๋ ์ค์ ์์ Skip simple getters ์ ์ฒดํฌ๋ฅผ ํด์ค์๋ค.
๊ทธ ํ getter ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ณณ์ ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ฅผ ์ค์ ํ๊ณ Step Into์ Force Step Into๋ฅผ ๋๋ฌ๊ฐ๋ฉฐ ํ์ธํด๋ด ์๋ค.
Step Into(F7)
Force Step Into(Option + Shift + F7)
Force Step Into ๋ Step Into์๋ ๋ฌ๋ฆฌ getter ๋ฉ์๋๊น์ง ์ง์ ํ์ฌ์ ๊ฐ์ ํ์ธํฉ๋๋ค.
๋ฐ๋ผ์ ๋๋ฒ๊น ์ ์งํํ ๋ ํ์ธํ ํ์๊ฐ ์๋ getter, ์์ฑ์ ๋ฑ์ Stepping ์ค์ ์ ํ ๋ค Skip์ด ํ์ํ ๋๋ Step Into๋ก, ๋ง์ฝ ์ ๋ถ ํ์ธ์ด ํ์ํ๋ค๋ฉด Force Step Into๋ก ์ด๋ํ๋ฉด์ ๋๋ฒ๊น ์ ํ๋ฉด ๋ฉ๋๋ค.
Step Out(Shift + F8)
- ํ์ฌ break๋ ๋ผ์ธ์์ ํธ์ถํ ๊ณณ์ผ๋ก ๋น ์ ธ๋๊ฐ๋๋ค.(out)
Drop Frame
- Call Stack์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค.
- Step Out๊ณผ ๋น์ทํ์ง๋ง Step Out์ ํด๋น ๋ผ์ธ์ด ์คํ๋ ํ ๋์๊ฐ์ง๋ง, Drop Frame์ ํด๋น ๋ผ์ธ์ด ์คํ๋๊ธฐ ์ ์ ๋์๊ฐ๋๋ค.
Run to Cursor(Option + F9)
- ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ปค์๊ฐ ํฌ์ปค์ค ๋์ด์๋ ๋ผ์ธ์ผ๋ก ์ด๋ํฉ๋๋ค.
์์์ ํ์ฌ Break Point๋ 46๋ผ์ธ์ด๊ณ , ์ปค์๋ 55๋ผ์ธ์ ๋๋ค.
์ด ์ํ์์ Option + F9๋ฅผ ๋๋ฅด๋ฉด break๊ฐ 55๋ผ์ธ์ผ๋ก ์ด๋ํฉ๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ๊ธฐ์กด์ Break Point๋ก ์ค์ ํ๊ฒ ์๋, ๋จ๋ฐ์ฑ์ผ๋ก Break๋ฅผ ์ง์ ํ๊ณ ํ์ธํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Evaluate Expression(Option + F8)
- Break๋ ์ํ์์ ์ฝ๋๋ฅผ ์คํํด ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
โป Evaluate์ ์ํด ์คํ๋ ์ฝ๋๋ ์ค์ ์คํ๋๋ฏ๋ก ์ฃผ์ํ ํ์๊ฐ ์์ต๋๋ค.
Watch
- Evaluate์ ๋์ผํ ๊ธฐ๋ฅ์ผ๋ก ํ์ธํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ฒ๊น ๋ชจ๋์์ ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
- Evaluate์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์คํํด์ผ ํ์ง๋ง, Watch์ ๊ฒฝ์ฐ ํ ๋ฒ ์ค์ ํ๋ฉด Break ๋ผ์ธ์ด ์คํ๋ ๋๋ง๋ค ์๋์ผ๋ก ์คํ์ด ๋ฉ๋๋ค.
1๋ฒ(Watch)์ ํด๋ฆญํ ํ 2๋ฒ์ ํด๋ฆญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
i๋ผ๋ ๋ณ์๋ฅผ ์ถ๊ฐํ ํ ๋๋ฒ๊น ๋ชจ๋๋ฅผ ์คํํด๋ณด๋ฉด i๊ฐ์ด watch์ ์ํด ์ถ๋ ฅ์ด ๋ฉ๋๋ค.
for๋ฌธ ๋๋ฒ๊น
public static void main(String[] args) {
int i = 0;
for (i = 0; i < 100; i++) {
System.out.println(i);
// changeMember(i);
}
}
๊ฐ๋จํ๊ฒ ์์ ๊ฐ์ for๋ฌธ์ด ์กด์ฌํ ๋, ํน์ i๊ฐ๋ง ํ์ธํ๊ณ ์ถ์๋๊ฐ ์์ต๋๋ค. ์๋ฅผ๋ค์ด, ์ ๋ฐ๋ณต๋ฌธ์์ i๊ฐ์ด 50์ผ๋ ๊ฐ์ ํ์ธํด๋ณด๊ณ ์ถ์๋ F8์ ๋ฌด์ํ ๋๋ฅด๋ค๊ฐ ์ค์๋ก ์ง๋์ณ๋ฒ๋ฆฐ๋ค๋ฉด?
์ด์ ์ผ๋ก ๋๋์ ๊ฐ ์ ์์ผ๋ฏ๋ก, ์ฒ์๋ถํฐ ๋ค์ ๋๋ฒ๊น ์ ํด์ผํฉ๋๋ค..
๋ฐ๋ผ์ ์์ ๊ฐ์ด ๋ฐ๋ณต๋ฌธ ๋ด ํน์ ์กฐ๊ฑด์ ํด๋นํ๋ ์ง์ ์์ ๋๋ฒ๊น ๋ชจ๋๋ฅผ ์คํํ๊ณ ์ ํ ๋, ๋ธ๋ ์ดํฌ ํฌ์ธํธ์์ ์ฐํด๋ฆญ์ ํ ํ Condition: ๋ถ๋ถ์์ ์กฐ๊ฑด๋ฌธ์ ์ค์ ํ ํ Done์ ํด๋ฆญํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ผ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ธ๋ ์ดํฌ ํฌ์ธํธ ์ฐ์ธก์ ? ๋ฐ์ค๊ฐ ํ๋ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
๊ทธ ํ ๋๋ฒ๊น ๋ชจ๋๋ฅผ ๋ค์ ์คํํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ์กฐ๊ฑด๋ฌธ์ ํด๋นํ๋ ๊ฐ์ผ๋, ๋ธ๋ ์ดํฌ ํฌ์ธํธ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
๐ฏ ์ ๋ฆฌ
์ด์์ผ๋ก ์ธํ ๋ฆฌ์ ์ด์์ ๋๋ฒ๊น ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ฐ~๋ ์ปค๋ฎค๋ํฐ์์ "์์ฌ๋ถ์ด ๋๋ฒ๊น
ํ์ง๋ง๊ณ , System.out.println()์ผ๋ก ์ถ๋ ฅํด์ ํ์ธํ๋ค." ๋ผ๋ ๊ธ์ ๊ฝค(?) ๋ณผ ์ ์์์ต๋๋ค.
ํ์ง๋ง ๋๋ฒ๊น ๋ชจ๋๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ๊ผญ ์ตํ์ผ ํ๋ ๊ธฐ์ ์ด ์๋๊น ์๊ฐํฉ๋๋ค.
์ ๋ํ ์์ง ์์ ์์ฌ๋ก ๋๋ฒ๊น ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ๊ฐ๋ฐ์ ํ๋ ์ ๋๋ ์๋์ง๋ง, ์ต๋ํ ๋๋ฒ๊น ์ ํ์ฉํด ์ข ๋ ์นํด์ง๊ณ ์์ผ๋ก ์ ์ฉํ๊ฒ ์ฌ์ฉ ํ ์ ์๋๋ก ๋๋ฒ๊น ์ ์ต์ํด์ง๊ณ ์ ํฉ๋๋ค.
์ ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ์คํ๋ง ํ๋ ์์ํฌ์ ๋ด๋ถ์ ์ผ๋ก ์ถ์ํ๊ฐ ์์ฒญ ์ ๋์ด์๊ธฐ ๋๋ฌธ์, ๋ด๋ถ์ ์ผ๋ก ์ฝ๋๋ฅผ ํ์ธํ๊ณ ์ ํ๋ฉด ๋๋ฒ๊น ์ ์ ํ์ด ์๋ ํ์์ธ ๊ฒ ๊ฐ์ต๋๋ค :)
๐ References
- https://jojoldu.tistory.com/149
- https://www.youtube.com/watch?v=gkutTlwi70s&t=1220s
- https://www.tangunsoft.com/software/news/detail?id=125&before=index
'๊ฐ๋ฐ ์ค์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋งฅ๋ถ - ์์ดํจ๋ ์ฌ์ด๋์นด ์ฐ๊ฒฐ ๋๊ธธ ๋(์ฐ๊ฒฐ ํด์ ) (5) | 2022.03.06 |
---|---|
๋ ๊ฐ์ ํ์ผ ๋น๊ตํ๊ธฐ(IntelliJ, Mac) (2) | 2021.12.28 |
์ธํ ๋ฆฌ์ ์ด(IntelliJ) - VisualVM ์ค์น ๋ฐ ์ฐ๋ํ๊ธฐ (0) | 2021.09.14 |
MacOS iTerm zsh - alias ์ค์ ํ๊ธฐ (1) | 2021.07.04 |
IntelliJ(Ultimate) + Thymeleaf Live reload(์ค์๊ฐ ๋ฐ์)์ ์ฉํ๊ธฐ (4) | 2021.06.14 |
๋๊ธ