본문 바로가기

728x90

분류 전체보기

(138)
[나의 무지] 🤯 Spring RequestBody와 Static Inner Class: 오해와 진실 실무 코드를 보다가 Controller의 RequestBody 클래스 안에 static inner class가 정의되어 있는 것을 봤다.처음에는 “이 static 클래스 안의 프로퍼티들도 HTTP 요청에서 그대로 받을 수 있겠구나”라고 생각했다... (그래서 특정 api의 mandatory 요청 값들이 static 클래스 안의 프로퍼티들도 포함한다는 크나큰 오해를 하게 되었다.) 하지만 실제로는 그렇지 않았던 것이다..왜 그렇게 오해했을까?public class OuterRequest { private String outerField; public static class Inner { private String innerField; }}OuterRequest 안에 Inner라..
🐳 Docker Compose 구축하면서 부딪혔던 문제점들 이번 포스팅에서는 회사에서 가상환경을 띄우기 위해 Docker Compose 파일을 작성하면서 배우고 겪었던 Docker 관련 지식들을 정리하려고 한다. 회사에서는 이미 개발 서버용 Docker Compose 환경이 구축되어 있었다. 즉, 개발한 서버를 컨테이너로 띄워 로컬에서 테스트 및 개발할 수 있는 환경이었다. (테스트는 서버가 띄어져 있어야 가능한 테스트였다.)하지만 어느 순간부터 이 Docker Compose 환경이 제대로 관리되지 않았고, 서버를 컨테이너로 띄워 테스트를 진행하는 것이 점점 어려워졌다. 결국 테스트를 하려면 로컬에서 서버를 싱행하고, 테스트 코드를 수동으로 수정하고 (주석 처리, 환경 세팅 등), 로컬에서 테스트 메인 함수를 실행해야만 integration test가 가능했다...
[회사에서 있었던 일] 함수형 스타일로 개발하라? 오늘 회사에서 코드를 작성하다가 리뷰를 받았습니다.선배님이 제 코드를 보시고 이렇게 말씀하셨어요."함수형 스타일로 작성했으니 다른 부분도 일관성 있게 함수형 스타일로 작성하는 게 어떻겠냐"엥? 함수형 스타일이 뭐지? 😅 내가 아는 함수형은 자바 stream 처럼 선언형으로 코드를 작성하는 건데... 대충은 알고 있었지만, 막상 코드와 비교해보니 조금 혼란스러웠습니다. 제가 개발한 부분은 코드1과 같이 가변 객체를 직접 수정하는 방식 이었는데, 코드2처럼 불변 객체를 생성하여 반환하는 방식 으로 바꾸었던 겁니다.코드 1: 가변 객체 스타일class BankAccount(var balance: Int) { fun deposit(amount: Int) { balance += amount ..
Kubernetes - Readiness probe vs Liveness probe Kubernetes에서 애플리케이션 안정성과 트래픽 관리를 위해 Probe는 필수 기능입니다. 왜냐하면 Probe는 컨테이너의 상태를 주기적으로 점검하여, 정상 동작 여부와 트래픽 수신 가능 여부를 판단하는 매커니즘이기 때문이죠. 이를 통해 Pod가 트래픽을 받을 준비가 되었는지, 지금 Pod의 상태가 정상적인지, Kubernetes가 컨테이너 상태를 자동으로 감시하고, 필요 시 조치를 취할 수 있게 도와주죠. Probe에는 Liveness Probe와 Readiness Probe 이렇게 두 가지 종류가 있는데요, Liveness Probe와 Readiness Probe는 비슷해 보이지만, 목적과 동작 방식이 완전히 다릅니다. 이번 포스팅은 이들의 차이점과, 왜 두 개의 probe 가 꼭 필요한지 정리..
Kubernetes - 서비스 port 와 ingress 쿠버네티스에서 애플리케이션을 운영하면 끊임없이 변화하는 pod의 IP 주소를 지정하여 트래픽을 라우팅하기가 어렵습니다. 불안정한 pod IP 주소를 직접 사용하는 대신, 쿠버네티스는 서비스 라는 추상화된 개념을 제공하는데요,이를 통해 애플리케이션에 대한 안정적인 네트워크 접근 지점을 제공하여 pod IP 주소 변경에 영향을 받지 않고 외부/내부 클라이언트가 애플리케이션에 안정적으로 접근할 수 있게 됩니다. 그 외에 서비스는 아래 기능을 가집니다.수평 스케일링: 파드의 수를 늘리는 수평 스케일링을 수행하여 로드 밸런싱 역할을 할 수 있습니다.서비스 디스커버리: 애플리케이션 내의 여러 서비스가 서로 통신해야 하는 경우, 각 서비스의 IP 주소를 하드코딩하는 것은 매우 비효율적인데요, 서비스 디스커버리를 통해..
Kubernetes - Cluster 란? (node와 pod와의 관계) 1️⃣ 클러스터란 무엇인가?정의: 쿠버네티스가 관리하는 전체 환경구성: 마스터 노드(Control Plane) + 워커 노드(Worker Node) + Pod비유: 회사 전체 = 클러스터, 건물 = 노드, 사무실 = Pod, 직원 = 컨테이너2️⃣ 마스터 노드의 역할두뇌 역할: Pod 배치, 상태 관리, 스케일링, 장애 복구HA 구성: 운영 환경에서는 보통 3개 이상관리 범위: 스케줄러, 컨트롤러, API 서버, etcd한 줄 정의: "클러스터 두뇌, Pod 배치와 상태 유지 담당"3️⃣ 워커 노드와 Pod워커 노드: 실제 Pod가 실행되는 서버Pod: 최소 배포 단위, 하나 이상의 컨테이너 포함리소스: 노드마다 CPU/메모리가 다를 수 있음 → 스케줄러가 배치 결정4️⃣ Namespace정의: 클러스터..
🚦 대규모 시스템 설계 기초 1권 – 6장: 키-값 저장소 설계 이번 포스팅은 『가상 면접 사례로 배우는 대규모 시스템 설계 기초 1권』 6장을 공부하며 배웠던 개념들에 대하여 정리하였습니다.해당 장에서는 데이터 관리를 여러 노드에 복제한 분산 시스템으로 설계하고 있는데요, 이때 자연스럽게 발생하는 문제들이 있습니다. 바로 데이터 불일치, 정합성 문제, 동기화 지연 등압나다.『가상 면접 사례로 배우는 대규모 시스템 설계 기초 1권』의 6장은 이런 상황에서 어떤 기술들이 실제로 사용되는지를 설명해주고 있어 공부하면서 궁금했던 개념들을 정리해 보았습니다.🧠 분산 시스템을 이해하기 위한 핵심 개념— 머클 트리, Anti-entropy, 벡터 버저닝까지 우선 머클 트리와 Anti-entropy는 분산 환경에서 특정 노드에 장애가 발생했을 때 일관성이 깨진 데이터에 대하여 ..
🚦 대규모 시스템 설계 기초 1권 – 4장: 처리율 제한 (Rate Limiting) 1. 처리율 제한(Rate Limiting)이란?일정 시간 동안 처리할 수 있는 요청 수를 제한하는 기법입니다.과도한 요청(정상적이든 공격이든)으로부터 시스템 자원을 보호, 안정성 보장API 또는 서비스에 대한 공정한 사용량 배분 가능API abuse, DDoS, 과도한 트래픽 등으로부터 시스템을 보호하는 데 필수적2. 왜 Rate Limiting이 중요한가?✅ 서버 과부하 방지✅ 악의적 사용자/버그로 인한 폭주 대응✅ 비용 관리 (클라우드 API 호출 등 과금 최소화)✅ 서비스 품질(QoS) 유지 및 SLA 보장✅ 공정성 (특정 사용자 독점 방지)3. 처리율 제한 알고리즘1️⃣ Token Bucket (🌟실무 인기)일정 속도로 토큰을 생성하여 버킷에 채우고, 요청 시 토큰을 하나 씩 소모토큰이 있으면..

728x90
반응형