전체 95

[대규모 시스템 설계 기초] 알림 시스템 설계

알림 시스템 설계 알림 시스템은 많은 애플리케이션에서 사용됩니다. 제품 업데이트, 이벤트, 피드 등 다양한 분야에서 정보를 제공하기 위해 사용됩니다. 비즈니스 로직을 처리하는 여러 서버들이 있다고 가정하고 알림 시스템을 설계해서 다양한 종류의 단말기에 알림을 전송하는 시스템을 설계해보겠습니다. 문제 이해 및 설계 범위 우선 문제를 정의해보겠습니다. 푸시 알림과 SMS, 이메일의 알림을 지원합니다. soft real-time 시스템, 가능한 빠르게 전달되어야합니다만, 부하에 따라 약간의 지연은 무방합니다. IOS와 안드로이드 단말기와 데스크톱을 지원합니다. 사용자가 알림을 받지 않도록 설정할 수 있습니다. 하루 천만 건의 푸시 알림, 백만 건의 SMS, 5백만 건의 이메일을 처리할 수 있어야합니다. 필수 ..

시스템 구조 2024.03.14

[소마] 리팩토링: 로직 개선하기

로직 개선하기복잡한 동적 쿼리 queryDSL 적용 피드 페이지에서 카테고리(도메인)과 제목이나 글쓴이 이름으로 검색하여 피드를 조회하는 기능을 구현했다.위 동적 쿼리 문제를 구현하기 위해서 JPQL를 사용하여 여러 분기점으로 해결했다.만약 검색 조건이 하나가 더 추가되거나 변경된다면 수정할 수 없을 만큼 복잡한 로직으로 구현된 것이 문제이다.다른 문제점으로, 컨트롤러에서 응답하기 위한 DTO가 레포지토리에서 사용되기 때문에 영속 계층이 컨트롤러, 서비스 계층과 의존하는 문제가 생긴다. 이를 해결하기 위해서 DTO를 계층 별로 분리해야 한다. AS-IS@Repository@RequiredArgsConstructorpublic class FeedRepositoryCustomImpl { private ..

프로젝트 2024.03.14

[전공 복습] 3. 데이터베이스

3. 데이터베이스 Transaction 데이터베이스에서 수행되는 여러 작업을 하나의 논리적 단위로 수행하는 것 데이터베이스를 많은 사용자가 동시에 접근한다. 동시성 제어를 통해 다수 사용자가 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지하도록 한다. 트랜잭션을 실행하는 도중에 시스템이 고장 나도 데이터베이스의 일관성을 유지한다. 일관성이란? 데이터베이스를 구성할 때에 정해놓은 규칙들은 트랜잭션을 성공하고 나서도 계속해서 유지되어야 한다. 만약 쿼리 실행 도중에 멈춘다면, 일관성이 깨졌다고 표현한다. DBMS는 트랜잭션 단위로 작업을 관리하고, 동시성 제어, 장애 발생 시로부터 회복하는 기능이 핵심이라 할 수 있다. 예시 전체 사원의 급여를 6% 인상하려고 한다. UPDATE EMPLOYEE S..

컴퓨터과학 2024.03.13

[전공 복습] 2. 네트워크

2. 네트워크TCP, Transmission Control Protocol 전송 계층에 해당하는 네트워크 프로토콜로 연결형 서비스를 지원하고 데이터의 신뢰성을 보장한다.신뢰성을 보장하기 위해 흐름 제어, 혼합 제어, 오류 제어를 한다. TCP의 특징 송신부와 수신부의 연결을 확인하는 연결형 서비스이다. 연결에는 3-way 핸드 쉐이킹이 사용된다.패킷 교환 방식은 가상의 경로를 설정하는 가상 회선 방식이다. 따라서 패킷의 전송 순서가 보장된다.송신부와 수신부는 1:1 통신을 한다.데이터 손실이 없음을 보장한다. 뒤에 나올 핸드쉐이킹을 이해하기 위해서는 송신부와 수신부가 사전에 연결하면서 보내는 신호에 포함된 flag를 알아야한다.flag는 6비트로 전송되며 6개의 상태가 존재하고 각 상태에 맞는 비트를 1..

컴퓨터과학 2024.03.13

[전공 복습] 1-2. 운영체제

1-2. 운영체제스케줄링 장기 스케줄링준비 큐에 어떤 프로세스를 넣을지 결정하여 메모리에 올라가는 프로세스를 조절한다. 중기 스케줄링메모리에 올라온 프로세스의 수를 동적으로 조절한다.스왑 아웃으로 프로세스를 디스크에 저장하거나 스왑 인으로 저장했던 프로세스를 메모리로 다시 올린다.스왑 아웃된 프로세스는 중단 상태가 된다. 단기 스케줄링준비 큐에 있는 프로세스 중에 실행할 프로세스를 결정한다. 위 그림에는 장기, 중기, 단기 스케줄링을 나타내고 있다. 위 그림은 스케줄러 관점에서 스케줄링을 표현하고 있다.실행 상태에서 준비 큐나 대기 큐로 전환됨을 확인할 수 있다. 비선점형 스케줄링 실행 중인 프로세스가 종료될 때까지 다른 프로세스를 실행할 수 없다.다음의 종류가 있다.FCFS: 준비 큐에 들어온 순서대로..

컴퓨터과학 2024.03.13

[전공 복습] 1-1. 운영체제

1-1. 운영체제운영체제란? 하드웨어와 응용 프로그램을 연결하는 소프트웨어 계층이다. 시스템 자원을 관리하고 자원을 사용할 수 있는 환경을 제공한다. 커널과 시스템 콜 커널은 운영체제의 핵심 요소로, 스케줄링과 메모리 관리 등을 담당한다.운영체제는 중요 자원을 보호하기 위해서 커널 모드와 사용자 모드를 나눈다.커널 모드는 하드웨어에 직접 접근할 수 있고 사용자 모드에서는 커널 모드의 자원에 접근할 수 없다. 사용자 모드에서 실행된 프로세스가 시스템 자원을 사용하기 위해서는 시스템 콜을 호출해야한다.커널은 시스템 콜로 요청을 받고 다시 시스템 콜로 값을 반환한다.시스템 콜의 예로는 자식 프로세스를 생성하는 fork(), 부모 프로세스가 자식 프로세스를 기다리는 wait()가 있다. 프로세스와 스레드 프로그..

컴퓨터과학 2024.03.13

[운영체제] 프로세스 동기화

프로세스 동기화서로 다른 프로세스가 공유 자원에 접근하면 여러 문제가 생길 수 있다.먼저 프로세스 간의 통신 방법에 대해 알아보고 여러 문제란 무엇인지, 동기화는 무엇이고, 어떻게 동기화 하는지 알아보자. 프로세스 간 통신 IPC, Inter Process Communication프로세스와 프로세스가 데이터를 주고받을 수 있는 통신 방법 종류 공유 메모리나 공유 파일을 이용한 통신파이프를 이용한 통신소켓을 이용한 통신 공유 데이터와 파이프를 이용한 통신은 단방향 통신이기 때문에데이터는 보내는 작업과 받는 작업을 하는 공유 메모리 2개 혹은 2개의 파이프가 필요하다.반면에, 소켓은 양방향 통신을 지원한다. 공유 메모리를 사용하는 통신의 가장 큰 문제는 상대방이 언제 데이터를 보내는지 알 수 없다는 점이다..

컴퓨터과학 2024.03.12

[대규모 시스템 설계 기초] 안정 해시 설계, Consistent hashing

안정 해시 설계, consistent hashing 수평적 규모 확장성을 달성하기 위해서는 데이터를 서버에 균등하게 나누는 것이 중요하다. 그리고 이를 실현시키는 기술로 안정 해시가 있다. 해시 키 재배치 문제, rehashing 먼저, 왜 안정 해시가 필요한지를 문제 상황을 통해 알아보자. N개의 캐시 서버가 있다고 가정하면, 요청에 응답하는 서버를 할당하기 위해 다음의 수식(modular arithmetic)을 사용한다. 몇 번째 server = hash(key) % N URI, 고유 식별자와 같은 요청에 적합한 key값을 선택하고 해시 함수의 결과를 N으로 나누어 서버에 요청을 보낸다. 서버에 개수가 일정하게 유지된다면 위 설계는 문제없이 작동한다. 하지만 auto scale로 서버가 추가되거나 ..

시스템 구조 2024.03.09

[소마] OAuth2.0 인증 성공 후, AuthenticationSuccessHandler 테스트해보자

OAuth2.0 인증 성공 후, AuthenticationSuccessHandler 테스트해보자 문제OAuth2.0 인증 프로세스 중, 사용자를 식별하기 위한 토큰을 생성하는 것을 검증하려고 한다.문제는 OAuth2.0는 외부 인증 서버를 사용하고 인증 프로세스 대부분이 짜여진 인터페이스를 구현하는 형태라,외부 인증 서버에서 사용자 인증 성공을 받고 나서의 상황을 테스트에서 어떻게 구현할지 난감했었다. 테스트 대상@RequiredArgsConstructor@Componentpublic class OAuth2SuccessHandler extends SimpleUrlAuthenticationSuccessHandler { private final JwtProvider jwtProvider; @Ove..

프로젝트 2024.02.19