728x90

All 193

헥사고날 아키텍처(Hexagonal Architecture)_ 추가 수정 필요

1. 헥사고날 아키텍처 란? 헥사고날 아키텍처(Hexagonal Architecture)는 소프트웨어 설계 패턴 중 하나로, 시스템을 다양한 모듈로 나누어 유지보수성과 확장성을 높이기 위해 고안된 구조입니다. 2005년 Alistair Cockburn에 의해 제안되었으며,포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 불립니다.2. 주요 개념헥사고날 아키텍처의 주요 개념은 애플리케이션 코어를 외부 시스템과의 의존성에서 분리하는 것입니다. 이를 통해 시스템 내부 로직과 외부 인터페이스가 느슨하게 결합되어 변경에 유연하게 대응할 수 있습니다. 이 구조는 애플리케이션의 핵심 비즈니스 로직이 외부의 세부 사항에 의존하지 않고, 포트와 어댑터를 통해 외부와 통신합니다. 3...

BackEnd 2024.08.27

롤링 배포 (Rolling Deployment) vs 블루-그린 배포 (Blue-Green Deployment) vs 카나리 배포 (Canary Deployment)

1. 롤링 배포 (Rolling Deployment)설명:점진적 업데이트: 전체 시스템을 동시에 업데이트하지 않고, 시스템의 일부 인스턴스에서만 새 버전을 점진적으로 배포합니다.작업 방식: 기존 인스턴스를 하나씩 교체하면서 새로운 버전을 배포하고, 전체 시스템이 새 버전으로 완전히 전환될 때까지 계속됩니다.장점:무중단 배포: 전체 시스템이 항상 운영 중이므로 서비스 중단 없이 배포할 수 있습니다.리소스 효율적: 한 번에 전체 시스템을 업데이트할 필요가 없으므로 리소스를 절약할 수 있습니다.단점:상태 불일치: 새로운 버전과 기존 버전이 동시에 운영되기 때문에, 버전 간의 호환성 문제를 주의해야 합니다.문제 발견 시 롤백 어려움: 문제가 발생하면 이미 업데이트된 인스턴스와 업데이트되지 않은 인스턴스가 혼재하..

Server 2024.08.26

[Linux] Kill 명령어 옵션

Kill 명령어옵션 숫자는 특정 신호 번호를 나타내며, 프로세스에게 보내는 신호의 종류를 결정합니다.몇 가지 주요 신호와 그 의미는 다음과 같습니다:1 (SIGHUP): 프로세스를 종료하고 재시작하도록 요청합니다. 주로 설정 파일이 변경되었을 때 다시 읽도록 하기 위해 사용됩니다.2 (SIGINT): 인터럽트 신호로, Ctrl+C를 눌렀을 때와 동일합니다. 프로세스를 종료합니다.9 (SIGKILL): 강제 종료 신호입니다. 프로세스가 이 신호를 무시할 수 없으며, 즉시 종료됩니다. SIGTERM으로 종료되지 않는 프로세스를 강제로 종료할 때 사용됩니다.15 (SIGTERM): 기본 종료 신호입니다. 프로세스에 정상적인 종료를 요청하며, 프로세스가 이 신호를 처리할 수 있습니다.18 (SIGCONT): 일..

ETC 2024.08.22

[MySql] 성능 개선에 관하여_해결 해 보자_2_경험

https://raconer.tistory.com/entry/MySql-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC%ED%95%B4%EA%B2%B0-%ED%95%B4-%EB%B3%B4%EC%9E%901explain [MySql] 성능 개선에 관하여_해결 해 보자_1_explainExplainSql문 성능 개선에 빠질수 없는 것 들 중 하나인 Explain 쿼리를 한번 확인해 볼려고 한다.컬럼 과 설명id쿼리의 각 부분을 식별하는 고유 번호입니다.서브쿼리나 UNION이 있을 경우 여러 id가 있raconer.tistory.com경험에 따른 Query 튜닝1. Index 설정 확인질문.1예)Mysql 에서 Index 설..

DB 2024.08.22

[MySql] 성능 개선에 관하여_해결 해 보자_1_explain

ExplainSql문 성능 개선에 빠질수 없는 것 들 중 하나인 Explain 쿼리를 한번 확인해 볼려고 한다.컬럼 과 설명id쿼리의 각 부분을 식별하는 고유 번호입니다.서브쿼리나 UNION이 있을 경우 여러 id가 있을 수 있으며, 값이 클수록 실행 순서가 나중입니다. select_type쿼리의 유형을 나타냅니다. 주요 값은 다음과 같습니다:SIMPLE단순 SELECT 쿼리 (서브쿼리 없음)PRIMARY쿼리의 가장 바깥쪽 SELECT 쿼리UNIONUNION 연산자에서 두 번째 이상의 SELECT 쿼리SUBQUERY서브쿼리의 SELECT 쿼리DERIVED서브쿼리의 결과를 임시 테이블로 사용하는 쿼리table쿼리에서 접근하는 테이블의 이름입니다.partitions파티셔닝된 테이블을 사용하는 경우, 참조하는..

