@Query와 TypeORM으로 GET method API Pagination 하기

개발/NestJS 2021. 9. 30. 08:20

GET 메소드를 활용하는 Restful 방식의 API를 구성할 때, 해당 테이블 내의 모든 정보를 가져오는 findAll( ) 방식의 API는 테이블에 데이터가 많아질 경우, 성능 이슈와 서버 메모리 사용량 증가로 인한 비용 이슈가 발생할 수 있다. Page 단위로 데이터를 분할하여 전달하는 방식으로 TypeORM의 createQueryBuilder( )를 활용하여 구성하였다. // user.service.ts async findCollectors(page, limit) { return await this.repository .createQueryBuilder('user') // user 테이블로 전달할 쿼리문임을 정의합니다. .where('user.role = COLLECTOR') // user 테이블..

[ERR_REQUIRE_ESM]: Must use import to load ES Module 발생 시

개발/NestJS 2021. 9. 29. 08:20

필요한 npm 패키지들을 설치하고, npm run start:dev를 하니 아래와 같이 error가 발생하였다. Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /node_modules/~ 이유는 현재 사용하고 있던 node 버전과 호환되지 않는 npm 패키지를 설치해서였다. 해결 방법은 두 가지가 있다. node 버전을 올린다. 에러를 발생시킨 npm 패키지의 버전을 호환가능한 버전으로 재설치한다. 대부분 node 버전을 올리기도 하지만, 다른 사람들과 node 버전을 맞춰야하는 경우에는 1번의 방법을 사용하기 힘들다. 내 경우에는 crypto-random-string이 버전 호환 문제로 이슈가 발생하였다. 현재 최신 버전은 4.0인데 pack..

Spring Boot에서 test 코드 실행 시 java.lang.IllegalStateException: Failed to load ApplicationContext 발생

개발/Spring 2021. 9. 28. 08:20

스프링 부트를 공부하던 중에 위와 같이 테스트 코드 작성하고 실행하였는데 아래와 같이 java.lang.IllegalStateException: Failed to load ApplicationContext가 발생하였다. 구글링해서 찾은 방법은 @WebAppConfiguration( )을 해당 테스트 클래스 위에 넣는 것 이었다. 하지만 여전히 동일한 에러가 발생하였는데 생각해보니 h2를 끄고 있었다. 결국 원인은 인메모리 DB인 h2를 안키고 테스트를 실행해서 발생한 것이다. 2시간 증발은 덤.....

Article Thumbnail
Java 배열 오름차순 / 내림차순 정리

개발/Java 2021. 9. 27. 08:20

Python으로 코딩테스트를 준비하다 Java로 환승한 이후 메소드들이 머릿속에서 정리가 되지않았다.... ㅠㅠ 이번에 백준 소트인사이드 문제를 풀다가 sort( )를 사용해야하는데 파이썬에서는 다음과 같이 sort( )를 사용하였다. # 오름차순 array.sort() # 내림차순 array.sort(reverse=True) 파이썬은 내림차순으로 정렬할 때 단순히 sort( )에 reverse 옵션을 True로 하여 문제를 해결하였었는데 Java에서는 다음과 같이 sort( )를 사용한다. //오름차순으로 정렬 Arrays.sort(arr); //내림차순으로 정렬 Arrays.sort(arr, Collections.reverseOrder());

Elements 수평 정렬일 때, 클릭한 element가 중앙으로 오기

개발/ReactJS 2021. 9. 25. 08:20

가로로 스크롤이 되는 Elements에서 내부 element를 클릭 시, 클릭한 element를 중앙으로 정렬시키려했다. 해당 로직을 element.scrollIntoView( )함수를 활용하였다. element.scrollIntoView - Web API | MDN Element 인터페이스의 scrollIntoView() 메소드는 scrollIntoView()가 호출 된 요소가 사용자에게 표시되도록 요소의 상위 컨테이너를 스크롤합니다. developer.mozilla.org // behavior: 전환 애니메이션 // inline: 수평 정렬 onClick={() => element.scrollToView({behavior:"smooth", inline:"center")};

