전체 글 365

비용 최적화된 인프라 아키텍쳐 Trade-off : 아웃바운드 처리 방식에 대한 고민

0. 작업을 들어가기 전에- 기존 서비스의 인프라 구현 정도가 매우 단순해서 장애에 취약하게 구현되어 있었다. 단일 EC2에서 다수의 서비스를 포트만 바꿔서 운영 중인 상황이었으며, 다행히도 롤링 방식을 통한 무중단 배포는 구현되어 있었다. 그래도 장애 발생에 대비해 개선을 해야하는 필요성은 충분했다. 이후 운영진과 소통을 통해, 추가 비용 지출이 가능한 부분에 대한 승인을 받고, 작업을 진행하게 되었다- 집중해야 할 부분은 다음과 같았다1) 우선 예측 가능한 변동성을 가진 트래픽이므로, 과다 프로비져닝과 같은 비용 낭비는 하느니만 못한 개선이 된다2) 지금보다 비용을 더 쓰게 되지만, 장애 가능성을 감소 시키고 EIP도 사용하고 있지 않은현 서비스는 파트너사와의 소통에서도 문제를 유발할 수 있기때문에 ..

인프라 2026.10.30

09. 10 TIL : AWS 비용 최적화 - 독서

참고 : 1인 SaaS 개발자를 위한 AWS 비용 최적화 — 월 서버비 40만원에서 20만원으로 줄이기 https://wikidocs.net/book/20925 1인 SaaS 개발자를 위한 AWS 비용 최적화 — 월 서버비 40만원에서 20만원으로 줄이기트래픽이 크지 않은데도 AWS 청구서가 늘 예상보다 많이 나오는 1인 SaaS 개발자를 위한 비용 최적화 실전 가이드. 컴퓨팅, 스토리지, 데이터베이스, 네트워크 비용을 단계별로…wikidocs.net 서비스의 클라우드 비용을 줄이기 위한 노력- 쓰지않는 EC2 중지 및 EBS 볼륨 삭제- 등록되지 않은 AMI 삭제- 탄력적 IP 조정- 사용하지 않는 RDS 중지 및 자동 스냅샷 기간 조정- RDS 스토리지 타입 수정- 불필요한 코드 파이프라인 및 ECS..

TIL, WIL/TIL📘 2026.09.10

Udemy : Docker & Kubernetes 실전 가이드 (9) - 2

ECS - 컨테이너 자동 배포 서비스ECS의 주요 작업 단위는 클러스터 > 서비스 > 태스크 > 컨테이너 4가지로 나뉘며, 오른쪽으로 갈 수록 더 상세한 작업 단위이다 Docker 이미지를 기반으로, 하나의 Task 안에 여러 개의 컨테이너를 정의할 수 있다{ "family": "my-app", "containerDefinitions": [ { "name": "web", "image": "nginx:latest", "cpu": 256, "memory": 512, "portMappings": [ {"containerPort": 80, "hostPort": 80} ], "essential": true }, { ..

Slack 클론코딩[백엔드 with NestJS + TypeORM] (2)

핫 리로드 : 코드 수정하고 저장시 서버 재시작 없이 바로 반영하는 기능 ~ 스프링과 달리 별도 설치해야함 공식 문서 참고https://docs.nestjs.com/v5/techniques/hot-reload 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 Progra..

Slack 클론코딩[백엔드 with NestJS + TypeORM] (1)

nestJs 세팅 npm i -g @nestJs/cli- 터미널 라이브러리 설치 프로젝트 생성 시 물어보는 observe 라이브러리 : 어플리케이션 모니터링 매커니즘1) 로깅 & 트레이싱2) 메트릭 : 서버 사용량 통계3) Open Telemetry 연동 : 프로메테우스 등 표준 모니터링 도구와 연동이 쉽도록 자동 구성+ API키를 발급받은 후 사용가능, 그렇지 않으면 401 반환ERROR [ObserveAgentWorker] Error: Telemetry rejected (401). Check that appKey and appSecret are valid; the application is taken from the key. Credentials are read once at start-up, so ..

Event Programming in Spring : Kafka vs Spring Message Broker vs Spring Application Events

