[내일배움캠프] 260506 TIL #14 Docker

2026. 5. 6. 14:57·내일배움캠프/TIL

Today I Learned!

프로젝트 심화 강의 수강을 시작했다. 챕터 1에서는 도커에 대해 학습했다.

 

Docker란?

Docker는 애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼이다.

  • 애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행할 수 있음
  • Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)을 포함

 

Docker 특징

  • 컨테이너화: 애플리케이션과 필요한 모든 것을 하나의 패키지로 묶어 어디서든 실행할 수 있음
  • 경량: Docker는 운영 체제의 커널을 공유하므로, 가상 머신보다 훨씬 가볍고 빠르게 실행됨
  • 이식성: Docker 컨테이너는 어디서든 동일하게 실행됩니다. 예를 들어, 개발자의 컴퓨터에서 테스트 서버, 운영 서버까지 동일하게 동작함
  • 확장성: Docker를 사용하면 여러 개의 컨테이너를 효율적으로 관리하고 쉽게 확장할 수 있음

 

실습

진행한 실습 내용은 아래 깃허브를 통해 자세히 확인할 수 있다.

 

seola12e/nbc-docker

내일배움캠프 docker 실습. Contribute to seola12e/nbc-docker development by creating an account on GitHub.

github.com

 

1️⃣ 프로젝트 생성

먼저 도커를 사용하기 전에 스프링 프로젝트 a, b를 생성한 후 a에서 b를 호출하는 방식으로 학습했다.

서비스 A는 18080 포트에서, B는 18081 포트에서 실행된다.

 

먼저 호출당할(?) BController부터 작성해 주었다.

@RestController
public class BController {

    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

GetMapping으로 /hello 라는 요청이 들어오면 "hello" 라는 문자열을 반환하도록 간단히 구현했다.

 

이후 AController를 구현했는데, BServiceClient를 통해 B를 호출하고 반환받은 문자열을 A를 통해 반환하도록 구현하였다.

@RestController
@RequiredArgsConstructor
public class AController {

    private final BServiceClient bServiceClient;

    @GetMapping("/hi")
    public String hi() {
        String hello = bServiceClient.getHello();
        return "service-a: hi ###### service-b: " + hello;
    }
}
@FeignClient(name = "service-b", url = "${service.b.url}")
public interface BServiceClient {

    @GetMapping("/hello")
    public String getHello();
}

 

 

두 컨테이너를 실행한 후 localhost:18081/hello 를 요청했더니 아래와 같이 서비스 B가 잘 호출되었음을 확인할 수 있었다.

이번에는 서비스 A가 서비스 B를 잘 호출하는지 확인하기 위해 localhost:18080/hi 를 요청해 보았다.

위와 같이 서비스 A는 서비스 B를 잘 호출하고 있음을 확인할 수 있었고, 서비스 A 역시 잘 작동하고 있음을 확인했다.

 

2️⃣ Docker로 프로젝트 실행

이번에는 위에서 생성한 프로젝트를 도커 컨테이너로 실행해 보았다.

먼저 application.properties 파일을 서비스 A, B 모두 변경해 주었다. server.port=8080 으로 양쪽 다 통일해 주었고, 서비스 A에서 B를 호출할 때 도커 이미지를 통해 호출하므로 service.b.url=http://service-b:8080 로 설정해 주었다.

 

이후 Dockerfile을 아래와 같이 서비스 A, B에 생성해 주었다.

FROM eclipse-temurin:17-jre

VOLUME /tmp

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

 

이제 프로젝트를 빌드한 후 도커 컨테이너를 실행시키면 된다.

먼저 서비스 B부터 아래 순서대로 진행했다.

 

1. 프로젝트 빌드

./gradlew clean bootJar

 

2. 이미지 생성

docker build -t img-service-b .

 

3. 컨테이너 생성 (서비스 B의 호스트 포트는 18081을 사용한다.)

docker run -d --name service-b \
 --network my-network \
 -p 18081:8080 \
 img-service-b

 

서비스 A도 마찬가지로 프로젝트를 빌드한 후 이미지를 생성했다.

docker images 명령어를 통해 2개의 이미지가 잘 생성되었음을 확인할 수 있었다.

 

이후 서비스 A의 도커 컨테이너(서비스 A의 호스트 포트는 18080을 사용한다.)를 생성해 주고 docker ps 명령어를 통해 2개의 컨테이너가 정상적으로 작동하고 있음을 확인했다.

 

localhost:18081/hello 와 localhost:18080/hi 에 접속해서 잘 작동하는 것을 확인할 수 있었다.

 

3️⃣ Docker Compose 사용

이번에는 docker-compose.yml 파일을 아래와 같이 생성해서 docker compose up -d 명령어를 통해 프로젝트를 실행시켜 보았다.

version: '3.8'

services:
  service-a:
    image: img-service-a
    ports:
      - "18080:8080"
    environment:
      - SERVICE_B_URL=http://service-b:8080
    depends_on:
      - service-b

  service-b:
    image: img-service-b
    ports:
      - "18081:8080"

networks:
  default:
    driver: bridge

 

도커 컨테이너가 잘 실행되고 있음을 확인한 후,

localhost:18081/hello 와 localhost:18080/hi 에 접속해서 잘 작동하는지 확인해 보았다.

 

 

트러블 슈팅

docker compose up -d 명령어를 사용했을 때 project name must not be empty 라는 오류가 발생했었다.

확인해 보니 "실습"이라는 폴더명을 가진 상위 디렉터리에서 실습을 진행하고 있었는데, 한글 이름으로 되어 있어서 project name을 제대로 읽을 수가 없었던 것이다.

폴더명을 "practice"라고 영어로 변경해 주니 아래와 같이 정상적으로 실행이 되었다.

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프] 260512 TIL #16 RabbitMQ  (0) 2026.05.12
[내일배움캠프] 260507 TIL #15 Redis  (0) 2026.05.07
[내일배움캠프] 260504 TIL #13  (0) 2026.05.04
[내일배움캠프] 260430 TIL #12 입문프로젝트 마무리  (0) 2026.04.30
[내일배움캠프] 260419 TIL #11 CRUD Code Shadowing 3차(최종)  (0) 2026.04.19
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프] 260512 TIL #16 RabbitMQ
  • [내일배움캠프] 260507 TIL #15 Redis
  • [내일배움캠프] 260504 TIL #13
  • [내일배움캠프] 260430 TIL #12 입문프로젝트 마무리
이서라다
이서라다
  • 이서라다
    개발일지
    이서라다
  • 전체
    오늘
    어제
    • 전체 보기 (79)
      • 내일배움캠프 (21)
        • TIL (21)
      • 프로그래머스 (23)
      • Algorithm (2)
      • BackEnd (0)
        • Spring (0)
      • Language (4)
        • JAVA (4)
      • Git (2)
      • 백준 - Java (25)
        • 입출력과 사칙연산 (6)
        • 반복문 (8)
        • 1차원 배열 (1)
        • 문자열 (7)
        • 2차원 배열 (1)
        • 조합론 (1)
        • 정렬 (1)
      • IDE (1)
        • IntelliJ (1)
      • 티스토리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    jdk삭제
    티스토리스킨
    til
    내일배움캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이서라다
[내일배움캠프] 260506 TIL #14 Docker
상단으로

티스토리툴바