์ „์ฒด ๊ธ€ 65

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์˜ค๋‹ต ์œ ํ˜• ์ •๋ฆฌ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ํ‹€๋ฆฌ๋Š” ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ชฐ๋ผ์„œ๋ผ๊ธฐ๋ณด๋‹ค,์„ธ๋ถ€ ๊ตฌํ˜„์—์„œ์˜ ์‹ค์ˆ˜๊ฐ€ ์›์ธ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋‹ต ์œ ํ˜•๊ณผ ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.1. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์Œ์ˆ˜ ๊ฒฐ๊ณผ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค ๋ณด๋ฉด ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์Œ์ˆ˜๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.์ด ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋จผ์ € ํ™•์ธํ•ด์•ผ ํ•  ๊ฒƒ์€ ์ž๋ฃŒํ˜• ๋ฒ”์œ„ ์ดˆ๊ณผ(Overflow)์ด๋‹ค. ์›์ธint ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผ์ค‘๊ฐ„ ๊ณ„์‚ฐ ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฐœ์ƒ์ž˜๋ชป๋œ ํ˜• ๋ณ€ํ™˜์˜ˆ์‹œint a = 1_000_000;int b = 1_000_000;int result = a * b; // ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฐœ์ƒ int์˜ ์ตœ๋Œ€๊ฐ’์€ ์•ฝ 21์–ต(2,147,483,647)์ด๋‹ค.1,000,000 * 1,000,000 = 1,000,000,000,000 ์ด๋ฏ€๋กœ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์Œ์ˆ˜๊ฐ€ ..

[Java] ๋ฌธ์ž์—ด(String) ์ •๋ฆฌ

