๐ŸงญProject/#2 :: SMS Api Service

์‚ฌ๋‚ด SMS Api Service

harry.93 2022. 6. 12. 23:33
๋ฐ˜์‘ํ˜•

1. ๊ฐœ์š”

์ตœ๊ทผ ์‚ฌ๋‚ด SMS ์„œ๋น„์Šค ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์ด ์ƒ๊ฒจ์„œ ํ•ด๋‹น ์ž‘์—…์„ ๋งก์•„์„œ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฌผ๋ก  ํ˜ผ์ž ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ „๋ฐ˜์ ์ธ ๊ณ„ํš๊ณผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๊ฐ™์ด ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ์žˆ์–ด์„œ ์—ฌ๊ธฐ์—๋‹ค๊ฐ€๋„ ์˜ฌ๋ฆฌ๋ฉด์„œ ์ž‘์—…ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์„œ๋น„์Šค์˜ ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€์žˆ๋Š” ์ž์‚ฌ ์„œ๋น„์Šค์—์„œ ์‚ฌ๋‚ด SMS Service ์ชฝ์œผ๋กœ ์ „์†ก Request๋ฅผ ์ธ์ฆ๋œ ํ‚ค์™€ ํ•จ๊ป˜ ๋ณด๋‚ด๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ์„œ๋น„์Šค์—์„œ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. 

๋”ฐ๋ผ์„œ, Restful Api ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ์˜ˆ์ •์ด๋ฉฐ, ํ•ด๋‹น ์„œ๋น„์Šค๋Š” Docker ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ƒํ™” ํ•˜์—ฌ ์˜ฌ๋ ค๋†“๊ณ  ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํฐ ๋ชฉํ‘œ๊ฐ€ ์žˆ๋‹ค. SMS์ „์†ก์€ ์™ธ๋ถ€์—์„œ ๋„์ž…ํ•œ ์—์ด์ „ํŠธ๊ฐ€ ๋‹ด๋‹นํ•˜๋ฉฐ ์ด์™€๋Š” ๋ณ„๊ฐœ๋กœ SMS ์ „์†ก ์ด๋ ฅ์ด๋‚˜ ํ‚ค ๊ด€๋ฆฌ ๋“ฑ์€ ์ž์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

๋Ÿฌํ”„ํ•˜๊ฒŒ ๊ทธ๋ ค๋ณธ ๊ตฌ์„ฑ๋„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๊ตฌ์„ฑ ์ด์™ธ์—๋„, ๋„์ปค๋กœ ์˜ฌ๋ฆด ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ์„ ์–ด๋–ป๊ฒŒ ํ•  ์ง€ ๋˜ํ•œ ๊ณ ๋ฏผํ•ด๋ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ์–ด์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ์ง„ํ–‰ํ•ด ๋ณผ ์˜ˆ์ •์ด๋‹ค. ์—…๋ฌด๋Ÿ‰๋„ ๋งŽ์•„์„œ ์ œ๋Œ€๋กœ ์ง„ํ–‰ ๋ ๋ฆฌ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ๊ฒธ ๊ตฌ์„ฑํ•ด๋ณด๋ฉด ๋‚˜์ค‘์— ๋‹ค๋ฅธ ์ž‘์—…์—์„œ๋„ ์ฐธ๊ณ ๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ ํ•œ๋‹ค.

2. docker base ์ด๋ฏธ์ง€ ๊ตฌ์ถ•ํ•˜๊ธฐ

SMS ์„œ๋น„์Šค๋ฅผ Docker ์„œ๋ฒ„์— ์˜ฌ๋ฆด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์ถ• ๋ฐฉํ–ฅ์„ ์žก์•˜๋‹ค.

  1. Docker centos7 ๋ฒ„์ „ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค.
  2. ํ•ด๋‹น ๋ฒ ์ด์Šค์— SMS ์—์ด์ „ํŠธ ๋ชจ๋“ˆ์„ ์˜ฎ๊ธด๋‹ค.
  3. ์„ธํŒ…์„ ๋ชจ๋‘ ๋งˆ์นœ ์ƒํƒœ์—์„œ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ์ด๋ฏธ์ง€ํ™” ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
  4. Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ Jar ํ˜•์‹์œผ๋กœ ๋นŒ๋“œํ•˜์—ฌ Dockerfile์„ ํ†ตํ•ด centos7 ์ด๋ฏธ์ง€๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์žฌ๊ฐ€๊ณต ํ•œ๋‹ค.
  5. docker๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์— ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ณ  ์šด์˜ํ•œ๋‹ค.

Docker ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ ์˜ˆ์‹œ.

SMS ์—์ด์ „ํŠธ๊ฐ€ ๋“ค์–ด๊ฐ„ ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ ์˜ˆ์‹œ

centos7 ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ž‘์—….

docker pull ๋ช…๋ น์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›๊ณ , sms ์—์ด์ „ํŠธ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์„œ๋ฒ„์— ์„ธํŒ…ํ–ˆ๋‹ค.

# centos ์ด๋ฏธ์ง€ pull
$ docker pull centos:centos7

