일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
- Connection pool
- API 개발
- 권한검증
- 파일조회
- API 설계
- Mock
- 멀티테넌시
- mailerservice
- 셀렉트어드민
- nestjs library
- monorepo
- java
- 오블완
- typeorm
- SW마에스트로
- guard
- 추상 클래스
- YouTube Data API
- 어드민 페이지
- jest
- nestjs decorator
- coarse-grained
- 티스토리챌린지
- 자바
- 책임부과
- fine-grained
- nestjs libraries
- 오브젝트
- SROOM
- NestJS
- Today
- Total
목록전체 글 (17)
독산구너
글의 목적인턴 과정 중 투입된 프로젝트에서 '업무'와 '업무가 포함되는 그룹' 정보를 다루게 되었습니다. task와 group으로 칭하겠습니다.group은 하위 group은 가질 수 있고, 하나의 task는 하나의 group에만 포함되는 구조입니다. 이러한 트리구조를 가장 잘 다룰 수 있는 데이터 저장방식을 고민하였고, 그 과정을 기록하고자 합니다 요구사항그룹-태스크 트리구조 저장그룹 내 다수의 그룹이 생성될 수 있으며, 없을수도 있다.그룹 내 다수의 태스크가 생성될 수 있으며, 없을수도 있다.태스크 하위에는 그룹 또는 태스크 생성이 불가하다드래그 앤 드롭으로 그룹간 그룹이동, 그룹간 태스크 이동그룹 삭제, 태스크 삭제Group A│├── Task 1├── Task 2└── Group B ├── T..
글의 목적API를 설계하고 개발하면서 고민했던 주제인 '페이지별 API 제공'과 '공통 API 제공'에 대해 적어보고, 지금 저희 서비스에는 뭐가 적절한지 알아보고자 합니다. 글의 계기백엔드 개발 인턴쉽 과정에서, DB, Architecture, API 등 서버측 소프트웨어를 처음부터 설계할 기회가 주어졌습니다. API 설계 과정에서 이사님과 논의했던 주제 중 하나가 바로 '공통 API'를 만들것인지, '페이지별 API'를 만들것인지에 대한 것이었습니다. 두 설계 방식의 장단점을 생각해보고, 지금 개발중인 서비스에는 뭐가 적절할지 이야기하면서 몇가지 인사이트를 얻을 수 있었습니다. Fine-Grained APIFine-Grained, 말 그대로 섬세한, 세분화되있는 이라는 뜻입니다. 작업의 단위를 잘게 ..
글의 목적현재 개발중인 NestJS 프로젝트에서는 이메일로 전송된 코드를 입력해 로그인하도록 합니다. 이 기능의 테스트코드를 작성하면서 발생한 문제점과 해결방안을 써보고자 합니다. 이 글을 통해 Jest 테스트에서 꼭 필요하지 않은 특정 외부 서비스 의존성을 제거하는 방식을 알게됩니다. 문제점이메일 전송 기능은 @nestjs-modules/mailer의 MailerService를 통해 구현됩니다.export declare class MailerService { ... constructor(mailerOptions: MailerOptions, transportFactory: IMailerTransportFactory); ... verifyAllTransporters(): Promise..

글의 목적어드민 페이지를 쉽게 만들 수 있는 셀렉트 어드민 사용기에 대해 써보고자 합니다.https://www.selectfromuser.com/ 셀렉트 | 어드민, 운영툴, 관리자 페이지를 만드는 새로운 방법비즈니스, 운영 지원 시스템을 만드는데 반복적으로 일어나는 비효율을 해결하고 있습니다. 셀렉트로 어드민, 백오피스를 더 쉽게 만드세요.www.selectfromuser.comyml 파일 작성만으로 db 조회 및 뷰 생성, 그래프 포함 어드민 페이지 생성이 가능합니다. 구현하고자 하는 기능Database 연동 및 데이터 조회서버에 저장되어 있는 첨부파일 다운로드셀렉트 어드민으로 주로 서버 데이터를 가공해 조회하는데 사용하는데, 이번에는 서버 내 파일에도 접근할 수 있도록 해서 어드민 페이지를 통해 사..
글의 목적인턴 과정에서, NestJS를 사용하여 사용자 레벨을 나누고 레벨별로 API 호출 권한을 설정했습니다. 이때 사용한 Guard, jwt, 데코레이터 생성 방식에 대해 써보고자 합니다. 요구사항워크스페이스 내 멤버는 4개의 레벨로 나눠집니다. 레벨 1이 가장 높으며, 가장 높은 권한을 가지고 있습니다. 레벨 숫자가 커질수록 적은 권한을 가집니다.Guard를 통해 API를 호출한 멤버가 해당 권한을 가지고 있는지 확인해야 합니다. 이때 DB를 조회하지 않습니다 (사용자가 api 호출 권한이 있는지 guard에서 db를 조회해 확인할 수는 있으나, controller의 메서드가 호출되기도 전에 db에 접근하는 것이 리소스 낭비이고 알맞지 않다고 생각했습니다) 구현 방법JWT 페이로드에 해당 멤버의 l..
목차글의 목적제 주력 언어는 자바이고 자바의 타입과 논리구조가 익숙합니다. 그렇기에 최근 인턴과정에서 사용하게 된 Typescript를 다루는것이 생각보다 어려웠습니다. 어려움 중 하나였던, 타입(Type)의 차이에 대해 일부분 알아보고, 이를 공유하고자 합니다. 글을 쓰게 된 이유이광근 교수님의 '컴퓨터 과학이 여는 세계'에서는 컴퓨터의 타입(Type)을 '프로그램이 최종적으로 만드는 데이터의 종류' 라고 설명합니다. 언어가 포함하는 논리식의 결과물(데이터)를 '종류' 까지만 초점을 가지고 분류한 결과물이라는 것입니다. 이 대목에서 "그럼 자바와 자바스크립트의 논리식의 차이점이 있는건가?" 라는 질문이 들었습니다. 자바스크립트는 자바와 다르게 undefined, NaN, Infinity와 같은 더 세부..
목차 글의 목적인턴과정에서 SaaS 형태, 멀티테넌시 구조의 서비스 개발 수행을 맡았습니다. 그때 고민하고 구현했던 것들에 대해 기록을 남기고자 합니다. 멀티테넌시란?단일 인스턴스에서 여러 테넌트(사용자 또는 사용자 조직)가 수용되고, 각 테넌트의 데이터는 다른 테넌트와 격리되어 보이지 않아 모든 테넌트에 대한 데이터 보안 및 개인정보 보호가 보장되는 소프트웨어입니다.출처: https://www.ibm.com/kr-ko/topics/multi-tenant 멀티 테넌트란? | IBM여러 사용자가 소프트웨어 애플리케이션 및 해당 리소스의 단일 인스턴스를 공유할 수 있도록 하는 멀티 테넌트 소프트웨어 아키텍처에 대해 자세히 알아보세요.www.ibm.com 멀티테넌시 격리수준1. 공유 데이터베이스, 공유 스..

목차 글의 목적NestJS의 Library를 사용해서 얻을 수 있는 이점을 알아보고, 이를 멀티테넌씨 DB 구조 설계에 이용해보고자 합니다. NestJS LibrariesNestJS에서는 공통으로 사용되고, 자주 재사용되는 코드를 구성하는 여러가지 방식이 존재합니다. 1. 모듈화 -> NestJS의 핵심 개념으로, 특정 로직을 모듈화시켜 다른 모듈에서 import 받아 사용할 수 있도록 지원합니다. 하지만 Single Application 내에서만 사용 가능하므로, 회사 내 또는 조직 내 공유해 사용하기에는 부족합니다. 2. Npm pachaging -> 모듈은 재사용을 위해 npm 패키지가 가능합니다. 패키지는 npm install을 통해서 쉽게 사용이 가능합니다. 하지만 이는 조직 내 특화된 기능을..

글의 목적컴퓨터에서는 고유한 주소가 주어졌을 때, 곧바로 그 주소에 해당하는 메모리를 읽을 수 있다고 알려져 있습니다. 어떻게 그게 가능한 것인지, 어떻게 구현되는지 알아보고, 코드를 통해 간단히 구현해보고자 합니다. 결과물 미리보기다음과 같이 주소가 주어졌을 때, random access 없이 논리게이트 만으로 해당 주소의 값을 불러와야 합니다.0번부터 3번까지 각각 170, 85, 240, 15가 저장되어있다고 가정합니다주소 0: [false, false]값 (binary): [true, false, true, false, true, false, true, false]값 (decimal): 170주소 1: [false, true]값 (binary): [false, true, false, true, f..

글의 목적 스프링 서버에서의 INFO 레벨 로그를 kibana를 통해 시각화, 분석하는 과정을 설명하고자 합니다. ELK 로그는 LogStash를 통해 검색 엔진인 ElasticSearch로 전달되고, Kibana는 ElasticSearch에서 빠른 검색을 통해 데이터를 시각화 및 분석하게 됩니다. 스프링에서의 로그, Logstash 스프링 로그는 Java에서 가장 많이 사용되었던 로깅 라이브러리인 log4j의 후속 버전인 Logback을 통해 로그 전송 설정이 가능하다. src/main/resource에서 xml 파일인데, 다음과 같이 설정했다. %d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n 15.164.211.18..