DB 2024.08.06

[MySql] 성능 개선에 관하여_고찰

성능 개선그동안 데이터가 적은 회사를 다녔기 때문에 DB 쿼리 성능에 대해 크게 신경을 쓰지 않았던 것 같다. 하지만 데이터가 많아짐에 따라 쿼리 성능 개선은 필수적이며, 서버 관리에 있어 가장 중요한 지식이 되는 것 같다. 예전에는 서비스 부하를 줄이는 방법에 대해 고민했지만, 실제로는 DB 부하를 줄이는 것이 서비스 성능을 눈에 띄게 개선하는 데 더 효과적이라는 것을 알게 되었다. 따라서 DB의 부하를 줄일수록 서비스 성능이 가장 빠르고 효과적으로 개선된다고 생각한다."데이터가 많을때를 경험해 본적없으니...."  앞으로 앞의 글이 많이 보일꺼다. 변명을 하는게 아니다 내가 놓치고 있던거에 대해 뇌에 각인 시키는 것이다. 그동안 "DB 부하는 Redis, Message Queue를 사용해서 부하를 줄..

DB 2024.08.06

[Redis] 성능과 가용성

클러스터를 사용할 때의 성능 클라이언트가 MOVED 에러에 대해 재요청을 해야하는 문제 클라이언트(라이브러리)는 key-node 맵을 캐싱하므로 대부분의 경우 발생하지 않음 클라이언트는 단일 인스턴스의 REdis를 이용할때 와 같은 성능으로 이용 가능 분산 시스템에서 성능은 데이터 일관성(Consistency)과 trade-off가 있음 Redis Cluster는 고성능의 확장성을 제공하면서 적절한 수준의 데이터 안정성과 가용성을 유지하는 것을 목표로 설계 클러스터의 데이터 일관성 Redis Cluster는 Strong consistency를 제공하지 않음 높은 성능을 위해 비동기 복제를 하기 때문 클러스터의 가용성 - auto failover 일부 노드(master)가 실패(또는 네트워크 단절) 하더라..

DB 2024.03.26

[Redis] 확장성과 가용성을 위한 클러스터_뭔 말 인지 모르겠다.

클러스터를 사용할 때의 성능 클라이언트가 MOVED에러에 대해 재요청을 해야 하는 문제 클라이언트(라이브러리)는 Key-Node 맵을 캐싱하므로 대부분의 경우 발생하지 않음 클라이언트는 단일 인스턴스의 Redis를 이용할 때와 같은 성능으로 이용가능 분산 시스템에서 성능은 데이터 일관성(Consistency)과 trade-off가 있음 Redis Cluster는 고성능의 확장성을 제공하면서 적절한 수준의 데이터 안정성과 가용성을 유지하는 것을 목표로 설계 클러스터의 데이터 일관성 Redis Cluster는 Strong Consistency를 제공하지 않음 높은 성능을 위해 비동기 복제를 하기 때문 클러스터의 가용성 - auto failover 일부 노드(Master)가 실패(또는 네트워크 단절) 하더라도..

DB 2024.03.18

[Redis] Redis Cluster 데이터 분산과 Key 관리_뭔 말 인지 모르겠다.

데이터를 분산하는 기준 특정 key의 데이터가 어느 노드(shard)에 속할 것인지 결정하는 메커니즘이 있어야 함 보통 분산 시스템에서 해싱이 사용됨 단순 해싱으로는 노드의 개수가 변할 때 모든 매핑이 새로 계산 되어야 하는 문제가 있음 Hash Slot을 이용한 데이터 분산 Redis는 16384개의 Hash Slot으로 key 공간을 나누어 관리 각 키는 CRC16해싱 후 16384로 modulo연산을 해 각 hash slot에 매핑 hash slot은 각 노드들에게 나누어 분배됨 클라이언트의 데이터 접근 클러스터 노드는 요청이 온 key에 해당하는 노드로 자동 redirect를 해주지 않음 클라이언트는 MOVED 에러를 받으면 해당 노드로 다시 요청해야 함

DB 2024.03.12

[Redis] Redis Cluster

확장성이란? 소프트웨어나 서비스의 요구사항 수준이 증가할 때 대응할 수 있는 능력 주로 규모에 대한 확장성을 뜻함(데이터 크기, 요청 트래픽 등) 수직 확장(Scale-up)과 수평 확장(Scale-out)이 사용됨 수평 확장(Scale-Out) 처리 요소(ex: 서버)를 여러개 두어서 작업을 분산 무중단 확장이 가능 이론적으로는 무한대로 확장이 가능 분산 시스템에 따라오는 문제 부분 장애 네트워크 실패 데이터 동기화 로드밸런싱(또는 Discovery) 개발 및 관리의 복잡성 분산 시스템의 적용 분산 시스템으로 인한 trade-off 를 판단해서 적합하다면 사용 서비스 복잡도와 규모의 증가로 분산은 피할수 없는 선택 분산 시스템의 구현체들은 세부적인 부분에서 튜닝이 가능하게 옵션이 제공됨 즉. 분산 시스..

DB 2024.03.12
728x90