๐Ÿ“˜ Programming 92

Swag ๋„˜์น˜๊ฒŒ ์†Œํ†ตํ•ด๋ณด์ž! Swagger in SpringBoot 3.x ์ •๋ณต (SpringFox, SpringDoc, API ๋ฌธ์„œ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•)

์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…ํ•˜๋Š” ์ด์œ ๋Š” ํ•œ๋™์•ˆ ๋ณ„ ํƒˆ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์–ด๊ฐ€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—.. ์ƒˆ๋กญ๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ์•Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋ณต์Šตํ•˜๋Š” ์ผ์ด ์ ์—ˆ์Šต๋‹ˆ๋‹ค..^^ ์˜ค๋Š˜์€ Swaager ์‚ฌ์šฉ ๋„์ค‘์— ๊ถ๊ธˆํ•œ ์ ์ด ๋งŽ์•„์ง€๋ฉด์„œ ์กฐ์‚ฌํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Swagger ๋“ฑ์žฅ ์ „๊ณผ ํ›„ ์ฐจ์ด๋Š”? Swagger๊ฐ€ ์„ธ์ƒ์— ๋“ฑ์žฅํ•˜๊ธฐ ์ „, ๊ฐœ๋ฐœ์ž ๊ฐ„ ์†Œํ†ต ๋ฐฉ์‹์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ URL ๋ฐ Request, Response๋ฅผ ์ง์ ‘ ๋ฌธ์„œํ™”ํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ API ๋ช…์„ธ ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ํ•„์—ฐ์ ์ธ ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” API ๊ตฌํ˜„์— ์žˆ์–ด์„œ ์–ด๋– ํ•œ ์‹ค์ˆ˜๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์„ ์™„๋ฒฝํžˆ ์ด..

[Git] Github Action์œผ๋กœ ์ž๋™์œผ๋กœ ์ž”๋”” ๋งŒ๋“ค์–ด์ฃผ๊ธฐ (Grass Generator Workflow)

์ž๋™์œผ๋กœ ์ž”๋”” ์‹ฌ๋Š” GG (Grass Generator) ๐Ÿคฃ ๋ˆ„๊ตฌ๋‚˜ ์‚ด๋‹ค๋ณด๋ฉด ๋งŒ์‚ฌ๊ฐ€ ๊ท€์ฐฎ์•„์งˆ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.. ๊ทธ๋Ÿผ์—๋„ ๋‹ค์งํ–ˆ๋˜ ๋ชฉํ‘œ๋ฅผ ํ–ฅํ•œ ๋…ธ๋ ฅ์ด ๋ฌด๋„ˆ์งˆ๊นŒ๋ด ๊ฒŒ์œผ๋ฆ„์„ ์ด๊ฒจ๋‚ด๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์ค€ ๋‹น์‹œ ๊ฐ€์žฅ ๋ถ€์ง€๋Ÿฐํ•œ ๋ชฉํ‘œ์˜€๋˜ '1์ผ 1์ปค๋ฐ‹'์œผ๋กœ ์ž”๋””๋ฅผ ๋ฌด๋Ÿญ๋ฌด๋Ÿญ ์ž๋ผ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€๋Š”๋ฐ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ํšŒ์‚ฌ ์ผ์— ์น˜์—ฌ์„œ ์ž”๋””๋ฐญ์€ ์ปค๋…• ํƒˆ๋ชจ๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์—ด์‹ฌํžˆ ํ•ด์•ผํ•˜๋Š”๊ฑธ ์•Œ์ง€๋งŒ ^^ ์ œ๊ฐ€ ๋ฏธ์ณ ์ปค๋ฐ‹ํ•˜์ง€ ๋ชปํ•œ ๋‚ ์ด ๋ฐœ์ƒํ•  ๋•Œ ์ž”๋””๊ฐ€ ๋น ์ ธ์žˆ์ง€ ์•Š๋„๋ก ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๋ฉด ์ฐธ ํŽธํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ํ•˜์•ผ... GG... Github Action Workflow ์ž‘์„ฑํ•˜๊ธฐ ๋นˆ ํ”„๋กœ์ ํŠธ๋ฅผ Github์—์„œ ํŽธํ•˜๊ฒŒ ์•„๋ฌด๋ ‡๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. set up a workflow yours..

App ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ - ์‹œ๋งจํ‹ฑ ๋ฒ„์ „ ๊ด€๋ฆฌ (Sementic Versioning)

ํšŒ์‚ฌ์—์„œ ๊ฐ“ ์˜คํ”ˆํ•œ ๋ชจ๋ฐ”์ผ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•ด์˜จ์ง€ ์–ด๋Š๋ง 1๋…„์ด ์ง€๋‚ฌ์ง€๋งŒ ์›น ๋ทฐ(Web View) ํ˜•ํƒœ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ธํ•˜์šฐ์Šค ๋ฐฐํฌํ•˜๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ ๋ณ„๋„๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ทœ์น™์„ ์„ธ์›Œ๋‘์ง€ ์•Š์€์ฑ„ ์˜คํ”ˆ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๋‹คํ•  ๊ทœ์น™์ด ์—†์–ด์„œ ๋นŒ๋“œํ•˜๋Š” ๋Œ€๋กœ.. ์ˆ˜์ •์ด ํ•„์š”ํ•œ๋Œ€๋กœ.. ์•ˆ๋“œ๋กœ์ด๋“œ/iOS ์„ค์น˜ ํŒŒ์ผ์„ ์›น ์„œ๋ฒ„์— ์˜ฌ๋ ค๋‘๊ธฐ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜์ •์ด ์žฆ์•„์ง€๋ฉด์„œ ํŠน๋ณ„ํ•œ ๊ทœ์น™์ด ์—†๊ณ  ์–ด๋–ค ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์—†์–ด ์ ์  ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ ธ์„œ ์ œ๊ฐ€ ์ง์ ‘ ํƒ๊ตฌํ•˜๊ณ  ์ฐพ์•„๊ฐ€๋ฉฐ ๊ทœ์น™์„ ์„ธ์›Œ๋ณด๋ฉด์„œ ๋„์›€์ด ๋œ ์ž๋ฃŒ๋‚˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ (version) ๋ฒ„์ „์ด ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ตœ์ข…์ผ ๊ฒƒ๋งŒ ๊ฐ™์€ ๋‚ด ์ž‘ํ’ˆ์ด ๋˜ ์ˆ˜์ •๋˜๋ฉด ๊ทธ๊ฒƒ ๋˜ํ•œ ์ตœ์ข…... ์ด ์„œ์‚ฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ์ด์œ ๋Š” ํžˆ์Šคํ† ๋ฆฌ ..

[Oracle] ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค (Tablespace) ๊ฐœ๋…, ์œ ํ˜•, ์นดํƒˆ๋กœ๊ทธ ๋ทฐ ์กฐํšŒ ๋ฐฉ๋ฒ•

Oracle ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค (Tablespaces) ํšŒ์‚ฌ์—์„œ ๊ธฐ์กด ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์—๋งŒ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ƒ์„ฑํ•˜๋ ค๋‹ˆ ํŠน์ง•์ด ๋‹ฌ๋ผ ๊ฐœ๋…์ด ํ˜ผ๋™๋˜๋Š” ๊ฒŒ ๋งŽ์•„์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Oracle์˜ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ž€ ? ์ฒ˜์Œ Oracle ์“ธ ๋•Œ๋Š” ํ…Œ์ด๋ธ”๊ณผ ํ—ท๊ฐˆ๋ ธ์Šต๋‹ˆ๋‹ค! Oracle์—๋งŒ ์žˆ๋Š” ๊ฐœ๋…์ด๋‹ค ๋ณด๋‹ˆ ๋Œ€ํ•™ ์‹œ์ ˆ์— ์“ฐ๋˜ MySQL๊ณผ๋Š” ์‚ฌ๋ญ‡ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ผ๋Š” ๊ฐœ๋…์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค (Tablespace) DB์—์„œ ๋ฐ์ดํ„ฐ์™€ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ €์žฅ ์˜์—ญ 1 DB → N ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค / 1 ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค → N ๋ฐ์ดํ„ฐ ํŒŒ์ผ (ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค ๋“ฑ) ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋Š” ํŠน์ • ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ €์žฅ๋˜๋ฉฐ, ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์˜ ๋ฌผ๋ฆฌ์ ์ธ..

[Git] ์„œ๋ธŒ๋ชจ๋“ˆ(submodule) ์‚ฌ์šฉ๋ฒ• - ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ˆจ๊ธฐ๊ธฐ

Git Submodule ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ Git Submodule (์„œ๋ธŒ๋ชจ๋“ˆ)์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ™์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€๋งŒ ๊ณต์œ ํ•  ์ˆ˜ ์—†์„๊นŒ ? Spring ํ”„๋กœ์ ํŠธ์—์„œ application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์— DB์ •๋ณด๋‚˜, API Key๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ์ด public repository์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ๊ป ํ•ด๋‹น ํŒŒ์ผ์„ ๋กœ์ปฌ PC์— ๋‘๊ณ  .gitignore ํŒŒ์ผ์— ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ •๋ณด๋“ค์ด ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€ ์†Œํ†ตํ•˜์—ฌ ๋งž์ถ”์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋Š” ๋‚œ๊ฐํ•œ ์ƒํ™ฉ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๊ฐ€๋ น ์†Œ์…œ ๋กœ๊ทธ์ธ์„ Kakao๋งŒ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ๋กœ๊ทธ์ธ MVP๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ Goo..