ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 협업 준비 (백엔드, 인프라)
    project 2022. 2. 2. 11:23

    팀 프로젝트를 하기 전에 백엔드 입장에서 협업을 위해 필요한 지식을 알아보았다.

     

    <궁금한 점>

     

    1. API 스펙 문서화는 어떻게 할까?

    프론트와 백엔드를 나누면 기존 구조에선 api 를 바로 통신할 수 없다. 또, api 에 대한 정보를 프론트에게 전해줘야 하는데, 실시간으로 변화하고 테스트 데이터도 바뀔 수 있다. 어떻게 해야 할까?

     

    2. 로그인은 어떻게 처리할까?

    기존의 session + filter 방식으로 할까? Spring security 를 알아봐야 겠다.

     

    3. 프론트엔드의 api 접근은 어떻게 가능하게 해야 할까? 더 이상 localhost 가 아니다. 

     

     

     


    <공부한 내용>

     

    협업 툴 (백엔드 관점)

    swagger-ui: api 스펙을 자동으로 문서화

    build.gradle 에 implementation 'org.springdoc:springdoc-openapi-ui:1.5.7' 추가 후 domain:port/swagger-ui/index.html 로 접속 → 문서 확인 가능

    (spring boot 2.6 기준)

    프론트엔드 (vue 등) 에서는 axios library 로 api 를 consume 함

    예를 들어, axios.get(/[localhost:8080](<http://localhost:8080>)/getPath/..., {params}).then(() ⇒ {}).catch() 이런 식으로 localhost:8080 도메인의 api 를 consume 할 수 있음

    프론트와 백엔드가 같은 local pc 이면 문제가 없겠지만, msa 에서 서버가 분리될 경우 다음과 같이 api 통신할 수 있음

    1. 포트포워딩으로 local ip 를 외부에 공유 → 이렇게 하면 백엔드가 서버마다 (로컬 pc가 3대면 3개 다 공유기 설정) 공유기를 다 설정해야 함
    2. 클라우드 이용하기 → aws 로 api 서버 배포 → 과금 안되게 주의하기

    aws 를 사용해서 시도했음.

    port 8093 은 모든 ip 에 open 되어 있고 tomcat 서버의 endpoint 로 사용할 것 → ddos 공격의 대상이 될 수 있음.

    port 22 는 ssh 용도로 특정 ip 에만 open 되고 pem (private key) 가 필요함. 이게 유출될 경우 서버에 악성 프로그램을 scp 로 깔고 외부에 트래픽을 발생시켜 과금을 발생시킬 수 있음.

    aws 스프링 배포 라고 검색하면 관련 글이 많음.

    http://15.165.132.250:8094/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/

    접속하면 api 스펙을 확인할 수 있음.

    aws 사용 → 인스턴스 생성, public key(.pem) 발급 또는 puttygen 로 pkk 생성, chmod 400 으로 권한 부여 → putty 또는 git bash / bash shell 같은걸로 ssh 접속 → java 설치하고 git clone 후 chmod 777 ./gradlew → ./gradlew build → cd build/libs → java -jar 로 서버 실행

     

    이후 git repository 에 로컬 pc 에서 push/commit 하고 ssh 에서 git pull 로 버전 업그레이드 할 수 있음

    jenkins 나 깃 ci/cd 를 사용하면 테스팅도 자동화할 수 있음. -> 깃허브 actions 를 사용했는데, 테스트 서버는 github 에서 지원해주고 deploy 는 어려움. Aws 메모리 1gb 가 ./gradlew build -x test 할 경우 70퍼까지 차던데 (mysql, redis 도 서버에 켰긴 하지만 많이 차지하진 않음) 스프링부트가 생각보다 무거운 어플리케이션이라 그런거 같음. 서버 스펙이 2gb 정도 되면 가능할 거 같음.

Designed by Tistory.