본문 바로가기

Back-End

(8)
인터셉터 인터셉터 - 요청과 응답을 가로채서 변형을 가할 수 있는 컴포넌트 - 인터 셉터는 주로 다음과 같은 기능을 수행한다. 1. 요청에 대한 검증 : 요청이 유효한지 확인, 필요한 경우 에러 응답을 반환 2. 로깅 : 요청과 응답에 대한 로그를 작성 3. 권한 인가 : 요청이 인증된 사용자에 의해 수행되었는지 확인 4. 캐싱 : 응답을 캐시하여 빠른 처리를 가능하게 한다. 5. 추가 데이터 전달 : 요청과 응답에 추가적인 데이터를 전달 6. 응답 조작: 서비스에서 반환하는 데이터를 조작하거나, 응답 헤더 등을 수정. - 인터셉터는 미들웨어와 수행하는 일이 비슷하지만, 수행 시점에 차이가 존재한다. 미들웨어는 요청이 라우터 핸들러로 전달되기 전에 동작, 인터셉터는 요청에 대한 라우터 핸들러의 처리 전/후 호출되..
예외 처리 - 소프트웨어를 처리하면서 예외(exception)처리는 필수 사항이다. - 어떤 상황에서든 에러는 발생할 수 있고, 개발자는 이 에러에 대응책을 마련해 두어야 한다. - Nest는 프레임 워크 내에 예외 레이어를 두고 있다. - 애플리케이션을 통틀어 제대로 처리하지 못한 예외를 처리하는 역할을 한다. - 이는 우리가 아무런 작업을 하지 않아도, 기본 예외 처리기가 예외를 잡아서 유저가 이해하기 쉬운 형태로 변환하여 전송한다. $ curl http://localhost:3000/error { "statusCode":500, "message":"Internal Server Error" } - Nest는 예외에 대한 많은 클래스를 제공한다. - 위 결과를 보면 에러가 발생했을때 응답을 Json 형식으로 바꿔..
내장 로거 - 개발 도중 이슈가 발생했을 때, 이슈 증상만으로 원인을 파악하기에는 시간과 노력이 많이 들고, 코드를 다시 역추적하면서 이해하는 데에 어려움이 따른다. - 이슈가 발생한 지점과 콜 스택이 함께 제공된다면 빨리 해결이 가능할 것이다. - 또 어떠한 기능이 많이 사용되는지에 대한 내용과 같이 유저의 사용 패턴을 분석하는데에도 로그log를 활용할 수 있다. - 예시로 서비스를 실행하면 서버 콘솔에는 아래 그림과 같은 로그가 출력된다. - 이미 각 컴포넌트에서는 내장 로거를 이용하여 로그를 출력하고 있다. - 내장 Logger 클래스는 @nest/common 패키지로 제공된다. - 로깅 옵션을 조절하면 다음과 같이 로깅 시스템의 동작을 제어할 수 있다. 1. 로깅 비활성화 2. 로그 레벨 지정: log,er..
파이프와 유효성 검사 1. 파이프 - 요청이 라우터 핸들러로 전달하기 전에 요청 객체를 변환할 수 있는 기회를 제공 - 미들웨어의 역할과 비슷함. - 보통 파이프는 2가지 목적으로 사용된다. 변환(transformation) : 입력 데이터를 원하는 형식으로 변환 유효성 검사(validation) : 입력 데이터가 사용자가 정한 기중에 유효하지 않은 경우 예외 처리 - @nest/common 패키지에는 여러 내장 파이프가 마련되어 있음 ValidationPipe ParseIntPipe ParseBoolPipe ParseArrayPipe ParseUUIDPipe DefaultValuePipe ParseIntPipe, ParseBoolPipe, ParseArrayPipe, ParseUUIDPipe - 전달된 인수의 타입을 검사하..
동적 모듈을 활용한 환경 변수 구성 동적 모듈 - 모듈이 생성될때 동적으로 어떠한 변수들이 정해지는 것. - 모듈 인스턴스마다 다르게 결정되어야 하는 것들을 소비 모듈에서 지정할 수 있기 때문에 코드가 간결해지는 장점. - 동적 모듈의 대표적인 예로 Config 모듈이 있음. Config - 실행 환경에 따라 서버에 설정되는 환경 변수(environmental variable)를 관리하는 모듈. - 일반적으로 서비스를 개발할때 실행 환경이 3가지로 나뉘는데 다음과 같다. 1. Development Server : 개발자 PC 환경에서 개발및 테스트를 진행하게 되는 곳. 2. Stage Server : 개발한 코드를 테스트 환경에 배포하여 통합 테스트를 진행하는 곳. 3. Production Server : 실제 서비스 운영을 위한 환경 -..
멋사 2주차 JS decorator, MVC 패턴, Nest.js 찍먹 1. Decorator - Nest는 Decorator를 적극 활용한다. - 이를 잘 활용하면 횡단 관심사(cross-cutting concern)를 분리하여 관점 지향 프로그래밍(Aspect Oriented Programming AOP)을 적용한 코드를 작성할 수 있다. 횡단 관심사 : 모든 핵심관심사항에 공통적으로 들어가는 코드/로직 https://choi3950.tistory.com/32 -우선 Decorator를 사용하기 위해 tsconfig.json파일에서 다음 옵션을 true로 지정해 주어야 한다. tsconfig.json { "compilerOptions": { ... "experimentalDecorators":true ... } } - Decorator는 @expression과 같은 형식..
멋사 스터디 2주차 HTTP, RESTFUL,웹 프레임워크 1. HTTP - HTTP는 Hypter Text Transfer Protocol의 두문자어로, 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다. 프로토콜은 규칙이다. - HTTP는 클라이언크가 요청을 생성하기 위한 연경을 연 다음, 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다. - 방금 말했던 것 같이 HTTP는 클라이언트가 브라우저를 통해 어떠한 서비스에 대해 요청(request)을 하면, 서버에서는 해당 요청에 맞는 결과를 찾아 사용자에게 응답(response)하는 형태로 동작한다. 요청 : client -> server 응답 : server -> client 요청 - 요청을 보낼때는 요청에 대한 정보를 담아 서버로 보낸다. (서버에서 클라이언트가 어떤 것을 원하는지 파악..
TypeScript 1. 타입 스크립트란? - js의 모든 단점을 보완해 만든 언어 - 동적인 Js에 타입을 미리 부여하여 컴파일시 에러를 잡을 수 있다. 타입스크립트는 자바스크립트에 타입이 추가된, 자바스크립트의 업그레이드 버젼 예를 들어 보자면 js에서는 다음과 같은 코드에 대해 NaN 값을 출력할 것이다 . function add(n1,n2) { console.log(n1+n2); } add(); add(1); add() 의 경우 undefined와 undefined를 더했으므로 undefined가, add(1)의 경우 1 + undefined를 더했으므로 undefined가 출력 js는 위 함수에서 원하는 인자를 넣지 않았음에도 불구하고 에러를 발생시키지 않고, 실수가 분명한 코드임에도 문제없이 실행되었다. 만약 j..