분류 전체보기 259

[Spring Boot] Spring Initializr로 프로젝트 시작하기 (+인텔리제이 환경설정)

Spring Initializr를 이용한 프로젝트 생성 방법과 IntelliJ에서 발생할 수 있는 주요 오류 해결 방법 정리1단계: Spring Initializr 설정 (start.spring.io)먼저 Spring Initializr 사이트에서 프로젝트의 뼈대를 만든다. [설정 예시]Project: Gradle - GroovyLanguage: JavaSpring Boot: SNAPSHOT이나 M1이 붙지 않은 최신 정식 버전 (예: 4.0.x, 3.4.x 등)Project Metadata: Group, Artifact 이름 설정Packaging: JarJava: 17 (현재 가장 많이 쓰이는 LTS 버전)💡 중요: 여기서 Java 17을 골랐다면, 이후의 모든 IntelliJ 설정도 17로 통일해야..

Journey to CS/웹 2026.01.03

[Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화

컨테이너는 기본적으로 데이터를 저장하지 않는 휘발성(Stateless) 프로세스다.도커는 데이터를 영구적으로 보존하거나 호스트와 공유하기 위해 '볼륨(Volume)'과 '바인드 마운트(Bind Mount)' 기능을 제공한다.우선 이번 포스팅에서는 바인드 마운트 방식에 대해 알아보자. 바인드 마운트는 호스트의 특정 파일 경로를 컨테이너 내부에 직접 연결하므로, 호스트에서 소스 코드를 수정하면 컨테이너에 즉시 반영된다. 개발 환경에서는 소스 코드를 수정할 때마다 이미지를 다시 빌드하는 것이 비효율적이므로, 바인드 마운트 기능을 활용한다. 예시: 호스트에 웹 페이지 소스 디렉터리를 생성하고, 호스트의 디렉터리를 Nginx 컨테이너의 웹 루트 디렉터리에 마운트 하여 호스트에서 파일을 수정하면 웹 페이지가 변경..

[Docker] 컨테이너의 네트워크 구조: docker0과 veth

도커(Docker)를 사용할 때 단순히 컨테이너를 띄우는 것을 넘어, 실제 서비스 운영을 위해서는 네트워크(Network)가 어떻게 연결되는지, 그리고 컨테이너 내부의 데이터를 어떻게 관리할 것인지에 대해 이해해야 한다. Nginx와 Ubuntu 두 개의 컨테이너를 이용해 도커의 네트워크 인터페이스 구조(veth, bridge)를 직접 확인해보자.1. 컨테이너 포트 포워딩과 네트워크 격리 확인먼저 Nginx 웹 서버와 우분투 컨테이너를 각각 실행하여 외부에서 접근이 가능한지 확인해 본다.이때 -p 옵션을 사용하여 호스트의 포트와 컨테이너의 포트를 연결한다.# Nginx 컨테이너 실행 (호스트 8000 -> 컨테이너 80)docker run --name myweb -p 8000:80 -d nginx:lat..

/etc/hosts 파일 이해하기

리눅스 시스템이 도메인 이름(Hostname)을 IP 주소로 변환할 때 가장 먼저 참고하는 파일이 있다. 바로 /etc/hosts 파일이다. /etc/hosts는 리눅스 시스템이 외부 DNS 서버를 찾기 전에 먼저 펼쳐보는 로컬 네임 서버(Local Name Server) 역할을 한다.서버 관리나 도커 컨테이너 간의 통신 구조를 이해하기 위해 반드시 알아야 할 기본 파일이다.1. DNS보다 높은 우선순위리눅스 커널은 네트워크 통신 시 숫자로 된 IP 주소(예: 123.456.0.1)를 사용한다.하지만 사용자는 기억하기 쉬운 도메인 이름(예: google.com)을 사용한다.보통은 DNS(Domain Name System) 서버에 쿼리를 날려 도메인에 매핑된 IP 주소를 받아온다.하지만 리눅스는 DNS 서..

[Docker] 컨테이너 통신: 링크(--link) 옵션을 활용해서 WordPress와 DB 연동하기

도커를 활용해 가장 기본적인 2-Tier 아키텍처인 웹 서버와 데이터베이스를 구축하고 연동하는 과정을 알아보자.프론트엔드 역할을 할 WordPress 컨테이너와 백엔드 데이터베이스 역할을 할 MySQL 컨테이너를 생성하고, 이 둘을 연결(Link)하여 블로그 서비스를 띄워본다.1. 아키텍처 및 개념우리가 구축할 구조는 클라이언트(브라우저)가 워드프레스 웹 서버에 접속하고, 워드프레스는 내부적으로 MySQL 데이터베이스에 접속하여 데이터를 저장하거나 불러오는 구조다.컨테이너 환경에서 이 구조를 만들 때 가장 중요한 고려 사항은 상태(State)와 설정(Configuration)의 분리다.이미지와 데이터: 도커 이미지는 불변(Immutable)이다. 이미지 자체에 비밀번호나 설정값을 하드코딩하면 보안상 위험..

[k8s] Nginx 파드(Pod) 생성하고 포트 포워딩(port forwarding)하기

쿠버네티스에서 가장 기본이 되는 배포 단위인 파드(Pod)를 직접 생성하고, 내부 접속 및 외부 노출을 테스트하는 과정을 실습해본다.대표적 웹 서버인 Nginx 컨테이너를 띄우고, 로컬 환경에서 접속이 가능한지 확인해보는 과정이다.1. 선언적 정의: YAML 파일 작성쿠버네티스는 선언적(Declarative) 시스템이다.즉, 내가 "무엇을 하고 싶다"라고 명령어로 하나하나 지시하기보다는, "어떤 상태가 되기를 원한다"라고 명세서(Manifest)를 작성해서 제출하는 방식이 권장된다.먼저 인텔리제이(IntelliJ)를 이용해 다음과 같이 nginx-pod.yaml 파일을 작성했다. apiVersion: 오브젝트를 생성하기 위한 API 버전 (Pod는 v1).kind: 생성할 리소스의 종류 (여기서는 Pod..

[Docker] 포트 포워딩(port forwarding) (feat. Nginx)

경량 웹 서버인 Nginx를 컨테이너로 구동하고, 외부(Host)에서 접근할 수 있도록 네트워크 포트를 매핑해보자.1. 포트 매핑 (Port Mapping)컨테이너는 격리된 네트워크 환경을 가지므로, 외부에서 접속하려면 호스트의 포트와 컨테이너의 포트를 연결해야 한다.Command: -p [Host_Port]:[Container_Port]설명: 호스트의 8000번 포트로 들어오는 트래픽을 컨테이너의 80번 포트(Nginx 기본 포트)로 전달한다.docker run -p 8000:80 -d nginx:latest이 때 docker ps를 실행해서 보이는 0.0.0.0:8000->80/tcp는 IPv4의 모든 인터페이스에서의 접근을 허용함을 의미한다. 포트 포워딩 트래픽 흐름 Docker 컨테이너는 기본적..

[Docker] commit을 활용한 커스텀 이미지 생성

공식 Docker Hub에서 제공하는 bare image(기본 이미지)에 필요한 패키지를 설치하고, 해당 상태를 보존하여 새로운 이미지로 생성하는 과정을 다룬다.이는 CI/CD 파이프라인의 기초가 되는 작업이기도 하다.1. 베이스 컨테이너 환경 구성예: Rocky Linux 8 이미지를 기반으로 컨테이너를 실행하고, git 패키지를 설치# Rocky Linux 실행 및 bash 진입docker run -it --name "rocky8-1" rockylinux:8 bin/bash# 패키지 매니저를 통한 Git 설치 (컨테이너 내부)[root@9fb87d881e0b /]# yum update && yum -y install git[root@9fb87d881e0b /]# git --versiongit vers..

[Docker] 다양한 명령, 옵션 살펴보기: 리소스 정리, 이미지 태그 + CLI 출력 포맷팅

리소스 정리컨테이너와 이미지의 의존성(Dependency) 문제와 이를 해결하기 위한 삭제 명령어를 배워보자.1. 컨테이너와 이미지의 의존성 관계Docker에서 컨테이너는 이미지를 기반으로 생성된 인스턴스다. 따라서 특정 이미지를 참조하는 컨테이너가 (정지 상태라 할지라도) 존재한다면, 해당 이미지는 삭제할 수 없다.다음 예시를 통해 도커 이미지를 삭제하려고 할 때 conflict가 생기는 상황에 대해 알아보자. docker rmi ubuntu:14.04Error response from daemon: conflict: unable to remove repository reference "ubuntu:14.04" (must force) - container f567a76b46c1 is using its ..

[수강 후기] 비전공자도 이해할 수 있는 Docker 입문/실전

이 강의를 선택하게 된 계기백엔드/클라우드를 공부하기 시작하면서 프로젝트를 배포할 때 많이 사용하는 도커를 접하게 되었는데, CLI 환경에서 이미지를 내려받고 컨테이너를 띄우고 하다보니 어떤 원리로 동작을 하는 것인지 머릿속에 잘 그려지지 않았다. 또 내가 아직 현업자가 아니다보니 현업에서는 도커를 실제로 어떻게 쓰는지 감을 잡고 싶었다. 그래서 인프런에서 도커 입문 강의를 찾아보게 되었다. 내가 선택한 강의는 JSCODE 박재성 님의 비전공자도 이해할 수 있는 Docker 입문/실전이다. 이 강의는 단순한 도커 명령어 실습 위주로 흘러가지 않고, 도커를 이용한 백엔드, 프론트엔드 프로젝트 배포 등 현업에서 자주 쓰이는 기술들의 개념을 명확하게 잡고 적용할 수 있도록 도움을 준다. 매 파트마다 주요 개..