<면접준비>
graphql를 사용한 이유 :
클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적이다
필요한 정보만 가져올려고
http vs https
ssl 인증서 차이
http프로토콜에 보안 기능을 추가한 것
https로 전환하게 되면 검색엔진 최적화(SEO)에 있어서 큰 혜택을 볼수있다
cors:
Cross-Origin Resource Sharing(CORS)은 추가적인 HTTP header를 사용해서 애플리케이션이 다른 origin의 리소스에 접근할 수 있도록 하는 메커니즘을 말합니다. 하지만 다른 origin에서 내 리소스에 함부로 접근하지 못하게 하기 위해 사용된다.
cors는 왜 필요한가:
만약 내가 서비스하고 있지 않은 사이트에서 세션을 요청해서 세션을 획득할 수 있다면 해당 사이트는 악의적으로 내 세션을 탈취하거나 다른 행동을 할 수 있습니다. 그래서 브라우저에서는 이러한 요청을 막습니다. 피싱사이트가 대표적인 공격 사례인데 이러한 것을 막고 내가 허용한 origin들만 요청할 수 있도록 하기 위해 필요합니다.
cors는 어떻게 동작하는가:
브라우저가 리소스를 요청할 때 추가적인 헤더에 정보를 담습니다. 내 origin은 무엇이고 어떤 메소드를 사용해서 요청을 할 것이고 어떤 헤더들을 포함할 것인지를 담아서 서버에 전송합니다. 서버는 서버가 응답할 수 있는 origin들을 헤더에 담아서 브라우저에게 보냅니다. 브라우저가 이 헤더를 보고 해당 origin에서 요청할 수 있다면 리소스 전송을 허용하고 만약 불가능하다면 에러를 발생시킵니다.
로드밸런서:
서버가 받는 부하를 분산시켜준다.
redis:
보통 데이터베이스는 하드 디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠른 장점이 존재함
데이터 구조는 key/value 값으로 이루어져 있다. (따라서 Redis는 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템이다)
javascript vs typescript :
type이 있냐없냐 차이
javascript는 런타입에서 타입 에러를 알아낸다
typescript는 런타임 가기전에 타입검사를 하므로 미리 에러를 어디서 왜 어떻게 나는지 알 수 있다
vm VS 쿠버네틱스
vm이상시 vm을 하나 더 만든다
하나 생성할때 module 별로 쪼개서 생성 module 별로 최적화된 언어 사용
쿠버네틱스 사용한이유
가볍게 동작하고, 메모리를 훨씬 조금 차지한다
var let const 차이
var 함수 스코프
let, const 블록 스코프
sql vs nosql
sql : 데이터는 정해진 데이터 스키마에 따라 테이블에 저장, 관계를 통해 여러 테이블에 분산
스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다.
즉 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가 가능
하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어진다
nodsql : 비관계형DB
스키마 x, 관계 x
문서(documetns)는 json과 비슷한 형태로 가지고 있고, 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을
갖춘 문서를 작성한다 = 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 nosql쓰면 효율적
스코프 : 변수에 접근할 수 있는 범위
nestjs를 사용한 이유
개발 시 발생할 수 있는 오류들을 사전에 방지 할수 있고, 모듈로 감싸는 형태로 개발해서 별도 테스트 코드를 쉽게 작성할수있다.
모듈을 통한 구조화등 기술을 통해 생산성이 높다
확장 가능하며 유지 관리가 쉽다
모듈별로 나누어서 라우팅해서 express에서 작업할때보다 소통이 더 쉽고 알아보기쉽다
typeorm:
객체와 매핑해줘서 sql문 직접 작성안하고도 객체 지향적으로 코드를 작성할수있다
싱글톤 패턴 : 하나의 객체(클래스)에 오직 하나의 인스턴스만 가지는 패턴 / 데이터베이스 연결모둘에 많이 쓰임.
장점: 메모리 낭비 방지 할 수 있다, 데이터 공유가 쉽다
단점: 의존성이높다, TDD에 단점