세션 친화성(Session Affinity)이란, 특정 클라이언트의 요청이 항상 동일한 서버(또는 포드)로 전달되도록 하는 기술입니다. 이는 클라이언트가 세션 동안 동일한 서버에 연결된 상태를 유지하도록 보장하여, 예를 들어 세션 데이터를 서버 측에 저장하는 애플리케이션에서 일관성을 유지할 수 있도록 도와줍니다. 쿠버네티스에서는 서비스의 SessionAffinity 설정을 통해 클라이언트 요청을 동일한 포드로 전달할 수 있습니다.1. 쿠키 기반 세션 (Cookie-based Session)세션 ID가 클라이언트의 브라우저 쿠키에 저장되고, 클라이언트가 서버에 요청할 때마다 해당 세션 ID를 함께 전송합니다.서버 측에서 세션 데이터를 저장하고 관리합니다.장점: 클라이언트 측에 많은 데이터를 저장할 필요가..
모니터mutual exclusion(상호배제)를 보장조건에 따라 스레드가 wait 상태로 전환 가능모니터는 언제 사용할까?한번에 하나의 스레드만 실행돼야 할 때여러 스레드와 협업(cooperation)이 필요할 때구성요소mutex (Mutual Exclusion Object)Critical section(임계영역)에서 mutual exclusion을 보장하는 장치Critical section에 진입하려면 mutex lock을 취득해야 함mutex lock을 취득하지 못한 스레드는 큐에 들어간 후 wait 상태로 전환mutex lock을 쥔 스레드가 lock을 반환하면 대기 중인 스레드 하나가 실행Condition variableWait queue(조건이 충족되길 기다리는 스레드들이 대기상태로 머무르는 곳..
회사에서 사이드 프로젝트(?)로 소소하게 도커를 다룰 일이 있었습니다. 도커 스터디도 하고 컨테이너를 띄우는건 얼추 했지만 Dockerfile을 정의하고 목적에 맞게 도커 이미지를 빌드하는 게 처음이었어서 이번에 알게된 내용들을 간단히 정리합니다. Dockerfile과 docker compose의 관계 Dockerfile : 도커 이미지 빌드를 위한 레시피같은 것 docker compose : 도커파일을 실행하는 커맨드의 집합 (ex. docker run, docker build를 한꺼번에 하는 역할) 컨테이너 IP 각 컨테이너에는 독립된 랜덤 IP가 부여된다. 이 ip는 컨테이너를 띄울 때마다 바뀌는 것 같다. docker inspect {container_name} 명령어로도 확인 가능 (JSON데이..
CQRS 패턴이란? Command Query Responsibility Segregation : 명령(Command)과 질의(Query)의 책임을 분리하는 패턴 Command 명령 시스템 데이터 변경 (ex. 주문 취소, 배송 완료) create, update, delete Query 질의 시스템 데이터 조회 (ex. 주문 목록, 상품 상세) read Responsibility 책임 구성요소의 역할 구성 요소 (모델) 클래스, 함수 모듈/패키지 웹서버/DB 분리 Segregation 역할에 따라 구성요소 나누기 명령과 질의에 단일 모델을 사용할 경우 코드 역할/책임 모호 요구사항이 늘어가면서 Member객체에 주문테이블, 로그인 히스토리 테이블 등과의 결합도가 증가 의미/가독성 등 나빠짐 유지보수성 떨어..
Linux의 경우 page cache, buffer cache, file cache구조가 있습니다. 가상 메모리 프로세스에서 메모리를 다루기 쉽게 하는 이점을 제공 OS가 커널에서 메모리를 추상화함 페이지 : OS가 물리 메모리를 확보/관리하는 단위. 가상 메모리의 최소 단위 리눅스의 페이지 캐시 원리 커널이 한 번 할당한 메모리를 해제하지 않고 계속 남겨두는 것이 페이지 캐시의 기본입니다. 캐싱 과정 디스크의 내용을 일단 메모리에 읽어 들인다 : 페이지가 작성된다 작성된 페이지는 파기되지 않고 메모리에 남는다 : 페이지 캐시 예외의 경우를 제외하고 모든 I/O에 투과적으로 작용한다. (디스크의 캐시를 담당하는 곳 - VFS) 리눅스는 메모리가 비어있으면 거의 다 캐싱하는 데에 메모리를 사용합니다. 그 ..
CPU bound 부하 프로그램 처리 속도가 CPU에 의해 좌우되어 디스크의 입출력은 없지만 CPU의 계산 속도에 의존하고 있기 때문에 CPU에서 발생하는 부하입니다. 과거 제가 API 서버에 엑셀 다운로드 기능을 구현했다가 약 7만 건의 데이터로 엑셀 파일을 만드는 과정에서 CPU 부하가 생겨 서버가 프리징 됐던 경험이 있는데요, 이것도 CPU 바운드 부하라고 볼 수 있을 것 같습니다. IO bound 부하 프로그램의 처리 속도가 CPU가 아닌 디스크의 읽기 쓰기 속도, 즉 입출력에 의존하기 때문에 생기는 부하입니다. 디스크에 저장된 대량의 데이터에서 임의의 문서를 찾아내는 검색 프로그램이나 DB서버를 예로 볼 수 있습니다. 디스크는 메모리 보다 느리다 디스크는 물리적인 이동이 수반되므로 메모리 대비 ..
클라이언트-서버간 양방향 통신 HTML5에서 많이 사용된다 다양한 브라우저에서 웹소켓 프로토콜을 지원한다 특징 양방향 통신 서로 원할때 데이터를 주고받는다 실시간 네트워킹 채팅, 주식, 비디오 데이터 등 연속된 데이터를 빠르게 노출 여러 단말기에 빠르게 데이터 교환 웹소켓 이전의 비슷한 기술 - 폴링, 롱폴링, 스트리밍 → HTTP 통신이므로 req, res 둘 다 Header가 불필요하게 크다 폴링 서버로 일정 주기로 요청을 계속 송신 롱 폴링 (long polling) 폴링의 개선 버전 서버에 요청 보내고 응답 받을 때까지 커넥션을 유지함 응답 받고면 끊고 다시 요청 많은 양의 메세지가 쏟아질 경우 폴링과 같아짐 스트리밍 서버에 요청을 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신 클라이언트에..
최근 MSA에 관심이 생겨 이것저것 아티클을 보다가 좋은 블로그 포스팅 시리즈를 발견하였습니다. 그냥 흘려보내기가 아까워 보면서 메모를 했는데, 같이 공유하면 좋을 것 같아 포스팅합니다. 자세한 내용은 아래 블로그를 참고해주세요. https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e
- Total
- Today
- Yesterday
- docker
- 도커
- 백엔드
- 리눅스 컨테이너
- springboot
- pods
- laravel 테스트
- java
- database
- php
- laravel 테스트코드
- k8s
- 분산처리
- MySQL
- 대규모 데이터 처리
- devops
- phpUnit
- 샤드
- mockery
- kubernetes
- mongoDB
- 라라벨
- 몽고디비
- 주니어개발자
- 샤딩
- 쿠버네티스
- redis
- index
- laravel
- NoSQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |