2021-10-09

김기태·2021년 10월 9일
0

오늘의 개발.

오늘은 과제 제출 한 후 각자의 사이트를 보고 코드 리뷰하는 시간을 가졌다.
이후 각자 공부한 내용을 공유하고 알아보는 시간을 가져봤다.

각자 공부 한 것들.

B+트리? B-트리?
B-트리는 각 노드는 여러개의 key를 가질 수 있으며 여러개의 Child를 가질 수 있다. 또한 모든 리프 노드는 동일한 depth를 가지고 있다. 키는 B-트리 알고리즘에 따라 정렬되어 각 노드에 배치
각 노드는 최대 2개의 key를 가지며 최대 3개의 자식을 가질수 있다.
각 노드에는 여러개의 키를 갖고 키에 대응하는 데이터도 함께 갖는다. 하나의 노드에 여러개의 키를 갖는다.

B+트리는 b-트리를 개량한 트리로 b-트리처럼 모든 리프 노드에 동일한 depth를 가지지만 b+ 트리는 inner 노드에는 키만 저장이 되고 리프 노드에는 키와 데이터를 함께 저장한다는 것이다. 리프 노드에만 데이터가 저장되기 때문에 리프간의 포인트를 연결 b-트리에 비해 쉬운 순회가 가능 inner Node에는 데이터가 없기때문에 b-트리의 inner 노드에 비해 용량이 작아 많은 inner노드의 배치가 가능하다.

B+tree의 장점 1. 리프 노드를 제외하고 데이터를 담아두지 않기 때문에 메모리를 더 확보함으로써 더 많은 key들을 수용할 수 있다. 하나의 노드에 더 많은 key들을 담을 수 있기에 트리의 높이는 더 낮아진다.(cache hit를 높일 수 있음) 2. 풀 스캔 시, B+tree는 리프 노드에 데이터가 모두 있기 때문에 한 번의 선형탐색만 하면 되기 때문에 B-tree에 비해 빠르다. B-tree의 경우에는 모든 노드를 확인해야 한다

Git ignore가 무었이고 왜 사용하는가..?
ignore는 기본적으로 왜 사용하는가..
git은 오픈소스로 만들어진 클라우드 저장소이므로 다른사람들이 볼 수 있다 그렇기 때문에 보안에 문제가 되는 정보를 올려서는 안된다. 협업 시 라이브러리 예를들어서 node_modules를 올리면 시간이 너무 오래 걸리기 때문에 협업에서 좋지가 않다 이러한 이유들 때문에 git ignore가 필요하다 git ignore에 git에 올리고 싶지 않은 file들을 명시 해 두면 git 클라우드 저장소에 업로드가 되지 않는다.

HTTP/HTTPS 프로토콜이 아닌 gRPC 프로토콜로 통신하는 서버 프로그램은 API 서버라고 부를 수 있을까요? (배포된 환경, 구현된 기능은 동일)
gRPG 프로토콜로 통신하는 서버 프로그램은 API라고 부를수 있다.
기본저긍로 gRPC는 구글에서 만든 RPC 플랫폼이며 protocol buffer와 RPC를 사용한다.
Java, C++, python, Java Lite, Ruby, JavaScript 등등에서 사용가능하며
클라이언트와 서버간 교환되는 모든 데이터를 암호화하며 HTTP보다 성능이 뛰어나며 확장이 가능한 API이다.

HTTP와 비교하여 gRPG는 배포된 환경이나 기능이 같다면 보내고 받을 때 효율적으로 사용가능하며 gRPC는 TCP보다는 멀티플렉싱을 이용하여 통신한다. 멀티플렉싱은 HOL을 제거하여 사용.

이 둘과 gPRC의 차이는 사양차이라고 생각한다. Json을 사용 하는 HTTP API의 경우 공식적인 사양은 없으나 gRPC는 gRPC사양이 있어 플랫폼등을 구현에 상관없이 일치하게 된다.

Sequlize같은 ORM과 MySQL같은 데이터베이스의 차이가 무엇인가요?
ORM은 호환되지 않는 유형 시스템 간의 데이터를 서로 연동될 수 있도록 하는 프로그래밍 기술이며 프로그래밍 언어로 가상 개체 데이터베이스를 생성하여 데이터베이스에 저장하고 조작할 수 있도록 도와주는 도구이다.

express.js의 라우터는 미들웨어입니다. 어떤 원리로 동작하기 때문에 미들웨어로 라우터를 구현할 수 있나요?
middleware 요청 응답 그리고 도중 그 다음 미들웨어 함수에 대한 에세스 권한을 갖는 함수다. 즉 클라이언트에게 요청이 오고 그 요청을 보내기 위해 응답하려는 미들에 목적에 맞게 처리. 거쳐가는 함수라고 볼 수 있다. 다음 미들웨어 함수에 대한 에세스는 next함수를 이용해 다음 미들웨어로 요청을 넘길 수 있다. app.use("/user", function(req,res,next)) 에서 "/user"라는 경로로 요청이 들어온다면 미들웨어 함수 function(req,res,next)이 실행된다. function(req,res,next)는 미들웨어 라서 app.use("/user", , function(req,res,next), function(req,res,next)) 이런 식으로 연속적으로 사용이 가능하다. express.Router 클래스를 사용하면 모듈식 마운팅 가능한 핸들러를 작성할 수 있다. Router 인스턴스는 완전한 미들웨어이자 라우팅 시스템이며 이를 사용하여 모듈화 시킬 수 가 있다.

Node.js에서 리팩토링시 사용하며, npm을 통해 다운로드 했던 모듈을 불러오는 require 함수는 어떻게 동작하나요? IIFE와 연결지어 찾아보고 정리해보세요.
require 함수는 외부 모듈을 가져 올때 사용하며 파라미터는 추가할 모듈의 파일 경로값을 받는다.
모듈에서는 module.exports를 사용하새 객체 인스턴스를 내보내고 다른파일에서 require를 통해 사용하게 된다.
모듈을 require 할때마다 새로운 인스턴스가 생성되는것이 아닌 캐싱된 객체 인스턴스를 재사용한다.

불필요한 테스트코드는 무엇이며, 100개의 테스트 케이스보다 1개의 테스트 케이스가 더 효과적일 수 있는 이유는 무엇인가요?
불필요한 테스트코드를 흔히 dead code라고 불리는데, 이는 프로그램 내에서 소스는 작동하지만, 결과적으로는 사용할 수 없다. 이 실행은 계산 되고자 하는 시간과 메모리의 낭비 때문에 여러 버그들을 일으키는 문제가 될 수 있다. 또한, 여러 개의 테스트 코드는 품질 수준이 cost/beneft으로 보았을때, 컴파일된 버전의 리소스에 접근하기 어렵고, 빠른 시간내에 테스트할 수가 없기 때문에 1개의 테스트가 오히려 효과적이다. 더불어 철저하게 테스트 된 케이스가 유효성을 검사하는데 쉽게 접근할 수 있다.

느낀 점.

정말로 공부를 하면 할 수록 모르는게 너무 많다는 것을 느껴서 더 열심히 하게 되는 것 같다.
그리고 배포한 사이트에 각각 XSS공격을 했는데 내 사이트는 다행히 잘 막아서 공격을 당하지는 않았다.
그래도 XSS어택에 대한 공부도 해봐야겠다.

profile
김개발

0개의 댓글