[Spring] Docker로 빠르게 API 테스트할 수 있게 환경만들기

신창호·2024년 2월 13일
0

Spring

목록 보기
6/9

어느새 명절이 지나고(너무 빨리지나가는 명절...)

다시 사이드프로젝트로 돌아왔다.

정신을 차리고 가장 먼저 해야할 일은 같이 작업하시는 프론트개발자분이 API요청을 직접 해보고 싶은데, 테스트할 수 있는 환경을 부탁해서였다.
물론, API명세서가 없는 건 아니였지만 실제로 테스트해보고 싶다는 부탁에 어떻게 구축해드릴까 고민했었다.

이야기하면서 나온 다양한 방법들
1. 내 컴퓨터를 서버로 하여금 열어주는 것
2. Spring swagger사용
3. 클라우드에 띄워놓기

1번째 방법

  • 내 컴퓨터에 방화벽과 포트를 열어 내 ip로 접근하여 테스트해보는 방식으로 즉각적인 피드백을 적용할 수 있는 장점은 있다.
  • 하지만, 나도 내 Part개발할 것이 많구.. 서버도 항상 켜둬야되는 이슈로 나한테 영향이 크게 올것 같아, 이 방법은 기각했다.

2번째 방법

  • 일단, 프론트분이 원하는 방향과 거리가 있었다. 애초에 API명세서를 원하는게 아닌 실제 테스트해볼 수 있는 환경을 원하는 것 같아 기각!
    • 내 코드도 지저분해지니 별루

3번째 방법

  • 중간 작업을 AWS EC2에 띄워두는 방식으로 즉각적인 피드백이나, 내가 추가로 작성한 코드가 적용되는 것은 무리가 있어도, 서로가 윈윈인 절충안이였다!
    • 내 로컬에서 개발하는데 크게 영향이 없고, 프론트쪽도 테스트환경을 돌려볼 수도 있고!

EC2에 배포하기

그리하여 시작된 Docker로 감싸서 EC2에 배포하기, 개발환경은 다음과 같다.

1.로컬(Mac)에서의 작업

  1. 현재까지 작업한 SpringBoot를 에러없이 실행되는지 확인하기
  2. Dockerfile을 활용하여, 이미지화 시키기
  3. DockerHub에 이미지 업로드하기

2.클라우드(AWS)에서의 작업

  1. 계정을 새로파서 free tier 혜택으로 EC2(ubuntu로 진행) 만들기
  2. EC2환경에 Docker 다운로드하기(이미지 받아야하니까)
  3. 아까 올려둔 이미지 다운받고 컨테이너 실행시키기(서버Application 실행)
  4. 그리고 프론트분이 접근할 수 있게, 보안그룹 설정 바꾸기

위와 같은 순서로 해야함을 인지 했으면 바로 적용하러~ ㄱㄱ

로컬 작업

Dockerfile

  • 먼저 도커파일, SpringBoot 최상단에 파일을 하나 만들어 아래와 같이 입력해준다.
  • 그리고 build하여, build/libs/ 경로에 jar파일이 생성이 됐는지 확인해주자!(이걸로 이미지를 만들것이다.)
# jdk17 Image Start
FROM openjdk:17

ARG JAR_FILE=build/libs/*.jar
# jar 파일 복제
COPY ${JAR_FILE} app.jar
# 실행 명령어
ENTRYPOINT ["java","-jar","/app.jar"]

터미널 환경

  • Docker 실행 상태 확인
$ docker --version
  • zsh: command not found: docker 에러 출력 되면 zshell에서 docker를 찾을 수 없는 것!
    • Docker가 제대로 실행되지 않았거나 탐색 경로에 Docker가 포함되지 않아서
    • 해결방법
      • Docker 재실행(re-apply)
      • ~/.zshrc 파일에 path 경로 추가 export PATH="docker 파일경로"
        • 상황에 따라 다르지만 필자는 /Users/sinchangho/.docker

로그인

$ docker login -u gloomshin

Docker

보유한 이미지 확인

$ docker image ls , docker images

컨테이너 확인

$ docker ps -a


Docker Image 만들기

$ docker build -t {name}/{image}
  • 도커 허브에 업로드하려면 name = 도커 ID랑 동일시 해야함.
    $ docker build -t gloomshin/test-docker-image [dockerfile위치]
    • 이때 , .jar 파일이 없으면 docker파일이 실행하면서 에러가 난다.

MacOS M2 chip Issue

- 애플칩에서 build할 경우, linux/arm64/v8 이미지로 생성됨.

  • 아래 방식처럼 --platform linux/amd64을 추가해서 빌드해야 EC2 운영체제와 호환이 가능
    • 지금 당시 EC2 free-tier로는 arm64/v8을 호환해주는 모델이 없었다.
$ docker build --platform linux/amd64 -t {name}/{image}:{tag} [dockerfile위치]

Docker 허브에 이미지 업로드 하기

docker push [이미지 repository명]

이렇게 하면 로컬에서 할 작업은 끝마치게된다. 다음에는 클라우드(AWS)에서 구축해야할 작업에 대해 알아보고 기록해두록 하자!

profile
한단계씩 올라가는 개발자

0개의 댓글