반응형

분류 전체보기 113

Graphql) N+1 문제 및 해결 (feat.Nestjs)

일전에 프로젝트 인수인계를 받았을 때, graphql과 nestjs를 사용했었는데, 그 때 코드를 보니 dataLoader를 사용하는 코드가 있었다.그때 당시에는 왜 dataLoader를 사용하는지 잘 몰랐었는데, 지금에서야 dataLoader를 사용하는 이유를 알게 되었다.바로 graphql의 N+1 문제를 해결하기 위해 썼던 것이다.기본적으로 graphql은 N+1의 문제를 겪게 되는데 사례는 아래와 같다.query { users { id name posts { id title comments { id content } } }}위와 같이 graphql 쿼리가 있다고 가정하자.여기서 DB구조는 다음과 같다.데이터베이스..

카테고리 없음 2024.08.26

docker) nestjs + postgresql docker-compose

기존에는 nestjs 사용시 mysql을 사용하다가 이번에 postgresql을 사용하는데 docker-compose가 마음대로 되지 않아서 몇시간을 잡아먹었다......그래서 삽질한 나의 후기를 적고자 한다.먼저, 덤프파일 작성 시 에러다.version: '3.8'services: app: build: context: . dockerfile: Dockerfile ports: - '3000:3000' environment: - DATABASE_URL=postgresql://user:password@db:5432/mydatabase depends_on: - ts_db ts_db: image: postgres:14 environ..

카테고리 없음 2024.08.14

프로세스(Process)와 스레드(Thread)

1. 프로세스- 프로세스는 운영체제에서 실행중인 프로그램의 독립적인 인스턴스를 뜻한다. 예를들어, 우리가 컴퓨터에서 여러 개의  프로그램을 동시에 실행한다고 가정한다면, 각 프로그램은 하나의 프로세스로 실행된다.- 프로세스는 독립된 메모리 공간을 가지고 있어서, 한 프로셋의 메모리나 데이터는 다른 프로세스와 공유되지 않는다. 이는 보안성과 안전성 측면에서 매우 중요하다. 예를들어, 하나의 프로세스가 오류로 인해 중단되더라도 다른 프로세스에서는 영향을 미치지 않는다.- 프로세스 간 통신은 별도의 메커니즘을 사용해야 되는데 이를 IPC(Inter-Process-Communication) 이라고 한다. 이러한 통신은 파일, 파이프, 메세지 큐, 공유 메모리 등을 통해 이루어 질 수 있다.  2. 스레드- 스레..

카테고리 없음 2024.07.30

nestjs) DI(Dependency Injection) 이란?

NestJS에서 Dependency Injection (DI)는 프레임워크의 핵심 기능 중 하나이다. DI는 객체가 직접적으로 의존성을 생성하지 않고, 외부에서 주입 받아 사용하는 디자인 패턴을 말한다. NestJS에서는 주로 클래스의 생성자를 통해 의존성을 주입받게 되는데 각 클래스는 그 자체로 하나의 주입 가능한 서비스로 취급될 수 있으며, @Injectable() 데코레이터를 사용하여 DI 시스템에 등록된다.예를 들어, 사용자 서비스가 데이터베이스 서비스에 의존하는 경우, 사용자 서비스의 생성자에 데이터베이스 서비스 인스턴스를 주입할 수 있는데 이는 NestJS가 제공하는 @Module() 데코레이터 내에서 providers 배열을 통해 관리된다.DI를 사용하게 되면 몇가지 이점이 있는데 첫째는, ..

카테고리 없음 2024.07.24

DB) 인덱스란?

데이터베이스 인덱스는 특정 컬럼에 대한 데이터의 빠른 조회를 가능하게 하는 데이터 구조를 뜻한다.인덱스를 생성하면 데이터베이스는 해당 컬럼의 값을 기준으로 별도의 데이터 구조(일반적으로 B-Tree 또는 Hash)를 생성하여 데이터를 정렬하고 저장하게 된다. 이를 통해 데이터 검색 시 테이블의 모든 행을 스캔하는 대신, 인덱스를 사용하여 필요한 데이터를 빠르게 찾을 수 있다.주요 장점:향상된 검색 속도: 인덱스가 적용된 컬럼에 대해 검색할 때, 데이터베이스는 인덱스를 사용하여 빠르게 데이터를 찾을 수 있게된다. 이는 특히 대용량 데이터베이스에서 중요한 성능 향상을 제공하게 된다.정렬 및 그룹화 성능 향상: 인덱스를 사용하면 ORDER BY나 GROUP BY와 같은 쿼리의 성능도 향상된다. 데이터베이스는 ..

카테고리 없음 2024.07.18

정보처리기사) 양방향 암호화 방식

