๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (214)

JUINTINATION

[๋”ฅ๋‹ค์ด๋ธŒ] ์Šค๋ ˆ๋“œ(Thread)

์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์„ ๋•Œ ์žฅ๋‹จ์ ์„ ์„œ์ˆ ํ•˜๊ณ  ์Šค๋ ˆ๋“œ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด ์„œ์ˆ ํ•˜์‹œ์˜ค์Šค๋ ˆ๋“œ์˜ ๊ต์ฐฉ์ƒํƒœ๊นŒ์ง€ ์„ค๋ช… ํ•„์š”์Šค๋ ˆ๋“œํ’€(Thread Pool)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค์‹ค์ œ๋กœ ์Šค๋ ˆ๋“œํ’€์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ ๋“ค์–ด ์„ค๋ช…ํ•˜์‹œ์˜คJava ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผํ•  ๊ฒƒ์€?์Šค๋ ˆ๋“œํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ๊ฐ€์ง€๋Š” ์ž‘์—… ๋‹จ์œ„๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค(multi-threaded process)๋ผ๊ณ  ํ•œ๋‹ค.์Šค๋ ˆ๋“œ์˜ ์ƒ๋ช… ์ฃผ๊ธฐNEW์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„์ง ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์ŒRUNNABLE์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ฑฐ๋‚˜(Running)์‹คํ–‰ ์ค€๋น„๋˜์–ด ์Šค์ผ€์ฅด๋ง์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ(Ready)WAITING..

[๋”ฅ๋‹ค์ด๋ธŒ] NULL

Java์—์„œ NULL์„ ์‹ ๊ฒฝ์“ฐ๋Š” ์ด์œ ์™€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜คNull์ผ๋ฐ˜์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด ๋˜๋Š” ์ฃผ์†Œ๋ฅผ ์˜๋„์ ์œผ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐnull์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน๋ณ„ํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜์—๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” null)๊ฐ€ ํ• ๋‹น๋œ๋‹ค.ํ•˜์ง€๋งŒ ์›์‹œ ์ž๋ฃŒํ˜•(primitive type)์€ ์‹ค์ œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฐ’ ํƒ€์ž…์œผ๋กœ, ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— null์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค."The null literal is the only value of the null type, which is a subtype of every reference type. As such, the null literal may be assigned to any va..

[๋”ฅ๋‹ค์ด๋ธŒ] ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

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

Redis ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ(Lettuce vs Redisson)

์นด์นด์˜คํ…Œํฌ ๋ถ€ํŠธ์บ ํ”„ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด Redis๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ํŒ€๋ณ„ ํ’ˆ์•—์ด ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋žญํ‚น ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด ์ž‘์—…์€ ์ˆ˜๋งŽ์€ ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์ •๋ ฌํ•ด์•ผ ํ•˜๋ฉฐ, ํ•œ ์‹œ์ ์—์„œ ํ•˜๋‚˜์˜ ์Šค๋ƒ…์ƒท๋งŒ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.์ฒ˜์Œ์—๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ RDB์—์„œ๋งŒ ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ, ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ์‹œ์ ๋งˆ๋‹ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์ •๋ ฌํ•˜๋Š” ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ๊ณ , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— Redis๋ฅผ ๋„์ž…ํ–ˆ๋‹ค.Redis๋ž€?Redis๋Š” Remote Dictionary Server์˜ ์•ฝ์ž๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ €์žฅ์†Œ๋‹ค. ..

StudyNote 2025. 6. 26. 19:06
OAuth2 Code Grant์—์„œ์˜ ํ”„๋ก ํŠธ/๋ฐฑ์—”๋“œ ์ฑ…์ž„ ๋ถ„๋ฆฌ์™€ JWT ๋ฐœ๊ธ‰ ๊ณ ๋ฏผ๊ธฐ

์นด์นด์˜คํ…Œํฌ ๋ถ€ํŠธ์บ ํ”„ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ OAuth2 Code Grant ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ํ•œ ๊ฐ€์ง€ ๊ณ ๋ฏผ์— ๋น ์กŒ๋Š”๋ฐ, ๋ฐ”๋กœ Access Token๊ณผ JWT ๋ฐœ๊ธ‰ ์‹œ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ์˜ ์ฑ…์ž„์„ ์–ด๋””๊นŒ์ง€ ๋ถ„๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€์— ๊ด€ํ•œ ๋ฌธ์ œ์˜€๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋‚ด๊ฐ€ OAuth2 ์ธ์ฆ ํ๋ฆ„์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ ๊ฒช์€ ๊ณ ๋ฏผ๊ณผ, ๋ณด์•ˆ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•ด ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.OAuth2 Code Grant ๊ธฐ๋ณธ ํ๋ฆ„๋กœ๊ทธ์ธ ์š”์ฒญ → ์ธ๊ฐ€ ์ฝ”๋“œ(Authorization Code) ๋ฐœ๊ธ‰๋ฐœ๊ธ‰๋œ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ Authorization Server์— ์ „๋‹ฌ → Access Token ๋ฐœ๊ธ‰Access Token์œผ๋กœ Resource Server์—์„œ ์œ ์ € ์ •๋ณด ํš๋“์‚ฌ์šฉ์ž ..

StudyNote 2025. 5. 31. 17:08
์นด์นด์˜คํ…Œํฌ ๋ถ€ํŠธ์บ ํ”„ 2๊ธฐ - 8, 9์ฃผ์ฐจ

์˜คํ”„๋ผ์ธ ๊ธฐ๊ฐ„์ด ์‹œ์ž‘๋˜๊ณ  ๋„ˆ๋ฌด ์ •์‹ ์ด ์—†์–ด์„œ ์ด๋ ‡๊ฒŒ ๋ชฐ์•„์„œ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ์‚ฌ์‹ค ํŠน๋ณ„ํ•œ ์ด๋ฒคํŠธ๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ๋งค์ผ ๋น„์Šทํ•œ ์ผ์ƒ์˜ ๋ฐ˜๋ณต์ด๋ผ ์•ž์œผ๋กœ๋„ ์ด๋ ‡๊ฒŒ 2์ฃผ์— ํ•œ ๋ฒˆ์”ฉ ํšŒ๊ณ ๋ฅผ ํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.๊ฐœ์ธ ๊ณผ์ œ ๋งˆ๋ฌด๋ฆฌ ์ค‘FE: https://github.com/juintination/say-anything-party GitHub - juintination/say-anything-party: ์นด์นด์˜คํ…Œํฌ ๋ถ€ํŠธ์บ ํ”„ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ณผ์ œ(์•„๋ฌด๋ง ๋Œ€์ž”์น˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„์นด์นด์˜คํ…Œํฌ ๋ถ€ํŠธ์บ ํ”„ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ณผ์ œ(์•„๋ฌด๋ง ๋Œ€์ž”์น˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋ก ํŠธ์—”๋“œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๋ฅผ ์œ„ํ•œ ์ €์žฅ์†Œ - juintination/say-anything-partygithub.comBE: https://github.com/juintination/sap-api-server G..