๋ฌธ์ž์—ด์€ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๋‹ค ๋ณด๋ฉด ์ž์ฃผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ์œ ํ˜•์ด๋‹ค.๊ธฐ๋ณธ์ ์ธ ์œ ํ˜•์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๊ตฌํ˜„์ด๋‚˜ ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ ์‹ค์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ธฐ ์‰ฌ์šด ํŽธ์ด๋‹ค.๊ทธ๋ž˜์„œ ์‹ค์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.1. ๋ฌธ์ž์—ด์ด๋ž€?๋ฌธ์ž๋“ค์˜ ์ˆœ์„œ ์žˆ๋Š” ์ง‘ํ•ฉ์ด๋‹ค.Java์—์„œ ๋ฌธ์ž์—ด์€ String ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.String s = "hello";2. String vs StringBuilder1. String์„ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๋Š” ์ด์œ Java์˜ String์€ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋‹ค.๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. String s = "";for(int i = 0; i [๋ฌธ์ œ์ ]๋ฐ˜๋ณต ์—ฐ๊ฒฐ ์‹œ O(N²)๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ€๋Šฅ→ ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณต ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ˆ„์ ํ•  ๋•Œ๋Š” String์„ ..

๋””๋ฒ„๊น…(Debugging) - ๋…ผ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•

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

์‹œ๊ฐ„๋ณต์žก๋„(Time Complexity)

1. ์‹œ๊ฐ„๋ณต์žก๋„๋ž€?์‹œ๊ฐ„๋ณต์žก๋„(Time Complexity)๋Š”์ž…๋ ฅ ํฌ๊ธฐ N์ด ์ฆ๊ฐ€ํ•  ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ์•ฝ 10โธ(1์–ต) ๋ฒˆ ์—ฐ์‚ฐ โ‰’ 1์ดˆ ๋ผ๋Š” ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•œ๋‹ค. ์ด๋Š” ์ ˆ๋Œ€์ ์ธ ๊ณต์‹์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ „์— "์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ†ต๊ณผ ๊ฐ€๋Šฅํ•œ๊ฐ€?"๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค.2. ์™œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€?๊ฐ™์€ ๋ฌธ์ œ๋ผ๋„ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž…๋ ฅ์ด N = 100,000์ผ ๋•Œ O(N²) → 10¹โฐ → ์•ฝ 100์ดˆ → ์‹œ๊ฐ„ ์ดˆ๊ณผO(N log N) → ์•ฝ 1.7 × 10โถ → ํ†ต๊ณผ ๊ฐ€๋Šฅ ์ฆ‰, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ๊ณ„์‚ฐํ•˜๋Š” ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ,์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์ด๋‹ค.3. ์‹œ๊ฐ„๋ณต..

[Tech Choice] Gradle์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  : Spring Boot ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ์™€ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ๊ธฐ๋ณธ ๊ทœ์น™์— ์œ„์ž„ํ•˜๊ธฐ ์œ„ํ•ด

1๏ธโƒฃ Gradle์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€Gradle์€ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” ๋„๊ตฌ๋‹ค.์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„task์™€ plugin ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. Spring Boot ํ™˜๊ฒฝ์—์„œ๋Š” Gradle์— Spring Boot ์ „์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์šฉํ•ด์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰, ํŒจํ‚ค์ง•, ํ…Œ์ŠคํŠธ, ์˜์กด์„ฑ ๊ด€๋ฆฌ๊นŒ์ง€๋นŒ๋“œ์™€ ๊ด€๋ จ๋œ ํ๋ฆ„์„ ํ•˜๋‚˜์˜ ๊ทœ์น™ ์ง‘ํ•ฉ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ Gradle์€ ๋‹จ์ˆœํžˆ "๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ"๋ผ๊ธฐ๋ณด๋‹ค๋Š”,์–ด๋–ค ๋นŒ๋“œ ๊ทœ์น™๊ณผ ์˜์กด์„ฑ ์กฐํ•ฉ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘˜ ๊ฒƒ์ธ์ง€ ์ •๋ฆฌํ•ด์ฃผ๋Š” ๊ณ„์ธต์— ๊ฐ€๊น๋‹ค๊ณ  ์ดํ•ดํ–ˆ๋‹ค.2๏ธโƒฃ ์„ ํƒ์ง€๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹คSpring Boot ํ”„๋กœ์ ํŠธ์—์„œ ๋นŒ๋“œ์™€ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์„ ํƒ์ง€๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. * Maven- POM ๊ธฐ๋ฐ˜์œผ..

[Careeroom] WebClient Bean ์ถฉ๋Œ์„ ๊ณ„๊ธฐ๋กœ ์Šคํ„ฐ๋””๋ฃธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ ์žฌ์„ค๊ณ„ (WebClient ๋‹ค์ค‘ ๋“ฑ๋ก → ์Šค์ผ€์ค„๋Ÿฌ ๊ธฐ๋ฐ˜ ์ ์žฌ + ์กฐํšŒ ๋ถ„๋ฆฌ)

1. ์ƒํ™ฉ์„œ์šธ์‹œ Open API๋กœ๋ถ€ํ„ฐ ์Šคํ„ฐ๋””๋ฃธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ดˆ๊ธฐ ์„ค๊ณ„์—์„œ๋Š” ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ ,์‘๋‹ต์„ ํŒŒ์‹ฑํ•œ ๋’ค DB์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ๋ฆ„์„ ๊ณ ๋ คํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์šฉ๋„๋ณ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ WebClient Bean์„ ๋“ฑ๋กํ–ˆ๋‹ค.jobWebClientcertWebClient(์ดˆ๊ธฐ์—๋Š” ์Šคํ„ฐ๋””๋ฃธ API์šฉ WebClient๋„ ํ•จ๊ป˜ ๊ณ ๋ ค)์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ๋Š” Lombok์˜ @RequiredArgsConstructor๋ฅผ ์‚ฌ์šฉํ•œ ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.2. 1์ฐจ ๋ฌธ์ œ : WebClient Bean ๋‹ค์ค‘ ๋“ฑ๋ก์œผ๋กœ ์ธํ•œ ์˜์กด์„ฑ ์ฃผ์ž… ์‹คํŒจ์Šคํ„ฐ๋””๋ฃธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ค‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ธฐ๋™์ด ์‹คํŒจํ–ˆ๋‹ค.Parameter 0 of..

[Spring Security] 4. JWT ํ™˜๊ฒฝ์—์„œ 401 / 403 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์„ค๊ณ„

JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ ์šฉํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผ๋๋˜ ๋ถ€๋ถ„์€๋‹จ์ˆœํžˆ 401(Unauthorized)๊ณผ 403(Forbidden)์˜ ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ์˜ˆ์™ธ๋ฅผ ์–ด๋””์—์„œ, ๋ˆ„๊ฐ€ ์ฑ…์ž„์ ธ์•ผ ํ•˜๋Š”๊ฐ€์˜€๋‹ค. JWT๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ธ์ฆ ๋กœ์ง์ด Filter ๋‹จ๊ณ„๋กœ ์ด๋™ํ•œ๋‹ค.์ด๋•Œ ๊ธฐ์กด Spring Security๊ฐ€ ์ œ๊ณตํ•˜๋˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ๋ฆ„๊ณผJWT ์ธ์ฆ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งž๋ฌผ๋ฆฌ์ง€ ์•Š๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ JWT ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ธ์ฆ·์ธ๊ฐ€ ์˜ˆ์™ธ๋ฅผFilterAuthenticationEntryPointAccessDeniedHandlerGlobalExceptionHandler์ค‘ ์–ด๋””์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ตฌ์กฐ์ ์œผ๋กœ ๋งž๋Š”์ง€,๊ทธ๋ฆฌ๊ณ  Spring Security์˜ ๊ธฐ๋ณธ ํ๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š๊ณ  ๋ณด์™„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ..

[Git ๋ช…๋ น์–ด] ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ •๋ฆฌ & ํŒŒ์ผ ์‚ญ์ œ

์ถ”์ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” git clean ๋ช…๋ น์–ด ์ •๋ฆฌ์‚ญ์ œ ์ „ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (-n) → ์‹ค์ œ ์‚ญ์ œ(-f,-fd,-fdx) ํ๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์‹ค์ˆ˜ ์—†์ด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋”๋ณด๊ธฐโš ๏ธ ์ค‘์š”: git clean์œผ๋กœ ์‚ญ์ œ๋œ ํŒŒ์ผ์€ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค- reflog๋กœ๋„ ๋ณต๊ตฌ ๋ถˆ๊ฐ€ (์ถ”์  ์•ˆ ๋œ ํŒŒ์ผ์ด๋ฏ€๋กœ)- ์‹คํ–‰ ์ „ ๋ฐ˜๋“œ์‹œ -n์œผ๋กœ ํ™•์ธโญ โ‘  ์‚ญ์ œ ๋Œ€์ƒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ : git clean -ngit clean -n * ๊ธฐ๋Šฅ์‚ญ์ œ๋  ์ถ”์ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ(untracked file) ๋ชฉ๋ก์„ ๋ฏธ๋ฆฌ ์ถœ๋ ฅ์‹ค์ œ ํŒŒ์ผ์€ ์‚ญ์ œ๋˜์ง€ ์•Š์Œ(dry-run)* ์‚ฌ์šฉ ์‹œ์ git clean ์‹คํ–‰ ์ „, ์‚ญ์ œ ๋ฒ”์œ„๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ์–ด๋–ค ํŒŒ์ผ์ด ์ •๋ฆฌ ๋Œ€์ƒ์ธ์ง€ ์ ๊ฒ€ํ•  ๋•Œ* ์ฃผ์˜-n ์˜ต์…˜์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ „์šฉ์‹ค์ œ ์‚ญ์ œ๋Š” ..

[Tech Choice] MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  : ๋„๋ฉ”์ธ ๊ฐ„ ๊ด€๊ณ„์™€ ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์—์„œ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด

1๏ธโƒฃ MySQL์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€MySQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋กœ ๊ตฌ์กฐํ™”ํ•˜๊ณ , SQL ํ‘œ์ค€์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ •์˜์™€ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.๋˜ํ•œ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜(ACID), ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ, ์ž ๊ธˆ ๊ธฐ๋ฐ˜ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ,์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์—์„œ ์ฑ…์ž„์ง€๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. MySQL์€ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ,๋ฐ์ดํ„ฐ ๊ฐ„ ๊ด€๊ณ„์™€ ๋ณ€๊ฒฝ ํ๋ฆ„์„ ๋ช…์‹œ์ ์ธ ๊ทœ์น™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์  ์„ ํƒ์ง€์— ๊ฐ€๊น๋‹ค.2๏ธโƒฃ ์„ ํƒ์ง€๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ์ด๋ผ๋Š” ๋ชฉ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ ํƒ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. * PostgreSQL- SQL ํ‘œ์ค€์„ ํญ๋„“๊ฒŒ ์ง€์›ํ•˜๊ณ  ๋ณต์žกํ•œ ..

[Careeroom] Member ์กฐํšŒ ํ›„ Job ์ ‘๊ทผ ์‹œ LazyInitializationException ๋ฐœ์ƒ (JPA LAZY ์—ฐ๊ด€ + ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ฒ”์œ„)

1. ์ƒํ™ฉํšŒ์› ์กฐํšŒ ๋กœ์ง์—์„œ Member ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•œ ๋’ค,์‘๋‹ต์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ์—ฐ๊ด€๋œ Job ์ •๋ณด(ex. jobName)์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค.member.getJob().getJobName(); Member ↔ Job ์—ฐ๊ด€์€ @ManyToOne์œผ๋กœ ๋งคํ•‘๋˜์–ด ์žˆ์—ˆ๊ณ ,๊ธฐ๋ณธ fetch ์ „๋žต์€ LAZY์˜€๋‹ค.2. ๋ฌธ์ œ ์ •์˜์ดˆ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ€์ •ํ–ˆ๋‹ค.Member๋ฅผ ์กฐํšŒํ–ˆ์œผ๋‹ˆ, ์ดํ›„์— member.getJob()์œผ๋กœ ์ ‘๊ทผํ•ด๋„ ํ•„์š”ํ•œ ๊ฐ’์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ฌ๋ž๋‹ค. Job์€ ์ง€์—ฐ ๋กœ๋”ฉ(LAZY) ์ƒํƒœ์˜€๊ณ ,์—ฐ๊ด€ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋Š” ์‹œ์ ์—๋Š” ์ด๋ฏธ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Session)๊ฐ€ ์ข…๋ฃŒ๋œ ์ƒํƒœ์˜€๋‹ค. ์ฆ‰,"์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ์ดํ›„ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์—ฐ๊ด€ ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด ์จ๋„ ๋œ๋‹ค"๋Š”..