반응형

2026/07/28 8

Docker Swarm — 여러 도커 호스트를 하나의 클러스터로 묶기

이 글은 2022년 10월 기준 기록입니다. 지금까지는 호스트 한 대 안에서 컨테이너를 늘리고 앞에 로드 밸런서를 세웠습니다. 이번에는 도커 호스트들 자체를 클러스터로 구성해 관리해 봅니다.스웜 모드는 매니저와 워커로 이루어진다도커 스웜 모드는 여러 개의 도커 호스트를 하나의 클러스터로 묶어서 사용하는 모드입니다. 구성원은 두 종류입니다. 스웜(클러스터) 관리자인 manager node와 참여자인 worker node입니다. 매니저 노드에서 스웜 모드를 초기화합니다.$ docker swarm init참여할 때는 join 명령을 사용합니다.$ docker swarm join --token 토큰값 매니저IP:포트토큰과 주소를 따로 찾아 헤맬 필요는 없습니다. 매니저 노드에서 init을 실행하면 join할 수..

IT·테크/개발 2026.07.28

Docker Compose scale과 nginx 로드 밸런싱으로 부하 나누기

이 글은 2022년 10월 기준 기록입니다. 동일한 서비스를 여러 개 작동시켜 각 컨테이너에게 전달되는 부하를 줄여 봅니다.--scale 옵션이 같은 서비스를 여러 개 띄운다Docker Compose를 실행할 때 --scale 옵션을 사용하면 동일한 서비스를 여러 개 작동시킬 수 있습니다.$ docker compose --env-file test.env up -d --scale spring-crud=3 --scale postgres-db=2 --no-recreate --scale에는 서비스 이름에 대한 개수를 지정하면 되고, 지정하지 않은 서비스는 자동으로 1로 지정됩니다. 함께 붙인 --no-recreate 옵션은 변경이 필요한 컨테이너만 조작하도록 해 줍니다. 이미 잘 돌고 있는 컨테이너까지 다시 만..

Docker Compose에서 .env 파일 하나만 바꿔 끼우기

이 글은 2022년 10월 기준 기록입니다. 앞서 환경마다 docker-compose.dev.yml, docker-compose.prod.yml을 따로 두는 방식으로 설정을 분리했습니다. 그런데 이 방식은 환경이 늘어날 때마다 거의 같은 내용의 파일이 한 벌씩 늘어납니다. 여러 개의 docker-compose.yml 파일을 사용하지 않고, 하나의 파일에 설정만 다르게 적용하는 방법은 없을까요.Compose는 이미 .env 파일을 찾고 있다docker compose 명령은 기본적으로 ".env"라는 이름의 파일을 찾아서 읽습니다. 따로 설정하지 않아도 동작하는 규칙이므로, 별도의 이름을 쓰고 싶을 때만 --env-file 옵션으로 지정하면 됩니다.Compose 파일에서 값을 비우고 ${}로 남긴다값을 직접..

Java 멀티 스레드 — Thread와 Runnable로 작업 만들고 synchronized로 지키기

