NestJS에서 오늘 개발을 하다가 너무나 허무한 실수를 해버렸다. 이참에 그간 당연시 사용하고 있었던 부분에 대해서 왜 그렇게 사용을 해야만 하는지에 대해서 포스팅 해보려한다. 해당코드를 보면 Controller에서 @Param('uuid')과 @Body() 로 파라미터를 service부 한테 넘겨주고 있는 코드다. 이상이 없다고 생각해서 계속 돌려봤는데 값이 안나오고 오류도 안뜨고 해서 뭐지 싶었다..(?) 그래서 어디서 잘못됬나 확인해보려 console.log()를 하나씩 찍어가면서 확인해봤는데 어라.. console.log(uuid)의 결과가 undefined로 나왔다. 보자마자 급하게 개발하느라 뭔가 빠뜨렸구나 싶었다. 그래서 차근차근 봤더니 @Param을 사용하고 경로에다가 추가를 안해버렸던 ..
이 문제를 해결하려 최근들어 가장 머리를 쥐어뜯었던 것 같다. 이틀가량 문제해결과 포스팅준비에 시간을 쏟았다는 Tmi... 우선 어떤 상황인지부터 알아보자. 쿼리스트링으로 구독여부를 Boolean타입으로해서 해당 DTO를 파라미터로 넘겨줘야 하는 상황이었다. 처음에 보고 금방 개발할 수 있겠다 싶었는데 Boolean타입이 이상하게 찍히기 시작했다. 분명 사진처럼 Boolean으로 타입 지정해줬는데 혹시나해서 typeof 로 console을 한번 찍어보기로 했다. 어라.. dto타입이 string으로 나오는걸 확인했다. query string은 항상 string 타입으로 요청이 들어오기 때문에 transform을 통해 타입 변환을 해줘야 했다. ValidationPipe설정을 바꿔줘야지 데이터 타입이 변환..
오늘은 axios를 사용해서 개발하고 있었는데 갑자기 에러가 떠버렸다. 해당에러를 보면 "require statement not part of import statement." Eslint 에러라고 나온다. 이전에 Eslint를 까다롭게 걸어두긴 했는데 지금은 급하게 개발을 해야되는 상황이여서 일단은 Eslint에서 해당 require를 비활성화 시키는법에 대해 포스팅 해보려고 한다. eslintrc.js 파일에서 해당코드를 추가시켜준다. module.exports = { ... rules: { ... '@typescript-eslint/no-var-requires': 0, } } 이제 돌려보면 관련 Eslint에러가 사라진것을 볼수있을 것이다.
오늘은 객체의 속성이나 문자열의 개수 구하는 법에 대해 포스팅 하려고 한다. ".length" 는 배열에서 밖에 사용을 못해서 객체나 문자열에서는 사용하지 못한다. dto.parent_sort_depth 를 콘솔찍어보면 3,4,5,6,7 이라는 문자열로 나온다. 이 문자열의 길이를 구하려면 어떻게 해야할까? Object.keys().length; // 괄호안에 dto.parent_sort_depth 를 넣어준다. Object.keys(obj).length를 하게 되면, 해당 문자열의 길이, 크기를 리턴받을 수 있다. 따라서 Object.keys(dto.parent_sort_depth).length를 해보면 5가 리턴 된다. 문자열 뿐만 아니라 객체(Object)에도 똑같이 사용할 수 있다. blanc이라..
NestJS로 개발을 하다가 값이 안나오고 Promise { }이 나와서 포스팅 해보려 한다. 정말 단순한 문제고 비동기함수 - Promise, async/await에 대해서만 이해를 하고있어도 간단히 해결 할 수 있다. 비동기 함수에 대해서는 다음에 제대로 정리해서 포스팅을 하겠다. 우선 어쩌다가 이런 상황이 발생했는지 보자. 간단한 내용말고는 service부에서 로직을 짜야하는데 포스팅을 위해 급하게 짠거니 감안하고 봐주시길. 꾸벅.. 자, 해당코드를 돌렸더니 Promise { } 오류가 발생했다. "const vote_ data =" 부분을 보면 서비스 부에서 값을 받아오는데 앞에서 async로 비동기를 선언했기 때문에 반드시 Promise로 반환한다. Promise는 3가지 상태가 있는데 pend..
오늘은 순환 종속성(Circular Dependency)에 대해 알아보자. NestJS로 프로젝트를 구현하다가 VoteController에서 CommentService를 사용하고 CommentService에서 VoteRepository를 사용해야 되는 케이스가 생겼다. 저번에는 단방향인(?) 공유 모듈을 사용했었는데 이번에는 양쪽 모듈에서 다 필요로하는 쌍방향(?) 모듈이다. https://ilikezzi.tistory.com/20 [Nest.JS] @Module의 특징과 공유모듈(shared module) 사용하기 공유모듈을 사용하다가 에러가 떠서 @Module에 대해서 스터디하고 해결까지 완료한 내용을 포스팅 해보려고 한다. 우선 @Module을 먼저 알아보자. Module 이란 무엇인가? 각 애플리..
회사에서 개발중인 프로젝트를 퇴근 후 집에서 마저 하려했더니 다음과 같은 에러가 발생했다. ERROR [TypeOrmModule] Unable to connect to the database. Retrying (4)... Error: connect ETIMEDOUT 해당 에러를 확인하면 DB연결이 안됬다는 얘기다. 갑자기 왜 DB연결이 안됬을까? 회사에서 DB를 AWS를 통해서 사용하는데 미리 정해둔 EC2 보안그룹에 우리집 IP가 등록 되지 않아서 뜨는 에러다. 해결방법은 간단하다. 우선 AWS EC2에 접속후 인스턴스(실행중)에 들어가면 지금 실행중인 인스턴스 목록이 나올 것이다. 그중에 관련DB 인스턴스에 들어가서 보안을 누르고 해당 보안그룹 링크로 들어간다. 그럼 인바운드 규칙이 보일텐데 여기서 ..
공유모듈을 사용하다가 에러가 떠서 @Module에 대해서 스터디하고 해결까지 완료한 내용을 포스팅 해보려고 한다. 우선 @Module을 먼저 알아보자. Module 이란 무엇인가? 각 애플리케이션에는 최소한 하나의 모듈인 루트 모듈이 있습니다 . 루트 모듈은 Nest가 애플리케이션 그래프를 구축하는 데 사용하는 시작점입니다 . Nest가 모듈과 공급자 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조입니다. 매우 작은 응용 프로그램은 이론적으로 루트 모듈만 가질 수 있지만 일반적인 경우는 아닙니다. 구성 요소를 구성하는 효과적인 방법으로 모듈을 강력하게 권장 한다는 점을 강조하고 싶습니다 . 따라서 대부분의 애플리케이션에서 결과 아키텍처는 각각 밀접하게 관련된 기능 집합을 캡슐화하는 여러 모듈을 ..
오늘은 JavaScript map() 함수의 기능중 한개에 대해 간략하게 포스팅 해보려고 한다. 우선 코드를 보자. - service부 일단 코드를 간략하게 설명하면 dto를 파라미터로 받아서 해당 repository에서 검색후 결과가 없을경우 에러처리를 해주는 부분이다. 콘솔찍은 결과도 확인 해보자. 이렇게 배열로 해당 결과값이 나오게 된다. 하지만 나는 이 결과값에서 keyword_uuid만 뽑아서 사용을 해야되는 상황이 생겼다. 이럴때..! map() 함수를 사용하면 된다. - service부 변수를 선언하고 타입은 배열로 지정을 해준다. 앞서 변수로 선언한 keywordFollowList에 .map() 함수를 사용해서 원하는 값을 추출해서 새로운 배열로 만들 수 있다. 나는 keyword_uuid..
그동안 TypeOrm에서 IN조건으로 배열 통채로 검색이 안되는줄알고 service부에서 for문을 돌려서 uuid를 일일히 검색을 했었다. 그랬더니 이처럼 너무나 비효율적으로 SELECT쿼리 커넥션이 여러번 이뤄지는걸 볼 수 있다. 이러면 당연히 성능에도 영향을 끼친다. 그래서 서칭을 하다가 TypeOrm으로 한번에 배열로 검색을 할수있다는걸 알게 되었다. 이런...! - repository부 여러개 검색하려는 uuid를 배열로 where조건에 In을 써서 이처럼 한번에 할 수 있다. 윽 이렇게 쉽게 되는걸 굳이 for문을 돌려가며 했다니,,,, 열심히 하자. 아직 갈길이 멀었다.