샤딩을 사용하는 경우 사용 가능한 메모리를 늘릴때 사용 가능한 디스크 공간을 늘릴때 서버의 부하를 줄일때 한 개의 mongod가 다룰 수 있는 처리량보다 더 많이 데이터를 읽거나 쓸때 샤딩이 필요한 시점을 결정하는 데 모니터링이 중요하다. 어떤 항목을 프로비저닝(provisioning)할지 찾고, 복제 셋 전환 방법과 시기를 미리 계획해야 한다. 프로비저닝(provisioning) 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다. 서버 시작 클러스터를 생성하려면 먼저 필요한 프로세스를 모두 시작해야한다. mongos, 샤드 설정 구성 서버 : 클러스터 구성을 저장하는 일반 mongod 서버 클러스터 구성 : 샤..
샤딩 샤딩은 여러 장비에 걸쳐 데이터를 분할하는 과정을 뜻한다. 각 장비에 데이터의 서브셋을 넣음으로써, 더 많은 수의 덜 강력한 장비로 더 많은 데이터를 저장하고 더 많은 부하를 처리할 수 있다. 컬렉션을 분할한 조각 데이터(청그)를 저장하며, 복제 세트로 구성될 수 있다. 더 자주 접근하는 데이터를 성능이 더 좋은 하드웨어에 배치할 수 있다. 지역에 따라 데이터셋을 분할해 주로 접근하는 애플리케이션 서버와 가까운 컬렉션에서 도큐먼트의 서브셋을 찾을 수 있다. ex) 사용자가 특정 로케일(locale)을 기반으로 할때 샤딩은 개발 및 운영 측면에서 몽고DB를 구성하는 가장 어렵고 복잡한 방법이다. 모니터링할 구성 요소가 많고, 클러스터에서 데이터가 자동으로 옮겨 다니기 때문이다. 몽고DB 에서의 자동 ..
Postgresql Docker 설치 1) postgresql 이미지 설치 docker pull postgres 2) docker 이미지 확인 docker images 3) docker 컨테이너 실행 한가지 참고할 점은, 위의 이미지 설치 과정을 생략 하고 해당 명령어만 수행할 경우, 이미지가 자동으로 설치된다. docker run -dp 5432:5432 --name postgresql -e POSTGRES_PASSWORD=1234 -v 호스트 패키지 경로:/var/lib/postgres/data postgres 명령어 설명 -d 컨테이너를 백그라운드에서 실행 -p port 설정 --name 컨테이너에 이름을 부여 -e 컨테이너 내 환경변수 값 설정 -v 호스트와 컨테이너의 directory 연결 4)..
Docker 이미지를 생성하는 방법 1) 아무것도 존재하지 않는 이미지(우분두, CentOS 등)로 컨테이너를 생성 2) 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인 3) 컨테이너를 이미지로 커밋(commit) 이 방법은 환경 구성을 위해 일일이 수작업으로 패키지를 설치하고 깃(Git)에서 복제하거나 호스트에서 복사해야한다는 단점이 있다. 그리고 직접 확인해보고 이미지로 커밋하기 때문에 이미지의 동작을 보장할 수 있다는 장점이 있다. DockerFile로 이미지를 생성하는 방법 Docker는 이미지를 생성하는 과정을 쉽게 수행할 수 있도록 빌드(build) 명령어를 제공한다. Dockerfile 하나의 파일에 이미지 생성을 위한 내용을 기록해두면 도커는 이 파일을 읽어..
Dockerfile 애플리케이션을 패키징하기 위한 간단한 스크립트다. Dockerfile은 일련의 인스트럭션으로 구성되어있는데, 익스트럭션을 실행한 결과로 도커 이미지가 만들어진다. 어떠한 애플리케이션이라도 패키징할 수 있다. Dockerfile FROM diamol/node ENV TARGET="blog.sixeyed.com" ENV METHOD="HEAD" ENV INTERVAL="3000" WORKDIR /web-ping COPY app.js . CMD ["node", "/web-ping/app.js"] 인스트럭션 설명 예제에서 사용 방법 FROM 모든 이미지는 다른 이미지로부터 출발한다. FROM 뒤에 지정된 이미지를 시작점으로 지정한다. https://hub.docker.com/r/diamol/..
수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 전략 패턴 (Strategy Pattern) 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 사용할 알고리즘을 클라이언트가 선택한다. 적용 전 코드 (Before) BlueLightRedLight.java public class BlueLightRedLight { private int speed; public BlueLightRedLight(int speed) { this.speed = speed; } public void blueLight() { if (speed == 1) { System.out.println("무 궁 화 꽃 이"); } else if (speed == 2) { System.out.println("무궁화..
수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 템플릿 콜백 (Template-Callback) 콜백으로 상속 대신 위임을 사용하는 템플릿 패턴. 상속 대신 익명 내부 클래스 또는 람다 표현식을 활용할 수 있다. 적용 전 코드 (Before) FileProcessor.java public class FileProcessor { private String path; public FileProcessor(String path) { this.path = path; } public int process() { try(BufferedReader reader = new BufferedReader(new FileReader(path))) { // 자동 close int result = 0; St..
수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 템플릿 메서드 (Factory method) 알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법. 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리즘을 제공한다. 적용 전 코드 (Before) FileProcessor.java public class FileProcessor { private String path; public FileProcessor(String path) { this.path = path; } public int process() { try(BufferedReader reader = new BufferedReader(new FileReader(path))) { // 자동 close ..
수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 추상 팩토리 (Abstract Factory) 서로 관련있는 여러 객체를 만들어주는 인터페이스 구체적으로 어떤 클래스의 인스턴스를(concrete product)를 사용하는지 감출 수 있다. 적용 전 코드 (Before) Anchor.java public interface Anchor { } WhiteAnchor.java public class WhiteAnchor implements Anchor { } Wheel.java public interface Wheel { } WhiteWheel.java public class WhiteWheel implements Wheel { } Ship.java @Getter @Setter @ToStr..
수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 팩토리 메서드 (Factory Method) 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다. 다양한 구현체(Product)가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다 적용 전 코드 (Before) Ship.java @Getter @Setter @ToString public class Ship { private String name; private String color; private String logo; } Client.java public class Client { public static void main(String[] args) { Ship whiteship =..
DispatcherServlet 서블릿 컨테이너의 가장 앞단에서 들어오는 모든 요청을 먼저 받아, 적합한 컨트롤러에 위임해주는 프론트 컨트롤러다. dispatch "보내다" 라는 뜻 클라이언트로부터 어떤 요청이 오면, 서블릿 컨테이너가 이 요청을 받게되고, 이 요청을 프론트 컨트롤러인 DispatcherServlet이 받아서 해당 요청을 처리할 컨트롤러(Bean)을 getBean() 메서드로 받아와서 요청에 적합한 컨트롤러의 메서드를 실행시킨다. Spring : web.xml 을 통한 매핑 web.xml Hello_servlet Hello.Hello_servlet // servlet class Hello_servlet /Hello SpringBoot : 자동 구성 SpringBoot는 아래 spring-..
마이바티스(Mybatis) SQL과 자바 객체를 매핑하는 사상에서 개발된 데이터베이스 접근용 프레임워크다. 마이바티스는 SQL 기반으로 데이터베이스 접근을 수행하는 기존 방법을 받아들이고, 규모가 큰 애플리케이션 개발에서 발생하는 과제를 해결하는 구조를 제공한다. Mybatis는 자체 Connection Pool을 가지며, 환경에 따라 사용할 DB를 설정하여 사용한다. 마이바티스 등장 애플리케이션의 규모가 커지면서 SQL이 수백개가 넘는 경우가 많아졌다. SQL 자체의 체계적인 관리 방법이나 SQL의 입출력 데이터와 자바 객체의 효율적인 변환 방법 등 스프링의 기능만으로는 해결할 수 없는 과제가 발생했다. 마이바티스 이점 SQL의 체계적인 관리, 선언적 정의(설정 파일, 어노테이션) 자바 객체와 SQL ..