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

๋ชฉ๋ก๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (38)

<Hello Hosung๐Ÿ˜Ž/>

[Expo + React Native] 1. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๊ตฌ์กฐ ์™„๋ฒฝ ์ดํ•ด

1. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Expo + React Native๋ฅผ ์ด์šฉํ•ด ์•ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”ํ•˜๊ณ ,ํ•„์š” ์—†๋Š” ํŒŒ์ผ ์ œ๊ฑฐ + ํด๋” ๊ตฌ์กฐ์™€ ์ฃผ์š” ํŒŒ์ผ ์—ญํ• ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์€ ์ œ์™ธํ•˜๊ณ , ์ดˆ๋ณด์ž๊ฐ€ ํด๋”/ํŒŒ์ผ ์—ญํ• ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 1๏ธโƒฃ ํ™˜๊ฒฝ ์ค€๋น„1-1. Node.js ์„ค์น˜ ํ™•์ธnode -vnpm -v ๊ถŒ์žฅ Node.js ๋ฒ„์ „: LTS (์˜ˆ: v20.x)๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด nvm ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜:nvm install --ltsnvm use --lts 1-2. Expo CLI ์„ค์น˜ ํ™•์ธ์ตœ๊ทผ Expo๋Š” npx create-expo-app ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.npx create-expo-app --version ๊ธฐ์กด์— expo-cli ์„ค์น˜๋˜์–ด ์žˆ์–ด๋„ ์ด์ œ npx ์‚ฌ..

[k8s] ๋‹จ์ผ ํ”„๋กœ์ ํŠธ vs ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋น„๊ต