1. 카프카 (Kafka)성격: 외부의 분산 스트리밍 플랫폼 (Distributed Streaming Platform)이자 메시지 브로커범위: 주로 애플리케이션 간 (Inter-application) 또는 서비스 간 (Inter-service) 통신에 사용즉, 프로젝트의 다른 마이크로서비스나 외부 시스템과 이벤트를 주고받을 때 적합하다특징:- 영속성 (Persistence): 메시지를 디스크에 저장하여 영속성을 보장한다. 컨슈머가 다운되었다가 다시 시작해도 놓친 메시지를 처리할 수 있다- 확장성 (Scalability): 대량의 데이터를 처리하고 높은 처리량을 가질 수 있도록 설계된다. 여러 브로커로 구성된 클러스터를 통해 수평 확장이 용이하다.- 내결함성 (Fault Tolerance): 브로커 중 일..

Spring🍃 2026.07.22

엑셀 다운로드를 위한 엑셀 생성 로직 리팩토링 : 시트 자동 생성 및 처리 속도 개선

https://cdaosldk.tistory.com/346 엑셀 다운로드를 위한 엑셀 생성 로직 리팩토링 : 속도 개선https://cdaosldk.tistory.com/344 엑셀 파일 생성 로직 구현 : Map 활용, 클래스 단위로 응용 가능1. 문제점 파악 기존 구글링을 통한 엑셀 다운로드 로직들을 살펴보면서 스터디 하던 도중, 전부 컨트롤cdaosldk.tistory.com 이전에 작성했던 로직에서 개선한 부분을 정리해본다0. 개선한 전체 코드import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.springframework.stereotype.Service;import pro..

자바☕ 2026.07.17

2진수와 10진수, 차이에 대해서

1. 본질적인 차이10진수는 총 10개의 숫자를 사용하고, 값이 9를 넘어가면 자릿수가 올라간다. 반면 2진수의 경우는 0과 1만 있기 때문에 1이상은 자릿수가 올라간다 2. 10진수를 2진수로 변경하기10진수를 더이상 나눌수 없을 때까지 2로 나누고, 그 나머지를 거꾸로 읽는 것이다 2 ) 13 --- 나머지 1 (가장 마지막 자릿수) 2 ) 6 --- 나머지 0 2 ) 3 --- 나머지 1 1 --- 나머지 1 (가장 앞 자릿수) 3. 왜 프로그래밍에서 이진수 변환을 자주 쓸까?"두 가지 상태(선택지)만 존재하는 상황"을 표현할 때 이진수가 완벽하게 매핑되기 때문이다.이를 컴퓨터 과학에서는 비트마스킹(Bitmasking) 또는 조합(Combination) 생성이라고 부른다...

RDB 설정 : SQL Mode

RDB에서 DB 서버가 SQL 구문을 어떻게 해석하고, 유효성 검사의 척도를 지정해줄수 있는 방법이다 1. 많이 사용하는 mode1) STRICT_TRANS_TABELS데이터 타입이 맞지 않거나 범위를 벗어난 값을 입력할 때 에러를 발생시킨다- 꺼진 경우 : 숫자가 데이터 타입의 최대치를 벗어난 경우, 최대치만큼만 저장하고 경고한다-> 해당 모드를 켜야 DB가 값 입력을 거부하고 rollback 한다 2) ONLY_FULL_GROUP_BYGroup by 절을 사용할 때 선택목록에 집계 함수나 Group by에 포함되지 않은 컬럼이 있는 경우 쿼리를 거부한다. SQL 표준 준수를 위한 모드 3) NO_ZERO_DATE / NO_ZERO_IN_DATE0000-00-00 같은 유효하지 않은 날짜의 입력 허용 ..

RDB🗂️ 2026.04.06

03. 26 TIL : 도커의 편리함 깨닫기

쉘 스크립트를 사용해 배포하는 과정에서 온갖 시행착오를 겪었다. 너무 불편하고 신경쓸게 한 두개가 아니더라. 1) 리눅스에서 매번 권한설정하기 : sudo 지옥 2) VPC마다 다른 환경과 경로에 맞춰 설정해야 한다(그나마 단일 VPC 환경에서 작업해서 이 정도지, 여러 개로 늘리는 순간 개 헬일듯) 3) 실행 명령어에 환경 변수 설정이 빠졌는지를 매번 확인해야함-> 도커는 도커파일 또는 compose.yaml에 적어두면 신경쓸 필요가 없다 4) 모든 실행 환경에 필요한 언어 등을 직접 설치해야함 : 말해 뭐해, 최악 도커의 단점은..이미지의 용량이 크다는 것?러닝 커브가 좀 있다는 것 정도인 것 같다. 정말 빡센 경험이다.그래도 이런 경험을 해야하는 이유가 있다. 왜 좋다고 하는지를 몸소 깨달을 수 ..

TIL, WIL/TIL📘 2026.03.27