본문 바로가기
728x90

javascript40

답수실Log | 230129 | 어쩌다 next13 우리 팀은 프론트엔드 기술로 nuxt2를 사용하고 있다. 최근 nuxt3 stable버전이 릴리즈되었고, 우리도 nuxt2에서 nuxt3로 마이그레이션하려고 준비하고 있었다. 마이그레이션하는 이유로는 다음과 같았다. vue3와 typescript 도입의 필요성. 현재는 vue2와 JS로 코드가 작성되어 있음. 일부 도메인 경우 데이터의 복잡성이 크기 때문에 TS의 도입이 시급한데, vue2의 경우 TS를 지원하긴 하지만 vue3에 비해 강력하지 않음. 또한 vue2는 점점 흔적이 사라지고 있음 먼저 팀의 리더님께서 시범적으로 마이그레이션을 시도해봤다. 그러나 생각보다 nuxt3로 전환하는데 있어서 문제가 많다고 하셨다. nuxt3같은 경우 Vite, Vue3, Nitro 기반의 프레임워크다. 리더님에 의.. 2023. 1. 29.
mongoDB | node.js | mongoose | populate()로 여러 컬렉션 사용하기 몽고디비는 관계형 데이터베이스가 아니기 때문에 테이블들을 join한다는 개념이 없다. 대신 aggregate의 $lookup 연산자를 이용하여 컬렉션들을 조인할 수 있고, 이외에 mongoose의 populate()를 이용하는 방법도 있다. Population is the process of automatically replacing the specified paths in the document with document(s) from other collection(s). We may populate a single document, multiple documents, a plain object, multiple plain objects, or all objects returned from a query.. 2023. 1. 10.
mongoDB | node.js | mongoose | 자주 사용하는 쿼리 연산 정리 - Array field 수정 관련(v 4.4) 최근 우리 자사 서비스에 알림 기능을 구현하는 일을 계속 하고 있다. 알림 관련 데이터를 CRUD하는 api를 작성했었고, 지금은 리팩토링을 하고 있다. 그중 가장 관심을 가지고 있는 이슈는 CRUD를 할 때, 노드 내에서 처리하는 것이 아니라, 몽고디비의 쿼리 연산을 이용하는 것이다. 예시로 사용자가 알림을 삭제할 때, 처음 작성했던 방식은 노드에서 데이터를 바꾸고 그 이후 DB를 바꾸는 방식이었다. // findOne을 통해 해당 데이터를 조회하고, 노드에서 수정 후, save()를 통해 변경 사항을 db에 저장 // ... const notificationInfo = await Notification.findOne({ userId }); notifications.forEach(notification.. 2022. 12. 4.
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.
Node.js | TEST | 통합 테스트 시 사용하는 라이브러리 분석, 비교 해보기: [axios, supertest, chai-http, axiosist 등등등] 통합 테스트(Integration Test) 관련 정보를 구글링 하다가 향로님께서 작성하신 '테스트하기 좋은 코드 - 테스트하기 어려운 코드'라는 글을 읽었다. 향로님은 단위 테스트(Unit Test)에 대해서 글을 작성해주시긴 했지만, 전반적인 테스트라는 과정을 생각해봤을 때, 엔지니어로써 가져야 하는 마인드셋인 것 같아서 적어본다. 1. 테스트하기 좋은 코드 - 테스트하기 어려운 코드 팀 분들과 함께 NextStep - 이펙티브 코틀린 강좌를 수강하고 있다. 최근에 과제 회고를 처음 진행했는데, 이때 나온 주제가 테스트 하기 좋은 코드였다. 이 주제는 사실 이미 너무 많이 회자된 주 jojoldu.tistory.com Q. 테스트는 구현의 보조적인 수단인데, 테스트를 위해서 원본 코드의 구현과 설계를.. 2022. 9. 21.
nuxt.js | shopping web-app | 기본부터 차근차근 캡틴판교님의 'Nuxt.js 시작하기' 강의 기반 학습 메모 현업에서 vue.js(nuxt.js)와 express를 기반으로 개발하고 있다. 백엔드단은 여러 프로젝트를 진행하면서 나름 익숙하게 사용할 수 있지만, 여전히 프론트단에서 헷갈리는 요소가 있다. vue를 공부하고, 이런저런 컴포넌트들을 조금씩 손대면서 차츰 전체적인 레포지토리에 대해 적응해나가고 있지만, 지금 아니면 현재의 전반적인 디렉토리 구조에 대해 더 깊게 이해하는 것이 어려울 것 같아 강의를 통해 효율적이고 더 빨리 nuxt에 대해 학습하려고 한다. Nuxt에 대해 간단하게 정리부터 하자. Nuxt? Nuxt는 vue.js로 빠르게 웹을 제작할 수 있게 도와주는 프레임워크다. 뷰도 프레임워크다보니 그냥 쉽게 프레임워크의 프레임워크!라고 .. 2022. 9. 19.
TDD | node.js | 사용자 조회, 삭제, 추가, 수정 API 테스트 ※ 인프런 - 테스트주도개발(TDD)로 만드는 NodeJS API 서버 강의를 기반으로 정리한 내용입니다. 사용자 조회 API 테스트 코드 사용자를 조회하는 API는 /users/:id로 설정한다. 성공 시 id가 1인 유저 객체를 반환 실패 시 id가 숫자가 아닐 경우 400으로 응답 id로 유저를 찾을 수 없을 경우 404 응답 성공 시 테스트 코드를 먼저 작성해보자. // index.spec.js describe('GET /users/:id는', () => { describe('성공 시', () => { it('id가 1인 유저 객체를 반환한다', (done) => { request(app) .get('/users/1') .end((err, res) => { res.body.should.have.p.. 2022. 5. 24.
TDD | node.js | 사용자 목록 조회 API 테스트 코드 만들기 ※ 인프런 - 테스트주도개발(TDD)로 만드는 NodeJS API 서버 강의를 기반으로 정리한 내용입니다. 앞에서 간단하게 구현해봤던 /users API를 구체적으로 작성해볼 것이다. GET /users 는 성공했을 때, 다음과 같은 결과가 도출된다. 유저 객체를 담은 배열로 응답 최대 limit 갯수만큼 응답 실패 했을 때는 다음과 같은 결과가 나오게 할 것이다. limit이 숫자형이 아니면 400 응답 offset이 숫자형이 아니면 400 응답 limit은 응답 받을 데이터의 총 길이, offset은 응답 받은 데이터 중 스킵할 때, 그 길이의 차이를 나타내는 파라미터 index.spec.js의 파일을 다음과 같이 수정한다. const app = require('./index'); const requ.. 2022. 5. 23.
728x90
LIST