본문 바로가기

STUDY

(102)
기타: Docker commands
11. Docker로 다중 컨테이너 어플리케이션 구축 실습할 어플리케이션 여기 Goals 서비스가 있다. 유저는 목표를 추가할 수 있고, 추가된 목표들이 화면에 나타난다. 그리고 추가된 목표를 클릭하여 삭제할 수도 있다. 이 서비스에는 유저가 접속할 Frontend와 목표를 추가하고 제거하는 API가 있는 Backend, 그리고 목표 데이터를 저장한 Database가 필요하다. 이 각각의 요소들을 다중 컨테이너로 구축해보고자 한다. 컨테이너화 어플리케이션은 Database, Backend, Frontend로 구성되어있고 이를 각각 컨테이너로 구성해야한다. Database는 MongoDB로 구동되고 컨테이너가 중지되어도 저장된 데이터는 유지되어야한다. 그리고 Backend에서만 해당 데이터에 접근할 수 있도록 접근 제한이 되어야 한다. Backend는 Nod..
6-3) 비트 필드 대신 EnumSet을 사용하라 비트 필드 열거 상수 public class Text { public static final int STYLE_BOLD= 1
6-2) ordinal 메소드 대신 인스턴스 필드를 사용하라 ordinal 사용한 예 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTETE, NONET, DECTET; public int numberOfMusicians() { return this.ordinal() + 1; } } enum에는 해당 상수사 몇 번째 위치인지를 반환하는 ordinal이라는 메소드가 존재한다. 그리고 개발자는 해당 메소드를 사용하여 기능을 구현하고싶은 유혹에 빠질 수 있다. 위의 코드는 합주의 종류를 나타내는 Ensemble과 여러 상수들이 있다. 그리고 연주자의 수를 반환하는 numberOfMusicians라는 메소드가 있는데 이를 ordinal 메소드를 이용하여 구현하였다. 당장은 문제가 ..
6-1) int 상수 대신 enum을 사용하라 정수 열거 패턴 public static final int FULL_TIME_JOB= 0; public static final int PART_TIME_JOB= 1; public static final int STAFF_RANK= 0; public static final int MANGER_RANK= 1; public static final int SENIOR_RANK= 2; 개발을 하다보면 상수 값을 사용해야 할 때가 있고 int에 static final 키워드를 추가해서 표현할 수 있다. 그리고 정의된 이름이 상수의 의미를 나타낸다. 정규직, 비정규직 고용형태를 0, 1의 상수로 정의하였고 사원, 대리, 주임 직급을 0, 1, 2의 상수로 정의하였다. 그리고 상수의 이름을 보면 그 의미에 맞게 정의되..
10. 네트워킹: 컨테이너 통신 통신의 종류 스타워즈 영화와 인물들을 검색하고 선호하는 영화와 인물을 저장하고 관리할 수 있는 favorite 어플리케이션이 있다. 이 어플리케이션으로 3가지의 네트워크 통신을 테스트해보고자 한다. 먼저 인터넷을 통한 어플리케이션과 외부 API와의 통신이다. favorite는 swapi.dev의 api로 요청을 보내서 스타워즈의 영화와 인물 정보를 가져온다. 그 다음은 컨테이너와 로컬 호스트의 통신이다. favorite는 localhost의 mongodb에 사용자의 데이터를 저장할 것이다. 마지막으로 컨테이너간의 통신이다. 이는 favorite의 사용자 데이터를 로컬호스트가 아니라 새로운 mongodb 컨테이너를 띄워서 저장할 것이다. 외부와의 통신 > docker build -t favorite . >..
9. 환경변수와 빌드인수 환경변수와 빌드인수 > docker build --build-arg > docker run --env 도커 이미지 빌드는 Dockerfile에 따라서 이루어지고, 도커 컨테이너의 실행은 도커 이미지에 따라서 이루어진다. 그런데 상황에따른 약간의 유연함은 항상 필요하다. 같은 Dockerffile로 빌드하더라도 상황에 맞게 일부 빌드 내용을 바꾸거나, 같은 이미지로 컨테이너를 실행하더라도 일부 설정을 다르게 해야할 수 있다. 이때 사용할 수 있는것이 환경변수와 빌드인수이다. 환경변수 // server.js ... app.listen(80); ... 위 코드는 nodejs로 작성된 웹서버이다. 마지막에 app.listen(80) 코드를 통해 80번 포트로 요청을 받아서 동작한다는 것을 알 수 있다. 이 소스..
5-7) 타입 안전 이종 컨테이너를 고려하라 타입 안전 이종 컨테이너 public class Favorites { public void putFavorite(Class type, T instance); public T getFavorite(Class type); } 제네릭은 Set, Map 등 단일원소 컨테이너에 흔히 쓰인다. 이러한 컨테이너는 원소로 넣을 수 있는 타입의 수가 제한되어 있기 때문에 매개변수 타입의 수가 제한되어 있다. 하지만 더욱 유연한 컨테이너가 필요할 때도 있다. 다양한 타입의 원소를 가지는 컨테이너가 필요하다면 어떨까? 다양한 타입을 가지면서도 값을 넣거나 뺄 때 안전하게 사용할 수 있어야 할 것이다. 그리고 이를 타입 안전 이종 컨테이너라고 부른다. 위의 Favorites 클래스는 각 타입마다 좋아하는 객체를 넣을수 있는 ..