๐Ÿš€ ๊ฐœ๋ฐœ & ์ธํ”„๋ผ ๋‹จ๊ณ„


๐Ÿ“Œ ์„œ๋น„์Šค๊ฐ„ ๊ฒฐํ•ฉ๋„ ์ตœ์†Œํ™”ํ•˜๊ธฐ

โœ… ๋ณ€๊ฒฝ ์˜ํ–ฅ๋„ ์ตœ์†Œํ™” ( ํ•œ ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก ) + ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ ๊ฐ€๋Šฅ + ์žฅ์•  ๊ฒฉ๋ฆฌ ( ํ•œ ์„œ๋น„์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๊ทธ ์˜ํ–ฅ์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ํ™•์‚ฐ๋˜์ง€ ์•Š๋„๋ก ) ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค์˜ ๊ฒฐํ•ฉ์„ ์ตœ์†Œํ™” ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ค์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ฒ˜๋Ÿผ ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ๋…๋ฆฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.
ํ•˜์ง€๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์— ๋”ฐ๋ผ ๋‘๋ฒˆ์งธ์ฒ˜๋Ÿผ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿด ๊ฒฝ์šฐ๋Š” ์„ธ๋ฒˆ์งธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฐฉํ–ฅ์„ฑ์„ ํ•œ ๊ณณ์œผ๋กœ ํ†ต์ผํ•˜๊ณ  ์ตœ์†Œ๋กœ ๊ฒน์น  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ Data Service ์™€ Mission Service ๋Š” ๋…๋ฆฝ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  Member Service๋ฅผ ๊ฑด๋“œ๋ฆด๋•Œ๋งŒ Data Service ์™€ Mission Service ๋„ ํ•จ๊ป˜ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

โœ… ์ตœ์ข…์ ์ธ MSA ๊ตฌ์กฐ๋„๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์™„์„ฑํ•˜์˜€๋‹ค.


๐Ÿ“Œ ๋‚ ์งœ์™€ memberId ํ•œ์Œ์ด ์ค‘๋ณต์ด ์—†๋Š” ๊ฐ’์ผ๋•Œ ์ด๋ฅผ PK๋กœ ์žก๊ณ ์ž ํ•œ๋‹ค๋ฉด FK , ๋ณตํ•ฉ ํ‚ค , ์ธ๋ฑ์Šค ํ‚ค ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์„ ์ฑ„ํƒํ•  ๊ฒƒ์ธ๊ฐ€?

์ผ๋‹จ FK๋กœ ์žก๋Š”๋‹ค๋ฉด pk์˜ ์ค‘๋ณต์„ฑ์„ ๊ฐ€์ง€๋ฏ€๋กœ pk๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณตํ•ฉํ‚ค์™€ ์ธ๋ฑ์Šคํ‚ค ์ค‘์—์„œ ์„ ํƒํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ID์™€ ๋‚ ์งœ์˜ ์กฐํ•ฉ์€ ์œ ํšจํ•œ ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ณตํ•ฉํ‚ค(composite key)๋กœ์„œ '์‚ฌ์šฉ์žID+๋‚ ์งœ'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ํƒ€๋‹นํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ณตํ•ฉํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ๋””์Šคํฌ I/O๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ '์‚ฌ์šฉ์žID+๋‚ ์งœ'์™€ ๊ฐ™์ด ๋‘ ํ•„๋“œ ๋ชจ๋‘์— ๋Œ€ํ•ด ์ž์ฃผ ์กฐํšŒ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, ๋ณตํ•ฉํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋Ÿฌํ•œ ์กฐํšŒ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ "์œ ์ € id๋ฅผ ์ฝ์€ ๋’ค ๋‚ ์งœ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ’์„ ์ž์ฃผ ์กฐํšŒ"ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, '์‚ฌ์šฉ์žID'์™€ '๋‚ ์งœ' ๊ฐ๊ฐ์„ ๋ณ„๋„๋กœ ์ธ๋ฑ์‹ฑ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ‘‰ ์กฐํšŒ๊ธฐ๋Šฅ์ด ๋„ˆ๋ฌด ์ž์ฃผ ์ผ์–ด๋‚˜๋ฏ€๋กœ ์ธ๋ฑ์Šคํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [ ๋ณตํ•ฉํ‚ค์™€ ์ธ๋ฑ์Šคํ‚ค (feat. ์Šคํ”„๋ง๋ถ€ํŠธ) ] ๊ฒŒ์‹œ๊ธ€์„ ์ฐธ๊ณ ํ•˜์ž


๐Ÿ“Œ ๋ณด์•ˆ์„ ์œ„ํ•ด Jasypt ๋ฅผ ์ ์šฉํ–ˆ๋Š”๋ฐ ์ธ์Šคํ„ด์Šค์—์„œ๋„ ์ด๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ํ™˜๊ฒฝ์„ค์ •์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜?

โœ… ec2 ์ธ์Šคํ„ด์Šค์—์„œ ๋ช…๋ น์–ด๋กœ ์น  ๊ฒฝ์šฐ :

-e PASSWORD=์ง€์ •ํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ’ ์„ ์ž‘์„ฑํ•˜์—ฌ ํ™˜๊ฒฝ์„ค์ •์—์„œ ์„ค์ •ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค.

sudo docker run -d -p 8011:8011 --network=mynetwork  -e PASSWORD=์ง€์ •ํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ’ -e TZ=Asia/Seoul --name member docker/special:member

โœ… ์  ํ‚จ์Šค ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค์ •ํ•œ ๊ฒฝ์šฐ :

ํŒŒ์ดํ”„๋ผ์ธ ์Šคํฌ๋ฆฝํŠธ์— password๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = 'docker/special:member'
        PASSWORD = '์ง€์ •ํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ’'
    }

๐Ÿ“Œ ์›ํ•˜๋Š” ์‹œ๊ฐ„(์ƒˆ๋ฒฝ 3์‹œ ๋งˆ๋‹ค) ์— ๋งž์ถฐ DB๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋„๋ก @Scheduled(cron = "0 0 3 * * ?") ํ•ด์ฃผ์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„๋Œ€๊ฐ€ ๋ฏธ๊ตญ ์‹œ๊ฐ„์œผ๋กœ ๋งž์ถฐ์ ธ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜์ž

โœ… MySQL ์‹œ๊ฐ„๋งž์ถ”๊ธฐ :

yml ํŒŒ์ผ์— ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์ค€๋‹ค.

 url: jdbc:mysql://localhost:3306/data?serverTimezone=Asia/Seoul

โœ… ec2 ์ธ์Šคํ„ด์Šค ์‹œ๊ฐ„๋งž์ถ”๊ธฐ :

-e TZ=Asia/Seoul ๋กœ ํ•œ๊ตญ ๋‚ ์งœ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

sudo docker run -d -p 8011:8011 --network=mynetwork  -e PASSWORD=์ง€์ •ํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ’ -e TZ=Asia/Seoul --name member docker/special:member

0๊ฐœ์˜ ๋Œ“๊ธ€