๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ง‍๐Ÿ‘ฆ Project

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
1. ๋ฌธ์ œ ์ƒํ™ฉ ๋‚ด๊ฐ€ ๋งŒ๋“  ์‚ฌ์ดํŠธ์—์„œ๋Š” ์•„๋ฌด๋ž˜๋„ ์šฐ๋ฆฌ ํ•™๊ต ๋Œ€ํ•™์ƒ์„ ์ƒ๋Œ€๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์›๊ฐ€์ž…์‹œ ํ•™๋ฒˆ, ํŒจ์Šค์›Œ๋“œ, ์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•œ๋‹ค. ์ด ์ •๋ณด๋Š” ๊ฐœ์ธ์ •๋ณด ์ด๋ฏ€๋กœ ์•”ํ˜ธํ™” ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํŒจ์Šค์›Œ๋“œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋น„๊ต๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋Š” PasswordEncoder์˜ ๋„์›€์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์•”ํ˜ธํ™” ํ•˜์˜€๋Š”๋ฐ, ํ•™๋ฒˆ์ด๋‚˜ ์ด๋ฉ”์ผ์€ ์ •๋ณด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € AES256์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. 2. ๋ฌธ์ œ ํ•ด๊ฒฐ โœ๏ธ AES-256 ๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ž AES(Advanced Encryption Standard) AES ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™”์— ๋™..
1. ๋ฌธ์ œ ์ƒํ™ฉ ์‹ค์ œ ์šด์˜ํ•ด์•ผ ํ•˜๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์ธ ์ด์Šˆ๋“ค์„ ๊ณ„์† ์ƒ๊ฐํ•˜๊ณ  ์ˆ˜์ •ํ•ด ๋‚˜๊ฐ€๊ณ  ์žˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋งˆ์ดํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ์–ป์–ด์˜ค๋Š” Rest API๋ฅผ /api/members/{memberId} ๋ผ๊ณ  ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ Https ํ”„๋กœํ† ์ฝœ์„ ์ ์šฉํ•˜๋”๋ผ๋„ path variable ๋˜๋Š” query parameter๋กœ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋Š” URI์— ํฌํ•จ๋˜์–ด ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์œผ๋กœ ์ข‹์ง€ ์•Š์„๋ฟ๋”๋Ÿฌ Jwt token ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ† ํฐ์— ์‚ฌ์šฉ์ž ์‹๋ณ„์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š”๋ฐ ๊ตณ์ด ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ๋‹ค์‹œ ๋ณธ์ธ์— ๋Œ€ํ•œ ํ‚ค๋ฅผ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. 2. ๋ฌธ์ œ ํ•ด๊ฒฐ โœ๏ธ HttpServeletRequest๋ฅผ ์‚ฌ์šฉํ•˜์ž HttpServletRequest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ H..
1. ๋ฌธ์ œ ์ƒํ™ฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ์ž ๋„์šฐ๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜์˜€๋‹ค. MariaDB, Redis, Spring Boot Jar, Prometheus, Grafana ๋“ฑ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ๋ฒˆ์— ๋„์šฐ๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ docker network๋ฅผ ์†์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ณผ๋ฅจ, ์˜์กด๊ด€๊ณ„, ๊ธฐํƒ€ ํ™˜๊ฒฝ์„ค์ • ๋“ฑ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ? 2. ๋ฌธ์ œ ํ•ด๊ฒฐ โœ๏ธ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์ž! Docker Compose๋ž€ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ Tool์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. โœ๏ธ Docker Compose ์ฃผ์š” ํŠน์ง• 1๏ธโƒฃ ๋‹จ์ผ ํ˜ธ์ŠคํŠธ์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ Compose..
1. ๋ฌธ์ œ ์ƒํ™ฉ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ํ•™๊ต ์„œ๋ฒ„์‹ค ๋ฌผ๋ฆฌ ์ปดํ“จํ„ฐ(Ubuntu 20.04)์— ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ๋ฌผ๋ฆฌ ์ปดํ“จํ„ฐ๋„ ๋‹จ 1๋Œ€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ๊ณณ์—์„œ ํ•ด์•ผํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ Nginx ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. 2. ๋ฌธ์ œ ํ•ด๊ฒฐ ์šฐ์„  ํ˜„์žฌ Nginx๋Š” Docker ์ปจํ…Œ์ด๋„ˆ์ƒ์—์„œ ๋™์ž‘ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ Nginx ์ปจํ…Œ์ด๋„ˆ์ƒ์˜ /usr/share/html/html ๊ฒฝ๋กœ์™€ ๋‚ด ๋ฌผ๋ฆฌ์„œ๋ฒ„์— React App์„ Buildํ•œ ๊ฒฐ๊ณผ๋ฌผ ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ๋ณผ๋ฅจ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์ด ๋จผ์ € ํ•„์š”ํ•˜๋‹ค. ๋˜ํ•œ Nginx ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์˜ kiosek-backend ์ด๋ฆ„์˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. 1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://test.kr ์„ ์ž…๋ ฅํ•˜์—ฌ ๋‚˜์˜ N..
1. ๋ฌธ์ œ ์ƒํ™ฉ Spring boot ํ”„๋กœ์ ํŠธ๋ฅผ docker image๋กœ build ํ•˜์—ฌ Ubuntu ์„œ๋ฒ„์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰์„ ์‹œ์ผฐ๋”๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested ........ 2. ๋ฌธ์ œ ํ•ด๊ฒฐ ์•Œ๊ณ  ๋ณด๋‹ˆ Docker Image๋ฅผ build ํ–ˆ๋˜ pc๊ฐ€ Apple M1 ๊ธฐ๋ฐ˜ ๋งฅ๋ถ์ด์—ˆ๊ณ  ๊ธฐ๋ณธ์œผ๋กœ Image build์‹œ์— Arm64 ๊ธฐ๋ฐ˜์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐํฌํ•  ์„œ๋ฒ„๋Š” Ubuntu 20.04๋กœ Amd64 ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ..
1. ๋ถ„์‚ฐ๋ฝ์„ ์ ์šฉํ•˜๊ฒŒ ๋œ ์ƒํ™ฉ ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ์‹œ๊ฐ„๋Œ€์ด๊ฑฐ๋‚˜ ๊ฒน์น˜๋Š” ์‹œ๊ฐ„๋Œ€์— ์˜ˆ์•ฝ ์ง„ํ–‰ ์‹œ ์–ด๋–ป๊ฒŒ ์ค‘๋ณต ์˜ˆ์•ฝ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์„์ง€ ๋ฌธ์ œ์˜€๋‹ค. ํ•ด๋‹น ์˜ˆ์•ฝ ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑ ๋˜์–ด์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํšŒ์˜ ํ…Œ์ด๋ธ”์€ ์ด๋ฏธ ์˜ˆ์•ฝ๋œ ๋ฐ์ดํ„ฐ์™€ ์‹œ๊ฐ„์ด ๊ฒน์น˜์ง€ ์•Š์•„์•ผ๋งŒ ์˜ˆ์•ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋™์‹œ์— 100๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋˜‘๊ฐ™์€ (์‹œ๊ฐ„ + ์žฅ์†Œ)๋ฅผ ์˜ˆ์•ฝํ–ˆ์„ ๋•Œ 8๊ฐœ์˜ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. 2. MySQL์„ ์ด์šฉํ•œ ๋ถ„์‚ฐ๋ฝ์„ ๊ตฌํ˜„ํ•œ ์ด์œ  ๋ถ„์‚ฐ๋ฝ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด Redis๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ Redis๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ถ”๊ฐ€์ ์ธ ์ธํ”„๋ผ ๊ตฌ์ถ•๋น„์šฉ์ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‚˜๋Š” ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ MySQL์—์„œ ์ œ๊ณตํ•˜๋Š” NAMED LOCK์„ ์ด์šฉํ•˜์—ฌ Lock์— ์ด๋ฆ„์„ ..
DevPoong
'๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ง‍๐Ÿ‘ฆ Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)