본문 바로가기

분류 전체보기159

[Index, DB, MySQL, ElasticSearch] 검색을 빠르게 하려면 어떻게 해야할까? 0. 주어진 조건MySQL의 한 테이블에 1000만 건 정도의 데이터가 있다. 이 데이터는 도서 데이터이다.첵 제목, 작가, 출판사, 출판일자, 대중소 분류 등에 대한 정보가 한 row에 담겨 있다.결과론 적으로 말하면 ElasticSearch를 이용해서 원하는 정보를 1초 안에 검색할 수 있게 만들었다. 하지만 MySQL로만 시행했을 때 어떻게 하면 검색 시간을 단축시킬 수 있을까?단순히 like 검색 (ex %총균쇠%)와 같은 방식은 3분을 초과해서 아래 언급하지 않겠다.그렇다면 사실 남은 방법은 인덱싱이 가장 유력하다.1. 인덱스를 활용해 보기전에 인덱스란 무엇인가MySQL에서는 2 종류의 인덱스가 있다.클러스터드 인덱스 : 우리가 영어 사전을 찾을 때 Elephant를 찾는다면 E가 시작되는 페이.. 2025. 1. 20.
[네트워크] OSI 7계층이란 무엇인가 0. OSI 7계층이 등장하게 된 배경컴퓨터 네트워크가 발전하면서 각 회사마다 자신들만의 독자적인 네트워크 프로토콜을 개발했다. 이로 인해서 서로 다른 시스템 간 통신이 불가능한 문제가 발생했다.이런 문제 해결을 위해 국제표준화기구(ISO)에서 1984년에 개방형 시스템 간 상호 연결(Open Systems Interconnection, OSI) 모델을 제안했다.계층을 나눈 이유복잡성 관리 : 각 계층은 자신의 역할에만 집중할 수 있다.유지보수 : 한 계층의 기술 업데이트가 다른 계층에 영향을 주지 않는다.계층마다 데이터에 설명, 포장(보안) 혹은 변환이 되어 전달된다.사용자가 데이터를 보내면 총 14계층을 거친다. 즉 하나의 계측은 일방적이지 않고 양방향이다.1. 제 7계층 : 응용 계층(Applica.. 2025. 1. 17.
[확률, 복권] 즉석 복권 기능을 개발하려면 어떤 것들을 고려해야 할까? 0. 즉석 복권을 개발할 때 고려해야할 점들은 무엇이 있을까?개발자 혹은 관리자가 복권의 결과를 미리 알 수 있으면 안된다.문제가 생겼을 때 다시 복구하거나 재연할 수 있어야한다.가령 어떤 실수로 1등이 1명이어야하는데 10명이 나왔다고 하자, 과연 누가 진짜 1등이었을까?!기획적인 측면에서 어떤 추가해야 좀더 의미있는 복권 기능이 될 것인가?1. 단순 확률 게임이 아닌 RandomSeed를 관리해보자예를들어 100개의 복권중에 1개만 당첨이라고 한다면 random을 통해 0.01미만이 나와야 당첨이라고 하자.여기서 0.01이하가 아니라 미만인 이유는 랜덤이 0을 포함하여, 0이상 1미만의 수가 나오기 때문이다.실제로 0.01이 나와서 당첨될 확률도 매우 낮겠지만, 공정한 확률은 0~0.00999999... 2025. 1. 15.
[RDB, NoSQL] 시계열 데이터는 어디에 저장하면 될까 0. 차트에 사용하는 시계열 데이터는 어떻게 저장할까?삼성전자의 초, 분, 시간, 일, 월 단위 등 다양한 차트 데이터가 있다고 한다면, 이 모든 데이터를 한 곳에 저장하는건 매우 비효율적이닌까 제외하자.그렇다면 RDB에서 '삼성전자 초단위', '하이닉스 시간 단위'와 같이 모든 차트 데이터를 저장하려면 종목 수 x 차트 종류 만큼 테이블을 만들어야 한다.NoSQL은 당연히 그만큼의 스키마를 만들고 관리해주어야 한다.일정시간마다 데이터가 삽입되고, 그 데이터들을 읽을 경우가 많다.1. RDB로 했을 때 장점과 단점은 무엇일까?장점ACID 특성 : 트랜잭션 무결성을 보장해준다복잡한 쿼리와 조인 수행스키마를 정의하여 데이터 구조를 강제한다.단점확장성 제한수직 확장이 주로 이루어지며, 수평 확장이 어렵다.대규.. 2025. 1. 15.