๋ชฉ๋ก๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ (118)

Bibi's DevLog ๐Ÿค“๐ŸŽ

๋™์‹œ์„ฑ Concurrency (+ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋™์‹œ์„ฑvs๋ณ‘๋ ฌ์„ฑ)

๋™์‹œ์„ฑ Concurrency (+ ๋ณ‘๋ ฌ์„ฑ) ์ถœ์ฒ˜ : ๋ธ”๋กœ๊ทธ1, ๋ธ”๋กœ๊ทธ2 Q. ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ์š”์ฒญ์ด ๋™์‹œ์— ๋“ค์–ด์˜ฌ ๋•Œ, ArrayList๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๋ ๊นŒ์š”? '๋™์‹œ์—~ ์—ฌ๋Ÿฌ~' ๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”. ๋‹จ์ˆœํ•œ ArrayList๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์—์„œ ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค! (์Šค๋ ˆ๋“œ ๊ฐœ๋…๊ณผ ์ด์–ด์ง) ๋น„๋™๊ธฐ Asynchronous ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ : ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹. ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ ์‹คํ–‰ ํ๋ฆ„์„ ๋ฉˆ์ถ”์–ด์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ถ€๋ถ„ ์—†์ด, ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ ๋™์‹œ์„ฑ Concurrency ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ. ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ..

[Codesquad] ๋„คํŠธ์›Œํฌ - ์ƒํƒœ&๋ฌด์ƒํƒœ, ์ฟ ํ‚ค, ์„ธ์…˜, ๋กœ๊ทธ์ธ ๊ณผ์ •, ์Šคํ”„๋ง์œผ๋กœ ๋กœ๊ทธ์ธ ๊ตฌํ˜„, ์„ธ์…˜DB, ์›น์†Œ์ผ“