NestJS Test 실행 시, jest가 module을 못 찾는 경우

개발/NestJS 2021. 9. 24. 08:20

NestJS에서 test 코드를 작성하고, npm test로 유닛 테스트를 진행하였는데 다음과 같이 "Cannot find module 'src/common/typeorm.entity' from 'user/user.entity.ts'"에러가 뜨면서 Failed가 발생하였다. 원인은 package.json에 jest 관련 moduleNameMapper가 빠져있어서 test를 할 때 import의 from의 위치를 프로젝트 디렉토리인 root로 지정되어 발생된 일이었다. "jest": { // ... "moduleNameMapper": { "^src/(.*)$": "/$1" } } 위와 같이 package.json의 "jest" 부분에 moduleNameMapper 설정을 src 디렉토리로 설정해주면 된다...

Article Thumbnail
백준 자바로 제출할 때 유의점

Algorithm & BOJ 2021. 9. 23. 08:20

원래 코딩테스트 문제를 파이썬으로 제출하였었는데 자바 & 스프링을 공부하면서 이 기회에 코딩테스트용 언어도 자바로 갈아타기로 맘 먹었다. 백준에 바로 문제를 풀기보단 intellij IDE에서 미리 작성해보고, 해당 코드를 백준으로 ctrl+c/v를 해서 공부를 했다. 그런데..... 이상하게도 백준에 ctrl+c/v를 해서 제출을 해보면 다음과 같이 에러가 발생하였다. 알고보니 백준에서 자바 코드로 답안을 제출할 때는 클래스의 이름을 꼭 "Main"으로 해야하는데 내 멋대로 클래스명을 지정해서 발생한 문제였다. 결론 백준에서 자바 코드로 답 제출할때는 클래스명을 Main으로 하자.

Article Thumbnail
Docker 환경에서 Grafana, Prometheus 적용시키기

개발/DevOps 2021. 9. 18. 08:20

Docker를 기반으로 진행한 프로젝트에서 모니터링 용도의 Grafana와 Prometheus를 적용시키게 되었다. 이에 적용과정을 정리한다. 전제 조건 Docker-compose로 관리되고 있는 Docker환경에서 백엔드는 Django로, 프론트는 React, DB는 Docker 위에서 MySQL로 돌아가고 있는 상태이다. 모든 설정 파일은 .yml로 관리되고 있다. 각 디렉토리마다 DockerFile이 존재한다. 파일 구조 📦 your-repository ├─ .gitignore ├─ docker-compose.yml ├─ django │ └─ src ├─ prometheus │ ├─ data │ ├─ alert.rules │ └─ prometheus.yml ├─ grafana │ ├─ data │ ..

NestJS에서 AWS S3에 이미지 업로드 API 작성

개발/NestJS 2021. 9. 17. 08:20

이미지 파일(png, jpg 등)을 AWS S3에 업로드하는 기능을 추가해야하는 일이 생겼다. 이미지 업로드 API를 구축할 때, 다음과 같이 NestJS에서 기본적으로 제공하는 UseInterceptors와 FileInterceptor를 사용하여 API를 호출하여 파일을 전달하는 방식으로 하였다. @Post() @UseInterceptors(FileInterceptor('file')) async uploadPhoto(@UploadedFile() file) { const { Key, Location } = await this.awsService.addToPublic('photos', file); return this.photoService.save({ url: Location, key: Key, }); ..

Vmmem 메모리 이슈 해결하기 in WSL2

개발/DevOps 2021. 9. 16. 08:20

WSL2 환경에서 도커(Docker)를 실행하다 보면 작업관리자 창의 메모리 부분이 느낌이 쎄할 때가 있다. 확인해보면 매번 다음과 같다. WSL 깃헙 이슈에 있나 검색해보니 놀랍게도 2019년부터 아직까지 오픈되어있는 이슈이다. WSL 2 consumes massive amounts of RAM and doesn't return it · Issue #4166 · microsoft/WSL Your Windows build number: 18917 What's wrong / what should be happening instead: WSL 2 starts using huge amounts of RAM after a while, just using it like normal. At the moment I'..

Article Thumbnail