분류 전체보기 178

릴레이션 직교성

직교성은 여러 개의 릴레이션 사이의 중복에 관한 개념이다. 즉 DB 전체에서 중복을 제거하는 작업이다. 각 릴레이션에서 중복을 제거해도 DB 전체를 볼 때 중복이 남아 있다면 결국 불일치의 원인이 된다. 직교란 두 개 이상의 릴레이션이 같은 값을 갖지 않는 상태이다. 1. 같은 값을 가진 릴레이션 레플리카 완전히 같은 구조와 같은 데이터를 가진 릴레이션이 여러 개 있는 경우. 즉 DB를 복제하여 사용하는 경우 같은 형태의 릴레이션 예를 들어보면 특정 데이터를 2000년~ 2020년의 데이터를 1년마다 다른 릴레이션에 저장하는 경우, 제목이 완전히 같은 릴레이션은 분명 의미도 같은 것이라고 생각하기 때문에 같은 값을 가질 수 있다. 이때 같은 값을 가지고 있다면 중복되므로 모순이 발생한다. 제목 일부만 같..

DB/관계형 DB 2021.01.18

Heap (개념 및 프로그래머스 문제)

힙(Heap)이란? 힙 트리(Heap Tree), 보통 줄여서 힙(Heap)이라고 부른다. 힙은 부모 노드의 값이 항상 하위 노드의 값보다 작거나 큰 구조의 트리이다. 트리의 일종으로 완전 이진 트리이면서, 부모 노드의 값이 항상 하위 노드의 값보다 작거나 큰 구조의 트리이다. 힙의 사전적인 의미가 '쌓아 올린 더미'인 것 처럼, 데이터가 위에서부터 규칙적으로 쌓여있는 구조이다. - 우선순위 큐를 위하여 만들어진 자료구조 - 여러 개의 값 중 최댓값과 최솟값을 빠르게 찾기위한 구조 - 부모 노드의 값이 자식 노드의 키 값보다 항상 큰 이진트리 - 힙은 중복된 값을 허용 종류 최대 힙 Max Heap 부모 노드의 값이 항상 하위 노드의 값보다 크거나 같다. 부모_key >= 자식_key 최소 힙 Min H..

알고리즘 2021.01.14

도커 컴포즈

도커 컴퍼즈란?? 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것 도커 컴포즈를 사용하는 이유 여러 개의 컨테이너가 하나의 애플리케이션을 동작할 때 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 한다. 매번 run 명령어를 여러 번 사용할 수 있지만 각 컨테이너가 제대로 동작하는지 확인하는 테스트 단계에서는 번거롭다. 즉 매번 실행 따로 하기 귀잖다. 그래서 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것이 편리하다. 도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다. 또한 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로..

Docker 2021.01.12

Nodejs Test하는 이유와 Jest

테스트를 하는 이유 자신이 만든 서비스가 제대로 동작하는지 테스트해야 함 기능이 많다면 수작업으로 테스트하기 힘듦 프로그램이 프로그램을 테스트할 수 있도록 자동화함 테스트 환경을 최대한 실제 환경과 비슷하게 흉내냄 아무리 철저하게 테스트해도 에러를 완전히 막을 수는 없음 테스트를 하면 좋은 점 하지만 허무한 에러로 인해 프로그램이 고장나는 것은 막을 수 있음 한 번 발생한 에러는 테스트로 만들어두면 같은 에러가 발생하지 않게 막을 수 있음 코드를 수정할 때 프로그램이 자동으로 어떤 부분이 고장나는 지 알려줌 Jest 설치하고 실행해보기 (개발용) npm i –D jest Nodebird 프로젝트를 그대로 사용함 routes 폴더 안에 middlewares.test.js 작성 테스트용 파일은 파일명에 te..

Node.js 2021.01.12

프레임 - 프롤로그

비관주의자는 어떤 기회 속에서도 어려움을 보고, 낙관주의자는 어떤 어려움 속에서도 기회를 본다. - 윈스턴 처칠 -저자의 말- 프레임의 중요성에 대한 연구들을 공부하면서 느꼈던 재미와 의미를 다른 사람들과 공유하고 싶은 소박한 동기에서 이 책을 쓰게 되었다. 프레임이라는 개념 자체를 소개하고 근본적인 지식을 전달하겠다. 초판을 읽은 사람들은 1, 5, 6,장만 읽어도 충분하다. 우리는 자신의 행동에 영향을 주는 타인의 힘에 대해서는 민감하지만, 타인의 행동에 영향을 주는 나의 힘에 대해서는 놀라울 정도로 둔감하다. 타인의 행동을 유발하고 원인이 정작 나 자신임에도 불구하고, '원래 저 사람은 저래'라는 생각의 함정에 빠지곤 한다. 지혜와 자기 성찰의 완성은 타인에게 미치는 나의 영향력을 직시하는 것이다...

정규화 논리 (결합 종속성) #(제 4정규형 ~ 제 6정규형)

