본문으로 건너뛰기
코드룸CODE ROOMTENMO ↗

기술 블로그

웹과 앱을 만들며 남긴 기록 447편입니다.

Docker 이미지 공유 및 다중 컨테이너 실행 가이드

🏗️ Docker에서 하나의 이미지로 여러 컨테이너 실행하기 Docker에서는 하나의 이미지(Image)를 기반으로 여러 개의 컨테이너(Container)를 실행할 수 있습니다 . 예를 들어, MySQL 이미지 하나를 사용하여 여러 개의 MySQL 컨테이너를 실행할 ...

Docker 이미지와 컨테이너, 뭐가 다를까?

이미지와 컨테이너 둘 다 Docker에서 애플리케이션을 실행하는 데 필요한 요소지만, 역할이 다릅니다. 💡 쉽게 말하면? 이미지(Image) = 레시피(요리법) 📜 컨테이너(Container) = 레시피를 보고 만든 요리 🍲 즉, 이미지는 실행할 애플리케이션의 &...

Docker 컨테이너 가상머신(VM) 차이점은 무엇일까?

Docker와 가상머신(VM)의 차이, 왜 중요할까? 개발자라면 Docker와 가상머신(VM)이 어떻게 다른지 정확히 이해하는 것이 중요합니다. 둘 다 애플리케이션을 격리된 환경에서 실행하는 기술 이지만, 구조와 성능에서 큰 차이 가 있습니다. 💡 Docker는 가벼...

초보 개발자를 위한 Docker 기본 개념, 컨테이너와 이미지의 차이부터

Docker란 무엇인가? Docker는 애플리케이션을 컨테이너(Container) 라는 가벼운 실행 환경에서 동작하게 만드는 도구입니다. 컨테이너를 사용하면 어디서든 동일한 환경에서 애플리케이션을 실행할 수 있습니다. 컨테이너(Container)와 가상머신(VM)의 차...

Next.js API Routes vs. Server Actions 차이점

Next.js에서 서버 사이드 로직을 처리하기 위한 두 가지 주요 기능은 API Routes와 Server Actions입니다. 각 기능의 장단점과 사용에 대한 설명 글입니다. Next.js API Routes API Routes는 Next.js 애플리케이션 내에서 A...

인기 게시물 관리 DB로 직접 조회수를 관리할까? Redis로 캐싱할까?

게시물의 “조회수” 기능은 블로그나 커뮤니티, 뉴스 사이트 등에서 매우 중요한 요소입니다. 특히 트래픽이 많은 서비스라면, 조회수를 효율적으로 관리하고 ‘인기 게시물’을 뽑아내는 과정이 서비스 품질에 직결될 수 있습니다. DB...

Sharp를 이용해 이미지 Jpeg to WebP 변환 후 S3에 업로드하기

이미지 용량을 줄이면 페이지 로딩 속도가 개선되고, 사용자 경험도 좋아집니다. Sharp 라이브러리를 사용하면 JPEG, PNG 등 다양한 포맷의 이미지를 WebP 로 간단하게 변환하고, 변환된 이미지를 AWS S3 에 업로드 할 수 있습니다. 필요 @aws-sdk/c...

Redis를 이용한 캐싱 전략 및 성능 개선 팁