์˜ค๋Š˜์˜ ํ˜ธ๋ˆ…์Šค ์ˆ˜์—… ์ƒํƒœ(stateful)์™€ ๋ฌด์ƒํƒœ(stateless)์˜ ์ฐจ์ด? ๋ฌด์ƒํƒœ : ์ฃผ๋ฌธํ•˜์‹œ๊ฒ ์–ด์š”? - ์ œ์œก๋ฎ๋ฐฅ ํ•˜๋‚˜ ์ฃผ์„ธ์š”. ์ƒํƒœ ์œ ์ง€ : ์ฃผ๋ฌธํ•˜์‹œ๊ฒ ์–ด์š”? - ๋Š˜ ๋จน๋˜ ๊ฑธ๋กœ ์ฃผ์„ธ์š”. ์ฟ ํ‚ค Cookie ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด, ์›น ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์„ค์น˜ํ•˜๋Š” ์ž‘์€ ์ •๋ณด ํŒŒ์ผ. ''์ฟ ํ‚ค''๋Š” ํ—จ์ ค๊ณผ ๊ทธ๋ ˆํ…”์—์„œ ์œ ๋ž˜ํ•œ ํ‘œํ˜„์ด๋‹ค. ์›น ์„œ๋ฒ„๋Š” ๋ฌด์ƒํƒœ(stateless)์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด์ „์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์ด, ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธํ•œ ์ƒํƒœ๊ฐ’์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋ฒ„๋Š”.. ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ, Set - Cookie header๊ฐ’์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์„ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก(respons..

์ฟ ํ‚ค, ์„ธ์…˜, ์บ์‹œ๊ฐ€ ๋ญ”๊ฐ€์š”? (์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „)

์ฟ ํ‚ค, ์„ธ์…˜, ์บ์‹œ๊ฐ€ ๋ญ”๊ฐ€์š”? ์…‹ ๋‹ค '์›น์—์„œ ์‚ฌ์šฉ๋˜๊ณ , ๋ญ”๊ฐ€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค'๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์›น์„ ๋งŒ๋“ค ๋•Œ, ์–ด๋–ค ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ• ์ง€ ์„ธ์…˜์— ์ €์žฅํ• ์ง€ ์ž˜ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค. ์ฟ ํ‚ค Cookie : ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ (๋‚ด ์ปดํ“จํ„ฐ์— ์žˆ๋Š”)''๋ธŒ๋ผ์šฐ์ €''์— ์ €์žฅ๋˜๋Š” ๋‚ด์šฉ. ์ฐœ์งˆ๋ฐฉ์—์„œ์˜ ์†๋ชฉ์—ด์‡ . ๋‚ด๊ฐ€ ๋“ค๊ณ ๋‹ค๋‹ˆ๋ฉด์„œ ์‹œ์„ค์„ ์ด์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋ฏผ๊ฐ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋ฉด ํฐ์ผ ๋‚œ๋‹ค. (๊ฐœ์ธ์ •๋ณด์œ ์ถœ) ํ™œ์šฉ : ์•„์ด๋”” ์ €์žฅ. '์˜ค๋Š˜๋งŒ ๋ณด์ง€ ์•Š๊ธฐ'. ์ฆ‰ ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์‚ญ์ œ/๊ฐ€๊ณต/๋„๋‚œ๋˜์–ด๋„ ํฐ์ผ๋‚˜์ง€ ์•Š๋Š” ์ •๋ณด๋“ค์„ '๋ธŒ๋ผ์šฐ์ €'์— ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ๋‹จ์  : ๋‚ด๊ฐ€ ์ž„์˜๋กœ ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚จ..

[๋ฏธ์…˜ ํ”ผ๋“œ๋ฐฑ] ๋ฉ”์„œ๋“œ&๋ณ€์ˆ˜ ๋„ค์ด๋ฐ, ์ž๋ฐ” ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค LocalDateTime, import์— ๋Œ€ํ•ด

๋ฆฌ๋ทฐ์–ด Dion๊ป˜์„œ ์ž๋ฐ” ์‹œ๊ฐ„ ํ‘œ์‹œ ๋ฐ ๊ฐ์ฒด์ƒ์„ฑ, import์— ๋Œ€ํ•œ ์ข‹์€ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…”์„œ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ธด๋‹ค! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ™‡‍โ™€๏ธ ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ ๋ฉ”์„œ๋“œ์—๋Š” ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ๋™์ž‘์„ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ๋ณด๋‹ค๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•  ํ–‰๋™์„ ์ ์–ด์ฃผ์„ธ์š”. ๊ฐ„๋‹จํ•˜๊ฒŒ home์œผ๋กœ ๊ฐˆ๊ฒƒ์ด๋‹ˆ home()์ •๋„์—ฌ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„ ๊ทธ๋ ‡๊ตฐ์š”! ๋ฉ”์„œ๋“œ๋ช…์€ ๋™์‚ฌ๋กœ ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค๋Š” ๋ง์„ ๋“ค์–ด์„œ ์ด๋ ‡๊ฒŒ ํ–ˆ๋Š”๋ฐ, ๋™์‚ฌ์— ์ง‘์ฐฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋ฉ”์„œ๋“œ์˜ ํ–‰๋™์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์— ๋” ์ค‘์ ์„ ๋‘๋ฉด ๋˜๋‚˜์š”?๐Ÿ˜ฎ ๋„ค ๋™์‚ฌ ๋ณด๋‹ค๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•ด์ค„ ๊ฒƒ์ธ๊ฐ€๊ฐ€ ๋” ์ค‘์š”ํ•˜๋‹ต๋‹ˆ๋‹ค! +์ค„์—ฌ์“ฐ๊ธฐ ์ง€์–‘ํ•˜๊ธฐ (inputPw) ๋ณ€์ˆ˜ ๋„ค์ด๋ฐ ์ž„์‹œ๋ณ€์ˆ˜๋ผ๋„ ๋ณ€์ˆ˜๋ช…์— ๊ด€์‚ฌ๋Š” ๋ถ™์ด์ง€ ์•Š๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด๋‹ค. aUser(โŒ) ์ž๋ฐ” ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค LocalDateTime ๋ฐ import์— ๋Œ€ํ•ด publ..

@RequestMapping ์œผ๋กœ ์ค‘๋ณตURL ์ œ๊ฑฐํ•˜๊ธฐ

@RequestMapping ์‚ฌ์šฉ๋ฒ• ๊ณต๋ถ€ํ•ด์„œ ์ค‘๋ณตURL ์ œ๊ฑฐํ•˜์ž. ์ฐธ๊ณ  : ๋ธ”๋กœ๊ทธ. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์€ HTTP request๋กœ ๋“ค์–ด์˜ค๋Š” URL์„ ํŠน์ • ์ปจํŠธ๋กค๋Ÿฌ์˜ ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (์ปจํŠธ๋กค๋Ÿฌ์˜ ํด๋ž˜์Šค ๋ฐ ํŠน์ • ๋ฉ”์†Œ๋“œ ๋ชจ๋‘ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค) ์‚ฌ์‹ค์€ URL ๋ฟ ์•„๋‹ˆ๋ผ ํŒŒ๋ผ๋ฏธํ„ฐ, ํ—ค๋” ๋“ฑ ์—ฌ๋Ÿฌ ๋ฒ”์œ„์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด ๋‚˜์ค‘์— ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค. @RequestMapping ๋ฅผ ํด๋ž˜์Šค์— ์„ ์–ธํ•˜๋ฉด ์ค‘๋ณตURL์„ ์ œ๊ฑฐํ•  ๋•Œ ์ข‹๋‹ค. ์•„๋ž˜๋Š” ์˜ˆ์ œ. @Controller @RequestMapping("/home") public class TestController { @RequestMapping("/") String getName(){ retur..