.java
파일을 컴파일하여 .class
(바이트코드) 파일로 변환하는 과정이다.javac
(Java Compiler)를 사용하여 .java
파일을 .class
파일로 변환한다.javac Test.java
Test.class
파일이 생성된다..class
파일과 라이브러리를 하나의 압축 파일로 패키징한 것이다..class
파일만으로 실행하기 불편하기 때문에, JAR 파일로 패키징하여 실행을 쉽게 만든다.jar cf Test.jar Test.class
또는 특정 디렉터리(build/
) 안의 파일들을 JAR로 묶는 경우:
jar cf Test.jar -C build/ .
Test.jar
파일이 생성된다.java -jar
명령어를 사용해야 한다.java -jar Test.jar
단계 | 개념 | 예시 명령어 |
---|---|---|
빌드 (컴파일) | .java 파일을 .class 파일로 변환하는 과정 | javac Test.java |
패키징 (JAR 생성) | .class 파일을 JAR로 묶는 과정 | jar cf Test.jar Test.class |
실행 (JAR 실행) | JAR 파일을 실행하는 과정 | java -jar Test.jar |
즉, 빌드는 .java
파일을 .class
파일로 변환하는 과정이며, JAR 파일은 실행 가능한 형태로 패키징한 것이다.
Docker에서는 컨테이너와 호스트 간 데이터 공유를 위해 바인드 마운트(Bind Mount)와 볼륨(Volume) 두 가지 방식을 제공한다.
둘 다 데이터를 컨테이너와 공유할 수 있도록 하지만, 동작 방식과 사용 목적이 다르다.
docker run -d --name bind-container \
-v /home/user/app:/app \
nginx
/home/user/app
디렉터리를 컨테이너의 /app
에 마운트한다./app
경로를 수정하면 호스트의 /home/user/app
도 함께 변경된다./var/lib/docker/volumes/
디렉터리에서 데이터를 관리한다.docker volume create my-volume
docker run -d --name volume-container \
-v my-volume:/app \
nginx
my-volume
이라는 Docker 볼륨을 생성하고 컨테이너의 /app
에 마운트한다.
컨테이너가 종료되더라도 볼륨 데이터는 유지된다.
볼륨을 삭제하려면 명시적으로 삭제해야 한다:
docker volume rm my-volume
구분 | 바인드 마운트 (Bind Mount) | 볼륨 (Volume) |
---|---|---|
저장 위치 | 호스트의 특정 디렉터리 | Docker가 관리하는 /var/lib/docker/volumes/ |
데이터 유지 | 컨테이너 삭제 후에도 유지 (호스트 파일 유지됨) | 컨테이너 삭제 후에도 유지 (볼륨 삭제 전까지) |
독립성 | 호스트 파일 시스템과 강하게 결합 | Docker가 관리, 컨테이너와 독립적 |
사용 목적 | 로컬 개발 환경, 소스 코드 공유 | 데이터베이스, 로그 저장, 여러 컨테이너 간 데이터 공유 |
성능 | 호스트 파일 시스템에 의존 → 속도 차이가 있음 | Docker 내부에서 최적화되어 빠름 |
운영 환경에서는 일반적으로 볼륨을 사용하며,
개발 환경에서는 바인드 마운트를 활용하는 것이 편리하다.