본문 바로가기
728x90

express13

mongoDB | mongoose | 업무에서 사용하는 기능들 정리(v4.4 기준) - Aggregation 최근에 라인 알림센터의 마이그레이션에 관련된 스토리에 대 한 글을 읽었다. 라인 서비스의 알림 기능을 담당하는 팀이 올해 초 메인 스토리지를 레디스에서 몽고디비로 마이그레이션하게 된 이유와 배경에 대해서 자세하게 서술되어 있는데, 나도 현재 알림 기능을 담당하는 개발자이다보니 더 흥미가 생겨서 읽었던 것 같다. https://engineering.linecorp.com/ko/blog/LINE-integrated-notification-center-from-redis-to-mongodb/ LINE 알림 센터의 메인 스토리지를 Redis에서 MongoDB로 전환하기 2022-LINE-engineering-site engineering.linecorp.com 라인의 경우 서비스 고도화와 이용량 증가에 따른 r.. 2022. 10. 25.
node.js | axios | 엑시오스 더 깊게 이해하고 사용하자..! 테스트 코드를 작성하면서 막혔던 부분이 있었다. 현재 E2E TEST를 진행 중이고, 유저 플로우에 맞게 시나리오를 작성하고 있다. 회원가입, 패스워드 설정, 로그인, 로그아웃, 그리고 회원탈퇴까지 기본적인 틀을 먼저 작성했다. 즉 CRUD의 C와 D를 먼저 작성한 셈인데, 테스트를 위한 계정을 생성하고 삭제하는 프로세스를 통해 개발자가 직접 DB를 건드리는 일을 없애기 위해서다. 여하튼! 나름 수월하게 업무 중이었는데 회원 정보 수정하는 부분을 테스트하는데 에러가 발생했다. 에러를 잡기 위해 4시간 이상을 매달렸는데 도저히 에러 원인을 찾을 수 없었다(더군다나 e2e 테스트다 보니, 에러를 찾기 위해서 여러 레이어들을 뒤졌어야 했다). 이곳저곳 로그를 찍어가며 문제가 되는 부분들을 추리해갔고, 그러다 .. 2022. 10. 7.
nuxt.js | shopping web-app | 기본부터 차근차근 캡틴판교님의 'Nuxt.js 시작하기' 강의 기반 학습 메모 현업에서 vue.js(nuxt.js)와 express를 기반으로 개발하고 있다. 백엔드단은 여러 프로젝트를 진행하면서 나름 익숙하게 사용할 수 있지만, 여전히 프론트단에서 헷갈리는 요소가 있다. vue를 공부하고, 이런저런 컴포넌트들을 조금씩 손대면서 차츰 전체적인 레포지토리에 대해 적응해나가고 있지만, 지금 아니면 현재의 전반적인 디렉토리 구조에 대해 더 깊게 이해하는 것이 어려울 것 같아 강의를 통해 효율적이고 더 빨리 nuxt에 대해 학습하려고 한다. Nuxt에 대해 간단하게 정리부터 하자. Nuxt? Nuxt는 vue.js로 빠르게 웹을 제작할 수 있게 도와주는 프레임워크다. 뷰도 프레임워크다보니 그냥 쉽게 프레임워크의 프레임워크!라고 .. 2022. 9. 19.
답수실Log | 220916 | ERROR: Cannot set headers after they are sent to the client 리스폰스 메소드를 보내는 로직을 작성하면서 자주 마주쳤던 에러이고, 매번 마주칠 때마다 잊어버리고 구글링 하는 내 모습이 바보 같아서 글로 남긴다. ERROR: Cannot set headers after they are sent to the client 이 에러는 서버가 클라이언트에게 둘 이상의 응답을 보내려고 할 때 발생하는 오류다. 즉 클라이언트에서 서버에게 api를 요청했을 때, 요청에 맞는 리스폰스만 보내줘야 하는데, 백엔드 로직 내에 두 개 이상의 리스폰스를 보내게 되는 상황이 발생해서 이 오류가 뜨는 것이다. 예를 들면, node(express)의 경우, HTTP Response의 sendStatus()라는 메소드가 있다. res에 이 메소드를 설정하면 내가 설정한 상태 코드를 리스폰스로 보.. 2022. 9. 16.
ts-node | NodeBird | 다양한 케이스를 위한 오버로딩 ※ 인프런 - Node.js에 TypeScript 적용하기(feat. NodeBire) by 조현영 강의를 기반으로 정리한 내용입니다. 오버로딩? 같은 매개변수를 여러 방법으로 설정하는 것 이전 글에서 local.ts 파일에 해당하는 타입 정의를 위해 직접 타이핑을 했었다. 그런데 만약 local 내의 코드를 수정해야 하는 경우라면 어떻게 해야 할까? import * as passport from 'passport'; import * as bcrypt from 'bcrypt'; import { Strategy } from 'passport-local'; import User from '../models/user'; export default () => { passport.use('local', new S.. 2022. 5. 6.
ts-node | NodeBird | 타입 없는 라이브러리 타이핑하기 ※ 인프런 - Node.js에 TypeScript 적용하기(feat. NodeBire) by 조현영 강의를 기반으로 정리한 내용입니다. 본 강의에서는 프론트엔드는 다루지 않기 때문에 대체할만 것들을 직접 작성해본다고 한다. 타입스크립트를 작성할 때 크게 두 가지 방법이 있다. 첫 번째는 리덕스처럼 처음부터 타입스크립트로 코드를 작성하는 방법이고, 나머지 하나는 JS로 먼저 코드 작성 후 타입스크립트를 붙이는 방식이다. 우리는 두 번째 방식으로 타입스크립트를 작성할 것이고, @types/passport-local 라이브러리를 직접 코딩하면서 테스트해볼 것이다. 그래서 기존에 설치했던 이 모듈은 삭제. npm rm @types/passport-local 타이핑은 /back/types에서 할 것이다. tsco.. 2022. 5. 3.
ts-node | NodeBird | 라우터 만들기(3) ※ 인프런 - Node.js에 TypeScript 적용하기(feat. NodeBire) by 조현영 강의를 기반으로 정리한 내용입니다. routes/post.ts 저번에 이어서 계속 post라우터 만들어가자. image를 업로드 하는 라우터는 다음과 같다. router.post('/images', upload.array('image'), (req, res) => { console.log(req.files); if (Array.isArray(req.files)) { res.json((req.files as Express.MulterS3.File[]).map((v) => v.location)); /** * location이라는 메소드는 MulterS3 네임스페이스에만 존재하기 때문에 Multer를 Multe.. 2022. 5. 3.
ts-node | NodeBird | 라우터 만들기(2) ※ 인프런 - Node.js에 TypeScript 적용하기(feat. NodeBire) by 조현영 강의를 기반으로 정리한 내용입니다. routes/user.ts 저번에 user라우터를 만들고 있었고, 이어서 진행해보자. user라우터는 다음과 같이 완성됐다. import * as express from 'express'; import * as bcrypt from 'bcrypt'; import * as passport from 'passport'; import { isLoggedIn, isNotLoggedIn } from './middleware'; import User from '../models/user'; import Post from '../models/post'; import Image fro.. 2022. 5. 2.
ts-node | NodeBird | 라우터 만들기(1) ※ 인프런 - Node.js에 TypeScript 적용하기(feat. NodeBire) by 조현영 강의를 기반으로 정리한 내용입니다. 타입스크립트를 포함한 익스프레스의 라우터를 구현해보자. routes/middleware.ts 우선 미들웨어 파일을 만들 것이다. 이 파일에는 현재 사용자의 인증 여부를 파악하는 함수들을 만든다. import {Request, Response, NextFunction} from 'express'; const isLoggedIn = (req: Request, res: Response, next: NextFunction) => { if (req.isAuthenticated()) next(); else res.status(401).send('로그인이 필요합니다!'); }; co.. 2022. 4. 22.
728x90
LIST