Server
-
효율적인 API 문서 관리를 위한 Swagger 도입Server/Nest.js 2023. 3. 10. 16:26
Swagger What’s problem : API 명세서 관리 프로젝트를 하면서 불편한 점을 하나씩 해결해보고자 한다. 이번에는 API 명세서를 작성하며 느낀 불편함을 개선해보기로 했다. 보통 프로젝트를 시작할 때 API를 개발하기 전에 명세서를 먼저 작성하여 프론트엔드 팀원에게 공유하고, API 개발이 끝나면 postman을 활용해 API 명세를 공유하고 있었다. Gitbook으로 직접 손으로 작성하는 것 보다는 postman이 편했지만, postman으로 API 명세서를 작성하다 보니 API가 어떻게 동작하는지에 대한 자세한 설명을 기입할 수가 없고 크고 작은 수정이 발생하면 직접 해당 API를 postman 통신하여 예외처리한 부분들까지 적용해주는 과정이 꽤 번거로웠다. How solve the ..
-
[Nest.js 공식문서 읽기] MiddlewareServer/Nest.js 2023. 1. 27. 15:04
Middleware 미들웨어란 라우트핸들러 전에 호출되는 함수이다. 미들웨어 함수는 req, res 객체에 접근 가능하며 애플리케이션의 요청-응답 주기에서 next() 미들웨어 함수에 접근할 수 있다. Nest 미들웨어는 express의 미들웨어와 같다. 📌 Official express documentation describes the capabilities of middleware. Middleware functions can perform the following tasks: execute any code. make changes to the request and the response objects. end the request-response cycle. call the next middlewa..
-
[Nest.js 공식문서 읽기] ProviderServer/Nest.js 2023. 1. 27. 15:02
Provider provider는 nest의 기본개념이다. nest의 services, repositories, factories, helpers등 기본 클래스들은 대부분 provider로 취급될 수 있다. 그리고 provider는 종속성으로 주입될 수 있다. 이것의 의미는 객체들이 다양한 관계를 만들 수 있다는 것을 의미하고, 그 관계 설정에 맞게 인스턴스를 생성하는 일은 nest 런타임에게 위임된다. 물론 provider도 controller처럼 module에 메타데이터를 전달해주어야 nest가 해당 클래스를 provider로 인식할 수 있다. 📌 SOLID(객체 지향 설계) nest로 객체 지향 방식의 종속성을 설계하고 구상할 수 있기 때문에 SOLID 원칙을 따르는 것을 강력히 권고한다. The ..
-
[Nest.js 공식문서 읽기] ModuleServer/Nest.js 2023. 1. 27. 14:58
Module module은 만들어진 controller, sevice, repository 등을 하나로 합치는 역할을 한다. 캡슐화 nest의 모듈은 기본적으로 provider를 캡슐화한다. 즉, 현재 모듈에서 export된 프로바이더나 주입된 모듈에서 export된 프로바이더가 아니라면 프로바이더를 주입(inject)하는 것은 불가능하다. 만약 하나의 모듈에서 직접 exports를 통해 내보낸 것들이 아니면 외부에서 접근 또는 삽입이 불가능하다. 예를들어 a, b, c 모듈이 있다고 가정하면 a 모듈에서 b 모듈의 프로바이더를 사용하고 싶다면, b 모듈에서 해당 프로바이더를 직접 exports에 등록해주어야 한다. export에 등록하는 방법은 @Module 데코레이터 내부에 등록하면 된다. 위 예시처..
-
[Nest.js 공식문서 읽기] ControllerServer/Nest.js 2023. 1. 27. 14:57
컨트롤러 컨트롤러는 애플리케이션에 대한 특정 요청을 받고 응답을 리턴하는 곳이다. 라우팅 express에서는 라우터와 컨트롤러를 분리했었는데, nest는 express의 라우터와 컨트롤러를 합쳐놓은 모습이었다. nest에서는 express에서 사용하지 않던 데코레이터라는 것을 사용한다. 📌 데코레이터 데코레이터는 클래스의 필수 메타데이터를 등록하고 nest가 라우팅 맵을 생성할 수 있도록 한다. Nest에서 제공하는 데코레이터를 사용할 경우 자체적으로 인스턴스를 생성해준다. - Nest에서는 불필요한 메모리 사용을 방지하기 위하여 싱글톤 패턴을 적용시킬 수 있는 데코레이터를 제공한다. - @Resolver(for GraphQL), @Controller(), @injectable() 등, 해당하는 것을 모..
-
HTTP 상태코드 정리Server 2022. 12. 23. 23:31
📌 참고 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Status - https://www.rfc-editor.org/rfc/rfc2616#page-39 - https://evan-moon.github.io/2020/03/15/about-http-status-code/#500%EB%B2%88%EB%8C%80 분류 서버가 게이트웨이 역할을 하고 있으며 한 서버가 엑세스하고 있는 다른 서버에 적시에 응답을 받지 못했음을 의미한다. HTTP 응답 상태코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려주며 크게 5개의 그룹으로 나누어진다. 상태코드는 3자리 숫자로, 100번대에서 500번대까지 있다. 주로 200번대와 400번대, 500번대를 보게 된다. 1..
-
Error HandlingServer/Node.js 2022. 11. 20. 23:13
1. 에러 핸들링의 목적과 의의 1.1 [why] 에러 핸들링 목적 - 소프트웨어는 에러와 예외가 늘 발생하여 정상적인 사용 흐름이 막히게 된다. 에러가 발생하는 원인은 개발자의 실수도 있지만 사용자의 실행 환경, 사용자의 특성 등 다양하기 때문이다. - 그리고 에러가 발생하면 서버는 작동을 멈춘다. 그래서 개발자는 사용자가 서비스를 이용하는 동안 발생할 수 있는 에러를 예측하여 사용자의 사용 흐름이 막히지 않도록 유도해야 한다. 이런 과정을 에러 핸들링이라고 한다. - 하지만 모든 에러를 개발자가 예측할 수는 없다. 따라서 예외 상황에 소프트웨어가 갑자기 종료되기보다는 에러가 발생했음을 알리고 서비스가 곧 정상 작동할 것임을 안내하는 것이 좋다. - 이러한 에러 핸들링은 사용자로 하여금 서비스가 다시 ..
-
REST API (path parameter, query parameter)Server 2022. 11. 20. 21:10
WHAT REST - REST : Representational State Transfer의 약어(상태를 전달하는 것을 나타내는 방법) - 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 것을 의미 - [구성] 1) 자원(Resource) - URI(Uniform Resource Indentifier) 2) 행위(Verb) - HTTP METHOD 3) 표현(Representations) WHAT API - Application Programming Interface의 약어 - 정보 사용자가 원하는 것에 도달할 수 있도록 한 인터페이스 - 애플리케이션 소프트웨어의 구현 방식을 몰라도 사용자는 API를 통해 사용 가능 - 정보 제공자와 정보 사용자 간 소통하기 위한 하나의 인터페이스 장치 WHAT R..
-
API METHOD PATCH vs PUTServer 2022. 11. 15. 23:28
레이어드 아키텍쳐로 API를 작성하며 PATCH 메소드로 "게시물 수정 엔드포인트"를 작성했는데 문제가 생겼다. 분명 PATCH 메소드 "리소스의 일부분을 수정한다"는 메소드이므로 request의 body에 수정이 필요한 데이터만 담아서 보내주면 되는 메소드라고 생각했는데, 작성한 코드로 Postman 통신을 하면, request body에 담아주지 않은 값은 null 값으로 값이 대체되었다. 왜 이런 문제가 생기는지 궁금했고 어떻게 구현해야할지 고민되어 구글링한 결과 이런 결론을 얻었다. 1. 프론트에서 정보 수정 요청을 보낼 때, 수정되어야 하는 정보가 담긴 테이블의 전체 column 값을 보내준다. -> 물론 그 data는 서버로부터 GET으로 받아온 데이터 중 수정사항과 원본을을 함께 reques..
-
백엔드 API 패턴 - Layered ArchitectureServer 2022. 11. 15. 09:55
1. Layered Architecture란? - Multi-tier 아키텍쳐 패턴이라고도 불리는데, 레이어드 아키텍쳐는 코드를 논리적인 부분 혹은 역할에 따라 독립 모듈로 나누어서 구성하는 패턴을 말한다. 각 모듈이 하위 모듈에 의존하면서 레이어처럼 쌓여 있는 구조이다. - 이번에 구현한 구조는 3개의 레이어로 구성되었다. 1.1 Presentation layer - User interface단으로 클라이언트와 직접 연결되는 부분이다. 이 단에서는 API들의 엔드포인트를 정의하고 HTTP요청을 읽어들이는 로직이 구현하며 요청(request)을 Business layer로 보내기 위해 요청에 담겨있는 데이터들이 우선 올바르게 전송되었는지 선 검증작업을 한다. - 역할 : EndPoint, Authenti..