프레임워크 17

[NestJS] DB 캐시 Redis 사용하기

현재 앱 운영이 순조롭게 되고 있는 것 같지만, 내부적으로 서버 응답 속도가 느리다는 문제가 꾸준히 있었다. 사실 이 문제는 AWS CloudWatch에서도 꾸준히 보고되었고 예전부터 해결해야 할 과제 중 하나였는데, 다른 작업들에 밀려 우선순위가 낮아졌다. 이제서야 이 문제를 해결하게 되었다. 현재 문제 상황 현재 운영 중인 데이터의 구조는 postgresql에서 부모 데이터에 자식 데이터가 1:n으로 물려 있는 형태이다. 여기서 부모 데이터는 15만개 정도의 row 데이터가 있고, 자식 데이터는 그것의 10배 정도의 row 데이터가 있다. 이 데이터는 사용자의 tz 기준으로 하루에 대한 데이터를 뽑아내야 한다. 여기서 문제가 되는 것은 time을 기준으로 데이터를 범위 검색을 하다 보니 하루에 대한 ..

[NestJS] Guard 사용하기

웹서버에서 중요한 것 중의 하나는 보안 관련한 로직일 것이다. NestJS에서는 허용된 User가 아니면 query나 Mutation, Subscription을 요청하지 못하도록 하는 Middleware를 제공한다. 이것을 UseGuard라는 decorator로 제공하고 있다. 이번에 Query, Mutation, Subscription에 관해서 Guard를 제작한 경험을 작성하고자 한다. Guard 개념 Guard 개념은 간단하다. 허용된 유저가 아니면 요청 자체를 막아버리는 것이다. 예를 들어 모든 사용자가 서버에 요청을 할 수 있다면, DDos 같은 엄청난 트래픽이 들어올 때 모든 요청에 대하여 응답을 하게 될 것이다. 이러한 상황이 지속되면 서버의 자원에 낭비가 올 수 밖에 없으며, 결국에는 서버..

[NestJS] 네이버 문자인증 로직 제작하기

새로 제작할 어플에 문자인증 로직이 새로 생겨서 문자인증 로직을 구현해야 했다. 문자 인증같은 경우에는 처음 시도해 보는 것이라서 생각이 좀 필요했다. 로직 구상하기 찾아보니, 문자 인증 자체를 제공하는 API는 거의 찾을 수 없었다. 그 대신 문자를 보낼 수 있는 API는 참 많았다. 그래서 문자를 보내는 API를 내 입맛에 잘 맞추어서 적용하면 문자인증 로직을 충분히 구현할 수 있을 것 같았다. 문자전송 API는 네이버 클라우드 플랫폼에서 제공하는 SENS를 사용하기로 했다. 기존의 문자 인증 메시지를 보면, 특정 자릿수의 난수를 불러주고 시간제한을 두면서 입력을 요구한다. 난수 생성은 간단히 6자리의 숫자로 이루어진 문자열을 반환하고, 시간이 지나면 문자 인증을 할 수 없게 한다. 여기서 기존에 만..

[NestJs] PayloadTooLargeError: request entity too large 해결하기

최근에 대량의 Mutation을 실행하기 위해서 서버에 요청을 보낸 적이 있었다. 그런데 PayloadTooLargeError: request entity too large 라는 에러가 뜨면서 Mutation 요청에 실패하는 일이 발생했다. 찾아보니 express 기반의 서버에서 발생하는 오류 같은데, 요청이 특정 크기를 넘어가게 되면은 막아버리는 것 같았다. 그래서 해결법을 찾아보니 express의 버전에 따라서 약간의 차이는 있으나, 해결법은 비슷해 보였다. 해결법 나는 아래와 같은 방법으로 해결했다. bodyParser 모듈을 설치한 다음 limit를 풀어 주었다. 아래 코드들은 main.ts 파일이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { NestF..

[NestJs] 환경변수 설정하기

NestJs 서버를 구축하면서 서버 환경에 따라 달라지는 변수나 설정값들이 있다. 대표적 예시로는 prod 서버와 test 서버가 있을 것이다. prod 서버는 prod db 또는 그에 맞는 환경이 있고, test 서버는 test db 또는 그에 맞는 설정값들이 있다. 서버를 deploy할 때 이러한 구분을 잘 해두면 쉽게 개발 환경과 배포 환경을 구분해서 사용할 수 있다. 기존의 방법 기존에는 애플리케이션 실행할 때 인자로 환경변수를 주면서 실행하게 되면 process.env.환경변수 를 이용해서 문자열로 불러와서 사용할 수 있었다. 이를 확장해서 dotenv 환경을 사용했다. dotenv를 사용하게 되면 .env 파일 안에 다양한 환경변수를 입력하여 프로그램 실행 시에 인자로 넣을 수 있다. Nest..

안드로이드에서 XML 데이터 파싱하기

공개된 공공데이터 (날씨 정보 및 버스 정보 등) 를 이용하기 위해서는 데이터를 분석하고 분류할 줄 알아야 한다. 이러한 데이터의 형식은 여러 가지가 있지만 주로 XML 데이터를 이용한다. 안드로이드에서는 기본적으로 XML을 분류하고 처리할 수 있는 기능을 제공한다. XmlPullParser라고 되어 있는 기능이 있다. 아래 사이트에 가면 이것에 대한 내용이 나와 있다. https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser 비슷한 기능으로 jsoup이 있으나 공공데이터를 파싱하여 분류하기에는 적합하지 않다. 기본적으로 탑재되어 있는 기능을 사용하는 것이 매우 좋다. 내가 공공데이터를 이용할 때 사용했던 코드가 있다. 예시 코드를 살펴보..

안드로이드 개발환경 설치하는 법

안드로이드 어플리케이션을 개발할 때 필요한 도구는 안드로이드 스튜디오, 이클립스 등이 있다. 구글에서 안드로이드 스튜디오라는 통합 개발환경을 출시하기 전에는 이클립스에서 개발을 했으나, 현재 인텔리제이를 기반으로 한 안드로이드 스튜디오를 출시함에 따라 개발 환경이 더욱 편해졌다. 간단한 안드로이드 어플을 개발하기 위해선 무엇을 해야 할까? 어플을 개발하기 위한 초기 세팅값을 알아보자. 간단한 순서부터 먼저 알아보자. 1. 안드로이드 스튜디오 설치하기 2. 어플 실행을 위한 AVD 및 스마트폰 연결 설정하기 내 컴퓨터에서는 어플을 디버깅 할 경우에 버추얼 머신에서만 돌릴 것이다. 왜냐하면 램이 32GB로 넉넉하기 때문이다. 하지만 램이 부족한 컴퓨터에서는 디버깅 시에 스마트폰에서 실행하는 것이 훨씬 자연스..