분류 전체보기
몽고디비 모델링, 자주사용하는 연산자 정리
몽고디비 모델링, 자주사용하는 연산자 정리
2024.08.19몽고디비(MongoDB)와 관계형 데이터베이스(RDBMS) 간의 모델링 차이관계형 데이터베이스에서는 보통 데이터를 여러 테이블에 나누어 저장합니다. 예를 들어, "사용자(User)"와 "주문(Order)"이라는 두 개의 테이블이 있다고 가정해보겠습니다.User 테이블 user_id (Primary Key) name email ...Order 테이블 order_id (Primary Key) user_id (Foreign Key referencing User) product_name order_date ... 이러한 구조에서, 특정 사용자의 모든 주문을 조회하려면 두 테이블을 조인(join)해야 합니다. 이는 다음과 같은 SQL 쿼리로 표현될 수 있습니다.SELECT u.name, o.product_name..
DAG, 위상정렬(feat. BOJ. 줄세우기)
DAG, 위상정렬(feat. BOJ. 줄세우기)
2024.08.18위상정렬위상정렬(Topological Sorting)은 방향성 비순환 그래프(Directed Acyclic Graph, DAG)의 노드들을 선형으로 정렬하는 알고리즘입니다. 이 정렬은 그래프의 모든 간선이 방향성에 맞도록 순서대로 나열되도록 합니다.DAG = 사이클이 없는 방향 있는 그래프를 의미합니다. 선행그래프 구조를 가지고 있습니다.DAG 에서 할 수 있는 알고리즘은 위상정렬 알고리즘이 활용됩니다. BFS 알고리즘을 응용해서 구현할 수 있습니다.위상정렬에서 주목해서 봐야할 것은 순서와 큐 입니다. 이 상태에서 인디그리가 0인 상태인 얘들을 큐에 넣어줍니다. 큐 : 1,2,3 이 존재하고 (왜냐하면 1,2,3 노드로 들어오는 화살표가 0) 여기서 하나씩 빼면서 BFS 과정을 거쳐주게 됩니다.순서 :..
알고리즘 펜윅 트리
알고리즘 펜윅 트리
2024.08.11시작펜윅 트리, 세그먼트 트리에서 변형된 형태입니다. 대표적으로 구간 합 알고리즘을 O(N)보다 빠르게 풀고자 할 때 펜윅 트리를 사용합니다.일반적으로 구간 합을 구할 때 O(N) 정도의 시간이 걸립니다.펜윅 트리(BIT = Binary Indexed Tree) 이용하게 되면 O(logN) 으로 시간 복잡도를 감소 시킬 수 있습니다. 전체 노드의 부분 합 즉, 0~K 합을 구해 두게 되면 원하는 구간 합 S~D를 구하는 것이 가능해 집니다. (Start ~ Destination)O(logN) 의 수행시간 만으로 구간합을 구할 수 있게 됩니다. 구간 합 외에도 같은 원리로 업데이트도 수행할 수 있게 됩니다. 펜윅트리 구조일반적으로 펜윅 트리 구조는 아래와 같이 세그먼트 트리를 응용한 형태로 구조를 정형화..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 3장 - 시스템 설계 면접 공략법
가상 면접 사례로 배우는 대규모 시스템 설계 기초 3장 - 시스템 설계 면접 공략법
2024.08.04효과적 면접을 위한 4단계 접근법1단계 - 문제 이해 및 설계 범위 확정시스템 설계 시 질문하여 요구사항과 가정들을 분명히 하자.엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것.만약 시스템 설계를 한다면 어떤 질문들을 만들어야 할까?예제뉴스 피드 시스템 설계하라는 요구를 받았다고 한다면 다음 질문을 해볼 수 있을것이다.모바일 앱과 웹 앱 가운데 어느 쪽 지원 -> 둘 다 지원가장 중요한 기능은 무엇인가요?-> post, 친구들과 피드 기능을 볼 수 있어야 한다. 정렬 기준 -> 시간 역순으로 정렬최대 몇명의 사용자 -> 5000명트래픽의 규모는? -> dau 천만명포스트에서 지원하는 파일 양식은 무엇인가요? -> 이미지나 비디오 같은 미디어 파일 포스트2단계 - 개략적인 설계안 ..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장 - 개략적인 규모 추정
가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장 - 개략적인 규모 추정
2024.07.28개략적인 규모 측정시스템 용량, 성능 요구사항을 추정하라고 할때 개략적인 규모 측정을 하게 됩니다. 2의 제곱 수데이터 볼륨의 단위를 2의 제곱수로 표현할 수 있는 최소 단위 1바이트이고 8비트로 구성됩니다.1킬로바이트 = 2의 10승1메가바이트 = 2의 20승1기가바이트 = 2의 30승1테라바이트 = 2의 40승1페타바이트 = 2의 50승 모든 프로그래머가 알아야 하는 응답지연 값 디스크 탐색 (seek) = 10ms데이터 볼륨메모리는 빠르고, 디스크는 느리다.디스크 탐색(seek)은 가능한 피해야 한다.단순한 압축 알고리즘은 빠르다.데이터를 인터넷으로 전송하기 전에 가능한 압축해야한다.데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터 주고받는 데에 시간이 소요된다.가용..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (2)
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (2)
2024.07.21캐시 사용시 주의점갱신은 자주 일어나지 않지만 참조는 빈번이 일어난다면 고려할만 하다.일반적으로 RAM에서 동작캐시는 휘발성이므로 영속적으로 보관할 데이터는 캐시에 두는것이 바람직하지 않다.캐시는 언제 어떻게 만료(expire)되는가?에 대한 정책을 수립할 필요가 있다. 만료시간을 너무 짧게, 너무 길게 가져가지 않도록 주의해야한다.데이터베이스와 일관성을 어떻게 유지할 것인가? 에 대한 생각도 해봐야한다. 찾아보니 이는 논문도 나올정도로 많은 연구가 진행되고 있는 것 같다.장애에는 어떻게 대처할 지도 생각해봐야한다. 캐시 서버를 하나로 두면 해당 서버는 단일 장애 지점이 되어버릴 가능성이 있다. 때문에 여러 지역에 걸쳐 캐시 서버를 분산 시켜야 한다.단일 장애 지점(Single Point of Failu..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (1)
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (1)
2024.07.14단일 서버11st에 접속할때 서버에서 어떤일이 일어나는지 생각해보자.www.11st.com를 주소창에 입력브라우저의 DNS 캐시 확인 브라우저 캐시에 IP 주소가 없으면 운영 체제의 DNS 캐시 확인운영 체제의 DNS 캐시에도 IP 주소가 없으면 루트 DNS 서버로의 쿼리 시작루트 DNS 서버는 com 최상위 도메인(TLD) 서버의 주소를 반환DNS 클라이언트는 com TLD 서버에 www.11st.com의 IP 주소를 요청com TLD 서버는 11st.com 도메인의 권한 있는 네임 서버의 주소를 반환DNS 클라이언트는 11st.com 도메인의 권한 있는 네임 서버에 www.11st.com의 IP 주소를 요청합니다.권한 있는 네임 서버는 www.11st.com의 IP 주소를 반환브라우저는 반환된 IP ..
스프링 배치 - 멀티 스레드 처리
스프링 배치 - 멀티 스레드 처리
2024.07.07대량의 데이터를 처리할 때 배치를 이용하게 될 때 단일 스레드 보다 멀티 스레드를 이용하여 처리하는 방법에 대해 알아보겠습니다. 스레드 개념단일 스레드 - 프로세스 내 특정 작업을 처리하는 스레드가 하나일 경우 단일 스레드멀티 스레드 - 여러 개일 경우 멀티 스레드 정의단, 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재 하기 떄문에 최대한 고려해서 결정해야 합니다. 스프링 배치 멀티 스레드 프로세싱Main Thread 부터 시작하면 스프링 배치에서는 반복작업을 수행하기 위해 RepeatTemplate 을 사용하는데 멀티스레드에서는 RepeatTemplate을 상속받은 TaskExecutorRepeatTemplate 통해서 반복을 시킵니다. TaskExecutorRepeatTemplate 이 ..
zipkin
zipkin
2024.07.01들어가기트위터에서 개발되서 사용하고 있는 분산 추적 도구입니다. 마이크로서비스 환경에서는 하나의 Request 요청에 대해 여러개 서비스들이 호출되곤 합니다. 이때, 데이터를 받아오는 다소 무거운 API가 있으면 Spring 서버의 경우 스레드가 묶여 버리는 일종에 병목 현상의 문제가 발생할 수 있습니다. 이런 경우를 대비하여 모니터링이 필요하게 됩니다. Zipkin을 통해서 이러한 병목 현상을 대비할 수 있는 모니터링 역할을 수행하게 됩니다. Twitter 에 공개되어 있는 Distributed Systems Tracing with Zipkin 본문 링크입니다. 조금 오래된 문서이긴 하지만 zipkin 등장이유와 동작방식에 대해 확인해볼 수 있습니다. Zipkin 이란 무엇인가?Zipkin은 분산환경..
스프링 클라우드 슬루스와 집킨 정리
스프링 클라우드 슬루스와 집킨 정리
2024.06.30스프링 클라우드 슬루스와 상관관계 ID상관관계 ID가 존재하지 않는다면 상관관계 ID를 생성해서 서비스 호출에 삽입한다.아웃바운드 서비스 호출에 대한 상관관계 ID 전파를 관리하여 트랜잭션에 대한 상관관계 ID가 자동으로 추가되도록 한다.서비스 A는 서비스 B에 HTTP 요청을 보낼 때, HTTP 헤더에 X-Correlation-ID: abc123를 포함시켜 보낸다.서비스 B는 요청을 수신하여 X-Correlation-ID 헤더에서 상관관계 ID를 읽어들이고, 이 ID를 사용하여 자신의 작업을 추적한다.@Configurationpublic class FeignConfig { @Bean public RequestInterceptor requestInterceptor() { r..
함께 자라기 애자일로 가는 길
함께 자라기 애자일로 가는 길
2024.06.22이 책에서 나오는 핵심 내용을 소개해드리고자 합니다. 학습을 할 때 야생학습으로 공부를 하면 개발 공부 시 많은 도움을 얻을 수 있습니다. 야생학습은 대부분 비순차적이다. (학교 학습은 대부분 공부 순서가 정해져 있다.)야생 학습은 대부분 자료에 한정이 없다.(학교 학습은 대부분 교과서, 교재, 시험 범위 등이 정해져 있다.)야생 학습은 대부분 명확한 평가가 없다.A-Z까지 보기 보다는 필요한 내용 공부를 우선하자. 볼 수 있는 참고 자료들이 많기 때문에 학습 하는데 어려움을 덜 수 있다. 다만, 정리를 지속적으로 하면서 보면 도움이 많이 될거 같다. 전문가가 되는 3단계수파리 이론수파리의 첫 번째 단계인 '수( 守 )'는 '가르침을 지킨다'는 의미로 사부가 가르친 기본을 철저하게 연마하기 위해 지루한..
35. Search Insert Position
35. Search Insert Position
2024.06.07문제 정의 주어진 정렬된 배열에서 목표 값을 찾고, 찾지 못하면 목표 값이 삽입될 인덱스를 반환하는 문제입니다. 이 문제는 O(log n) 시간 복잡도로 해결해야 합니다. https://leetcode.com/problems/search-insert-position/description/Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You must write an algorithm with O(log n) runtime complexity...