일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- futureself
- nodemailer
- 조영호
- BOOK
- 개발자
- googleapis
- nodejs
- AWS
- 스터디
- typescript
- 북스터디
- Study
- 세이노의가르침
- 퓨처셀프
- 오브젝트
- 클린코드
- 부자아빠가난한아빠2
- UNiQUE
- 일상속귀한배움
- serverless
- Nestjs
- Object
- PRISMA
- 자청
- validator
- 역행자
- 객체지향의사실과오해
- OOP
- Validation
- 독후감
- Today
- Total
목록tech (45)
우당탕탕 우리네 개발생활
필요한 기능은 단순히 알맞은 데이터를 엑셀에 매핑한 후 해당 엑셀파일을 이메일로 전송하는 것이었습니다.파일을 물리적으로 저장할 필요가 없었기에 메모리상에서만 파일 객체를 만들고 이를 이메일에 담아 전송할 수 있는 로직을 구현해야 했습니다. nestjs 또는 nodejs 환경에서 이러한 직접적인 레퍼런스를 발견하지 못하였고 여러 가지 힌트를 얻어 직접 구현을 해봤습니다.힌트는 다음과 같았습니다.1. xlsx 라이브러리를 통해 만들어지는 xlsx객체는 다양한 형태(file, string, buffer, base64string 등..)의 객체로 변환이 가능2. MIME타입의 이메일 바디를 raw하게 작성할 때 파일은 base64string으로 보통 변환하여 포함3. nodemailer의 attachment필드..
nestjs 프로젝트에 급하게 이메일 전송기능을 구현할 일이 생겼습니다. 이 기능에는 전송할 이메일에 파일을 첨부할 수 있는 필수 요청사항이 있었습니다.이미 기존 프로젝트 코드 중 AWS SES를 사용할 수 있도록 aws-sdk 라이브러리를 이용하여 유틸성 이메일 서비스를 구현해 놓은 것을 확인했었기에 해당 코드의 재사용을 계획했습니다. 하지만 이미 구현되어 있는 유틸성 이메일 서비스는 파일 첨부를 전혀 염두에 두지 않은 채로 개발되어 있었습니다. 일부 옵션들을 추가하며 파일 첨부를 구현할 수 있을까 가능성을 살펴봤지만 불가능했습니다. aws-sdk를 사용하면서 이메일에 파일 첨부를 하는 방법은 있었습니다. Multipurpose Internet Mail Extensions (MIME) type ema..
여느 때와 같이 개발을 하던 중 다음과 같은 상황에 직면했습니다. const input: { catId: number | null; dogId: number | null; fishId: number | null; counts: number; name: string; } = /**/ const data: { catCounts?: number; catName?: string; dogCounts?: number; dogName?: string; fishCounts?: number; fishName?: string; } = {}; if (input.catId) { data.catCounts = counts; data.catName = name; } else if (input.dogId) { data.dogCou..
최근 prisma 라이브러리에 대한 typing이 얼마나 섬세하게 작성되어 있는지 새삼 느낄 수 있었다. const updateUser = await prisma.user.update({ where: { email: 'viola@prisma.io', }, /** Type '{ email: string; }' is not assignable to type 'UserWhereUniqueInput'. Object literal may only specify known properties, and 'email' does not exist in type 'UserWhereUniqueInput'.ts(2322) index.d.ts: The expected type comes..
최근 운영하고 있는 서비스에서 이슈를 발견했습니다.@Injectable()class TestProvider { constructor() {} @Cron('0 */10 * * * *') async methodA(): Promise { // group에 대한 데이터 처리 // 하위 item에 대한 데이터 처리 // 3rd party API } @Cron('0 */10 * * * *') async methodB(): Promise { // 하위 time에 대한 데이터 처리 // 3rd party API }}이슈가 있는 서비스로직에서는 특정 기능과 관련된 서드파티 API를 호출해야 합니다.이 서드파티 API를..
저희 백엔드 팀에서는 이미 서비스 내에 신고처리나 특정 이슈발생(결제이슈 등)을 Slack의 Incoming Webhook으로 받아보고 있습니다. 근래 결제이슈에 대한 Incoming Webhook을 한 가지 더 설정할 일이 생겨서 레퍼런스를 찾던 중 Slack console에서 Incoming Webhook을 등록하는 과정을 찾기가 어려웠습니다. 다양한 레퍼런스들을 통해 결국 해결했고 이 과정을 정리해두고자 합니다. 우선 아래와 같이 https://api.slack.com에 접속해서 Your apps를 누릅니다. 아래와 같이 Create New App을 할 수 있습니다. 새로운 앱을 만든 다음에 그 안에 Webhook서비스들을 여러 개 만드는 구조이기 때문에 추후 webhook에 대한 관리가 용이할 ..
저는 Nestjs + typescript 기술 조합으로 백엔드 개발을 하고 있습니다. 최근 개발을 하면서 두 가지 궁금증이 생겼습니다.- class-validator를 사용하여 decorating한 클래스는 어느 상황에서든 validation을 하는가?- 클래스 멤버 뒤에 붙는 ! 과 ? 는 어떤 역할을 하는가? 위 궁금증들을 해결하면서 정리한 생각을 기록할 겸 공유하려고 합니다.class-validator를 사용하여 decorating한 클래스는 어느 상황에서든 validation을 하는가?제가 있는 백엔드 팀은 서비스코드의 리턴 값과 타입이 일치하는 mapper 클래스 파일을 만들고 이 mappper 인스턴스에 값을 담은 후 리턴을 하는 규칙이 있습니다.mapper클래스 내부에는 class-valid..
최근 회사에서 pg_bigm이라는 extension을 사용할 일이 생겼습니다. 그 이유는 아래와 같습니다.Why?현재 AWS RDS 내 aurora/postgreSql은 pg_bigm extension을 내장하고 있음.우리가 사용하고 있는 Dev DB와 Prod DB는 모두 위 환경을 사용하고 있고, 손쉽게 pg_bigm을 적용하여 사용할 수 있음.Dev와 Prod 환경에서 인덱스 생성 등 여러방면으로 pg_bigm을 이용하고 있음.이는 특히 prisma를 이용하게 되면서 prisma와 pg_bigm extension간의 종속성이 생기게 되었음.pg_bigm은 일반 postgreSql을 설치했을 때 내장되어 있는 extension이 아님.Local환경으로 구축한 postgreSql에 pg_bigm ext..