자바 입출력 스트림은 데코레이터 패턴이다. 상속보다 유연한 구현 방식 데코레이터는 다른 데코레이터나 컴포넌트를 포함해야 한다. 지속적인 기능 추가/제거가 용이하다. 예를 들면, 커피라는 컴포넌트가 있고 이 커피를 조금씩 변화시켜줄 수 있는 데코레이터가 그 컴포넌트를 감싸고 있다. 라떼 데코레이터, 모카 데코레이터, 에스프레소 데코레이터 같은 게 있을 수 있다. 일단 데코레이터를 부르면 컴포넌트의 동작을 하고 특정 데코레이터가 가진 동작을 더해주는 개념이다. public abstract class Coffee { public abstract void brewing(); }public class Americano extends Coffee { @Override public void brewing() { Sy..
Backend
reduce() 연산을 거의 써본 적이 없어서 정리함. stream()이 가지고 있는 기본 연산들 말고 커스텀한 연산을 정의해서 stream()의 요소를 소모시키고 싶을 때 쓴다. 람다식으로 구현하거나 람다식 안에 들어갈 내용이 너무 길면 직접 BinaryOperator를 구현해서 쓴다. 예를 들어 배열에 무자열이 들어있을 때 가장 긴 문자열을 찾는 기능을 만들고 싶다면 아래와 같이 할 수 있다. public void test() { String texts[] = {"1111", "1231241247124", "2312874817427728472848", "123"}; System.out.println(Arrays.stream(texts).reduce("", (s1, s2) -> { if (s1.getB..
내가 잘 모르는 거 위주로 정리 이진 검색 트리 중복을 허용하지 않음 왼쪽 자식 노드는 부모 노드보다 작은 값, 오른쪽 자식 노드는 부모 노드보다 큰 값을 가짐. 자료 검색에 걸리는 시간이 평균 log(n) 자료를 순서대로 넣지 않을 때 쓸만함. inorder traversal을 하면 자료가 정렬됨. 자바에서는 TreeSet, TreeMap 이 이걸 씀. 좌우를 거꾸로 넣으면 내림차순으로도 정렬할 수 있음. 그래프 점점과 간선의 유한 집합. 정점(vertex) 간선(edge) 인접행렬, 인접리스트로 구현할 수 있음. 탐색은 BFS, DFS를 이용함. 해싱 자료를 검색하기 위한 자료 구조 키에 대한 자료를 검색하기 위한 사전 개념의 자료 구조. (key, dictionary) key / value를 쌍으로..
1. 비정상 종료되었을 때 자동으로 서버를 재시작하게 해주는 모듈 - forever npm install forever -g 로 전역설치 해준다음 forever start app.js로 노드 프로그램을 실행하기 forever list 를 통해 forever로 돌아가는 프로그램들을 확인할 수 있다. 소스 코드 수정으로 인해 forever를 재시작해야 하는 경우에는 forever restart app.js 를 입력하여 재시작하면 된다. forever를 종료하고 싶다면 forever stop app.js 를 하면 된다. 2. 클러스터링? 하나의 프로그램을 여러 개의 프로세스로 실행하는 방법. pm2 모듈을 활용할 수 있다. npm install pm2 -g 로 전역설치한다. 주요 명령어 pm2 start ap..
1. 패스포트로 로그인하기 패스포트는 노드에서 사용할 수 있는 사용자 인증 모듈이다. 사용 방법이 간단하고 사용자 인증 기능을 독립된 모듈 안에서 진행할 수 있도록 도와준다. 엑스프레스 환경에서는 미들웨어로 끼워넣을 수 있어서 더 간단하게 사용할 수 있다. 패스포트의 목적은 클라이언트에서 요청한 인증 정보로 사용자 인증을 하는 것이다. 인증 이외의 기능은 다른 코드로 만들어야 한다. 패스포트의 인증 방식은 'strategy'로 만들어져 있기 때문에 어떤 방식을 선택하느냐에 따라 방식이 달라진다. DB 데이터와 비교하는 로컬 인증 방식, 페북/트위터 등을 이용하는 OAuth 인증 방식 등이 있다. 패스포트의 기본 사용 방법 아래와 같이 인증에 성공하면 콜백함수를 호출하고 함수 안에서 redirect()메서..
1. 모듈화? app.js 하나에 코드를 다 때려박아 놓으면 분석하기가 매우 어려워진다. 기능별로 코드를 구분한 후 독립된 파일로 분리시키는 것이 효율적이다. 기본적으로 js 파일을 새로 만드는 것부터 모듈화는 시작된다. exports와 module.exports를 사용할 수 있다. module.exports를 사용하면 객체를 그대로 뽑아 쓸 수 있어서 훨씬 좋다. 심지어는 module.exports와 exports를 같이 쓰면 module.exports의 우선순위가 높아서 exports로 꺼내온 것은 무시된다. ==> module.exports를 쓰면 된다. 2. 모듈을 분리할 때 사용하는 전형적인 패턴 함수를 할당하는 경우 모듈 안에서 함수를 만들어 할당. 모듈을 불러온 후 소괄호를 붙여 모듈을 실행..
현재 요약하고 있는 책에는 mongoDB, MySQL의 연결방식이 쓰여 있지만 나는 postgresql을 실무에서 쓰고 있기 때문에 postgresql 연결방법에 대하여 적도록 하겠다. 1. postgresql을 지원하는 pg 모듈 설치 npm install pg 쉘에 이렇게 입력하여 일단 pg 모듈을 설치한다. 2. pg 모듈과 knex 모듈을 이용하여 db연결 var { Pool } = require('pg'); const pool = new Pool({ user: "User Name", host: "Host Name", database: "Database Name", password: "Password", port: 5432, }); pool.connect(); pool.query("쿼리 입력", ..
1. 기본 http 모듈로 서버 만들기 http 모듈에 기본적으로 정의되어 있는 createServer() 메서드를 이용하여 서버 객체 만들기 var http = require('http'); // 웹 서버 객체 생성 var server = http.createServer(); // 웹 서버를 시작하여 3000번 포트에서 대기 var port = 3000; server.listen(port, function() { console.log('웹 서버 시작. : %d', port); }); 클라이언트가 웹 서버에 요청할 때 발생하는 이벤트 처리하기 웹 브라우저에 이 서버에 데이터를 요청하면 그때마다 이벤트가 발생하므로 상황에 맞추어 콜백 함수를 각각 등록해주면 된다. 주요 발생 이벤트는 아래와 같다. conn..