1. 결합 종속성 함수 종속성을 사용한 정규화는 후보키가 되는 속성을 찾아내는 작업이다. 그리고 이런 숨겨진 후보키가 발견됐을 때에는 릴레이션을 무손실 분해해 릴레이션 내부의 중복을 제거할 수 있었다. 하지만 아직 중복성 제거의 싸움은 끝나지 않았다. 이를 위해 나온 것이 결합 종속성이다. (JD) 결합 종속성은 키 자체에 다중성이 포함됐을 때 나타나는 중복을 나타낸다. [정의] A, B, ..., C를 릴레이션 R의 제목의 부분집합이라고 하자. 만약 A, B, ... , C의 프로젝션에 대응하는 릴레이션을 결합한 결과와 R이 같은 경우라면 이 경우에 한해 R은 다음의 결합 종속성을 만족시키게 된다. ☆{A, B, ..., C} A, B, ..., C의 제목 중 하나가 R의 제목 전체와 같을 때는 그 결..

DB/관계형 DB 2021.01.11

CORS 에러 이해하기

CORS에러 브라우저간의 데이터를 주고받는 과정에서, 도메인 이름이 서로 다른 사이트간에 api요청을 할 때, 공유를 설정하지 않았다면 CORS에러가 발생한다. -> 서버가 발생시키는 것이 아니고 브라우저가 발생시키는 것이다. 그러나 해결은 서버에서 해줘야한다. (그렇기 때문에 초보자가 어려워 하는 것이다.) 브라우저(1111포트) - 프론트서버(1111포트) - 백엔드서버(2222포트) 위와 같이 브라우저와 서버간 관계가 있을때, 브라우저에서 도메인/포트가 다른 백엔드 서버로 요청이 갔을때, 보안을 위해 자체적으로 요청이 차단된다. CORS는 브라우저에서 발생하는 것이기 때문에 프론트서버-백엔드서버간 요청은 포트가 다르더라도 에러가 나지 않는다. 때문에 이점을 이용해 CORS를 해결할 수 있고, 간편하..

Node.js 2021.01.11

API 서버에서 사용량 제한하기

1. 사용량 제한 구현과 이유 DOS 공격 등을 대비해야 함 -> 새로고침을 계속하면서 공격하는 것 (무차별 요청) 일정 시간동안 횟수 제한을 두어 무차별적인 요청을 막을 필요가 있음 npm i express-rate-limit apiLimiter 미들웨어 추가 windowMS(기준 시간), max(허용 횟수), delayMS(호출 간격), handler(제한 초과 시 콜백 함수) deprecated 미들웨어는 사용하면 안 되는 라우터에 붙여서 사용 시 경고 const jwt = require('jsonwebtoken'); exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.status(40..

Node.js 2021.01.11

에필로그 -무엇이 인간 내년의 충동을 제어하는가

삶의 상당 부분이 비의식적 자아(습관)의 지배를 받는다. 이 시스템은 결정력, 판단력, 추진력 등 다양한 이름으로 불리는 의식적 자아보다 느리게 움직인다. 그래서 본격적으로 활동하기까지 꽤 긴 시간이 걸리지만 한번 자리를 잡으면 어지간해서는 사라지지 않는다. 이때 당신이 할 일은 없다. 그저 우리안의 습관이 올바르게 일하도록 상항, 신호, 마찰력, 보상 등 지금까지 배운 습관 설계 도구를 활용해 가장 유리한 환경을 만들어주기만 하면 된다. 이로서 얻게 될 이득은 크게 두가지이다. 1. 좀 더 많은 목표를 좀 더 쉽게 이룰 수 있다. 2. 삶을 단순하고 고요하게 운영할 수 있다. 우리는 이미 습관적으로 살고 있다. 대다수가 그 사실을 인식하지 못하고 있을 뿐이다. 사람들은 자신의 커다란 잠재력을 무시한 채..

정규화 논리 (함수 종속성) #(제 1정규형 ~ 제 3+정규형)

1. DB 설계가 중요한 이유 객체지향 프로그래밍에서 적절한 객체가 설계돼 있지 않다면 그에 대한 조작인 멤버함수나 메서드는 복잡해질 것이며 응용프로그램의 로직도 잘 표현할 수 없을 것이다. RDB도 똑같다. 데이터의 조작인 쿼리는 DB에 포함된 각 테이블이 적절히 설계돼 있지 않으면 깔끔하게 표현할 수 없다. 그래서 필요한 것이 정규화 이론이다 2. 정규화 ( 관계형 모델을 보완하는 이론 ) 사용이유 1. 변칙을 방지할 수 있다. ( 논리적 모순이 발생하여 답이 나올 수 없는 구조 ) - 릴레이션의 설계가 상식적이지 않을 때 발생 - 중복때문에 발생 정규형 (NF) 정규화에는 몇 가지 단계가 있는데 높은 단계로 갈수록 더 좋은 상태가 된다. ( 중복이 적은 상태 ) 함수 종속성( FD ) 정의 : 어떤..

DB/관계형 DB 2021.01.10