양방향 암호화 방식은 두가지로 나누어서 분류할 수 있다.1. 대칭키 / 비밀키 / 개인키2. 비대칭키 / 공개키 먼저 특징을 본다면1. 대칭키 / 비밀키 / 개인키 : 동일한 키로 데이터를 암호화 혹은 복호화를 한다. 또한 블록은 2 비트 이상 연산을 하며, 스트림은 1 비트씩 연산을 한다.2. 비대칭키 / 공개키 : 암호화 키는 DB 사용자에게 공개, 복호화 키는 비밀키로 관리자만 사용 - 종류1. 대칭키 / 비밀키 / 개인키 : DES, AES, SEEDm ARIA, RC4, LFSR 이 있다.2. 비대칭키 / 공개키 : RSA, Diffe-Hellman, DSA, ECC 이 있다. - 키 갯수1. 대칭키 / 비밀키 / 개인키 : N(N-1)/2 개2. 비대칭키 / 공개키 : 2N개 - 장점1. 대칭..

카테고리 없음 2024.07.04

AWS) aws ec2에 도커컴포즈로 백엔드+mysql 올리기 -1

flutter +nestjs + mysql 로 만든 가계부 앱이 이제 막바지이다.그래서 이제 백엔드를 ec2에 올리려고 하다보니 도커로 올리는게 편할 것 같아서 도커 컴포즈를 통해 백엔드와 DB를 올리는 과정을 남기려고 한다.먼저, 로컬에서 도커 컴포즈를 작성해야 하는데 다음과 같다.1. 도커파일 작성우선 nestjs는 도커파일을 만들기로 하였다. 도커 파일 내용은 다음과 같다.FROM node:18RUN apt-get update -y && apt-get upgrade -y libvips libvips-devARG NODE_ENV=local_dockerENV NODE_ENV=${NODE_ENV}ENV DD_ENV=${NODE_ENV}ENV DD_SERVICE=${NODE_ENV}-wallet_worri..

카테고리 없음 2024.06.26

flutter) 바텀 네비게이션바 + goRouter

하단 네비게이션을 만드는데 기존에 있던 코드와 별개로 goRouter를 이용해서 하단 네비게이션 바를 사용하고 싶었는데, 어느 해외 유튜버를 보고 해결책을 찾을 수 있었다.먼저 기존의 바텀 네비게이션바 코드이다.import 'package:flutter/material.dart';import 'package:flutter_screenutil/flutter_screenutil.dart';class CustomBottomNavBar extends StatefulWidget { final int currentIndex; final Function(int) onItemSelected; const CustomBottomNavBar({ Key? key, required this.currentInde..

카테고리 없음 2024.06.19

AWS) S3 생성

이번에 새로운 프로젝트를 하면서 이미지를 s3로 업로드 하는 api를 만들어야됐다.이전에는 strapi에서 시도했었는데 이번에는 nestjs에서 s3로 업로드를 하는 것을 개발해야 해서 개인 aws 프리티어 개설부터 시작해서 s3 버킷을 만들었다.먼저, s3 버킷부터 만들어보자.1단계 : AWS 회원가입 및 로그인이 단계에서는 굳이 자세한 설명은 필요하지 않으므로 넘어간다.2단계 : s3 접속 후 버킷 만들기를 클릭한다.여기서는 버킷을 선택해야 되는데 나는 원래 유럽쪽이였다가 이번에 아시아 태평양(서울)로 지정하였다.3단계 : 객체 소유권 지정객체 소유권을 설정하는데, 나는 내 aws 계정으로 ec2를 만들고 한 계정으로 관리를 할 것이기 때문에 ACL을 비활성화 하였다. 아마 회사나 다른 사람과 협업 ..

카테고리 없음 2024.06.12

[flutter] 소셜로그인 - 구글로그인 에러(안드로이드 sha-1 이슈)

현재 개발중인 앱에서는 구글로그인, 카카오 로그인, 네이버로그인 3개의 소셜로그인을 구현해놓았다. 그런데 IOS에서만 테스트하다가 안드로이드를 켜서 구글 로그인을 하는데, 구글로그인을 누른 후 해당 아이디를 클릭하면 아예 안드로이드가 꺼져버리는 이슈가 발생했다.분명히 나는 구글 GCP에도 안드로이드랑 IOS를 OAuth 인증을 해놓았는데 왜 이런 문제가 발생할까 도저히 모르다가 어느 해외 유튜버를 따라하면서 해당 이슈를 해결할 수 있었다.먼제 문제의 코드이다.import 'dart:convert';import 'package:dio/dio.dart';import 'dart:io' show Platform;import 'package:flutter_dotenv/flutter_dotenv.dart';impo..

카테고리 없음 2024.05.24
반응형