Redis는 고속의 메모리 기반 데이터 저장소로, 캐싱 솔루션으로 널리 사용됩니다. 캐싱을 효과적으로 활용하면 데이터 액세스 속도를 높이고, 서버 부하를 줄일 수 있습니다. 이 문서에서는 캐시 미스 최소화 전략과 만료 정책(LRU, LFU)에 대해 다룹니다. LRU(L...

Redis 보안 및 접근 제어

Redis는 기본적으로 보안 설정이 최소화되어 있어, 운영 환경에서 보안 강화를 위해 적절한 설정이 필수적입니다. Redis 비밀번호 설정과 ACL(Access Control List) 기능을 통해 접근 제어를 강화할 수 있습니다. Redis 비밀번호 설정 Redis는...

Redis 영속성(Persistence) 개념

영속성 개요 Redis는 기본적으로 메모리 기반 데이터베이스로 설계되었지만, 데이터를 영구적으로 저장할 수 있는 영속성 옵션을 제공합니다. 영속성은 Redis 서버가 중단되더라도 데이터를 복구할 수 있도록 하며, 주요 방법으로 RDB(Snapshot)와 AOF(Appe...

Redis 성능 모니터링 명령어 및 기법

INFO 명령어 INFO 명령어는 Redis 서버의 상태 정보를 제공하는 명령어로, 다양한 카테고리의 정보를 조회할 수 있습니다. 주요 카테고리는 다음과 같습니다: server : Redis 버전, 운영 체제 정보 등 서버 관련 정보. clients : 연결된 클라이언...

Redis 소개 및 사용 사례

Redis란? Redis 는 오픈 소스 인메모리 데이터 저장소 입니다. 기본적으로 키-값(Key-Value) 저장소 로 작동하며, 빠른 데이터 읽기 및 쓰기 속도를 제공합니다. 이는 주로 캐시(Cache) , 메시지 큐(Message Queue) , 세션 저장(Sess...

차세대 IDE, Cursor 명령어 가이드

주요 단축키 Cursor를 효율적으로 사용하기 위한 핵심 단축키는 Tab, Ctrl+K, Ctrl+L입니다. 해당 기능 외 많은 단축키가 존재하겠지만 위 3개로 충분합니다. Tab 키 에디터에서 1초 정도 대기 시 자동으로 다음 코드 블록을 작성합니다. 유사 패턴 감지...

Next.js Server Action 큰 용량 이미지 업로드하기 (413 Payload Too Large)

Next.js로 웹 애플리케이션을 개발하다 보면, 대용량 이미지를 업로드해야 하는 상황이 종종 생깁니다. 그러나 기본 설정 그대로라면 용량 제한(body size limit)에 걸려 업로드가 실패할 수 있습니다. 문제를 어떻게 해결하는지, Next.js 13+ 버전에서...

Next.js 15 App Directory 폴더 구조 알아보기

├── src/ │ ├── app/ │ │ ├── (auth)/ # 인증이 필요한 라우트 그룹 │ │ │ ├── dashboard/ │ │ │ ├── profile/ │ │ │ └── layout.tsx │ │ ├── (marketing)/ # 마케팅/공개 페이지 라우...

2025년 주목해야 할 차세대 IDE, Cursor

왜 Cursor인가? Cursor는 AI와 협업을 중심으로 설계된 통합 개발 환경(IDE)입니다. GPT-4o, Claude 3.5 Sonnet 등 다양한 AI 모델을 지원합니다. 기존 VSCode 이용자가 익숙하게 사용하던 워크플로우에 AI 자동 완성, 자연어 기반 ...

프로그래머스 배열 만들기 6 Lv.0

function solution(arr) { const result = []; for (const num of arr) { // 스택이 비어있지 않고, 마지막 원소가 현재 값과 같다면 pop if (result.length > 0 && result[result.leng...

프로그래머스 커피 심부름 Lv.0

function solution(order) { let answer = 0; for (let i = 0; i < order.length; i++) { const menu = order[i]; if (menu.includes("americano")) { // 아메리카노 ...

Redis 트랜잭션, 파이프라이닝(Pipelining), Pub/Sub 기능 개요

1. Redis 트랜잭션(Transaction) 개요 트랜잭션은 명령을 원자적(Atomic)으로 실행하는 기능을 의미합니다. 즉 트랜잭션 내에 담긴 명령어들(MULTI 이후, EXEC 이전의 명령어들)은 부분적으로만 실행하거나 반영할 수 없습니다. 성공 시 모두 반영,...

프로그래머스 코드 처리하기 Lv.0

function solution(code) { let answer = ''; let mode = false; for (let i = 0; i < code.length; i++) { if (code[i] === "1") { mode = !mode; } else { if ...