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 테이블..
필요한 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..
스프링 부트를 공부하던 중에 위와 같이 테스트 코드 작성하고 실행하였는데 아래와 같이 java.lang.IllegalStateException: Failed to load ApplicationContext가 발생하였다. 구글링해서 찾은 방법은 @WebAppConfiguration( )을 해당 테스트 클래스 위에 넣는 것 이었다. 하지만 여전히 동일한 에러가 발생하였는데 생각해보니 h2를 끄고 있었다. 결국 원인은 인메모리 DB인 h2를 안키고 테스트를 실행해서 발생한 것이다. 2시간 증발은 덤.....
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를 클릭 시, 클릭한 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 코드를 작성하고, 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 디렉토리로 설정해주면 된다...
원래 코딩테스트 문제를 파이썬으로 제출하였었는데 자바 & 스프링을 공부하면서 이 기회에 코딩테스트용 언어도 자바로 갈아타기로 맘 먹었다. 백준에 바로 문제를 풀기보단 intellij IDE에서 미리 작성해보고, 해당 코드를 백준으로 ctrl+c/v를 해서 공부를 했다. 그런데..... 이상하게도 백준에 ctrl+c/v를 해서 제출을 해보면 다음과 같이 에러가 발생하였다. 알고보니 백준에서 자바 코드로 답안을 제출할 때는 클래스의 이름을 꼭 "Main"으로 해야하는데 내 멋대로 클래스명을 지정해서 발생한 문제였다. 결론 백준에서 자바 코드로 답 제출할때는 클래스명을 Main으로 하자.
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 │ ..
이미지 파일(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, }); ..
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'..
개발/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 테이블..
개발/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 2021. 9. 28. 08:20
스프링 부트를 공부하던 중에 위와 같이 테스트 코드 작성하고 실행하였는데 아래와 같이 java.lang.IllegalStateException: Failed to load ApplicationContext가 발생하였다. 구글링해서 찾은 방법은 @WebAppConfiguration( )을 해당 테스트 클래스 위에 넣는 것 이었다. 하지만 여전히 동일한 에러가 발생하였는데 생각해보니 h2를 끄고 있었다. 결국 원인은 인메모리 DB인 h2를 안키고 테스트를 실행해서 발생한 것이다. 2시간 증발은 덤.....
개발/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());
개발/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 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 디렉토리로 설정해주면 된다...
Algorithm & BOJ 2021. 9. 23. 08:20
원래 코딩테스트 문제를 파이썬으로 제출하였었는데 자바 & 스프링을 공부하면서 이 기회에 코딩테스트용 언어도 자바로 갈아타기로 맘 먹었다. 백준에 바로 문제를 풀기보단 intellij IDE에서 미리 작성해보고, 해당 코드를 백준으로 ctrl+c/v를 해서 공부를 했다. 그런데..... 이상하게도 백준에 ctrl+c/v를 해서 제출을 해보면 다음과 같이 에러가 발생하였다. 알고보니 백준에서 자바 코드로 답안을 제출할 때는 클래스의 이름을 꼭 "Main"으로 해야하는데 내 멋대로 클래스명을 지정해서 발생한 문제였다. 결론 백준에서 자바 코드로 답 제출할때는 클래스명을 Main으로 하자.
개발/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 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, }); ..
개발/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'..