전체 글 60

Docker 데이터 영속화: Volume, Bind Mount와 tmpfs

컨테이너의 쓰기 레이어는 컨테이너와 생명 주기를 함께한다. 컨테이너를 교체해도 남아야 하는 데이터베이스 파일, 업로드 파일과 설정은 컨테이너 밖에 저장해야 한다. Docker는 목적에 따라 Volume, Bind Mount와 tmpfs를 제공한다.세 가지 Mount 비교방식저장 위치대표 용도컨테이너 삭제 후 데이터VolumeDocker가 관리하는 호스트 영역데이터베이스, 애플리케이션 영속 데이터유지Bind Mount사용자가 지정한 호스트 경로개발 소스, 설정 파일, 호스트와 파일 공유유지tmpfs호스트 메모리디스크에 남기지 않을 임시 데이터소멸 Docker Storage 문서는 일반적인 영속 데이터에는 Volume을 우선 권장한다. Docker가 경로를 관리하므로 운영체제별 차이가 적고 백업과 이전 정책..

클라우드/Docker 2026.08.26

Spring REST API의 예외 처리와 일관된 오류 응답 설계

Service에서 발생한 예외를 그대로 두면 클라이언트는 상황과 맞지 않는 500 Internal Server Error를 받을 수 있다. 비즈니스 상황을 커스텀 예외로 표현하고 @RestControllerAdvice에서 HTTP 상태와 안정적인 오류 본문으로 변환하는 방법을 정리한다.들어가며존재하지 않는 게시글을 조회했을 때 null을 반환한 뒤 NullPointerException이 발생하면 Spring은 이를 예상하지 못한 서버 오류로 처리할 수 있다. 하지만 요청한 게시글이 없다는 상황은 서버 고장과 다르다. 클라이언트가 이해할 수 있도록 404 Not Found와 구체적인 오류 정보를 반환해야 한다. 예외 처리의 목적은 프로그램이 무조건 계속 실행되게 만드는 것이 아니다. 실패의 의미를 잃지 않..

백엔드/Spring 2026.08.20

Docker 컨테이너 생명 주기와 운영 명령

컨테이너는 이미지에서 만들어진 격리 프로세스다. 컨테이너를 정지해도 객체와 쓰기 레이어는 남으며, 삭제해야 비로소 해당 컨테이너의 상태가 제거된다. 이 생명 주기를 이해하면 run, start, attach, exec를 혼동하지 않고 사용할 수 있다.생성, 실행, 정지와 삭제컨테이너의 기본 흐름은 다음과 같다.docker container run은 필요한 이미지 Pull, 컨테이너 Create와 Start를 한 번에 수행하는 편의 명령이다.docker container create --name demo nginx:alpinedocker container start demodocker container stop demodocker container rm demo 대부분의 일상 작업에는 run을 사용한다.d..

클라우드/Docker 2026.08.19

Docker 이미지와 Registry: 이름, 태그, Digest와 배포

Docker 이미지는 애플리케이션 실행에 필요한 파일, 바이너리, 라이브러리와 설정을 담은 불변 패키지다. Registry는 이 이미지를 저장하고 배포하며, Repository는 Registry 안에서 관련 이미지와 태그를 묶는 단위다. 이 글에서는 이미지를 정확히 식별하고 검사한 뒤 Registry에 배포하거나 파일로 옮기는 방법을 다룬다.이미지 이름의 구조Docker 이미지 참조는 다음 구조를 사용한다.[HOST[:PORT]/]NAMESPACE/REPOSITORY[:TAG] 예를 들어 docker.io/library/nginx:1.28-alpine은 다음과 같이 해석한다.docker.io: Registry 호스트library: Docker Official Images에 사용하는 Namespacengi..

클라우드/Docker 2026.08.18

Docker 기본 명령: 이미지부터 컨테이너 관찰까지

Docker CLI는 사용자의 명령을 Docker daemon에 전달한다. daemon은 이미지를 내려받고 컨테이너를 생성하거나 삭제하며, 처리 결과를 다시 CLI에 돌려준다. 이 글에서는 hello-world, Ubuntu, Nginx 이미지를 이용해 이 흐름을 직접 확인한다. 실습 전 docker version을 실행했을 때 Client와 Server 정보가 모두 출력되어야 한다.명령 이름을 읽는 법Docker CLI는 관리 대상과 동작을 함께 쓰는 형태가 명확하다.docker [options] 예를 들어 docker container ls는 컨테이너 목록을, docker image ls는 이미지 목록을 출력한다. docker ps, docker images 같은 짧은 별칭도 널리 쓰이지만 이 글..

클라우드/Docker 2026.08.17

Windows·macOS·Ubuntu에 Docker 설치하기

