Base Policy

BASE 원칙 BASE원칙은 설계 철학 중 하나로, 분산 시스템 내에서 데이터 일관성을 완화하면서도 가용성과 성능을 극대화하기 위한 것이다. 이는 ACID원칙과는 대조적으로, 대규모 분산 시스템(특히 NoSQL)에서 자주 적용된다. BASE는 다음 세 가지 핵심 개념의 약자이다. Basically Available Soft State Eventually Consistent 아래에서 조금 더 자세히 살펴보자. Basically Available 시스템이 항상 가용성을 유지하며, 일부 노드나 부분적인 장애가 발생하더라도 대부분의 요청에 대해 응답 가능해야함을 의미한다. 네트워크 장애나 서버 장애가 시스템의 완전한 중단을 초래하지 않음....

November 23, 2024

CAP & Consistency Model

CAP이론과 일관성 모델 CAP이론은 분산 시스템에서 다음 세 가지 속성을 동시에 만족할 수 없음을 설명한다. 일관성: 모든 노드가 같은 데이터를 반환함. 가용성: 모든 요청이 응답 받을 수 있음. 네트워크 분할 허용: 네트워크 장애에도 시스템이 동작함. 분산 시스템 설계자는 이 중 두 가지를 선택해야 하고, 선택에 따라 적합한 일관성 모델을 결정해야한다. CP(Consistency & Partition Tolerance) 강한 일관성을 유지하지만 일부 요청이 거부될 수 있음 (Zookeeper) 데이터의 정확성과 신뢰성이 중요한 곳에서 적합하다. 특히 금융 시스템에서 쓰인다....

November 23, 2024

Consistency Model

Consistency Model 분산 컴퓨팅에서 일관성 모델은 분산 시스템 내 데이터의 일관성을 유지하기 위한 규칙과 매커니즘을 정의해둔 것이다. 이는 분산 환경에서 데이터가 여러 노드에 걸쳐 저장되고 처리되는 상황에서 발생 가능한 데이터의 불일치를 해결하거나 최소화하기 위한 것이다. 분산 시스템의 설계는 CAP이론과 같은 제약 속에서 일관성, 가용성, 분할 내성을 균형 있게 고려해야한다. Strong Consistency 모든 클라이언트가 동일한 시점에 동일한 데이터를 보장받는다. 즉, 특정 노드에서 데이터를 업데이트하면 모든 노드가 즉시 해당 변경을 반영하는 모델이다. 데이터의 정확성과 신뢰성이 높다....

November 23, 2024

[Database] Db Block Io

테이블 스캔 방식에 따른 DB Block IO 전략 데이터베이스가 쿼리에서 요구하는 데이터를 검색하기 위해 테이블에 접근하는 방식의 종류는 다양하다. 가장 주요하고 크게는 인덱스를 활용하는지에 따라 갈리고, 인덱스를 어떤 방식으로 스캔할지에 대해서도 종류가 나뉜다. 각 스캔 방식들은 내부 작동 방식에 따라 서로 다른 Block IO 전략을 가지게 되는데, 이러한 내부 작동의 차이를 이해하면 왜 DB가 해당 방식을 사용했는지에 대한 이해도를 높일 수 있다. Block IO 데이터베이스에서 IO를 하는 단위를 Block으로 하기 때문에, DB 엔진에 따라 1회의 IO에서 8KB내지 16KB의 데이터를 불러온다....

November 11, 2024

[Nix] Nix 1

NixOS NixOS 는 리눅스 배포판 중 하나로, 평소 잘 아는 Debian, Red Hat(RHEL) 등과는 별도의 계열을 가지는 배포판이다. Nix 패키지 관리 시스템 을 기반으로 설계되어, 아래와 같은 특성을 가진다. 재현성: 소프트웨어 패키지를 격리된 환경에서 빌드하고, 의존성을 통제해 높은 재현성을 확보한다. 실제 작성 시에도 외부 패키지들의 버전을 세밀하게 기록하여 재현에 차질이 없도록 한다. 선언적: 소프트웨어 패키징에 특화된 선언적 프로그래밍 언어 Nix를 사용한다. 신뢰성: 한 패키지를 업데이트하는 일이 다른 패키지를 망가뜨리지 않도록 보장한다....

November 10, 2024

Intern Review

인턴 기간 진행했던 일들 + 배운 내용과 생각을 정리한다. 기록을 안 하면 큰 줄기만 기억하고 디테일은 까먹을게 뻔하다. Object Storage 리소스 추가 처음 진행했던 일이다. 전반적인 테라폼 프로바이더 프로젝트의 구조를 파악하고, Object Storage에 대한 테라폼 프로바이더를 제공하는 것을 목적으로 했다. 기존과 조금 다른 형태의 코드 작성이 필요했었는데, 그 이유는 아래와 같다. NCP의 Object Storage의 경우 AWS S3 Compatible API를 사용하고 있어 AWS SDK와의 호환성을 확인해야함. VPC 종속의 리소스가 아니어서 기존과 조금 다른 형태로 생성과 삭제를 확인해야함....

October 27, 2024

Serf

Serf 서비스 디스커버리 라이브러리이다. 유명한 서비스들인 Consul, ZooKeeper 등과 비교하였을 때에 더욱 코어한 로직이 담긴 라이브러리이다. 실제로 하시코프에서는 Consul을 서비스하기 위해 내부적으로 Serf를 사용하고 있다. 서프의 큰 특징 중 하나는 중앙 집중식 레지스트리 아키텍쳐를 띄지 않는다는 것이다. 서프를 이용해 서비스되고 있는 Consul의 경우는 중앙 집중식 아키텍쳐를 띄고 있는데, Serf는 그렇지 않음에 유의해서 보면 좋다. Serf는 서비스 디스버리에 포함되는가? Serf가 Consul 등 서비스 디스커버리의 핵심적인 기능들을 포함하는 것은 맞지만, 실제로 서비스 디스커버리 포함된다고 말하기는 어렵다....

October 23, 2024

[Networks] MTLS

mTLS with cfssl NOTE: 개념에 대해 설명하지 않고, 간단한 구현을 진행하는 글입니다. mTLS와 CFSSL에 대해서는 아래 글을 참고해주세요. mTLS: rfc8705 cfssl: cfssl mTLS의 경우는 요 영상을 통해서도 어렵지 않게 접할 수 있다 :) 토스ㅣSLASH 23 - 고객 불안을 0으로 만드는 토스의 Istio Zero Trust 다만 위 영상에서 소개되는 istio의 경우, mTLS를 위한 다양한 기능을 제공하기에 어렵지 않게 프로덕션 환경에서 mTLS를 적용할 수 있다. 이 글에서 진행하는 내용은 istio를 이용한 것은 아니며, mTLS를 위해서 자체 CA를 구축하고, 이를 기반으로 두 애플리케이션이 연결될 수 있도록 하는 것을 목적으로 한다....

October 20, 2024

Log

Logging 로깅은 프로그래밍 전반에 걸쳐 매우 중요하게 여겨지는 요소이다. 실제 핵심적인 로직에 반영되는 것은 아니지만, 안정적이고 에러에 강한 프로그램을 만들기 위해서라면 로그는 분명 필요하다. Why we log 왜 로깅이 필요한지 돌이켜 생각해보면, 컴퓨터가 처음 만들어지는 시대로 돌아가야 한다. 우리는 전기 신호를 통해 특정 연산을 수행하는 작은 장치들을 통해, 인간이 수작업으로 진행해야 했던 일들을 점차 자동화해나가기 시작했다. 그러나 전기 신호는 가시성은 있으나 가독성이 없어, 단순한 전기 신호만으로는 해당 프로그램이 어떤 작업을 수행하고 있는지 파악하기 매우 어렵다....

October 19, 2024

[System Programming] Path & Exec

ls나 cd는 뭔데 그냥 입력해도 동작하나? 예약어의 기원이 궁금해 환경변수 정리 cc: c compiler gcc: gnu compiler collection. GNU 프로젝트의 일환으로 개발되어 쓰이는 컴파일러. 리눅스에서는 gcc가 기본으로, gcc가 자동으로 cc로 연결되어 사용되도록 함. 일반적인 실행파일의 경우, 해당 실행파일이 존재하는 디렉토리에 접근해야 실행 가능하게된다. 일반적인 바이너리 파일을 열게 되면, 다음과 같이 나온다(2진수 포맷). 이렇게 기계어로 정리된 파일을 실행파일로 사용하게 된다. xxd -b binary --- ... 00e625a8: 10111010 01010101 01001111 10110010 11010101 11010110 ....

September 30, 2024