๋ชฉ๋ก๊ฐœ๋ฐœ์ผ์ง€ (22)

DevLog ๐Ÿ˜ถ

๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž! ๋ถ„์‚ฐ๋ฝ ๊ตฌํ˜„ํ•˜๊ธฐ (๋„ค์ž„๋“œ๋ฝ - Named Lock ํ™œ์šฉํ•˜๊ธฐ)

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ DB ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ '๋„ค์ž„๋“œ๋ฝ'์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋„ค์ž„๋“œ๋ฝ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ„์‚ฐ๋ฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธ€์„ ๋ณด๊ณ  ํ•œ ๋ฒˆ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. (๋ญ”๊ฐ€ ํ…Œ์ŠคํŠธ์šฉ ๋ ˆํฌ ๋งŒ๋“ค๊ธฐ ์• ๋งคํ•ด์„œ ๊ทธ๋ƒฅ ์•ˆ ์“ฐ๋Š” ๋ ˆํฌ์—๋‹ค๊ฐ€ ํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.) ๐ŸŒฑ ๋ถ„์‚ฐ๋ฝ์ด๋ž€? ๋ถ„์‚ฐ๋ฝ์ด๋ž€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์„ ์ ‘๊ทผํ•˜๋ฉฐ ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํ™ฉ์„ 'Race Condition (๊ฒฝ์Ÿ ์ƒํƒœ)'๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ์ž๋ฐ”์—์„œ๋Š” 'synchronized'๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋™๊ธฐํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์Šคํ”„๋ง ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด..

[Spring] ์—๋Ÿฌ ๋กœ๊น…ํ•˜๊ธฐ - Logback์„ ์‚ฌ์šฉํ•ด์„œ ERROR ๋ ˆ๋ฒจ๋งŒ ํŒŒ์ผ๋กœ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ๋ณด์ž!

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ด๋ฒˆ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฏธ์…˜์—์„œ๋Š” ํ”„๋ก ํŠธ ํฌ๋ฃจ๋“ค๊ณผ ํ˜‘์—…์„ ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๋ณผ ์ผ์ด ๋งŽ์•„์งˆ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์Šคํ”„๋ง์ด ๋„์›Œ์งˆ ๋•Œ์˜ ๋กœ๊ทธ๋Š” ๋ณผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์—๋Ÿฌ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋งŒ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ฒˆ ๋ฏธ์…˜์— ๋‚˜๋ฆ„์˜ ์‚ฝ์งˆ์„ ๊ณ๋“ค์—ฌ๊ฐ€๋ฉฐ ์ ์šฉํ•ด๋ณด์•˜๋‹ค ๐Ÿ˜Š ๐ŸŒฑ ๋ฌธ์ œ ์ƒํ™ฉ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์•„๋ž˜์˜ ๋ฌธ์žฅ์ด ๋‚˜๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ–ˆ๋‹ค. nohup sudo java -jar $JAR_NAME >> $REPOSITORY/deploy.log 2> $REPOSITORY/deploy-err.log & nohup : ํ„ฐ๋ฏธ๋„์„ ์ข…๋ฃŒํ•ด๋„ ๊ณ„์† ์‹คํ–‰ํ•˜๊ธฐ. java -jar $JAR_NAME : jar ํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ. >> : ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜. jar์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ..

[Jenkins] AWS ์ธ์Šคํ„ด์Šค๋ฅผ ์  ํ‚จ์Šค๋กœ ๋ฐฐํฌํ•ด๋ณด๊ธฐ - 2ํŽธ

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ง€๋‚œ ํฌ์ŠคํŒ…์€ ์  ํ‚จ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ๐ŸŒฑ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ WebHook ๋“ฑ๋กํ•˜๊ธฐ ์šฐ๋ฆฌ๋Š” ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ํŠน์ • ๋ธŒ๋žœ์น˜์— push ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น push ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก 'webhook'์ด๋ผ๋Š” ์นœ๊ตฌ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค. ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์€ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ Settings > Webhooks > Add webhook์„ ํด๋ฆญํ•œ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ payload URL๊ณผ content-type์„ ์ง€์ •ํ•ด์ค€๋‹ค. aws ์ธ์Šคํ„ด์Šค๋กœ ๋„์› ๋‹ค๋ฉด publicIP:8081๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ์œ„ URL์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค. โญ๏ธ ์—ฌ๊ธฐ์„œ ์ œ์ผ ์ค‘์š”ํ•œ ๊ฑฐ, ๋์— ๊ผญ /github-webhook/ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค... ์ด๊ฑฐ ๋•Œ๋ฌธ์—..

