인프런 커뮤니티 질문&답변

just kim님의 프로필 이미지

작성한 질문수

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

[실습] Docker로 프로젝트 빌드하기

프로그램 수정해서 다시 docker에 이미지를 올릴땐 내용처럼 이렇게 하면되나요??

24.07.08 19:05 작성

·

126

·

수정됨

0

안녕하세요. 이젠 기본적인 spring 기능은 이 강의로 많이 알게 되었습니다.

감사합니다. 빨리 강좌 하나 더 내주세요.... 코틀린 & spring 강좌가 너무 없어서 강의 찾아 다니느것도 일이네요 ...

====================================

Docker로 프로젝트 빌드 하기 . 강좌중에 만약 프로그램 수정하면 아래 처럼 하면 되나요?

step 1) Gradle에서 jar 파일을 다시 만든다. ...

image.png

참고 ) 빌드중에 에러가 없어야함... test 코드에서도 에러가 없어야함

step2) docker-compose.yml 파일 새로고침 한다.

image.png

step3) Dockerfile을 재 실행한다.

image.png

step4) 도커가 잘 올라갔는지 확인한다.

image.png

프로그램 수정후엔 위 4개의 절차대로 진행하면 되나요??

이걸로 회사의 개인 서버를 가지고 있는곳에 도커 깔고 동작 하면 서버의 기능으로 완벽할꺼 같은데 ....

그리고 구글 클라우드에도 프로그램 수정하면 도커에서 push up hub 를 누르고 docker-compose.yml 누르면 되나요??

버전 수정 안해줘도 되나요?

추가 질문) 이건 뭐 제가 잘 모르고 좀 시간을 두고 확인해봐야 하는거라서 질문드리기 어렵지만 그래도 아시면 답변 부탁 드려용 ^^)))

테스트 코드 작성중 아래처럼 DSL로 작성하는 경우를 봤는데 꽤나 직관적이고 편리하게 되어 있더라구요...

아래 같은 테스트 코드 많이 사용하나요??

비동기 방식에서만 사용하나요??

테스트 코드 작성하는 방법이 꽤나 많아서 이걸 다 익혀야하는 생기네요 ㅠ.ㅠ

image.png

감사합니다. 다음 강의 꼭 내주세요. ^^

답변 2

1

인프런 AI 인턴님의 프로필 이미지

2024. 07. 10. 19:11

안녕하세요, 인프런 AI 인턴입니다.

just kim님, Spring Boot와 Kotlin을 사용한 프로젝트를 Docker에 재배포하는 과정에 대해 질문해주셨네요.

프로젝트 수정 후 Docker로 재배포하는 과정은 just kim님이 설명해주신 단계를 따르면 대체로 맞습니다. 단계별로 구체적으로 확인해드리겠습니다.

  1. Gradle을 이용해 프로젝트의 jar 파일을 다시 만들어야 합니다. 수정한 코드가 반영된 새로운 버전의 jar 파일을 생성하기 위함입니다.

  2. docker-compose.yml 파일을 새로고침한다는 것은, 사용하는 이미지나 설정에 변경이 있을 경우 이 파일을 수정해야 함을 의미합니다. 설정이 변경되었으면 반드시 업데이트해야 합니다.

  3. Dockerfile을 재실행하는 것은 Docker 이미지를 재빌드하는 과정을 말합니다. 만약 의존성이나 기타 설정에 변화가 있었다면, Dockerfile을 통해 새로운 이미지를 빌드해야 합니다.

  4. 도커가 제대로 올라갔는지 확인하는 과정은 중요합니다. 재배포한 애플리케이션이 문제 없이 실행되고 있는지 확인하기 위함입니다.

구글 클라우드와 같은 클라우드 서비스에서도 동일한 과정을 따르면 됩니다. 하지만 클라우드 서비스에 따라 추가적인 설정이나 단계가 필요할 수 있습니다. 버전 관리에 대해서는, 가능한 명시적으로 관리하는 것이 좋습니다. 이는 나중에 어떤 버전의 애플리케이션이 배포되었는지 추적하기 용이하기 때문입니다.

추가 질문하신 테스트 코드 DSL 사용 여부와 관련하여, DSL(Domain-Specific Language)은 테스트 코드를 더 직관적이고 효율적으로 작성할 수 있게 해줍니다. 비동기 방식뿐만 아니라 다양한 컨텍스트에서 사용될 수 있으며, Spring Boot 프로젝트에서도 널리 사용됩니다. 테스트 코드 작성 방법은 다양하기 때문에, 프로젝트의 요구사항과 팀의 선호에 따라 적절한 방법을 선택하는 것이 중요합니다.