# sms ์—์ด์ „ํŠธ ๊ฒฝ๋กœ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ํŒŒ์ผ์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋„๋ก running ํ•œ๋‹ค
$ docker run centos:centos7 -v {path}:/var/lib/smsagent --name centos7-with-agent

# ๊ณต์œ  ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ, ์‹ค์ œ ๊ฒฝ๋กœ์—์„œ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋Š” ๊ฒฝ์šฐ
# ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉ ๋˜๋ฏ€๋กœ ์‹ค์ œ ์˜ฎ๊ธฐ๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

# ๋„์ปค ๋‚ด๋ถ€ ์ ‘์†
$ docker exec -it centos7-with-agent /bin/bash
> cd /var/lib/
> cp -r smsagent /var/lib/smsAgent

 

๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์—ฌ๊ธฐ๊นŒ์ง€ ์ž‘์—…ํ•œ OS ์ด๋ฏธ์ง€๋ฅผ ์ด๋ฏธ์ง€ํ™” ํ•˜์˜€๋‹ค.

# ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ์ด๋ฏธ์ง€ํ™” ํ•˜๊ธฐ
$ docker commit {container-name}
sha256:6b2ec9b792e26a7c442176bd6c92b5061589d54d5a9f15a8831a89f38e2966e8

# ์ด๋ฏธ์ง€ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ํƒœ๊ทธ ์ง€์ •
$ docker images -a
REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
<none>                  <none>    6b2ec9b792e2   20 seconds ago   209MB

# ์ด๋ฏธ์ง€ ๋„ค์ž„์€ name:tag ํ˜•์‹์œผ๋กœ ์ง€์ • ๋ฐ ๋‹ค๋ฅธ ํ˜•์‹ ๊ฐ€๋Šฅ.
$ docker tag 6b2ec9b792e2 {image-name}

 

์ด์ œ, ์ด ์ด๋ฏธ์ง€์—๋‹ค Spring Boot๋ฅผ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค.

์˜ฌ๋ฆฌ๊ธฐ์— ์•ž์„œ ๋ถ€ํŠธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•œ jdk 11์„ ํ•ด๋‹น OS์— ์„ค์น˜ ํ•œ๋‹ค.

# JDK11 ์„ค์น˜
> yum install java-11-openjdk-devel.x86_64

> java -version
java-11-openjdk-devel

 

์ด์ œ OS ์ด๋ฏธ์ง€๋Š” ์ค€๋น„๊ฐ€ ๋๋‚ฌ๊ณ , dockerfile์„ ์ž‘์„ฑํ•˜์—ฌ ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ฆด ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

FROM centos-with-agent:1.0 # ์•„๊นŒ ๋งŒ๋“  ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ด๋ฆ„
EXPOSE 8080:8080 # ํฌํŠธ ์„ค์ •
ARG JAR_FILE=build/libs/sms.jar # ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ jar ํŒŒ์ผ
COPY ${JAR_FILE} sms.jar # ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์˜ฎ๊น€
CMD /var/lib/lguplus/bin/uagent.sh start && java -jar /sms.jar # ์—์ด์ „ํŠธ ์‹คํ–‰ ๋ฐ ํ”„๋กœ์ ํŠธ ์‹คํ–‰
#๊ธฐ๋ณธ์ ์œผ๋กœ jar ํŒŒ์ผ ์‹คํ–‰ํ•˜์—ฌ ๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๋กœ
#์ธ์ˆ˜๋ฅผ ์ฃผ์—ˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๋Œ๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
#CMD๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 
#ENTRYPOINT [ "java", "-jar", "/sms.jar" ]

 

dockerfile ์ค€๋น„๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ํ•ด๋‹น ํŒŒ์ผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ๋‹ค.

$ docker build -t sms-service:1.0 .(๋„์ปคํŒŒ์ผ์žˆ๋Š”๊ฒฝ๋กœ)

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ๋นŒ๋“œ๋˜์–ด ๋‚˜์˜ค๊ณ  ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„ ๋„์ปค๋กœ ์˜ฎ๊ฒจ์„œ ์‹คํ–‰ํ•˜๋ฉด ์™„๋ฃŒ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ๊ธˆ๋ฐฉ๋๋‚ฌ๋‹ค. ์‚ฌ์‹ค ์ค‘๊ฐ„์— ์—์ด์ „ํŠธ๋ฅผ ์„ธํŒ…ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ž์—ด ๋ฌธ์ œ๋‚˜ ๋ฐฉํ™”๋ฒฝ ํ—ˆ์šฉ ๋“ฑ๊ณผ ๊ฐ™์€ ์ด์Šˆ๋Š” ์ œ์™ธํ•˜๊ณ  ๊ฐ„๋žตํžˆ ๊ธฐ์ˆ ํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ๋ถ€๋ถ„์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์œ„ ์ž‘์—…๋งŒ ํ•˜๋ฉด ์‚ฌ์‹ค ๋์ด๊ธฐ ๋•Œ๋ฌธ์—... 

์ž‘์—… ์ค‘, ํ•ด๋‹น ์„œ๋น„์Šค๊ฐ€ ๊ธ‰ํ•˜๊ฒŒ ํ•„์š”ํ•˜๋‹ค๋Š” ์š”์ฒญ์„ ๋ฐ›์•„์„œ ๋ฐ˜๋‚˜์ ˆ์„ ๊ฑฐ์˜ ์—ฌ๊ธฐ์— ์‹ ๊ฒฝ์„ ์ผ๋˜๊ฒƒ ๊ฐ™๋‹ค. ๊ทผ๋ฐ ๋ง‰์ƒ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„๋งŒ ๋„˜๊ณ ๋‚˜๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ์ž‘์—…ํ•œ๊ฒŒ ๋งŽ์ด ์—†์–ด์„œ ์กฐ๊ธˆ ์•„์‰ฝ๋‹ค.

3. Swagger ๋ฅผ ํ™œ์šฉํ•œ API ๊ฐ€์ด๋“œ ๊ณต์œ 

SMS ์„œ๋น„์Šค ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•œ ๊ด€๊ณ„๋กœ ๋‚ด๋ถ€ ๊ณต์œ  ์‹œ์— ๋ฌธ์„œ ์ž‘์„ฑ ๋ฐ ๊ธฐํƒ€ ๋ถˆํŽธํ•จ์„ ๋œ๊ธฐ ์œ„ํ•ด Swagger ๋กœ ๊ณต์œ ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. https://swagger.io/

 

API Documentation & Design Tools for Teams | Swagger

 

swagger.io

 

ํ•ด๋‹น ํˆด์„ ์ด์šฉํ•˜๋ฉด API ๊ณต์œ ๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ž์ฒด์—์„œ ํ…Œ์ŠคํŠธ ๋˜ํ•œ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์ฒ™ ํŽธ๋ฆฌํ•˜๋‹ค. ๋˜ํ•œ yaml ํ˜•์‹ ๋˜๋Š” json ํ˜•์‹์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ณ€ํ™˜ํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ๋” ์—๋””ํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์„ ์ œ๊ณตํ•œ๋‹ค.

https://editor.swagger.io/

 

Swagger Editor

 

editor.swagger.io

 

๋‚ด๋ถ€ ์„œ๋น„์Šค์˜ ๊ณต์œ  ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ๋œ Swagger ๋Š” ๊ณต์œ ํ•˜์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ, ์ž‘์„ฑ ํ›„์— ์–ด๋–ป๊ฒŒ ํ•˜์˜€๋Š”๊ฐ€์— ๋Œ€ํ•ด ๊ณต์œ  ํ•œ๋‹ค.

Swagger ์—์„œ ์ž‘์„ฑํ•œ ๋ฌธ์„œ๋“ค์€ yaml ํ˜น์€ json ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ, ์ด ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด swagger๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ฑฐ๋‚˜ ์‚ฌ์ดํŠธ์—์„œ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค๋งŒ, ๋‚ด๋ถ€ ๊ณต์œ  ์šฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์„œ์ธ๋ฐ ์ด๋ฅผ ์ผ์ผํžˆ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์—ด๊ณ  ๋ณด๋ผ๊ณ  ํ•˜๊ธฐ์—๋Š” ๋ถˆํŽธํ•œ ์ƒํ™ฉ์ด์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณต์œ ๋ฅผ ํ•˜์˜€๋‹ค.

  1. ๋‚ด๋ถ€ Docker ์„œ๋ฒ„์— swagger ๋ฅผ ๊ตฌ๋™ ์‹œํ‚จ๋‹ค.
  2. ๊ตฌ๋™ ์‹œ, ์ž‘์„ฑํ•œ ํŒŒ์ผ์„ ๋ฌผ๊ณ  ๋“ค์–ด๊ฐ€ ๊ตฌ๋™๊ณผ ๋™์‹œ์— ํ•ด๋‹น ํŒŒ์ผ์„ ๋กœ๋“œํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณด๋Š”๋ฐ ์žˆ์–ด์„œ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋ถˆํŽธํ•จ์„ ๋œ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

Swagger Docker ๊ตฌ๋™ + ํŒŒ์ผ ๊ฐ™์ด ์‹คํ–‰ํ•˜๊ธฐ

docker run -d -p 5162:8080 -e SWAGGER_JSON=/tmp/syworks-sms-service.json -v /var/lib/docker-syworks-sms/:/tmp --name syworks-sms-swagger swaggerapi/swagger-ui

์ž‘์„ฑํ•œ Swagger ํŒŒ์ผ์„ ์„œ๋ฒ„๋‚ด ๊ฒฝ๋กœ๋กœ ์˜ฎ๊ธด ํ›„, docker ์ชฝ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‹คํ–‰ ์‹œํ‚ค๋Š” ๊ตฌ๋™ ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ์ž‘์„ฑ ํ›„ , swagger ๋ฅผ run ํ•˜๋ฉด ์ ‘์†๋งŒ ํ•ด๋„ ์ž๋™์œผ๋กœ ํ•ด๋‹น ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

728x90
๋ฐ˜์‘ํ˜•