본문 바로가기

ALL

(128)
8-1) 매개변수가 유효한지 검사하라 매개변수 유효성 검사 // NullPointerException 발생 List nums = Collections.synchronizedList(null); ... 메소드나 생성자의 내부 동작은 정상적인 파라미터가 전달될 것이라는 것을 전제로 한다. 예를 인덱스 값은 음수가 아니고 객체는 null이 아니라는 것이다. 하지만 개발중 실수로 잘못된 값이 전달되지 않을거라는 보장은 없기 때문에 매개변수의 유효성 검사는 필요하다. 그리고 오류를 가능한 빨리 (근본적인 오류가 발생한 곳에서) 잡는것에도 도움이 된다. 위의 코드를 보면 Collections.synchronizedList(null); 메소드를 호출한 시점부터 파라미터 유효성 검사에 걸려서 에러가 발생한다. 하지만 만약 저 에러가 발생하지 않았다면, 멀..
12. 도커 컴포즈: 다중 컨테이너 오케스트레이션 다중 컨테이너 일반적으로 하나의 서비스는 여러 컨테이너로 구성되어있다. 가장 단순한 To-Do 앱을 생각하더라도 사용자가 접속할 화면인 Frontend를 위한 컨테이너, 기능을 수행할 Backend 컨테이너 그리고 데이터를 저장할 database 컨테이너가 필요하다. 그리고 각각의 컨테이너는 상황과 역할에 맞게 컨테이너를 실행해주어야 한다. > docker network create goals-net > docker run -d --rm --name mongo --network goals-net -v goals-mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo > docker build ..
기타: 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 . >..