Spring
-
[캐시 & 동시성 & Lock] 선착순 티켓 시스템 고도화 - 1
2024.09.27 - [Spring/동시성 & Lock] - [Spring] synchronized 키워드를 활용한 동시성 문제 해결 및 한계 - 3 [Spring] synchronized 키워드를 활용한 동시성 문제 해결 및 한계 - 32024.09.25 - [Spring] - [Spring] synchronized 키워드를 활용한 동시성 문제 해결 및 한계 - 2 [Spring] synchronized 키워드를 활용한 동시성 문제 해결 및 한계 - 22024.09.22 - [Spring] - [Spring] synchronized 키워드를 활hdbstn3055.tistory.com 우리는 위 포스팅에서 `PESSIMISTIC_WRITE`의 `Database Lock`를 활용해 동시성 문제를 해결했다..
2024.11.19
-
[성능 테스트] 성능 테스트 리팩토링
성능 테스트 리팩토링 - 아키텍처스케일 아웃(Scale-Out)AWS 로드 밸런서를 사용하여 애플리케이션을 여러 서버로 분산트래픽을 균형있게 분배하고 고가용성을 제공하는 데 도움을 줌분산 시스템 아키텍처마이크로서비스 아키텍처를 고려하여 각 부분을 독립적으로 스케일 아웃하고 확장성 제공서버 리소스 최적화서버 리소스(`CPU`, `메모리`, `디스크`)를 최적화하고 운영체제 및 웹 서버 설정을 튜닝 성능 테스트 리팩토링 - 어플리케이션캐싱 활용게시글 목록, 사용자 프로필, 이미지 등 자주 접근하는 데이터 캐시`Ehcache`, `Redis`, 또는 기타 캐싱 솔루션을 사용한 성능 향상 가능비동기 프로그래밍Spring의 비동기 서비스 및 메시징을 활용해 요청과 응답을 병렬로 처리병목 현상 완화알고리즘 및 ..
2024.11.19
-
[성능 테스트] Locust 활용
Python 코드import randomimport jsonfrom locust import HttpUser, task, betweenfrom datetime import datetime, timedeltaclass StressTest(HttpUser): wait_time = between(1, 2) @task def view_popup_list(self): # 랜덤 데이터 생성 name = f"테스트 팝업 {random.randint(1, 1000)}" category = random.choice(["BAKERY", "CAFE", "FASHION", "GOODS", "BAR", "RESTAURANT", "EXHIBITION"]) star..
2024.11.19
-
[성능 테스트] 성능 테스트 툴
성능 테스트 툴 종류 Locust 장점Python 언어로 개발되어 사용자 정의 가능한 스크립트 작성에 용이분산된 테스트를 지원하며, 테스트 시나리오를 프로그래밍하여 동적인 부하 생성이 가능웹 기반 대시보드를 통해 실시간 결과 모니터링이 가능단점분석 및 보고 기능이 제한적이며, 다른 도구에 비해 고급 분석 능력이 부족할 수 있다.복잡한 시나리오와 대규모 테스트에서 성능이 제한 Apache JMeter 장점다양한 프로토콜 및 응용 프로그램 테스트를 지원대규모 테스트 및 복잡한 시나리오에 적합다양한 플러그인을 활용한 확장이 가능단점사용자 인터페이스가 다소 복잡초기 설정 및 스크립트 작성이 다른 도구에 비해 어려움 Gatling 장점Scala 언어를 사용하여 사용자 정의 가능한 시나리오를 구성비동기 작업 및..
2024.11.18
-
[성능 테스트] 성능 테스트란
성능 테스트란성능 테스트는 해당 어플리케이션의 성능, 확장성 및 안정성을 평가하는 과정을 나타낸다. 이러한 테스트는 어플리케이션의 부하 처리 능력, 응답 시간, 처리량 및 자원 사용량과 같은 성능 관련 지표를 측정하여어플리케이션이 예상된 작업 부하 아래에서 어떻게 수행되는지 이해하는 데 도움을 준다. 성능 테스트 종류 스트레스 테스트(Stress Test)스트레스 테스트(부하 테스트)는 어플리케이션을 최대 부하에서 테스트하는 과정을 의미이 테스트에서는 어플리케이션의 성능 한계를 확인하고 어플리케이션의 부하 처리 능력을 평가대량의 동시 사용자 또는 트랜잭션을 생성하여 어플리케이션의 응답 시간과 자원 사용량을 모니터링스트레스 테스트에서 어플리케이션이 어떻게 실패하는지, 예를 들어 응답 시간이 급격하게 증가..
2024.11.18
DB
-
[MongoDB] MongoDB란?
이번에 혼자 `WebSocket`, `SockJS`, `STOMP`에 관해 학습을 진행하며 채팅 서비스를 개발하는 것을 목표로 정했다. 이때 채팅 메시지에 관한 영구 저장소를 선택하기 위해 고민을 했는데 처음 떠오르고 선택하게 된 것은 `MongoDB`이다.대부분?의 사람들이 알고 있듯 채팅하면 `MongoDB`라는 말은 많이 들었을 것이다.하지만, 알고만 있고 그 이유는 특별하게 몰랐다. 또한, 여태까지 `NoSQL` DB는 `Redis`만 사용해왔기에 `MongoDB`는 새로운 접근이였다. 그래서 `MongoDB`에 관해 알게 된 내용들을 정리하려 한다. MongoDB란?`MongoDB`는 문서 지향적인 `NoSQL` 데이터베이스로, 대량의 비정형 데이터를 저장하고 처리하는 데 사용된다. 문서 지향..
2024.11.09
-
[Redis] Redis 야무지게 사용하기
Redis 캐시로 사용하기 What is Caching?Temporary Location For Speed데이터의 원래 소스보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소 `캐시`란 사용자의 입장에서 데이터의 원래 소스보다 빠르게 효율적으로 액세스 할 수 있는 임시 저장소를 말한다.대부분의 애플리케이션에서 속도 향상을 위해 `캐시`를 사용한다. 일단 이 `캐시`를 효율적으로 접근하기 위한 조건은 다음과 같다.원본 보다 빠른 접근 속도같은 데이터 반복적 액세스(즉, 데이터 액세스 횟수가 1번 이상이여야 의미가 있음)변하지 않는 데이터 Redis as a cache Most popular software caching solution단순한 key-value 구조In-memory 데이터 저장소..
2024.09.20
-
[Redis] 레디스는 무엇일까?
Redis 소개레디스(Redis)는 메모리 기반의 데이터 저장소이다. 키-밸류(key-value) 데이터 구조에 기반한 다양한 형태의 자료 구조를 제공하며,데이터들을 저장할 수 있는 저장소이다. 최신 버전의 레디스는 PUB/SUB 형태의 기능을 제공하여 메세지를 전달할 수 있다. 즉, 데이터 저장 뿐만 아니라 다양한 목적으로 사용할 수 있다. 레디스는 메모리에 데이터를 저장하기 때문에 저장 공간에 제약이 있어, 주로 보조 데이터 저장소로 사용한다. 이를 극복하기 위한 레디스 클러스터 기능도 제공하고 있어 저장 공간을 확장할 수 있다. 또한, 저장된 데이터를 영구적으로 디스크에 저장할 수 있는 백업 기능을 제공하므로 애플리케이션의 주 저장소로도 사용할 수 있다. 또한, 메모리에 데이터를 저장하기 때문에 빠..
2024.09.20
Infra
-
분산 시스템에서 데이터를 전달하는 효율적인 방법 - 2
2024.09.19 - [Infra/DevOps] - 분산 시스템에서 데이터를 전달하는 효율적인 방법 - 1 분산 시스템에서 데이터를 전달하는 효율적인 방법 - 1이번 포스팅에서는 NHN 유튜브의 분산 시스템에서 데이터를 전달하는 효율적인 방법 강의를 보고 정리한 내용이다. 포스팅에서 다룰 내용데이터 전달 보장 방법론RDB를 사용하는 애플리케이션hdbstn3055.tistory.com 이전 글과 이어지는 내용이다. 우리는 앞서 RDB를 사용하는 애플리케이션에서 전달 방법을 알아보았다. 이번 포스팅에서는 RabbitMQ를 사용한 전달 방법과 Kafka를 사용한 전달 방법에 관해 알아본다. RabbitMQ를 사용한 전달 방법RabbitMQAMQP(Advanced Message Queuing Protoco..
2024.09.20
-
분산 시스템에서 데이터를 전달하는 효율적인 방법 - 1
이번 포스팅에서는 NHN 유튜브의 분산 시스템에서 데이터를 전달하는 효율적인 방법 강의를 보고 정리한 내용이다. 포스팅에서 다룰 내용데이터 전달 보장 방법론RDB를 사용하는 애플리케이션에서 전달 방법RabbitMQ를 사용한 전달 방법Kafka를 사용하는 애플리케이션의 전달 방법 분산 시스템이란?목표를 달성하기 위해 여러 개의 컴퓨터 리소스를 사용하는 시스템시스템은 두 개 이상의 컴포넌트로 구성되어 있다.엔터프라이즈 애플리케이션마이크로 서비스 아키텍처 애플리케이션모놀리식 아키텍처 애플리케이션 + 검색엔진네트워크를 사용하여 컴포넌트 간의 기능을 통합분산 시스템은 네트워크를 사용한다는 것이 특징 데이터를 전달하는 방법Remote APIMessageQueue 1. Remote API를 사용한 데이터 전달서버-..
2024.09.19
-
[Kubernets] Replication Controller, ReplicaSet - Template, Replicas, Selector
Kubernetes 이번 포스팅에서는 컨트롤러에 대해 알아볼 것이다. `Kubernetes`의 컨트롤러는 여러 기능을 통해 서비스를 관리하고 운영하는데 큰 도움을 준다. Auto Healing노드 위에 `Pod`가 있는데 해당 `Pod`가 갑자기 다운되던가 아니면 해당 `Pod`가 스케줄링 되어있는 노드가 다운되면해당 `Pod`에서 돌아가던 서비스에 장애가 온 것이다.이때, `Controller`는 이걸 즉각적으로 인지하고 `Pod`를 다른 노드에 새로 만들어준다.이걸 `Auto Healing` 기능이라고 한다. Auto Scaling`Pod`의 리소스가 리미트 상태가 됐을 때 `Controller`는 이 상태를 파악하고 `Pod`를 하나 더 만들어준다.즉, 부하가 분산되며 `Pod`가 죽지 않도록 ..
2024.09.05
-
[Kubernetes] Namespace, ResourceQuota, LimitRange
Kubernetes 이번 포스팅에서는 `Namespace`, `ResourceQuota`, `LimitRange`에 관해 알아보려 한다. 우선, 해당 오브젝트들을 왜 사용해야 되는지 먼저 알아보자. `Kubernetes` 클러스터 안에는 사용할 수 있는 자원들이 존재한다. 일반적으로는 메모리나 CPU가 있을 것이다. 클러스터 안에는 여러 `Namespace`들이 존재하며 `Namespace` 안에는 여러 `Pod`가 생성이 가능하다. 각 `Pod`는 필요한 자원을 클러스터 자원을 공유해서 사용하는데,만약 한 `Namepsace` 안에 있는 `Pod`가 이 클러스터에 남은 자원을 모두 사용해 버리면 다른 `Pod` 입장에서는더 이상 쓸 자원이 없어서 자원이 필요할 때 문제가 발생한다. 이런 문제를 해결..
2024.09.04
-
[Kubernetes] ConfigMap, Secret - Env, Mount
Kubernetes 이번 포스팅에서는 `ConfigMap`과 `Secret`에 관한 설명이다. 설명하기에 앞서 해당 오브젝트를 사용해야 하는 상황은 어떤 경우일까? 개발 환경과 상용 환경이 있다고 하자.또한, A라는 서비스가 있다고 가정하자. 이때, A 서비스에는 일반 접근과 보안 접근이 가능하다. A 서비스(개발 환경)SSH: FalseUser: DevKey: LS0tLs... 따라서, 개발 환경에서는 해당 보안 접근을 해제할 수 있는 옵션이 있다.(`SSH : False`)만약, 보안 접근을 한다면 접근 유저와 키를 세팅할 수도 있다.(`User: Dev`, `Key: LS0tLs`) 개발 환경에서는 위처럼 사용한다고 하고, 상용 환경에서 배포를 해야 한다면 해당 값은 변경되어야 할 것이다. A ..
2024.09.02