들어가기에 앞서이전부터 관심 있던 부하 분산이라는 주제로 RDS 읽기 전용 복제본을 생성해 트래픽을 분산시키는 작업을 진행했다. 하지만 RDS Aurora가 아니라 MySQL Engine을 이미 선택해 마이그레이션 하기에는 비용 걱정과 운영 걱정이 이만저만이 아니기 때문에.. 애플리케이션 단에서 스케쥴링을 하는 방법을 찾았다.먼저 아키텍쳐는 아래 그림과 같이 설계했다. 여기서 마스터 RDS를 1개 더 추가하여 구성할 수 있지만, 그렇게 하려면 단일 DB 인스턴스가 아닌 다중 AZ DB 인스턴스로 구성해야 한다. (*다중 AZ DB란 쉽게 고가용성을 위해 예비 DB 인스턴스를 자동 구성해 주며, fail-over기능도 제공한다.)다중 AZ DB 인스턴스로 구성한다면 직접 fail-over를 구현하지 않아도..
들어가기에 앞서해당 글은 OS Study 도중 생겼던 의구심을 해결하고자 자료를 수집하고 해석한 글이다.1. Mac OS에서 Windwos Docker Image를 띄울 수 있을까?먼저 Docker 즉, Container란 무엇인가 알아볼 필요가 있다. 실행 중인 컴퓨터의 커널에 라이브러리, 실행파일을 격리하고, 이 공간 내에 독립된 프로세스 및 네트워크를 실행시키는 기술과 이를 위한 소프트웨어 구성 일체를 이야기한다. 같은 버전 커널에서 동일한 동작을 보장한다. (출처 : 나무위키) 가상머신(VM)과 가장 큰 차이는 자원 사용 방식에 있다.컨테이너는 Hpyervizor와 Guest OS를 포함하지 않는다. 즉, 컨테이너에는 OS가 포함되지 않는다.우리가 사용하는 OS는 상당한 리소스(컴퓨터 자원)가 ..
데이터베이스 다중화란 보통 서버 사이에주(Master) 부(Slave) 관계를 설정하고 데이터 원본은 Master, 사본은 Slave 서버에 저장하는 방식이다. 여기서 데이터 베이스 Insert, delete, update 쿼리들 (쓰기 연산)은 Master 서버에서, select Query는 Slave 서버에서 처리한다.대부분 애플리케이션은 읽기 연산의 비중이 쓰기 연산 비중보다 높다. 그러므로 보통 Slave 서버가 Master서버 보다 많이 존재한다. DB 다중화의 이점으로는 크게 3가지가 존재한다.1. 더 나은 성능 주-부 다중화 모델에서 읽기, 쓰기 연산을 분산 처리하기 때문에 처리할 수 있는 Query수가 많아져 더 나은 성능을 보장한다.2. 안정성 : DB서버의 장애가 발생해도 다른 DB 서..
먼저 N+1문제란 무엇인지 알기 전에EAGER Loading (즉시 로딩), Lazy Loading (지연 로딩)에 대해 이해하고 넘어가야만 한다.예시를 살펴보며 이해해보자1. Member Entity, Post Entity가 존재한다.2. Member : Post -> 1 : N 연관관계를 맺는다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) private List posts = new ArrayList();} @Enti..
오늘은 분산시스템속 어떤 브로드캐스트 알고리즘이 있는지 알아보고 어떤 것을 코드에 적용해볼까 선택할려고 한다.오늘 설정할 브로드캐스트 목표는 새로운 Peer가 등장할시 어떻게 새로운 Peer를 다른 Peer가 인식하도록 할까이다. 1. Flooding (플러딩)Flooding은 모든 Peer가 새로운 Peer에 대한 정보를 모든 이웃 피어에게 전송하는 방법이다.새로운 Peer A가 네트워크에 들어오면 -> Peer A는 자신의 정보를 인접 피어 B, C, D에게 전송 -> B, C, D는 연결된 피어에게 전송한다.장점 : 단순한 구현단점 : 네트워크 트래픽이 많아질 수 있다.인접한 피어는 또 어떻게 구할것인가? 문제가 있는 거 같다. 2. Gossip Protocl(가십 프로토콜)가십 프로토콜은 Peer..
코로나 이후로 실시간 협업 애플이케이션이 많은 흥미를 끌었다.Figma, Notion Google Docs 등 많은 기업들이 실시간 협업 애플리케이션 등을 내고 VS Code 또한 동시 코딩 플러그인(느리긴함)이 존재한다. 그래서 제안된 기술들이 있는데 크게 두가지이다. CRDT(Conflict-Free-Replicated Data Types), OT(Operational Transformation)이다.실시간으로 협업 한다고 생각해보자.OT의 방식은 아래와 같다. HeLo 사이에 L을 추가하고 , 다른 사람은 마지막에 !를 추가한다고 생각해보자.추가 했을 때 각자가 보고 있는 인덱스 위체에 따라 추가가 될 것이다.1번째 사람은 3번째 Inex의 "L"을 삽입했고, 2번째 사람은 4번째 Index의 ..
오류 사진Likely root cause 현재 Docker-compose.yml 문제 발생이유 : AccessDenied -> 권한 문제찾아보니 usr/share은 도커 컨테이너 안에 있는 내용이지 로컬(우분투)에 공유되는 폴더가 아니다.그렇다면 권한은 elasticsearch폴더에게 주는 것이 맞다- 참고) elasticsearch폴더는 내 우분투 서버에 존재하는 폴더이다.명령어sudo chown -R 1000:root elasticsearch해당 명령어로 폴더에게 권한을 주면 해결된다! 참고https://stackoverflow.com/questions/65668188/elastic-search-accessdeniedexception-usr-share-elasticsearch-data-nodes-0-..
들어가기에 앞서Spring Boot 개발을 하면서 JPA를 활용하여 개발을 하지만 JPA에서 Entity가 어떻게 관리되는지 얕게 공부한터라 다시 한번 상기하고, 더불어 면접 질문에 대해 대비하려고 한다.JPA에서 Entity는 여러 Life Cycle(생명 주기) 단계 를 거치며, 각각의 단계는 Entity가 DB어떻게 상호작용하는지를 결정한다.크게 New 상태, Managed 상태, Detached 상태, Removed 상태로 4가지로 나뉜다.1. NEW(Transient)상태Entity가 아직 영속성 컨텍스트에 의해 관리되지 않는 상태이다.특징- DB에 저장되지 않은 상태- 아직 EntityManager를 통해 persist()메소드가 호출되지 않은 상태이다.MyEntity entity = n..