728x90

전체 글 165

서버에 도메인을 연결하는 방법(2) (feat. AWS Route53)

서버에 도메인을 연결하는 방법(1)에서 도메인을 구매했다면,도메인이 어떻게 서버에 연결되는지 살펴보자. 레코드 유형나는 AWS Route53을 통해 도메인을 구매하고, 레코드를 생성했으므로,Route53을 예시로 들어 설명하겠다. 도메인을 구매하고 나면구매한 도메인 이름으로 호스팅 영역이 생성되고,해당 호스팅 영역으로 들어가면아래와 같이 NS, SOA 유형의 레코드가 생성되어 있다.NS (Name Server Record)NS 레코드 유형은 도메인을 관리하는 네임서버의 주소를 지정하는 것이다.값/트래픽 라우팅 대상에는 'ns-123.awsdns-45.net' 등의 값이 들어간다.Route 53은 도메인을 위해 전 세계에 분산된 수천 개의 네임서버 인프라를 운영 중이고,그 중에 내 도메인에 대해 담당 역할..

서버에 도메인을 부여하는 방법 (1)

도메인의 필요성사이드 프로젝트를 진행하며 앱 출시를 앞두게 되었다.처음 앱 출시 당시에는 사용자가 많지 않을 것으로 예상해 서버는 ec2 인스턴스 1대로 운영하기로 했다.테스트 과정에서는 aws에서 자동 생성해주는 ec2 도메인을 사용하여 통신했다. 그런데 앱 출시 후 트래픽이 늘어나면 인스턴스를 바꾸거나 늘리는 등의 스케일 조정이 필요할 것이고,그렇게 되면 ec2 자동 생성 도메인이 교체되어 이미 출시된 앱과의 통신이 어려워 진다. 추후 서버 스케일링을 위해 로드 밸런서 사용하기도메인 구매하기두 가지 방안을 고민했는데, 당장은 도메인을 구매하는 것이 더 비용적으로 저렴하고로드 밸런서를 사용하더라도 aws 자동 생성 도메인을 사용하면로드 밸런서를 교체할 때 인스턴스 교체와 마찬가지로 곤란하게 되므로도메인..

AWS SQS와 DLQ 사용법 - SQS에서 실패한 메시지를 다시 소비하는 방법

회사에서 운영하던 서비스의 리워드 지급 과정에서 대량으로 오류가 발생했다.리워드 지급 건들을 메시지 큐에 쌓고워커가 이를 처리하는 방식이었는데, 워커에서 지속적으로 메시지들이 처리 실패되어 결국 23만 건의 메시지가 DLQ에 쌓이게 되었다. 결국 데이터베이스 배치 작업으로 실패 건들을 처리했지만,SQS와 DLQ에 대해 잘 알고 있었다면 더 잘 대응할 수 있었을 것 같다. 메시지큐, SQS, DLQ에 대해 알아보자.메시지큐란?메시지 큐(Message Queue)란 서버, 마이크로 서비스 간에 비동기 방식으로데이터를 주고 받을 수 있도록 도와주는 시스템이다. 메시지 생성자 (프로듀서, Producer)와 메시지 소비자(컨슈머, Consumer)가 있을 때,메시지 생성자가 메시지를 큐에 쌓아 두면, 메시지 소..

환경 2025.03.17

Redis Pub/Sub 기능 사용하기 (feat. NestJS)

Publish-Subscribe 패턴Redis의 pub/sub을 살펴보기 전에 pub/sub이 어떤 기능인지부터 살펴보자. publish-subscribe (pub/sub)은메시지 발행자(publisher)는 특정 채널에 메시지를 보내고,해당 채널을 구독한 모든 구독자(subscriber)들은 그 메시지를 수신하는 방식이다.이는, 발행자가 구독자에게 직접 메시지를 보내는 일반적인 메시징 패턴과 구분된다.구독자가 없다면 메시지는 사라지고 복구되지 않는다. 이러한 구조는 발행자와 구독자가 서로를 알 필요 없이 독립적으로 동작할 수 있게 하여(decoupling),시스템의 확장성과 유연성을 높인다. Redis Pub/Sub"channel11" 과 "ch:00" 채널을 구독하려는 클라이언트는 아래와 같이 입력한..

DataBase/Redis 2025.03.02

AWS 로드 밸런서 Pre-warming 사용하기 (feat. Elb.InternalError)

