전체 글 8

[SERVER] 자바 기반 서버에서의 "서블릿(Servlet)" 이란?

스프링 서버를 운영하면서, 안들으면 섭섭한 "서블릿"의 개념. 가장 바깥에 있는,, 레이어. 라는 간단한 의미로만 이해하고 있어서 이번 기회에 정리해보아요. ✅  Servlet 이란?- 요청을 처리하고, 응답으로 회신하는 ‘클래스’  - 요청과 응답을 다룸- 주로 HttpSerlvet 클래스를 상속받아 만들어진다.  - Servlet 자체는 doGet, doPost와 같이 HTTP 요청을 지원하는 인터페이스일 뿐! . Http 프로토콜에만 국한된 건 아니다. ✅  Servlet Container 란?- Servlet API 를 구현한 / 독립적인 자바 애플리케이션- 내부에서 Java 로 정의된 서블릿을 로딩하고 실행 [서블릿의 실행 / 관리 담당]- 웹 서버 위에서 실행 중인 앱이 요청을 받으면, 서버는..

공부 2025.04.06

[JVM] 자바의 메모리 영역

자바 가상 머신은 프로그램에 필요한 메모리를 몇 개의 데이터 영역으로 나눠 관리한다.이 메모리 영역은 각각 어떻게 나뉘어져있는지, 어떤 친구들인지 알아보자 thread-private스레드 별로 각각 관리하는 영역프로그램 카운터(PC) 레지스터자바 가상 머신 스택네이티브 메서드 스택shared자바 애플리케이션에서 공유하는 영역자바 힙메서드 영역런타임 상수 풀다이렉트 메모리thread-private ✅ 프로그램 카운터(PC) 레지스터현재 실행 중인 스레드의 바이트 코드 줄 번호 표시기네이티브 메서드를 실행중일 때엔 undefinded 를 가리킨다.✅  스택스택의 형태로 지역 변수, 피연산자, 동적 링크, 메서드 반환값 등의 정보를 저장함.스레드의 메모리 모델을 들고있음[자바 가상 머신] 스택자바 메서드(바이..

공부 2025.03.30

[DB] 동시 쓰기로 인한 충돌, 쓰기 스큐와 팬텀 / Write Skew 와 Phantom

[데이터 중심 애플리케이션 설계 7장. 트랜잭션의 격리 수준 내용을 정리한 내용입니다.] 지난 번 포스트에서는 디비에서 제공하는 격리 수준인 Read Committed 와 Repeatable Read, 그리고 동시 쓰기 시 실행되는 충돌인 Lost Update 현상을 다뤘다.  이번 포스트에서는 이보다 더 미묘한 충돌의 예시인 쓰기 스큐와 팬텀 현상에 대해 알아보고자한다.💥 Write Skew (쓰기 스큐)두 트랜잭션이 두 개의 다른 객체(데이터)를 갱신할 때, 질의 후 갱신 과정에서 전제된 데이터 일관성이 깨지는 현상.  - 각각 다른 데이터에 대한 쓰기/갱신 작업이므로 원자적 operations 로는 해결할 수 없다. (즉,갱신 손실이 아니다.)- 가장 높은 수준의 격리 수준인 "직렬성"을 사용하는..

공부 2025.03.16

[DB] 동시성 문제를 해결하기 위한 트랜잭션 격리 수준 (isolation level) / Read Committed, Repeatable Read 와 lost update

[데이터 중심 애플리케이션 설계 7장. 트랜잭션의 격리 수준 내용을 정리한 내용입니다.] 데이터베이스는 오랫동안 트랜잭션 격리를 제공함으로써 애플리케이션 개발자들에게 동시성 문제를 감추려고 했다.순차 실행을 보장하는 직렬성(serializable) 격리는 비용이 크기 때문에, 완화된 격리 수준을 사용하는 시스템들이 흔하다. 1️⃣ Read Committed가장 기본적인 수준의 트랜잭션 격리 수준.oracle, postgres, mysql 등 대부분의 DB 에서의 기본 격리 수준으로 설정된다. 특징- DB에 커밋된 데이터만 읽을 수 있다. => dirty read 가 없다.- DB에 커밋된 데이터에만 덮어 쓸 수 있다. => dirty write 가 없다. * dirty read란? 아직 commit 되거..

공부 2025.03.09

[JVM] Used, Committed, Max Heap Memory 란

JVM은 메모리를 여러 목적으로 분리해서 사용한다. 크게 Heap, Stack, Native, Direct Memory 로 나눌 수 있는데그 중 애플리케이션 의해서 만들어진 오브젝트를 저장하는 Heap Memory 의 메모리 관리와 관련된 세가지 지표를 알아보자. Max Heap Memory-Xms : heap 의 초기 크기 지정-Xmx : heap의 최대 크기 지정 이 플래그들을 설정하지 않으면, JVM은 OS, RAM, 자체 설정등을 고려한 기본값을 설정한다.heap은 어플리케이션이 구동될 때, 실제 사용하고 있는 값이나 / 디폴트 값과 관계없이 설정해둔 특정한 "초기 사이즈"으로 설정된다.heap 이 차지하는 메모리는 이 max size를 넘어갈 수 없다. *컨테이너 환경에서는 UseContaine..

공부 2025.03.02

[Kubernetes/JVM] 쿠버네티스 팟 안에서 동작하는 자바 프로세스 메모리 설정

쿠버네티스 안에서 동작하는 자바 컨테이너에서 자꾸 OOM kill이 발생한다. 알아서 잘해주겠지 라는 마음이 있었는데 막상 문제가 발생하니 디버깅에 어려움이 있어서,, 공부공부해보자.영어로 된 아티클을 잘 안읽게 되다보니 눈이 침침해져서 해석하면서!  요약- WSS/RSS는 JVM이 사용하는 실제 heap / non-heap 사용량의 합이 아니라 committed heap memory 를 기준으로 측정된다.- G1 GC는 Full GC / concurrenct cycle이 아니면 메모리를 반환(*committed memory)하지 않기 때문에 실제 사용하는 heap/non-heap 양보다 더 높은 WSS/RSS 가 측정될 수 있다.- heap 과 non - heap 사이의 적절한 비율을 설정해야한다.  ..

아티클 2025.02.18

[Kubernetes] 쿠버네티스의 기본 구성 요소, 아주 얇게 훑어보기

쿠버네티스 위에서 서비스를 띄우고 있음에도 쿠버네티스에 대한걸 잘 모르기에 아주 기본 개념만 간단히 정리하기로했다.입에 익은 단어도 있고, 새롭게 알게된 개념도 있고,, 갈길이 아주 멀지만 파이팅!  쿠버네티스 클러스터컨테이너화된 애플리케이션을 실행하는 노드의 집합노드는 Master Node / Worker Node 로 나뉜다.쿠버네티스를 배포 및 실행하면 클러스터를 실행한다는 의미이다.Control Plane (Master Node)전체적인 클러스터 상태를 관리etcd, kube-api-server, scheduler, controller manager 로 구성된다.Node (Worker Node)쿠버네티스 런타임 환경을 제공하고, 팟(Pod, 어플리케이션)을 구동시키는 단위kublet, kube-pr..

공부 2025.02.01

[영상] 11번가 Spring Cloud 기반 MSA로의 전환 - 지난 1년간의 이야기 정리

명강의로 유명한 발표 영상을 보고 내용을 정리해봤다.명강의는 명강의인 이유가 있다. 발표를 진행해주신 용성님, 그리고 이 작업을 진행하셨던 구성원분들처럼 내가 어떤 기술을 어떻게 활용하고 있는지 잘 알고있고, 오픈소스를 두려워하지 않고 사용하는 태도를 많이 배워야겠다 🔥https://www.youtube.com/watch?v=J-VP0WFEQsY 문제 상황2016년 11번가,,초거대 monolitic system200만 라인의 공통 모듈→ 한 번의 배포, 하나의 리팩토링이 전사 장애로 이어지는 경우가 많았다.MSA 분리의 시작legacy / MSA 동시 운영legacy 에서 MSA로 분리된 API 서버 호출토록함 + 플래그 이용해 스위치 가능하도록함.Spring Cloud, Netflix OSS 의 교..

아티클 2025.01.08