-
백엔드 데브코스 12기 77일차
오전에는 Docker의 빌드·운영 환경 분리와 멀티 스테이지 빌드, Spring Boot의 S3 연동과 EC2 배포를 공부했다.빌드는 CPU와 메모리를 사용하기 때문에 운영 서버에서 함께 수행하면 사용자 요청 처리에 영향을 줄 수 있다. 빌드 환경에서는 JAR를 만들고, 운영 환경에서는 완성된 결과물을 실행하도록 역할을 나누는 이유를 이해했다. 멀티 스테이지 빌드는 이 구분을 Dockerfile 안에 표현하고, 실행에 필요한 결과물만 최종 이미지로 가져오는 방법이었다. AWS에서는 코드와 실행 환경의 관계를 다시 생각하게 됐다. 로컬에서 S3 조회에 성공해도 EC2에서 사용할 인증 정보와 권한이 없다면 실패할 수 있다. 이미지에는 Java와 애플리케이션이 담기지만, EC2의 IAM 역할이나 보안 그룹까지..
2026.11.04
-
[AWS] Spring Boot에서 S3에 접근하고 EC2·Docker로 실행하기
이전에는 Terraform으로 EC2를 만들고 IAM 역할을 연결했다. 이번에는 Spring Boot에서 S3 버킷 목록을 조회한 뒤, 같은 프로그램을 EC2에서 직접 실행하고 Docker 이미지로도 실행했다.코드가 같아도 실행하는 위치에 따라 인증 정보를 얻는 방식이 달라질 수 있다는 점이 중요했다. 이미지에 담기는 실행 환경과 AWS에서 설정하는 권한도 구분해서 이해했다.S3 라이브러리 추가하기프로젝트에 S3를 사용할 의존성을 추가했다.implementation("io.awspring.cloud:spring-cloud-aws-starter-s3:4.2.1") S3 자체를 애플리케이션에 설치하는 것이 아니라, Spring Boot에서 S3에 요청할 수 있도록 라이브러리를 추가하는 것이다.버킷 만들기AW..
2026.11.04
-
[Docker] JAR를 Docker 이미지로 배포하고 멀티 스테이지로 빌드하기
빌드 환경에서 JAR를 만들었다면 이제 운영 환경에서 실행해야 한다. 여기서 궁금했던 것은 JAR만 전달하는 방식과 Docker 이미지로 전달하는 방식의 차이였다.JAR 직접 실행과 이미지 실행의 차이JAR만 운영 서버에 전달한다면 서버에 호환되는 Java 실행 환경을 준비해야 한다.java -jar app.jar 반면 이미지에는 Java 실행 환경과 JAR, 시작 명령을 함께 담을 수 있다. JAR 전달→ 서버에 Java 실행 환경 준비→ JAR 실행이미지 전달→ 컨테이너 실행 환경 준비→ 이미지에 담긴 Java 환경으로 실행 이미지를 사용해도 서버에 아무 준비가 필요 없는 것은 아니다. Docker 같은 컨테이너 실행 환경은 필요하다.대신 서버마다 Java를 따로 설치하는 차이를 줄이고, 프로그램과 ..
2026.11.04
-
[Docker] 빌드 환경과 운영 환경을 분리하는 이유
이전에는 컨테이너 안에서 Java 프로그램을 빌드하고 실행했다. 이번에는 프로그램을 만드는 환경과 사용자 요청을 처리하는 환경을 분리하는 이유를 배웠다.빌드를 운영 서버에서 하면 어떤 문제가 생길까?빌드는 소스를 컴파일하고 필요한 의존성을 내려받아 JAR 같은 결과물을 만드는 과정이다. 이때 CPU와 메모리를 사용한다.사용자 요청을 처리하는 서버에서 빌드까지 수행하면 같은 자원을 두고 경쟁하게 된다. 그 결과 응답이 느려지거나 메모리가 부족해질 수 있다.그래서 역할을 나눈다.빌드 환경: 소스 코드를 받아 JAR 생성운영 환경: 완성된 JAR를 실행하고 사용자 요청 처리 컨테이너만 나누고 같은 서버에서 실행한다면 물리적인 자원은 여전히 공유한다. 역할을 구분하는 것과 서버 자원을 분리하는 것은 함께 생각해..
2026.11.04
-
[Docker] 컨테이너에서 Java 프로그램을 빌드하고 실행하기
Docker 이미지는 프로그램뿐 아니라 실행에 필요한 환경도 함께 담을 수 있다. 이를 이해하기 위해 컨테이너 안에서 Java 소스를 컴파일하고, JAR로 묶어 실행하는 과정을 살펴봤다. 이후 같은 과정을 Gradle로 자동화했다.Java 소스와 실행 결과물 구분하기먼저 다음과 같은 Java 코드를 작성한다.public class Main { public static void main(String[] args) { System.out.println("Hello, Rocky Linux!"); }} 파일 이름은 Main.java다. 이 파일을 컴파일하고 실행하는 명령은 다음과 같다. javac Main.javajava Main 처음에는 javac Main.java가 Main.java를..
2026.11.04
-
백엔드 데브코스 12기 76일차
오전에는 Docker 이미지 빌드와 캐시, AWS EC2에서 Spring Boot를 실행하고 S3에 접근하는 과정을 정리했다. Docker에서는 이미지가 소스 파일뿐 아니라 실행 환경까지 함께 담는다는 점을 이해했다. 소스를 수정해도 기존 이미지나 실행 중인 컨테이너가 자동으로 바뀌지는 않아서, 이미지를 다시 빌드하고 새 컨테이너를 실행해야 했다. 또 변경이 적은 설정을 앞에, 자주 바뀌는 소스를 뒤에 배치하면 캐시를 재사용해 빌드 시간을 줄일 수 있다는 것도 배웠다. 강사님이 AI한테 코드 짜달라고 할 때“도커 파일 만들 때 캐시 최적화해서 만들 수 있도록 변경이 잦은 건 아래로, 변경이 적은 레이어는 위쪽으로 넣어서 만들어줘.” 라는 식으로 사용하는 게 좋다고 하셨다. AWS에서는 네트워크 연결과 서..
2026.11.03
-
[Terraform] EC2 생성과 초기 설정 자동화하기
이전에는 Terraform으로 VPC와 서브넷, 인터넷 경로, 보안 그룹을 구성했다. 이번에는 준비한 네트워크에 EC2를 만들고, AWS 접근 권한을 연결했다. Docker 설치와 스왑 설정도 초기화 스크립트로 자동화했다.EC2 생성하기EC2를 생성할 때는 운영체제 이미지, 인스턴스 유형, 서브넷, 보안 그룹 등을 지정한다.resource "aws_instance" "ec2_1" { ami = "ami-062cddb9d94dcf95d" instance_type = "t3.micro" subnet_id = aws_subnet.subnet_1.id vpc_security_group_ids = [aws_security_group.sg_1.id] associate_public_ip_address = t..
2026.11.03
-
[Docker] Dockerfile로 이미지를 만들고 빌드 캐시 이해하기
이전에는 컨테이너 안에서 파일을 수정하거나 호스트 파일을 복사하고 연결했다. 이번에는 파일과 실행 환경을 이미지로 묶고, 빌드 캐시를 활용하는 방법을 배웠다.이미지는 파일과 실행 환경을 함께 담는다HTML 파일을 서버에서 제공하려면 Nginx 같은 웹서버가 필요하다. Docker 이미지에는 HTML뿐 아니라 이를 제공할 실행 환경도 함께 담을 수 있다.FROM nginx:latestCOPY index.html /usr/share/nginx/html/ FROM은 기반 이미지를 지정한다. 여기서는 Nginx와 실행에 필요한 파일·기본 설정 등이 들어 있는 이미지를 사용한다.COPY는 내 HTML을 이미지 안의 Nginx 웹루트에 복사한다.처음에는 단순히 Nginx와 HTML이 들어간다고 이해했다. 여기서 더..
2026.11.03
-
백엔드 데브코스 12기 75일차
오전에는 AWS와 Terraform, Docker 수업을 들었다. Terraform으로 VPC와 서브넷, 인터넷 게이트웨이, 라우팅 테이블, 보안 그룹을 구성하며 서버가 동작하기 위한 네트워크 환경을 배웠다. Docker에서는 컨테이너 내부 파일을 다루는 방법과 컨테이너 간 통신, 포트 연결, 실행 상태 관리 등을 공부했다. 명령어를 외우는 것보다 각 설정이 어떤 역할을 하고 서로 어떻게 연결되는지 이해하는 데 집중했다. 오후에는 최종 프로젝트 팀을 정했다. 이번에는 정해진 배정 방식 없이 자유롭게 팀을 구성했다. 주말 동안 각자 자기 PR을 작성해오고, 오후 2시에 한꺼번에 공개한 뒤 함께하고 싶은 사람들과 팀을 만드는 방식이었다.누구와 함께할지 많이 고민했는데, 좋은 분들과 팀이 잘 구성된 것 같아 ..
2026.11.02