Docker를 사용하는 방법은 운영체제에 따라 다르다. Ubuntu 서버에는 Docker Engine을 직접 설치할 수 있지만, Windows와 macOS에서 Linux 컨테이너를 실행하려면 Linux 커널을 제공하는 가상화 계층이 필요하다. Docker Desktop이 이 환경과 CLI, Compose 등을 한 번에 제공한다. 설치 화면과 지원 버전은 바뀔 수 있으므로 실제 설치 전에는 각 운영체제의 공식 문서를 다시 확인하는 것이 안전하다.설치 방식 선택환경권장 방식Linux 컨테이너 실행 위치Windows 개발 PCDocker Desktop + WSL 2WSL 2 기반 Linux VMmacOS 개발 PCDocker DesktopDocker Desktop의 Linux VMUbuntu 서버Docker ..

클라우드/Docker 2026.08.17

Docker와 컨테이너: 가상 머신과 무엇이 다른가

개발한 애플리케이션이 내 컴퓨터에서는 잘 실행되는데 다른 서버에서는 실패하는 일이 있다. 런타임 버전, 시스템 라이브러리, 설정 파일, 디렉터리 구조가 서로 다르기 때문이다. Docker는 애플리케이션과 실행에 필요한 파일을 이미지(image) 로 묶고, 이를 격리된 컨테이너(container) 로 실행해 환경 차이를 줄인다. 컨테이너를 제대로 이해하려면 먼저 가상 머신과의 차이를 알아야 한다.가상화가 필요한 이유한 대의 물리 서버를 애플리케이션 하나만을 위해 사용하면 CPU와 메모리가 남기 쉽다. 반대로 여러 애플리케이션을 그대로 함께 설치하면 서로 다른 버전의 라이브러리나 설정이 충돌할 수 있다. 가상화는 물리 자원을 논리적으로 나눠 이런 문제를 해결한다. 전통적인 가상 머신은 가상 하드웨어 위에 각..

클라우드/Docker 2026.08.17

Linux의 정체: 커널, 배포판, GNU와 오픈 소스 라이선스

Linux를 처음 배우면 “Linux는 운영체제인가, 커널인가?”, “Ubuntu와 Linux는 무엇이 다른가?”라는 질문부터 만나게 된다. 결론부터 말하면 Linux는 엄밀히는 커널(kernel) 이고, 우리가 설치해서 사용하는 완성된 시스템은 Linux 커널에 명령어 도구, 라이브러리, 설치 프로그램 등을 묶은 배포판(distribution) 이다.Unix에서 Linux까지Unix는 1969년 AT&T 벨 연구소에서 시작됐다. 초기에는 어셈블리어로 작성됐지만 1970년대 초 C로 다시 구현되면서 서로 다른 하드웨어로 옮기기 쉬운 운영체제가 됐다. 이후 상용 Unix와 BSD 계열을 비롯한 여러 갈래로 발전했고, Unix의 설계 철학과 인터페이스는 오늘날 운영체제에도 큰 영향을 남겼다. Linus To..

CS/Linux 2026.08.17

순수 Java CRUD를 Spring MVC REST API로 전환하기

순수 Java에서 분리한 Domain·Repository·Service·Controller 구조를 유지하면서 콘솔 입력을 HTTP 요청으로 바꾼다. Controller는 HTTP 요청 DTO를 Command로 변환하고, Service가 반환한 Result를 응답 DTO로 바꾼다. Spring MVC가 요청을 Controller 메서드에 연결한 뒤 계층별 데이터가 어떻게 이동하는지 게시글 CRUD로 확인한다.들어가며이전 순수 Java 예제는 계층의 책임을 이미 나누었다. Spring Boot로 전환할 때 핵심 비즈니스 개념을 처음부터 다시 만들 필요는 없다. 달라지는 지점은 애플리케이션 경계다.순수 Java 콘솔Spring MVC REST APIScanner 입력HTTP 요청과 @RequestBody메서드..

백엔드/Spring 2026.08.13

Spring MVC·Servlet·Tomcat은 어떻게 연결될까: HTTP 요청 처리 구조 이해하기

Servlet은 Java 웹 애플리케이션이 요청과 응답을 다루는 표준 API와 실행 규칙을 정의한다. Tomcat은 이 규격을 구현해 네트워크 요청을 Servlet에 전달하는 Servlet Container이고, Spring MVC는 Servlet API 위에서 Controller 중심의 웹 개발 방식을 제공한다. 세 기술의 역할과 HTTP 요청이 처리되는 전체 흐름을 연결해 정리한다.들어가며Spring Boot로 REST API를 만들면 Controller 메서드부터 작성하는 경우가 많다.// import 생략@RestControllerpublic class PostController { @GetMapping("/posts/1") public PostResponse findPost() { ..

백엔드/Spring 2026.08.13