우연한 계기로 AWS 로드밸런서 Pre-warming 기능을 사용하게 되어그 경험을 정리해보았다. 이슈 발생사내 담당 프로젝트에서 AWS Elastic Beanstalk의 Amazon Linux 2(AL2) 플랫폼 Node.js 16 버전을 사용 중이었다.그런데 이 플랫폼이 2024년 10월 10일부로 지원이 중단되어, (AWS 지원 중단 안내문)Elastic beanstalk 플랫폼 변경과 Node.js 버전 업그레이드가 필요했다. 버전 업그레이드를 위해 사용하던 빈스톡을 복제하고복제한 빈스톡으로 트래픽을 모두 옮긴 뒤기존에 사용하던 빈스톡을 Amazon Linux 2023 플랫폼 Node.js 18 버전으로 업그레이드 한 후다시 기존 빈스톡으로 트래픽을 옮겨오는 계획을 세웠다.(복제한 빈스톡을 업그레..

환경 2025.02.16

NestJS 커스텀 데코레이터 사용법

네스트에서의 데코레이터네스트에서는 데코레이터라는 기능을 사용할 수 있다.데코레이터는 다른 언어들에서는 흔하게 사용되는 개념이지만, 자바스크립트 진영에서는 아직은 낯선 편이다.데코레이터의 정의를 간단히 살펴보면 아래와 같다.ES2016에서 데코레이터란 함수를 반환하고, 인자로 대상(target), 이름, 프로퍼티 설명자(property descriptor)를 받을 수 있다. @를 앞에 붙여, 데코레이트하고 싶은 것 위에 위치시킨다. 데코레이터는 클래스, 메서드, 또는 프로퍼티로 정의될 수 있다. 네스트 Param 데코레이터네스트는 http 라우터 핸들러와 사용할 수 있는 파라미터 데코레이터(param decorators)를 제공한다.아래는 네스트에서 제공하는 데코레이터와 그들이 의미하는 Express(혹은..

Node.js/NestJS 2025.02.02

DB 참조 무결성 제약 (feat. ON DELETE, ON UPDATE)

참조 무결성 제약이란참조 무결성 제약(Referential Integrity Constraint)이란데이터베이스에서 외래 키(Foreign Key)가 정의된 경우,참조되는 테이블(부모 테이블)과 참조하는 테이블(자식 테이블) 간의 관계를 유지하도록 보장하는 제약 조건이다.이를 통해 데이터의 일관성과 정확성을 유지할 수 있다. 참조 무결성 제약의 역할 1. 자식 테이블의 외래 키 값은 반드시 부모 테이블의 기본 키(Primary Key) 값 중 하나이도록 제한한다. 2. 부모 테이블에서 데이터를 삭제하거나 수정할 때 자식 테이블의 외래 키 값이 어떻게 처리될지를 결정한다. 참조 무결성 제약의 4가지 옵션외래 키를 정의할 때부모 테이블의 데이터 변경(삭제 또는 수정)이 자식 테이블에 미치는 영향을 제어하기 ..

DataBase 2025.01.19

NestJS 커스텀 프로바이더 사용법

커스텀 프로바이더가 필요한 이유종종 Nest에서 제공하는 클래스 프로바이더 형태가 아니라,그 외의 형태로 프로바이더를 사용하고 싶을 때가 있다.네스트는 커스텀 프로바이더라는 기능으로 프로바이더에 다양한 자율성을 주고 있다. 네스트의 일반적인 프로바이더커스텀 프로바이더에 대해 알아보기 전에,먼저 일반적인 형태의 프로바이더를 살펴보자.@Module({ controllers: [CatsController], providers: [CatsService],}) @Module() 데코레이터에서providers는 provider로 구성된 배열을 받는다.우리는 보통 클래스의 이름을 배열에 넣는다.그러나 사실 클래스 이름을 넣는 것은, 간단히 표현한 형태이고, 정석대로 표현하면 아래와 같다.providers: [ ..

Node.js/NestJS 2025.01.05

Http 통신 응답 압축 (feat. gzip, NestJS)

Http 통신에서 압축이란?Http 통신에서 압축(compression)이란 성능을 향상 시키는 주요한 방법 중 하나다.요청과 응답 body를 압축함으로써 최대 70%까지 대역폭 사용량을 감소시킬 수 있고,속도를 향상 시킬 수 있다. 다만, 압축과 해제를 위해서는 CPU가 조금 더 사용되기 때문에,[트래픽 크기와 속도 vs CPU 사용량]의 trade off 관계이다.압축이 CPU를 많이 사용하는 것은 아니지만,압축 효율이 그다지 좋지 않은 경우에는 압축하지 않는 것이 나을 수 있다. 또, 이미 압축된 이미지, 오디오, 비디오 파일을 한 번 더 압축하는 것은효용보다 비용이 더 크므로두 번 압축하지 않도록 주의해야 한다. 실질적으로, 브라우저와 서버가 압축 기능을 지원하기 때문에개발자가 직접 압축 알고리즘..

서버 네트워크 구성 요소와 흐름 (feat. AWS)

사용자 요청이 서버에 도달하고, 처리된 후 응답이 돌아오는 과정에는 다양한 네트워크 구성 요소들이 유기적으로 작동한다.서버 네트워크 구성 요소를 중심으로 요청의 흐름을 단계별로 살펴보고, 주요 구성 요소들에 대해 알아보자. 1. 클라이언트에서 요청 보내기 모든 과정은 사용자의 브라우저나 애플리케이션에서 시작된다.사용자가 웹사이트에 접속하거나 API 요청을 보낼 때, 해당 요청은 인터넷을 통해 서버 네트워크로 전달된다. 2. 로드 밸런서 (Load Balancer) 로드 밸런서는 들어오는 트래픽을 여러 서버 인스턴스에 효율적으로 분산시켜준다.이를 통해 서버 과부하를 방지하고, 고가용성을 유지할 수 있다. 대상 그룹 (Target Group) 로드 밸런서는 대상 그룹을 통해 요청을 처리할 서버 인스턴스를 정..

728x90