Redis Pub/Sub을 활용한 채팅 구현의 여정 - Service 레이어
·
Redis/Redis 채팅
서비스단 코드를 먼저 보여주고 각 메서드에 대해 설명하겠다.@Service@RequiredArgsConstructor@Slf4jpublic class ChatServiceImpl implements ChatService { private final ChatRoomRepository chatRoomRepository; private final RedisTemplate redisTemplate; private final RedisTemplate redisTemplateForSave; private final RedisTemplate redisTopicTemplate; private final UserRepository userRepository; private final No..
[CS 면접 질문 / OS] 가상 메모리, 페이징, 내부 단편화, 외부 단편화, 페이지 교체 알고리즘
·
면접 준비/OS
가상 메모리실제 CPU 내부의 저장공간이 메모리만큼 커야 들어갈 수 있으나, 실제로는 더 작은 용량을 갖고 있다.새로운 프로세스는 새롭게 메모리에 적재되고, 사용되지 않는 프로세스는 메모리에서 삭제된다.CPU가 실시간으로 바뀌는 정보를 어떻게 관리하는지 논리 주소, 가상 메모리, 페이징에 대해 알아보겠다.물리 주소와 논리 주소CPU와 프로세스는 메모리의 하드웨어의 실제 주소인 물리 주소(physical address)가 아닌 논리 주소(logicla address)를 사용한다.논리 주소는 프로세스마다 부여되는 0번의 주소부터 시작하는 주소 시스템을 말한다.CPU와 프로세스가 사용하는 주소 체계는 물리 주소가 아니라 논리 주소이기 때문에 중복되는 물리 주소의 번지수는 존재하지 않지만, 중복되는 논리 주소의..
Trie와 Redis ZSET 비교: 키워드 자동완성 기능에 가장 효율적인 방법은?
·
Redis/Redis 개념
Redis를 사용해서 검색어 자동 기능검색을 구현하려고 할때 두 가지 방법으로 구현이 가능하다. 단, 조건은 중간 단어 검색이 아닌 첫 글자를 기준으로 검색했을때를 기준으로 선정한 방법이다.검색 엔진, 추천 시스템, 그리고 실시간 키워드 자동완성 기능은 사용자 경험(UX)을 크게 향상시킨다. 이러한 기능을 구현하기 위해 주로 사용되는 두 가지 접근법은 Trie 알고리즘과 Redis ZSET이다.이 글에서는 Trie와 Redis ZSET을 비교하고, 키워드 자동완성 기능에 어떤 방법이 더 효율적인지 살펴본다.1. Trie 알고리즘이란?Trie는 접두사 트리(Prefix Tree)라고 불리며, 문자열의 공통 접두사를 공유하는 자료구조다.Trie의 주요 특징접두사 검색에 최적화: 입력된 문자열의 접두사를 기준..
키워드 초성 검색 기능 개선 과정
·
Spring/프로젝트 리팩토링 회고록
[요구 사항]매칭 시 유저의 닉네임을 검색하는 기능 요구. 단, 유저의 닉네임 단어 일부를 검색하면 자동으로 키워드를 완성반려견 프로필 등록 시 견종을 검색하는 기능 요구. 단, 반려견의 견종 일부를 검색하면 자동으로 키워드를 완성반려견 견종이 없는 경우에는 유저가 직접 입력하여 등록직접 입력한 데이터는 견종 데이터 자동 완성 키워드에 출력되지 않음  [기능 구현방식 선정]구현 방식에 대해서는 세 가지 방법이 있었습니다.1. MySQL에 데이터를 저장하고 LIKE %keyword%를 사용한 검색2. Elastic Search를 사용한 형태소 단위 검색3. Redis의 ZSet [각 방식의 장/단점]1. MySQL 과 LIKE 함수 활용 1번의 과정은 견종 데이터를 정적 테이블에 삽입하고, 조회 시에는 L..
[CS 면접 질문/ OS] 동기화와 교착 상태
·
면접 준비/OS
공유 자원메모리나 파일 등의 자원 또는 전역 변수, 입출력장치를 두고 동시에 여러 개의 프로세스 또는 여러 개의 스레드가 실행된다면 일관성의 문제, 레이스 컨디션 문제가 발생할 수 있다.공유자원에 접근하는 코드 중 동시에 실행됐을 때 문제가 발생할 수 있는 영역을 임계 구역(critical section)이라고 한다. 레이스 컨디션위처럼 동시 다발적으로 실행되는 동안에는 언제나 임계 구역을 동시에 실행하지 않도록 유의해야 한다. 그렇지 않으면 데이터의 일관성이 손상이 되며 이를 레이스 컨디션상황 이라고 한다.이러한 레이스 컨디션을 제어하기 위해서 동기화의 개념이 필요하다.동기화(synchronized)실행 순서의 제어를 통해 프로세스 및 스레드를 올바른 순서로 실행해야 하며, 동시에 접근해서는 안되는 자..
[CS 면접 질문/ OS] 멀티 프로세스와 멀티, IPC, Pipe, Siganl 개념
·
면접 준비/OS
웹 브라우저웹 브라우저는 일반적으로 하나의 탭마다 하나의 프로세스로 동작한다.유저들이 자주 쓰는 크롬 부라우저에서 열고 있는 하나의 탭들이 하나하나의 프로세스이며 동시에 여러 프로세스가 수행되고 있다면 멀티 프로세스라고 부른다.멀티 프로세서기본적으로 자원을 공유하지 않고, 독립적으로 수행된다. 같은 작업을 수행하고 있지만 PID값이 다르고, 프로세스 별로 파일과 입출력 장치 등의 자원이 독립적으로 할당되어 다른 프로세스에 영향을 끼치지 않는다.멀티 스레드하나의 프로세스 안에서 동시에 같은 코드를 여러 번 실행시킬 수 있는 방법이다. 하나의 스레드는 스레드를 식별할 수 있는 ID값, 프로그램 카운터, 레지스터 값, 스택 등으로 구성되어 있다.스레드마다 각각의 프로그램 카운터 값과 스택을 갖고 있기 때문에 ..