수강완료한 강의 복습해보자 (코딩으로 학습하는 GoF의 디자인 패턴) 플라이웨이트 패턴(Flyweight Pattern) 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴. 자주 변하는 속성(또는 외적인 속성, extrinsit)과 변하지 않는 속성(또는 내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다. 적용 전 코드 (Before) Character.java public class Character { private char value; private String color; private String fontFamily; private int fontSize; public Character(char value, String color, String fontFamily..
docker 이미지 다운로드 docker pull jenkins/jenkins dockerhub : https://hub.docker.com/r/jenkins/jenkins docker 컨테이너 실행 docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 —restart=on-failure —name jenkins-server jenkins/jenkins jenkins 접속 localhost:8080 1) 초기 비밀번호 입력 docker 로그로 확인 docker logs jenkins-server 직접 파일 열어서 확인 docker exec -it jenkins-server /bin/bash cat /var/jenkins_h..
샤드키 선정 컬렉션을 샤딩할때 데이터 분할에 사용할 1~2개의 필드를 선택하는데, 이 필드를 샤드 키라고 한다. 컬렉션을 샤딩하고나서는 샤드 키를 변경할 수 없으므로 올바르게 선택하는 것이 중요하다. 좋은 샤드키를 선정하려면 샤드 키가 애플리케이션의 요청을 분산하는 방법과 작업량을 이해해야한다. 1) 샤드를 얼마나 많이 늘릴 것인가? 샤드가 3개인 클러스터는 샤드가 천개의 클러스터보다 훨씬 유연하다. 클러스터가 점점 더 커질때, 쿼리가 모든 샤드를 방문해야하는 쿼리를 피하려면 거의 모든 쿼리가 샤드 키를 포함해야한다. 2) 읽기 혹은 쓰기 응답 대기 시간을 줄이려고 샤딩하는가? 쓰기 응답 대기 시간을 줄이는 일은 일반적으로 요청을 지리적으로 더 가까운 곳이나 더 좋은 장비로 보내는 작업과 관련 있다. 3..
샤딩을 사용하는 경우 사용 가능한 메모리를 늘릴때 사용 가능한 디스크 공간을 늘릴때 서버의 부하를 줄일때 한 개의 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)..
문제 - 문자열 압축 알파멧 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우, 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단, 반복횟수가 1인 경우는 생략 [입력] 첫 줄에 문자열, 길이는 100을 넘지 않는다. [출력] 첫 줄에 압축된 문자열을 출력 [입력 예제] KKHSSSSSSSE [출력 예제] K2HS7E 나의 풀이 package com.algorithm._01_그리디_구현; import java.util.Scanner; public class LC11_문자열_압축 { static int N; static String str; public static void main(String[] args) { // write y..
Docker 이미지를 생성하는 방법 1) 아무것도 존재하지 않는 이미지(우분두, CentOS 등)로 컨테이너를 생성 2) 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인 3) 컨테이너를 이미지로 커밋(commit) 이 방법은 환경 구성을 위해 일일이 수작업으로 패키지를 설치하고 깃(Git)에서 복제하거나 호스트에서 복사해야한다는 단점이 있다. 그리고 직접 확인해보고 이미지로 커밋하기 때문에 이미지의 동작을 보장할 수 있다는 장점이 있다. DockerFile로 이미지를 생성하는 방법 Docker는 이미지를 생성하는 과정을 쉽게 수행할 수 있도록 빌드(build) 명령어를 제공한다. Dockerfile 하나의 파일에 이미지 생성을 위한 내용을 기록해두면 도커는 이 파일을 읽어..
문제 한 개의 문자열 s, 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소 거리를 출력하시오. 입력 설명 문자열과 문자는 소문자다. 문자열의 길이는 100을 넘지 않는다. 입력 예제 teachermode e 출력 예제 1 0 1 2 1 0 1 2 2 1 0 나의 풀이 package com.algorithm._01_그리디_구현; import java.util.Arrays; import java.util.Scanner; /** * (문제) * 한 개의 문자열 s, 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소 거리를 출력 * * (입력설명) * 문자열과 문자는 소문자 * 문자열의 길이는 100을 넘지 않는다. * * (입력예제) * teachermode e * (출력예제..
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..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.