1๏ธโƒฃ ๋“ค์–ด๊ฐ€๋ฉฐSpring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(K8s) ์œ„์— ๋ฐฐํฌํ•  ๋•Œํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ API๋ฅผ ๋งŒ๋“ค์ง€, ์•„๋‹ˆ๋ฉด API๋ณ„๋กœ ๋ณ„๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ๋˜๋Š” ์ƒํ™ฉ์š”์ฒญ ๋ถ„์‚ฐ, ์Šค์ผ€์ผ๋ง, ์žฅ์•  ๊ฒฉ๋ฆฌ ์ธก๋ฉด์—์„œ ๋น„๊ต2๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ๋ณธ ๊ตฌ์กฐDeployment: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„, ํŒŒ๋“œ(Pod) ์ƒ์„ฑ/๊ด€๋ฆฌService: Deployment ๋‚ด๋ถ€ ํŒŒ๋“œ์— ์š”์ฒญ์„ ์ „๋‹ฌ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑIngress + Nginx: ์™ธ๋ถ€ ์š”์ฒญ์„ Service๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์—ฌ๋Ÿฌ ํŒŒ๋“œ์— ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ [์š”์ฒญํ๋ฆ„๊ทธ๋ฆผ]์™ธ๋ถ€ ์š”์ฒญ → Ingress(์ง€๋„) → Nginx(ํŠธ๋ž˜ํ”ฝ ๋ฐฐ๋ถ„) → Service → ์—ฌ๋Ÿฌ ํŒŒ๋“œ Ingress: URL/๋„๋ฉ”์ธ ๊ทœ์น™ ๊ด€๋ฆฌNginx: ํŒŒ๋“œ ๋‹จ์œ„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ3๏ธโƒฃ ํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ API (..

โš“๏ธ k8s 2025. 8. 16. 00:55
[ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] Jenkins Git Clone ์‹คํŒจ: fatal: not in a git directory ํ•ด๊ฒฐ๋ฒ•

๐Ÿงฉ ๋ฌธ์ œ ์ƒํ™ฉJenkins์—์„œ GitHub ์ €์žฅ์†Œ๋ฅผ ์ฒดํฌ์•„์›ƒํ•˜๋Š” ์ฒซ ์Šคํ…์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ ๋ฐœ์ƒThe recommended git tool is: NONE → Git ์„ค์น˜ ๋ฌธ์ œ๋Š” ์•„๋‹˜ (์ด๋ฏธ ํ•ด๊ฒฐ)์ž๊ฒฉ ์ฆ๋ช…๋„ ์ •์ƒ ์—ฐ๊ฒฐ๋จ (using credential)Git ์ €์žฅ์†Œ๋Š” public์ด๊ฑฐ๋‚˜ token ๋“ฑ๋ก๋„ ์ •์ƒ๊ทธ๋Ÿฐ๋ฐ๋„ ๊ณ„์† clone ์‹คํŒจ.๐Ÿ” ์›์ธJenkins์˜ workspace ๋””๋ ‰ํ† ๋ฆฌ์— ์ด์ „ ๋นŒ๋“œ ์‹คํŒจ๋กœ ์ธํ•œ .git ๋””๋ ‰ํ† ๋ฆฌ ์†์ƒ์ด ๋‚จ์•„ ์žˆ์—ˆ์Œ.์ฆ‰:Jenkins๋Š” ์ด๋ฏธ clone ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ฐฉ๊ฐํ•˜๊ณ fetch, config ๋“ฑ์˜ git ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์ง€๋งŒ.git ํด๋”๊ฐ€ ์—†์œผ๋‹ˆ ์‹คํŒจํ•œ ๊ฒƒโœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•docker exec -it -u root jenkins-container bashcd /var/j..

๐ŸฑCI, CD 2025. 8. 12. 11:03
[Docker] ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ ๋น„๊ต

Docker Compose, Docker Swarm, Kubernetes ๋ชจ๋‘ ๋‹ค ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์ธ๋ฐ, ๊ทธ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ํ™•์‚ฐ๋˜๋ฉด์„œ, Docker Compose, Docker Swarm, Kubernetes ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋“ค์ด ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์„ธ ๊ฐ€์ง€ ๋„๊ตฌ๋Š” ๋ชจ๋‘ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ๊ฐ์ž์˜ ๋ชฉ์ , ๊ทœ๋ชจ, ๊ธฐ๋Šฅ์—์„œ ํฐ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ฐ ๋„๊ตฌ์˜ ํŠน์ง•์„ ๋น„๊ตํ•˜๊ณ , ์–ธ์ œ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. Docker Compose๋ชฉ์ : ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํŠน์ง•:- ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ฌถ์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต..

๐Ÿณ Docker 2024. 11. 27. 17:54
[Docker] ๋„์ปค์˜ ๋„คํŠธ์›Œํฌ๋ž€?

Docker ๋„คํŠธ์›Œํฌ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ๊ฐ„, ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” Docker์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Docker ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.Docker ๋„คํŠธ์›Œํฌ๋ž€?Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋„คํŠธ์›Œํฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํ†ต๋กœ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ†ต์‹ , ๋ณด์•ˆ ์„ค์ •, ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Docker ๋„คํŠธ์›Œํฌ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›..

๐Ÿณ Docker 2024. 11. 26. 17:34
[React, RN] ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง๊ณผ ๋น ๋ฅธ ๋กœ๋”ฉ์„ ์œ„ํ•œ ์ „๋žต

1. ๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌ๊ณ  ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋А๋ฆฌ๊ฒŒ ๋กœ๋”ฉ๋˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณ„์† ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์ด ํฌ๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘ ์†๋„๋ฅผ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.2. ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ(state)๋‚˜ ์†์„ฑ(props)์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.React.memo: ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.const MyComponent = React.memo(({ data }) => {..

[React, RN] ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ์™„์ „ ์ •๋ณต

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋Š” ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๋Š”๋ฐ, ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ URL๋งŒ ๋ฐ”๊พธ๋ฉด์„œ ๋‹ค์–‘ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ธ€์—์„œ๋Š” ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์†Œ๊ฐœํ• ๊ฒŒ์š”.1. ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ์„ค์น˜ํ•˜๊ธฐ๋จผ์ € ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•ด์•ผ ํ•ด์š”. ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.npm install react-router-dom์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ํŒŒ์ผ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.import { BrowserRouter, Route, Switch } from 'react-router-dom';2. ๊ธฐ๋ณธ ๋ผ์šฐํŒ… ์‚ฌ์šฉํ•˜๊ธฐ..

[SpringBoot] Spring Security๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ

Spring Security๋Š” Spring ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ธ์ฆ(authentication) ๋ฐ ๊ถŒํ•œ(authorization) ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ์—์„œ๋Š” Spring Security๋ฅผ ์„ค์ •ํ•˜๊ณ , ๊ธฐ๋ณธ์ ์ธ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.1. Spring Security ์†Œ๊ฐœSpring Security๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:์ธ์ฆ(Authentication): ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •.๊ถŒํ•œ(Authorization): ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •.2. Spring Security ์„ค์ •ํ•˜๊ธฐ2.1. ์˜์กด์„ฑ ์ถ”๊ฐ€Spring Security๋ฅผ ํ”„๋กœ์ ํŠธ..

[React, RN] ๋ฆฌ์•กํŠธ ํ›…(React Hooks) ์†Œ๊ฐœ๐Ÿ‘

๋ฆฌ์•กํŠธ๋Š” 2013๋…„์— ์ฒ˜์Œ ๋“ฑ์žฅํ•œ ์ดํ›„๋กœ ์ง€์†์ ์œผ๋กœ ์ง„ํ™”ํ•ด์™”๊ณ , ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๋ฆฌ์•กํŠธ ํ›…(React Hooks) ์ž…๋‹ˆ๋‹ค. ํ›…์€ 2018๋…„์— ๋ฆฌ์•กํŠธ 16.8 ๋ฒ„์ „์—์„œ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ์™€ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ด์ „๊นŒ์ง€๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์ƒํƒœ ๊ด€๋ฆฌ๋‚˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ํ›…์„ ํ†ตํ•ด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.ํ›…์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?๋ฆฌ์•กํŠธ ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ, ๋ถ€์ˆ˜ ํšจ๊ณผ(side effect) ๊ด€๋ฆฌ, ์ปจํ…์ŠคํŠธ ์‚ฌ์šฉ ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑ๋˜๋ฉฐ, ์žฌ์‚ฌ์šฉ์„ฑ๋„ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.ํ›…์˜ ์ฃผ์š” ํŠน์ง•ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ..

[React, RN] ๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ๐Ÿ˜€

1. ๋ฆฌ์•กํŠธ ์†Œ๊ฐœ๋ฆฌ์•กํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ, ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 2. JSX (JavaScript XML)JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์•ˆ์—์„œ HTML๊ณผ ๋น„์Šทํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.const element = Hello, world!; * JSX๋Š” React.createElement๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.    3. ์ปดํฌ๋„ŒํŠธ (Component)๋ฆฌ์•กํŠธ์—์„œ UI๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.  ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธfunction Welcome(props) { return Hello, {props.name};} ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธclass..

[Docker] ๋„์ปค๋กœ Jenkins๐Ÿ˜€ ์„œ๋ฒ„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•ด Jenkins ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ ,Jenkins ๋‚ด๋ถ€์—์„œ Docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์„ ์ค€๋น„ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  1. Jenkins ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰Jenkins๋ฅผ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € Jenkins ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1.1 Docker ์„ค์น˜ ํ™•์ธ๋จผ์ €, Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด Docker ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์„ค์น˜ํ•˜์„ธ์š”.docker --version  1.3 Jenkins ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰Jenkins ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ Docker ์†Œ์ผ“ ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ๋„ Docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ..

๐Ÿณ Docker 2024. 11. 20. 17:52
[Node.js] OAuth2 ๋กœ๊ทธ์ธ - 2(Google Login)

๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, OAuth 2.0 ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ Google API์™€ ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Node.js + Express ๊ธฐ๋ฐ˜์˜ ๊ฐ„๋‹จํ•œ Google ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.์‚ฌ์ „ ์ค€๋น„Google Cloud Console์—์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑGoogle Cloud Console์— ์ ‘์†.์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒ.OAuth ๋™์˜ ํ™”๋ฉด ์„ค์ •:์‚ฌ์šฉ์ž ์œ ํ˜• ์„ ํƒ(์™ธ๋ถ€/๋‚ด๋ถ€).ํ•„์ˆ˜ ์ •๋ณด ์ž…๋ ฅ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„, ์ด๋ฉ”์ผ ๋“ฑ).OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID ์ƒ์„ฑ:์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ํƒ.์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI ์ถ”๊ฐ€: ์˜ˆ) http://localhost:3000/auth/google/callbackํด๋ผ์ด์–ธํŠธ ID์™€ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€ ํ‚ค(Client Secret)๋ฅผ ๋ณต์‚ฌ..

[Node.js] OAuth2 ๋กœ๊ทธ์ธ - 1

OAuth2 ๋กœ๊ทธ์ธ์€ OAuth 2.0 ์ธ์ฆ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€ ์„œ๋น„์Šค(์˜ˆ: Google, Facebook, GitHub ๋“ฑ)๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ƒˆ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ธฐ์กด์˜ ์™ธ๋ถ€ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์ด๋‚˜ ์›น์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OAuth2 ๋กœ๊ทธ์ธ์˜ ์ฃผ์š” ๊ฐœ๋…๊ถŒํ•œ ๋ถ€์—ฌ(Authorization)์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.์•ก์„ธ์Šค ํ† ํฐ(Access Token)์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ž„์‹œ ํ‚ค๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.๋ฆฌ๋‹ค์ด๋ ‰์…˜(Redirection)์‚ฌ์šฉ์ž๋Š” OAuth ์ธ์ฆ ์„œ๋ฒ„๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋˜์–ด ๋กœ๊ทธ์ธ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์™„๋ฃŒ ํ›„..

[Spring] AOP ๊ฐœ๋…๋ถ€ํ„ฐ ๋กœ๊น… ์˜ˆ์ œ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ดํ•ดํ•˜๊ธฐ

Spring AOP๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? Spring AOP(Aspect-Oriented Programming)๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. AOP๋Š” '๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์™ธ์— ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ(์˜ˆ: ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ)์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ AOP๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ๋Š” ๋ณ„๋„๋กœ "๊ด€์ (Aspect)"์ด๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ†ต๋œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ AOP๋ฅผ ํ†ตํ•ด ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AOP์˜ ํ•ต์‹ฌ ๊ฐœ๋… Aspect (๊ด€์ ): ํ•ต์‹ฌ ๋กœ์ง์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ..