์‚ฌ๋‚ด SMS Api Service

    ๋ฐ˜์‘ํ˜•

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€