๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋กœ ์ธํ•œ API ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ: ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค ๋ฐ ์ธ๋ฑ์Šค ํŠœ๋‹์„ ํ†ตํ•œ ์ตœ์ ํ™”
ยท
Project
๊ฐœ์š”์ตœ๊ทผ ๊ฐœ๋ฐœ ์ค‘์ด๋˜ ์„œ๋น„์Šค์˜ ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ API์—์„œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ์ด์ „์—๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜๋˜ ๋ฌธ์ œ์ ๋“ค์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋˜ API๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜์ž ์‘๋‹ต ์†๋„ ์ง€์—ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜, ์ผ๋ถ€ ์š”์ฒญ์—์„œ์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋“ฑ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ํ˜„์ƒ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ํ˜„์ƒ์€ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ์–‘์ด ๋Š˜์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ, ์ฆ๊ฐ€๋œ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์— ๊ธฐ์กด ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉด๋ฐ€ํ•œ ๋ถ„์„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์‹œ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด์—๋Š” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋˜ ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„๋‚˜ ํŠน์ • ๋กœ์ง์˜ ๋น„ํšจ์œจ์„ฑ์ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ๋ฐœํ˜„๋œ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๊ณ„์ธต์˜ ์ง€ํ‘œ๋“ค์„ ์ข…ํ•ฉ์ ..
GitHub Actions + Docker + NGINX๋ฅผ ํ™œ์šฉํ•œ Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•
ยท
Project
๋“ค์–ด๊ฐ€๋ฉฐ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ฐฐํฌ ์ž‘์—… ์ค‘ ์„œ๋ฒ„ ๋‹ค์šด ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „๊นŒ์ง€๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ํŠธ๋ž˜ํ”ฝ ์ค‘๋‹จ์ด๋‚˜ ์—๋Ÿฌ ๋ฐœ์ƒ์ด ๋™๋ฐ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์„œ๋น„์Šค๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์šด์˜๋˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†์ค‘์ผ ๋•Œ ๋ฐฐํฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด, ์ž ์‹œ ๋™์•ˆ ์„œ๋น„์Šค ์ด์šฉ์— ๋ถˆํŽธ์„ ๊ฒช๊ฑฐ๋‚˜, ์ผ๋ถ€ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐฐํฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฐฐํฌ ์ „๋žต์„ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ, ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋ผ ํŒ๋‹จํ•˜์˜€๊ณ , ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด GitHub Actions์™€ Blue-Green ๋ฐฐํฌ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CI/CD ๋„๊ตฌ..
Call by Value์™€ Call by Reference
ยท
Java
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, Call by Value์™€ Call by Reference๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š”ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํŠน์ง•๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ Java์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.  Call by ValueCall by Value๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ฃผ๋กœ ๊ธฐ๋ณธํ˜• ๋˜๋Š” ์›์‹œ ํƒ€์ž…(primitive type)์˜ ๋ฐ์ดํ„ฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’ซ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.#include using namespace std;void modify(int a)..
Java์˜ GC
ยท
Java
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์˜ ํ•„์š”์„ฑ๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์ด๋ž€?GC๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ GC๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ํž™(Heap) ์˜์—ญ์„ ์˜๋ฏธํ•˜๊ณ , GC๊ฐ€ ํ•ด์ œํ•˜๋Š” ๋Œ€์ƒ์€ ์–ด๋–ค ๋ณ€์ˆ˜์—์„œ๋„ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.  C๋‚˜ C++๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑด ๊ฝค ๋ฒˆ๊ฑฐ๋กœ์šธ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ํ•ด์ œํ•˜๋ ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” ์ด๋Ÿฐ ์ž‘์—…์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž..
์ฑ„ํŒ… ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌ์กฐ ๊ฐœ์„ ๊ธฐ
ยท
Project
๊ฐœ์š”์ฑ„ํŒ…๋ฐฉ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ ๋ฉ”์„ธ์ง€๋ฅผ ์ถ”์ ํ•˜์—ฌ, ์ฝ์ง€ ์•Š์€ ๋ฉ”์„ธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐ ๋ฉ”์„ธ์ง€์— ๋Œ€ํ•ด '์ฝ์ง€ ์•Š์€ ๊ฐœ์ˆ˜ (Unread Count)'๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ๋Š” ๊ฐ ๋ฉ”์„ธ์ง€๋งˆ๋‹ค ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ์ฝ์€ ์œ ์ €์˜ ID ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ์ฝ์€ ์œ ์ € ID ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ†ตํ•ด '์ฝ์ง€ ์•Š์€ ๊ฐœ์ˆ˜ (Unread Count)'๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ์ฑ„ํŒ…๋ฐฉ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์€ ์ฑ„ํŒ…๋ฐฉ์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ค๊ฐ€๋ฏ€๋กœ, ์ˆ˜์ •ํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ฐœ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง๋จผ์ €, ๊ธฐ์กด์˜ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์„ค..
Embedded Mongo/Redis ์ ์šฉํ•˜๊ธฐ
ยท
Project
๋“ค์–ด๊ฐ€๋ฉฐ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ๊ณผ ํšจ์œจ์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ, ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ GitHub์—์„œ ํด๋ก ํ•œ ๋’ค, ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.  ์ดˆ๊ธฐ์—๋Š” ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ Redis, MySQL, MongoDB์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ฐ๋ชฌ์€ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๊ณ , ๊ทธ๋กœ ์ธํ•ด ์„ค์ •์—๋งŒ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜, ํ™˜๊ฒฝ ์„ธํŒ…์„ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•œ ํ›„ ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ , ์ด๋ฅผ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ..