์ฌ๋ด SMS Api Service
1. ๊ฐ์
์ต๊ทผ ์ฌ๋ด SMS ์๋น์ค ๊ฐ๋ฐ์ ๋ํ ํ์์ฑ์ด ์๊ฒจ์ ํด๋น ์์ ์ ๋งก์์ ํ๊ฒ ๋์๋ค. ๋ฌผ๋ก ํผ์ ํ๋ ๊ฒ์ ์๋์ง๋ง, ์ ๋ฐ์ ์ธ ๊ณํ๊ณผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง์ ๋ํด์๋ ๋ค๊ฐ์ด ๊ณ ๋ฏผ์ ํ๊ณ ์์ด์ ์ฌ๊ธฐ์๋ค๊ฐ๋ ์ฌ๋ฆฌ๋ฉด์ ์์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์๋น์ค์ ๊ตฌ์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ๋ก ๋๊ฐ์๋ ์์ฌ ์๋น์ค์์ ์ฌ๋ด SMS Service ์ชฝ์ผ๋ก ์ ์ก Request๋ฅผ ์ธ์ฆ๋ ํค์ ํจ๊ป ๋ณด๋ด๊ฒ ๋๊ณ , ์ด๋ฅผ ์๋น์ค์์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ์ด๋ค.
๋ฐ๋ผ์, Restful Api ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์์ ์ด๋ฉฐ, ํด๋น ์๋น์ค๋ Docker ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ํ ํ์ฌ ์ฌ๋ ค๋๊ณ ์ฌ์ฉํ๊ณ ์ ํ๋ ํฐ ๋ชฉํ๊ฐ ์๋ค. SMS์ ์ก์ ์ธ๋ถ์์ ๋์ ํ ์์ด์ ํธ๊ฐ ๋ด๋นํ๋ฉฐ ์ด์๋ ๋ณ๊ฐ๋ก SMS ์ ์ก ์ด๋ ฅ์ด๋ ํค ๊ด๋ฆฌ ๋ฑ์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ ์์ ์ด๋ค.
๋ฌํํ๊ฒ ๊ทธ๋ ค๋ณธ ๊ตฌ์ฑ๋๋ ์๋์ ๊ฐ๋ค.
๊ตฌ์ฑ ์ด์ธ์๋, ๋์ปค๋ก ์ฌ๋ฆด ์ด๋ฏธ์ง ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ํ ์ง ๋ํ ๊ณ ๋ฏผํด๋ด์ผ ํ๋ ๋ถ๋ถ๋ ์์ด์ ์ฐจ๊ทผ์ฐจ๊ทผ ์งํํด ๋ณผ ์์ ์ด๋ค. ์ ๋ฌด๋๋ ๋ง์์ ์ ๋๋ก ์งํ ๋ ๋ฆฌ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๊ฐ์ธ ํ๋ก์ ํธ ๊ฒธ ๊ตฌ์ฑํด๋ณด๋ฉด ๋์ค์ ๋ค๋ฅธ ์์ ์์๋ ์ฐธ๊ณ ๊ฐ ๋์ง ์์๊น ํ๋ค.
2. docker base ์ด๋ฏธ์ง ๊ตฌ์ถํ๊ธฐ
SMS ์๋น์ค๋ฅผ Docker ์๋ฒ์ ์ฌ๋ฆด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๊ตฌ์ถ ๋ฐฉํฅ์ ์ก์๋ค.
- Docker centos7 ๋ฒ์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๋ฐ๋๋ค.
- ํด๋น ๋ฒ ์ด์ค์ SMS ์์ด์ ํธ ๋ชจ๋์ ์ฎ๊ธด๋ค.
- ์ธํ ์ ๋ชจ๋ ๋ง์น ์ํ์์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ค์ ์ด๋ฏธ์งํ ํ์ฌ ์ ์ฅํ๋ค.
- Spring Boot ํ๋ก์ ํธ๋ฅผ Jar ํ์์ผ๋ก ๋น๋ํ์ฌ Dockerfile์ ํตํด centos7 ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค๋ก ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ฐ๊ณต ํ๋ค.
- docker๊ฐ ์ฌ๋ผ๊ฐ ์๋ ์๋ฒ์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ฃ๊ณ ์ด์ํ๋ค.
Docker ์ด๋ฏธ์ง ๊ตฌ์ฑ ์์.
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 ํ์์ผ๋ก ๋ฌธ์๋ฅผ ์์ฑํ๋ฉด ๋ณํํ์ฌ ๋ณผ ์ ์๊ฒ๋ ์๋ํ ์ ํ ์ ์๋ ํด์ ์ ๊ณตํ๋ค.
Swagger Editor
editor.swagger.io
๋ด๋ถ ์๋น์ค์ ๊ณต์ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ Swagger ๋ ๊ณต์ ํ์ง๋ ๋ชปํ์ง๋ง, ์์ฑ ํ์ ์ด๋ป๊ฒ ํ์๋๊ฐ์ ๋ํด ๊ณต์ ํ๋ค.
Swagger ์์ ์์ฑํ ๋ฌธ์๋ค์ yaml ํน์ json ์ ํ์ผ ํํ๋ก ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์, ์ด ํ์ผ๋ง ์์ผ๋ฉด swagger๋ฅผ ๊ตฌ๋์ํค๊ฑฐ๋ ์ฌ์ดํธ์์ ํด๋น ๋ฌธ์๋ฅผ ๋ก๋ํ์ฌ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ค๋ง, ๋ด๋ถ ๊ณต์ ์ฉ์ผ๋ก ์์ฑํ๋ ๋ฌธ์์ธ๋ฐ ์ด๋ฅผ ์ผ์ผํ ํ์ผ์ ๋ฐ์์ ์ด๊ณ ๋ณด๋ผ๊ณ ํ๊ธฐ์๋ ๋ถํธํ ์ํฉ์ด์ด์ ๋ค์๊ณผ ๊ฐ์ด ๊ณต์ ๋ฅผ ํ์๋ค.
- ๋ด๋ถ Docker ์๋ฒ์ swagger ๋ฅผ ๊ตฌ๋ ์ํจ๋ค.
- ๊ตฌ๋ ์, ์์ฑํ ํ์ผ์ ๋ฌผ๊ณ ๋ค์ด๊ฐ ๊ตฌ๋๊ณผ ๋์์ ํด๋น ํ์ผ์ ๋ก๋ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ณด๋๋ฐ ์์ด์ ์กฐ๊ธ์ด๋๋ง ๋ถํธํจ์ ๋ ์ ์์ ๊ฒ ๊ฐ์๋ค.
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 ํ๋ฉด ์ ์๋ง ํด๋ ์๋์ผ๋ก ํด๋น ํ์ผ์ ๋ก๋ํ์ฌ ์กฐํ ํ ์ ์๋ค.