본문 바로가기

분류 전체보기

(8)
조회수 - InMemoryDB, 분산락 조회수 요구사항조회수 조회수 어뷰징 방지 정책각 사용자는 게시글 1개 당 10분에 1번 조회수 집계10분동안 100번 조회하더라도, 1번만 집계된다. 1. 조회 수 설계1.1. 데이터 특성조회수는 좋아요 수, 게시글 수, 댓글 수처럼 다른 데이터의 개수로 파생되는 데이터가 아니다. 사용자는 조회 내역을 확인하지 못하므로, 조회수만 보여주면 된다. 즉, 전체 조회수를 단일 레코드에 비정규화하여 저장해도 충분하다. 비정규화 했던 게시글 수/ 댓글 수/좋아요 수와 데이터의 특성을 비교하면 아래와 같다. 데이터 일관성게시글 수/댓글 수/좋아요 수 : 비교적 중요원본 데이터를 통해 개수가 파생되므로, 불일치가 발생하면 안된다. 데이터 불일치가 발생하면 사용자가 인지할 수 있다. 조회수 : 비교적 덜 중요모든 조회..
좋아요 수 설계 - 비정규화, 락 좋아요 수 설계는 아래의 내용을 전제로 한다.좋아요 수는 전체 개수를 실시간으로 빠르게 보여줘야 한다. 좋아요 설계 방향좋아요 수의 전체 개수를 실시간 조회(count)하는데 큰 비용이 든다면, 좋아요가 생성/삭제될 때마다 미리 좋아요 수를 갱신하는 방법이 있다. 좋아요 테이블의 게시글 별로 데이터 개수를 미리 하나의 데이터로 비정규화해두는 것이다. 좋아요 수를 설계하기 위해 좋아요 수의 데이터 특성을 살펴봐야 한다. 이 데이터는 아래와 같은 특성을 가지고 있다고 가정한다. (요구 사항에 따라 적절히 판단)쓰기 트래픽이 비교적 크지 않다.데이터의 일관성이 비교적 중요하다. 쓰기 트래픽이 크지 않고, 데이터 일관성이 중요하다면 RDB의 트랜잭션을 고려해볼 수 있다. 좋아요 테이블의 데이터 생성/삭제와 좋..
일급 컬렉션 ✅일급 컬렉션이란? Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태 public class Orders { private final List orders; // Set, Map public Orders(List orders, int maxOrderCount){ if(orders.size() > maxOrderCount){ throw new RuntimeException(); } this.orders = orders; // this.orders = Collections.unmodifiableList(orders); }} 일급 컬렉션의 장점 비즈니스에 종속적인 자료구조특정 ..
게시글 목록 조회 - 페이지 번호 (with 인덱스) 1. 테이블 설계분산 데이터베이스를 가정하여 아래와 같이 테이블을 설계하였다. N개의 샤드Shard Key : board_id(게시판 ID) 샤드키를 게시판 ID로 잡은 이유는 게시글은 게시판 단위로 조회되기 때문이다. 예를 들어, 개발 게시판에서는 개발 게시글을, 유머 게시판에서는 유머 게시글이 조회되어야 한다. article_id를 샤드 키로 설정하면, 동일한 게시판에 작성된 게시글이 서로 다른 샤드에 저장될 수 있어 모든 샤드를 조회해야 한다. 샤드가 N개인 경우, 게시글 목록을 조회하기 위해 N개의 쿼리를 실행하고 목록을 병합하는 복잡한 처리가 필요하다. 이러한 서비스 특성에 따라 board_id를 샤드 키로 선정하면, 각 게시판의 게시글 목록 조회 시 단일한 샤드에서만 요청이 가능하다. 2. ..
Distributed Relational Database 1. 데이터베이스 확장 : Scale-Up vs Scale-OutScale-Up (수직 확장)개념: DB 서버 자체의 CPU, RAM, Disk 등을 업그레이드장점: 단순 구조, 빠른 대응단점: 비용 상승 및 물리적 한계Scale-Out (수평 확장)개념: 여러 대의 DB로 트래픽 분산 및 부하 분배장점: 수평적 확장 용이, 대규모 트래픽 대응 가능단점: 샤딩 등 분산 구조 설계 필요 2. 샤딩이란 무엇인가?샤딩은 데이터를 여러 DB 인스턴스에 나눠서 저장하는 기술이다. 크게 두 가지 방식이 있다. 수직 샤딩 (Vertical Sharding)방식: 데이터를 수직으로 분할하는 방식 (컬럼 단위로 분리)예) title, content → DB1 / board_id, created_at → DB2장점: 특..
3. 마이크로서비스 아키텍처의 기본 3.4. 데이터베이스 접근 마이크로서비스 아키텍처에서는 각 서비스가 고유한 데이터베이스를 가지도록 구성하는 것이 원칙이다. 즉, 하나의 서비스는 하나의 데이터베이스와 일대일 관계를 맺으며, 자신이 소유하지 않은 데이터에 접근할 필요가 있을 경우에는 해당 데이터를 소유한 서비스를 통해 간접적으로 접근해야 한다. 이러한 설계 방식은 데이터베이스 변경에 유연하게 대응하기 위함이다. 데이터베이스 구조가 변경되면 이를 사용하는 프로그램도 함께 수정해야 할 가능성이 크다. 만약 여러 서비스나 프로그램이 하나의 데이터베이스를 공유하고 있다면, 단일한 변경이 여러 곳에 영향을 미쳐 전체 시스템의 안정성과 유지보수성을 저해할 수 있다. 따라서 서비스별로 독립적인 데이터베이스를 구성함으로써, 변경이 필요한 경우 해당 서비..
02.클라우드 네이티브 컴퓨팅과 마이크로서비스 2.1. 클라우드 컴퓨팅의 발자취 소프트웨어 아키텍처는 그때그때의 기술적 동향에 영향을 받으며, 시대의 필요에 따라 발전하게 된다. 마이크로서비스도 그런 소프트우어 아키텍처 중 하나로 클라우드 컴퓨팅의 영향을 받았다. 2.1.1. REST2000년대 등장한 웹 2.0의 유행이 가져온 본질적인 가치는 '타인이 제공하는 서비스를 인터넷을 통해 호출하면서 클라이언트 요청을 처리한다'는 것이다. RESTful 웹서비스가 이러한 새로운 모델의 보급에 큰 기여를 했다. W3C를 중심으로 SOAP/WSDL/UDDI 등 웹서비스 프토로콜이 정비돼 있었다. 하지만 HTTP 프로토콜뿐만 아니라 그 위에서 동작하는 다양한 웹시비스 프로토콜을 이해해야만 했다. 또한, 엔터프라이즈 서비스(ESB) 등 IT 벤더가 제공하는 ..
chapter2. 아키텍처 개요 2.0. 개요아키텍처의 전형적인 4가지 영역(표현, 응용, 도메인, 인프라스트럭처) 각각의 역할을 설명하고, 계층 기반 아키텍처에서 응용영역과 도메인 영역에서 상세 구현 기술을 다루는 인프라스트럭처 계층을 직접 의존할 경우 발생할 수 있는 문제에 대해서 설명한다. 고수준 모듈과 저수준 모듈을 정의하고, 저수준 모듈이 고수준 모듈을 의존하게 하는 DIP 를 적용함으로써 위의 문제점을 해결할 수 있는 방법을 제시한다.2.1. 네 개의 영역아키텍처 설계의 전형적인 4가지 영역으로는 '표현', '응용', '도메인', '인프라스트럭처'가 있다.표현 영역사용자의 요청을 응용 영역에 잔달하고 결과를 사용자에게 전달응용 영역시스템이 사용자게에 제공하는 기능 구현 ex) '주문 등록', '주문 취소', '상품 상세 조회..