다음 강의 요청에 대해서는 제가 답변을 드릴 수 있는 부분이 아니지만, just kim님의 열정적인 학습 태도에 감사드립니다. 계속해서 좋은 학습 경험을 하시길 바랍니다!

0

정보근님의 프로필 이미지
정보근
지식공유자

2024. 07. 11. 19:42

안녕하세요 정보근입니다:)

 

도커를 이용한 배포는 크게 아래와 같이 단계를 나눌 수 있습니다.

 

  1. 현재 소스 코드를 기반으로 새 도커 이미지를 생성한다.

  2. 생성된 도커 이미지를 기반으로 도커 컨테이너를 실행한다.

이 때 1번 역할을 Dockerfile이, 2번 역할을 docker-compose.yml이 하게 됩니다.

따라서 말씀하신 순서로는 step1 -> step3 -> step2 -> step4가 됩니다.

 

이 순서로 다시 각 스텝을 설명드리면

 

step1: 실행될 수 있는 jar 파일을 만듭니다. 이 jar 파일은 도커 이미지를 생성할 때 사용됩니다.

 

step3: 도커 이미지를 만듭니다. Dockerfile의 중요한 스텝만 설명드리면

 

1) 앞서 만든 jar 파일을 도커 이미지에 포함시킵니다.

ARG JAR_FILE=build/libs/portfolio-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} portfolio-yongback.jar

 

2) 도커 컨테이너가 실행될 때 jar 파일을 실행하도록 합니다.

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar", "/portfolio-yongback.jar"]

 

step2: docker-compose로 컨테이너를 실행합니다.

 

version: '2'
services:
  portfolio-yongback:
    image: infomuscle10/portfolio-yongback
    container_name: portfolio-yongback
    ports:
        - "8080:8080"
    environment:
        - "SPRING_PROFILES_ACTIVE=docker"
        - "jasypt.encryptor.key=q1w2e3"
    volumes:
        - /var/lib/docker/volumes/portfolio-yongback/_data:/tmp
    depends_on:
        - mysql

image에 해당하는 도커 이미지를 받아서, container_name이란 이름으로 컨테이너를 만들라는 의미입니다.

 

step4: 로컬의 경우 도커 데스크탑으로 확인하실 수 있습니다. 클라우드에 올리시면 docker ps로 실행중인 컨테이너를 docker ps -a로 전체 컨테이너를 확인하실 수 있습니다. docker image ls로는 다운 받은 이미지를 확인하실 수 있습니다.

 

추가적으로 로컬에서 도커 이미지를 만들고 컨테이너 실행을 확인하셨으면, 클라우드에 배포하기 위해서는 도커 이미지와 docker-compose를 클라우드로 옮겨야 합니다.

강의에서는 직접 만든 도커 이미지를 Docker Hub에 올렸습니다. 도커 데스크탑에서 Push 버튼을 쉽게 찾으실 수 있을 거에요. docker-compose.yml은 깃허브 리포지토리에 올린 후, 클라우드에서 git clone 명령어로 쉽게 받으실 수 있습니다.

이렇게 클라우드에서 도커 이미지와 docker-compose 파일을 받으셨으면, docker-compose.yml이 위치한 경로로 들어가 docker compose up -a 또는 docker-compose up -a를 실행해주시면 됩니다. 그럼 도커 컴포즈에서 해당 이미지가 있는지 확인 후, 없으면 도커 허브에서 받아온 뒤 컨테이너를 실행할겁니다.

 

버전 수정은 안 하셔도 현재 문제는 없을텐데, 시간이 지나면서 deprecated 되거나 상세 포맷이 수정될 수 있습니다. 이 때 대개 명령어 실행하면 안내가 뜨기 때문에 안내문 확인 후 대응해주시면 됩니다.

 

 

올려주신 테스트 코드 이미지와 같이 사용하셔도 좋습니다.

저도 위의 메소드들은 사용해봤으나 개인적으로 이것저것 시도해보면서 현재의 방식으로 정착했습니다.

모든 방법을 다 익히실 방법도 없고, 정답도 없는 문제입니다.

직접 많은 경험을 해보시면서 테스트의 목적과 효율성 등을 고려해서 가장 적합한 방식을 찾으시면 될 것 같아요.

 

감사합니다.

 

 

just kim님의 프로필 이미지

작성한 질문수

질문하기