본문 바로가기

Backend

(113)
unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); 문제 상황 NestJS로 CRUD를 작성하던 중에 throw new unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); ^ Error: An invalid controller has been detected. "(모듈이름)Module" does not have the @Controller() decorator but it is being listed in the "controllers" array of some module. 라는 에러가 발생하였다. 문제 원인 module.ts 파일에서 controllers: [] 부분에서 컨트롤러 이름을 작성했어야 했는데 여기에 모듈 이름을 작성해서 위와 같은 에러가 발생했던 것이었..
UUID의 역할 (DB 그리고 로컬메모리) Entity쪽 코드를 작성하다가 항상 id:UUID를 주는 경우가 많았다. uuid는 id의 한 종류인건가?하고 대수롭지 않게 여겼었다가 퇴근하고 강의를 듣다가 UUID의 역할에 대해 나오게 되어 정리하고자 한다. 이런 개념들이 아직까지는 개인적으로 많이 부족한 것 같다. ※ Ex) 게시글마다 고유한 id값이 있다. 게시글1의 id : aaab1 게시글2의 id : aaab2 이런식으로. id값에 따라 DB 사용과 로컬메모리 사용의 차이점 DB 사용 (X) 로컬메모리 사용(O) DB 사용(O) 로컬메모리 사용(X) 임의로 id값에 대하여 unique 하도록 만들어야함. -> UUID 모듈 이용 DB가 알아서 id값이 unique 하도록 만들어줌 이런 차이가 있었다. uuid 모듈 사용법 1) npm in..
model의 역할 + 게시판의 기본 구성 살펴보기 ※ 인프런 '따라하면서 배우는 NestJS'강의를 시청하고 정리한 글입니다. 게시글의 구성 (기본) 아이디 - 게시글을 구분짓는 고유 식별자. id는 고유한 값(1개당 1아이디)이다. 공개/비공개글 - 게시글이 공개 아니면 비공개글로 설정해야 하므로 enum으로 설정 제목 게시글 날짜 작성자 ... 이런식으로 나누어볼 수 있다. 여기 강의에서 집중할 부분은 바로 아이디(id:string) 공개/비공개글(enum:boardStatus(PRIVATE,PUBLIC), 제목(title:string) 게시글(description:string) 이렇게 총 4가지 분야라고 보자. 이런 식으로 여기에 쓰이는 데이터 타입들을 한 번에 정리해주는 역할을 하는 곳이 model 이다. NestJS에서는 model.ts를 정의..
Unreachable Code REST API에서 Service 부분을 작성하던 중 Unreachable code라는 에러와 마주하게 되었다. 이 에러가 무엇인지 찾아보니 다음과 같았다. 에러 해석 결코 실행되지 않는 코드 문제 원인 보통 분기나 return문에서 결코 실행되지 않는 코드를 경고해주는 에러메시지 거의 대부분 return 문에서 많이 등장한다. 아직 해결은 하지 못했지만, 작성한 return문에서 문제가 있어 해당 메시지가 뜬 것 같다. 문제 해결 return문, return문을 감싸고 있는 코드 로직 설계를 다시 해야한다.
REST API와 CRUD 차이점 이제껏 REST API = CRUD라고 생각을 해왔었다.. 개발을 하다가 문득 이 둘이 같은건가?라는 생각이 들어 구글링을 해보았다. 1. REST AP를 통해 할 수 있는 여러 작업중에 Database CRUD가 있는 것이다. REST API가 더 상위의 개념 2. REST API를 구성하고 있는 것은, 자원(URI), 행위(Method), 표현(Representation)이 있다. 3. CRUD는 DB 애플리케이션과 상호작용하기 위한 4가지 주요 기능이다. CRUD는 DB 설정에서 영구적인 기록을 하기 위한 '주기'이고, RESTful의 아키텍처 목표를 준수하기 위해 REST 명령에 매핑된다. REST API가 적절한 HTTP 메서드를 사용한다면 CRUD 이상의 기능을 발휘한다. 참고 https://..
'비율(ratio)'를 DB에 저장하려고 할 때 그 기준을 잡으려면? 비율을 맞이하면 DB에 어떻게 저장을 해야하는지 감이 오지 않을때가 있다. 만약에 ratio가 1:0.8510 1:1.2434와 같은 값이 있다고 치자. 그렇다면 왼쪽의 1은 비율이 고정되어 있고, 오른쪽의 비율만 계속해서 변하는 상황이다. 내가 생각했던 방법은 1:0.8510 이 비율 전체를 DB에 저장해야 하는건가?라는 고민이 있었다. 그러나, 물어보니 방법은 두 가지와 같았다. 1) 1과 0.8510 데이터를 각각 따로 저장할 것 2) 왼쪽의 1의 비율 수치는 고정되어 있으니 비율이 계속 바뀌는 오른쪽의 수치만 저장할 것 이었다. 내가 선택한 방법은 왼쪽의 1 비율은 계속 고정이 되어있으므로 계속 비율이 변화하는 오른쪽 수치만 DB에 저장하기로 결정했다.
NestJS에서의 의존성 주입(Dependency Injection) NestJS로 Service를 작성하던 중에 항상 아래와 같이 작성하는 이유에 대해서 궁금했었다. constructor(private aaService : AaService) 1. private를 쓰는 이유? JS에서는 private,public,protected와 같은 접근제한자를 쓸 수 없다. (이제 알았다..) Typescript에서는 위와 같은 접근제한자를 지원하기 때문에 private와 같은 접근제한자를 constructor 내부에서 파라미터로 사용할 수 있다 2. boardsService : BoardsService boardService 파라미터에 BoardService 객체를 타입으로 지정해준다. 이 boardService 파라미터를 BoardsController 클래스 안에서 사용하기 위..
NestJS Controller,Service 톺아보기(+ Decorator/Handler 차이,Provider,@Injectable ) 확실히 집에 와서 다시 개발 공부를 할때면 일하면서 놓쳤던 부분들에 대해 아 그래서 그렇게 되는구나!라고 상기시킬 수 있다. 그래도 계속 포스팅 하면서 일하면서 만났던 내용들이나 부족했던 개념들 상기시키고, 될때까지, 익숙할때까지, 질릴때까지 계속 포스팅 작성할거다...! 집에 와서 시청한 영상은 인프런 '따라하면서 배우는 NestJS'이다. Decorator와 Handler의 차이 @Decorator -> ex) @Controller, @Service, @Entity, @Repository @Handler -> ex) @Get, @Post, @Patch, @Delete Decorator로 장식된 @Controller가 있다면, 클래스 내의 단순한 메소드가 Handler이다. @Controller('gr..
nest.cli.json에서 source root(프로그램 시작점) 찾기 NestJS로 프로젝트를 진행하면서 어떤 것은 src 내부부터 내 코드를 더해나갔지만, 어떤 프로젝트는 다른 폴더의 위치에서부터 프로그램을 작성해나갔다. NestJS 강의를 듣던 중 nest.cli.json의 source root를 알게 되었으며, 여기서부터 프로젝트가 시작된다는 것을 알게 되었다. 그래서 여기서부터 코드를 더해나가야 한다. nest.cli.json 예시 1 { "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "deleteOutDir": true } } sourceRoot가 src이다. 다른 프로젝트의 경우..
백엔드 > 프론트엔드 데이터 전달과정(API,블록체인) 블록체인 기업에서 백엔드 개발을 하고 있다보니, DB를 통한 백엔드 -> 프론트엔드 통신과, 블록체인을 통한 백엔드->프론트엔드 통신 방법이 헷갈려 한 번 정리해보았다. 아직 100% 완벽하게 정리는 하지 못하였으나, 일단 큰 그림을 잡아보기로 하여 다음과 같이 작성하였다. DB를 활용한 통신 DB생성 후 백엔드는 DB에 관한 API를 만들고 -> 이를 프론트엔드에 전달하여 -> 프론트엔드는 해당 API를 참고하여 백엔드에서 데이터를 내려받고 브라우저 상에 데이터를 표시한다. 블록체인 트랜잭션(Tx) 통신 1) 체인 상에 있는 데이터(트랜잭션) -> 백엔드에서 해당 데이터를 Entity에 저장 -> API 작성 -> 프론트엔드가 호출하여 브라우저에 데이터 표시 -> 블록체인과 통신하는 '이벤트 서버'를 ..