이 글은 2022년 5월 기준 기록입니다. 스레드는 하나의 프로세스 내에서의 작업 단위입니다. 별도로 스레드를 만들지 않아도 이미 하나는 돌고 있습니다. 모든 자바 프로그램은 처음에 메인 스레드가 main() 메소드를 호출하면서 시작하고, 메인 스레드가 종료되면 프로그램이 종료됩니다.스레드 작업은 두 가지 방법으로 만듭니다첫 번째는 Thread 클래스를 상속받는 방법입니다. run() 메소드를 재정의해 그 안에 작업 내용을 적습니다.public class NewThread extends Thread { @Override public void run() { // 스레드 작업 내용 작성 }}public static void main(String[] args) { Thread..

IT·테크/개발 2026.07.28

Java 입출력 — 바이트·문자 스트림과 보조 스트림으로 기능 얹기

이 글은 2022년 5월 기준 기록입니다. Java의 데이터 입출력은 java.io 패키지가 담당합니다. 클래스 이름이 많아 보이지만, 두 개의 축만 잡으면 대부분 제자리를 찾습니다. 바이트 단위인가 문자 단위인가, 그리고 주 스트림인가 보조 스트림인가입니다.java.io는 바이트 계열과 문자 계열로 나뉩니다패키지의 주요 클래스를 성격별로 묶으면 이렇습니다.java.io 패키지의 주요 클래스설명File파일 시스템의 파일의 정보를 얻기 위한 클래스Console콘솔로부터 문자를 입출력하기 위한 클래스InputStream / OutputStream바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스FileInputStream/FileOutputStream, DataInputStream/DataOutputSt..

IT·테크/개발 2026.07.28

Java JDBC — 드라이버 로드부터 Statement·PreparedStatement·ResultSet까지

이 글은 2022년 5월 기준 기록입니다. DBMS는 제품마다 다릅니다. 그런데 자바 코드는 어느 DB에 붙든 비슷하게 생겼습니다. 그 사이를 메우는 것이 JDBC입니다.JDBC는 DBMS마다 다른 것을 하나의 인터페이스로 가립니다JDBC는 자바에서 다양한 DBMS와 연결하기 위한 인터페이스를 제공합니다. 실제 연결을 수행하는 구현체는 자바가 만들지 않습니다. 각 DBMS 개발 업체에서 해당 인터페이스에 대한 구현체로 드라이버를 제공합니다. 응용 프로그램은 JDBC 인터페이스만 바라보고, 그 뒤에서 오라클 드라이버·MySQL 드라이버·MSSQL 드라이버가 각자의 데이터베이스로 연결을 이어 줍니다. 붙일 DB가 바뀌어도 응용 프로그램이 상대하는 면은 그대로라는 뜻입니다.접속 정보는 코드가 아니라 prope..

IT·테크/개발 2026.07.28

Docker External Config — 환경 변수로 이미지 밖에서 설정 주입하기

이 글은 2022년 10월 기준 기록입니다. Docker 이미지는 한 번 만들어지면 변하지 않는 상태를 유지합니다. 그렇다면 동일한 이미지로 여러 설정이 적용된 다른 컨테이너들을 만들려면 어떻게 해야 할까요.설정이 바뀔 때마다 이미지를 굽는 것은 비합리적이다문제는 이미지의 불변성 자체가 아니라, 그 불변성 때문에 생기는 반복입니다. 동일한 프로그램을 다른 설정으로 실행시키기 위해 매번 이미지를 만드는 것은 비합리적입니다. 개발용과 운영용의 차이가 DB 주소 한 줄뿐이어도 이미지를 두 벌 관리해야 합니다.그래서 질문은 이렇게 좁혀집니다. 이미지 내부의 설정을 컨테이너가 동작할 때 지정해 줄 수는 없을까?환경 변수가 이미지와 설정 사이의 통로다환경 변수는 운영 체제에서 관리되는 변수입니다. 그리고 각 컨테이..

Java 컬렉션 프레임워크 — List·Set·Map의 갈래와 Comparable·Comparator

이 글은 2022년 5월 기준 기록입니다.동일한 목적을 가지는 다수의 데이터를 저장할 때 가장 먼저 떠오르는 것은 배열입니다. 다만 배열에는 뚜렷한 제약이 있습니다. 생성 시 크기가 고정되므로 값의 추가와 제거에 불편한 점이 있습니다. 컬렉션 프레임워크는 바로 이 부분에 대해 편의성을 제공하는 라이브러리입니다.컬렉션은 세 갈래로 갈라집니다컬렉션 프레임워크의 인터페이스 구조는 다음과 같이 갈라집니다.Collection 아래에 List와 Set이 있고, Map은 그 옆에 별도로 서 있습니다. 각 인터페이스에 딸린 구현 클래스와 성격은 이렇게 정리됩니다.인터페이스 분류 특징구현 클래스CollectionList 계열순서를 유지하고 저장 / 중복 저장 가능ArrayList, Vector, LinkedListCol..

IT·테크/개발 2026.07.28
반응형