[Jenkins] AWS ์ธ์Šคํ„ด์Šค๋ฅผ ์  ํ‚จ์Šค๋กœ ๋ฐฐํฌํ•ด๋ณด๊ธฐ - 1ํŽธ

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ์  ํ‚จ์Šค๋ฅผ ํ†ตํ•ด CI / CD๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ โญ๏ธ๋ฒ ๋ฒ  ์„ ์ƒ๋‹˜โญ๏ธ์˜ ํž˜์„ ๋นŒ๋ ค์„œ ํ•œ ๋ฒˆ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค. ๋‚˜๋Š” t4g.micro๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ ๋žจ์ด 1๊ธฐ๊ฐ€๋ฐ–์— ์•ˆ ๋˜์–ด์„œ swap์„ ํ•ด์ฃผ์—ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ, โญ๏ธ ์ค‘์š”ํ•œ ๊ฑด swap ์‹œ 1~1.5๊ธฐ๊ฐ€ ์ •๋„๋งŒ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋‚˜๋Š” 2๊ธฐ๊ฐ€๋กœ ํ•ด์„œ ์ง€๊ธˆ Use๊ฐ€ 95%๋กœ ๊ฐ„๋‹น๊ฐ„๋‹นํ•˜๋‹ค. ์›๋ž˜ ์•ˆ ๋ผ์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋‚œ๋ฆฌ์น˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋˜๊ธฐ๋Š” ํ–ˆ๋‹ค... 1.5๊ธฐ๊ฐ€๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. # ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” /swapfile์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ sudo swapoff /swapfile # ํฌ๊ธฐ๊ฐ€ 1.5๊ธฐ๊ฐ€์ธ /swapfile ์ƒ์„ฑํ•˜๊ธฐ sudo fallocate -l 1.5G /swapfile # /swapfi..

[Infra] AWS ๋ฐฐํฌ ํ›„ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ HTTPS ์ ์šฉ, nginx๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์ ์šฉํ•˜๊ธฐ

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๋ฌด๊ณผ๊ธˆ์œผ๋กœ HTTPS ์ ์šฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค. ์ •์„๋Œ€๋กœ๋ผ๋ฉด ๊ฐ€๋น„์•„ + Route53 + ACM or ๊ฐ€๋น„์•„ + nginx๋กœ๋งŒ ์ง„ํ–‰ํ•˜๋ฉด ์ข‹์•˜๊ฒ ์ง€๋งŒ... ์—ฌ๋Ÿฌ ์ œ์•ฝ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด์„œ ์ƒ‰๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ HTTPS ์ ์šฉ์„ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค. ๐Ÿ’ก ์ œ์•ฝ์‚ฌํ•ญ - ๋ฌด๋ฃŒ ๋„๋ฉ”์ธ ์‚ฌ์šฉํ•˜๊ธฐ - ์„œ๋ฒ„ 1๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ (๋Š์ž„์—†์ด ๊ณ ํ†ต๋ฐ›๋Š” t4g.micro) - http ์ ‘์† ์‹œ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œํ‚ค๊ธฐ ๋‚˜์ค‘์— Route53 + ACM + ELB๋ฅผ ํ†ตํ•ด ๋„์ž…ํ–ˆ๋˜ ๊ฒƒ๋„ ํฌ์ŠคํŒ…์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. (์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” ๋ชป ํ–ˆ์ง€๋งŒ ใ… ) ๐ŸŒฑ ๋„๋ฉ”์ธ ๊ตฌ์ž…ํ•˜๊ธฐ ์‚ฌ์‹ค ๊ฐ€๋น„์•„์—์„œ ๊ตฌ๋งคํ–ˆ๋˜ ๋„๋ฉ”์ธ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ๋‚˜๋งŒ์˜ ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์ข€ ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ..

[Kotlin & Spring] Amazon S3 ์—…๋กœ๋“œ - ๊ณตํ†ต ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ•ธ๋“ค๋ง, runCatching

์ •๋ง ์ž‘์€ ์—ญํ• ์ด์ง€๋งŒ ์กฐ๊ธˆ์”ฉ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ฝ”ํ‹€๋ฆฐ ๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ์ ์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ๋กํ•˜๊ณ ์ž ํ•œ๋‹ค! (์ฝ”ํ‹€๋ฆฐ... ์ต์ˆ™ํ•ด์ง€๋ฉด ์ •๋ง ํŽธํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„์ง์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์–ด๋ ต๋‹ค!) โœ”๏ธ Amazon S3 with Kotlin ์ฝ”ํ‹€๋ฆฐ๊ณผ s3๋ฅผ ์—ฐ๋™ํ•˜๊ฒŒ ๋˜๋ฉด, ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์„œ๋ฒ„ ์˜ค๋ฅ˜์— ๋Œ€๋น„ํ•˜์—ฌ ํŒŒ์ผ์„ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ, ํ˜น์€ url ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Exception์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•œ ๊ฐ€์ง€ ๊ถ๊ธˆํ•œ ์ ์€, AmazonServiceException์˜ ๊ฒฝ์šฐ ๋ถ€๋ชจ ํƒ€์ž…์ด SdkClientException์ธ๋ฐ ์™œ ๊ตฌ๋ถ„ํ•ด๋‘์—ˆ์„๊นŒ... ์•„๋ฌดํŠผ, ๊ธฐ์กด์—๋Š” ์„œ๋ฒ„ ์—๋Ÿฌ์— ๋Œ€ํ•ด ์ „ํ˜€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€์—ˆ๋‹ค. fun deleteFile(file..