banner image

전체 글 85

[AWS] 프리티어 사용 시 필수 설정 - 스왑 메모리 할당

AWS 숙달을 위해 프리티어로 비용을 거의 지불하지 않은 채로 EC2를 사용하시는 분들이 꽤 많으실 겁니다. 이때 가장 문제인 것은 EC2 스펙인데요. 아무래도 프리티어는 무료 서비스다 보니 굉장히 스펙이 낮은 EC2만 사용할 수 있습니다. 현재 프리티어로 제공되는 EC2 인스턴스 유형은 t2.micro로 메모리가 1GiB만 제공됩니다. 이로 인해 웬만한 애플리케이션은 메모리 부족으로 인해 해당 인스턴스에서 실행 시 문제가 됩니다. 개발한 애플리케이션을 실행하면 갑자기 EC2가 멈추는 현상을 경험하신 분들이 꽤 있을 겁니다. 이때는 조금 더 비싸고 좋은 인스턴스를 사용하는 것도 방법이 될 수 있지만, 프리티어를 유지한 채 문제를 해결하는 방법은 스왑 메모리 활용일 것입니다. 스왑 메모리(Swap memo..

[ELK] Logstash 핵심 요약 및 설정법

Logstash란?Logstash는 로그를  수집하고 변환하는 데이터 처리 파이프라인입니다.  Logstash 설정법기본적으로 logstash 관련 설정은 logstash.conf 파일을 통해 관리할 수 있습니다. 몇 가지 예시를 통해 logstash를 설정해봅시다.inputfilebeat로부터 데이터 전송받을 때input { beats { port => 5044 # logstash 포트 }}logstash에서 직접 데이터 수집할 때input { file { path => "데이터 경로" codec => multiline { # 멀티라인(줄 바뀌어가며 기록된 로그)을 인식하기 위할 경우 pattern => "^{" negate => true what =>..

백엔드 2025.02.08

[ELK] Filebeat 핵심 요약 및 설정법

Filebeat란?Filebeat는 여러 장소에 존재하는 로그를 한 곳으로 모으기 위한 경량화된 로그 수집기입니다.  Filebeat 주요 필드필드는 Filebeat에서 로그를 수집한 뒤 넘겨줄 때 추가해주는 값들이라고 생각하면 됩니다. 기본적으로 Filebeat는 Elasticsearch에서 로그를 쉽게 분석할 수 있게 여러 필드를 추가해줍니다. 그 중 주요한 필드 몇 가지만 소개하겠습니다.@timestampfilebeat에서 해당 로그를 수집한 시간ecs.versionElastic Common Schema의 버전. 즉, elastic stack에서 표준화된 로그 데이터 구조의 버전을 의미host.name로그를 수집한 호스트 이름 (예를 들어 filebeat를 특정 도커 컨테이너 위에서 실행시켰다면 해..

백엔드 2025.02.08

무중단 배포 구조 설계해보기( 블루 그린, 롤링, 카나리 배포 )

저는 현재 혼자서 간단한 사이드 프로젝트를 개발하고 있습니다. 이때 배포 과정에 크게 관심을 안 가지고 있었지만, 간단한 사이드 프로젝트가 아니라 실제 세상에서 비즈니스로 운영되는 서비스는 잠깐의 장애도 굉장히 큰 문제가 될 수 있다는 생각이 들어 배포 시 서비스가 멈추지 않고 24시간 실행되는 구조를 만들어야겠다 생각했습니다.  무중단 배포(Zero Downtime Deployment)란?말 그대로 다운타임(서비스가 일시적으로 중단되는 시간)을 없애는 배포 방식을 의미합니다. 서비스가 단 하나의 프로세스로 실행되고 있다면 해당 소스코드를 업데이트 하기 위해서는 소스코드 수정 후 해당 프로세스를 중단했다 다시 실행해야합니다. 그럼 해당 프로세스가 다시 실행되는데까지 잠깐이긴 하지만 서비스가 멈춰버리는 문..

데브옵스/CI,CD 2025.01.30

[JS] 값을 복사하는 여러 방법과 차이점 - 얕은 복사 / 깊은 복사

프로그래밍 언어를 사용하다보면 변수를 선언하고 해당 변수값과 같은 값을 가지는 다른 변수를 선언하고 싶은 경우가 많이 생깁니다. 하지만 이때 값을 복사하는 방식에 따라 차이점이 존재하고 이로 인해 예기치 못한 문제가 발생할 수 있습니다. 오늘은 자바스크립트에서 값을 복사하는 방법들과 그 차이점에 대해 알아보겠습니다.( 시작하기에 앞서 기본적으로 자바스크립트의 데이터 타입에 대한 간단한 이해가 필요합니다. ) [Javascript] 원시 타입, 참조 타입에 대한 이해원시 타입(Primitive Type)이란?✅ 정의원시 타입 데이터는 값 자체를 저장하는 데이터 타입을 의미합니다. 예를 들어, 'A'라는 변수에 '10'이라는 값을 지정한다면 스택 메모리에 'A'라는 변수는 '10'이sparkit.tistor..

[JS] 원시 타입, 참조 타입에 대한 이해

원시 타입(Primitive Type)이란?✅ 정의원시 타입 데이터는 값 자체를 저장하는 데이터 타입을 의미합니다. 예를 들어, 'A'라는 변수에 '10'이라는 값을 지정한다면 스택 메모리에 'A'라는 변수는 '10'이라는 값을 가진다라는 정보가 저장되는 것입니다. 💾 메모리 저장 위치스택(Stack) 📋 종류number, string, boolean, null, undefined, symbol, bigint 📝 예제let a = 10;let b = a; // 값이 복사됨b = 20;console.log(a); // 10 (a는 영향을 받지 않음)console.log(b); // 20// 메모리 구조 예시Stack:+------+----+| a | 10 || b | 10 | (a의 값..

백엔드/Node.js 2025.01.29

[Github] Github 사용방법 - 커밋 충돌

여러명의 개발자가 git에서 같은 브랜치에서 같은 소스코드에 대한 작업을 진행하다보면 병합이 필수적입니다. 이때 같은 소스코드를 수정하다보니 에러가 흔하게 발생하는데요. 이때 어떻게 대응해야하는지에 대해 알아보겠습니다.  commit 충돌 에러먼저 같은 브랜치에서 작업 중인 사용자 A와 사용자 B가 존재한다고 가정합시다. 이때 A는 'README.md' 파일의 제목을 'A.md'로 수정합니다. 그리고 B도 'README.md' 파일의 제목을 'B.md'로 수정합니다. 그리고 A가 먼저 해당 내용을 commit 후 원격 레포지토리로 push합니다. 이후에 B가 해당 내용을 commit 후 원격 레포지토리로 push하면 다음과 같은 에러가 납니다.You have divergent branches and ne..

데브옵스/CI,CD 2025.01.23

[Github] Github 사용방법 - 브랜치 전략

Github는 여러 팀원과 같은 소스코드에 붙어 작업할 때 유용하게 쓰입니다. 즉, Github를 효율적으로 사용하기 위해서는 같은 소스코드(레포지토리)를 충돌없이 개발하는 방법을 알아야합니다. 오늘은 먼저 Github에서 많이 사용되는 브랜치 전략 몇 가지에 대해 소개하겠습니다. ✅ 브랜치(Branch)란?먼저 브랜치가 무엇인지 알고 갑시다. git branch란 간단하게 독립적인 작업 영역 단위라고 이해하셔도 됩니다. 예를 들어 같은 레포지토리(소스코드)에서 A 브랜치, B 브랜치를 생성했다고 가정합니다. 그러면 A 브랜치에서의 작업은 B 브랜치에 전혀 반영되지 않습니다. 똑같이 B 브랜치에서의 작업은 A 브랜치에 전혀 반영되지 않죠.Git Branch 전략1. Git Flow5가지 정도의 브랜치를 ..

데브옵스/CI,CD 2025.01.22

[NestJS] API 호출 횟수 제한하기 ( Rate Limiting )

Documentation | NestJS - A progressive Node.js frameworkNest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Readocs.nestjs.com 클라이언트가 API를 무제한으로 요청할 수 있다면 서버에 부하가 심해질 수 있습니다. 일반적으로 AWS 같은 CDC를 이용하면..

백엔드/NestJS 2025.01.21

[Docker] Dockerfile에서 yarn install 에러 해결( .cache / unplugged 가 없다? )

상황저는 Github Actions를 이용해 CI/CD를 구축하고 있습니다. 이때 내 어플리케이션을 도커 이미지로 빌드해서 관리하려고 하는데요. 이때 사용한 Dockerfile은 다음과 같습니다.FROM node:18.20.4WORKDIR /usr/src/appCOPY . .RUN yarn installEXPOSE 3000CMD ["yarn", "start"]이때 이상한 건 분명 Github Actions에 yarn install 관련 로그가 찍히긴 하는데, 해당 도커 이미지를 도커 컨테이너로 실행했을 때 .yarn 하위에 있어야 할 .cache 폴더나 unplugged 폴더가 존재하지 않았습니다.  해결저는 .yarnrc.yml 파일에 정확한 설정을 추가해서 이를 해결했습니다.# .yarnrc.yml ..

데브옵스/Docker 2025.01.20