목록이룸 프로젝트 (38)
Kuma's Curious Paradise
프로젝트 발표날에 버전 관리를 어떻게 하고 있냐는 질문을 받았다. 이후 팀원들이 모여 '버전 관리'의 의미가 무엇인지 한참을 논의했었다. blue / green 전략을 택한 것이 곧 버전 관리이다, 개발용 배포용 버전을 어떻게 관리하냐는 질문이다 등등 다양한 이야기가 오고가다가 도달한 결론은, '서버 빌드가 실패했을 시 이전 버전으로 롤백이 되도록 수정하자'였다. 그래서 현재 버전에 문제가 생겼을 시 예전 버전으로 롤백하기 쉽도록 하는 것이 '버전 관리'가 아닌가 한 것이다. 따라서 새로운 이미지가 올라오면 blue, green을 번갈아가며 빌드하는 단순한 전략에서 발전하여 지금의 설정 파일이 되었다. 오늘은 이러한 버전 관리가 어떻게 구성되었는지, Github Actions Workflow 설정 파일..

이전에 MySQL의 FULL-TEXT 기능을 적용하는 글을 작성하였다. 오늘은 FULL-TEXT 기능에 대해 더 자세히 알아보고, 해당 기능을 적용하기 전과 후 성능을 비교해 보려 한다. 1. MySQL 인덱스란?인덱스는 우리에게 아주 친숙한 개념이다. 바로 아래처럼 단어가 어느 페이지에 있는지 알려주는 목록을 인덱스라고 한다. Database에도 이러한 인덱스가 있어서 빠른 검색 결과를 도출하도록 도움을 준다. 만약 인덱스가 설정되어 있지 않으면, 모든 데이터를 처음부터 끝까지 검색해야 한다. 만약 데이터의 양이 무척 많다면, 이런 동작은 아주 비효율적일 것이다. 2. MySQL FULL-TEXT 기능 개괄MySQL은 텍스트 검색을 위하여 자체적인 인덱싱 기능을 제공한다. 그것이 바로 FULL..
지난 글 요약지난 글에서는 가상 머신과 비교하여 컨테이너가 어떤 특징을 갖는지 살펴보았다. 컨테이너란 애플리케이션 실행에 필요한 환경(코드, 의존성, 환경 설정 등)을 패키징하여 담아 전달 및 배포를 쉽게 만든 것으로, 호스트 OS의 커널을 공유하기 때문에 자원 사용이 적고, 가볍기 때문에 전송이 쉽다. 도커는 이런 컨테이너를 생성하고 관리하는 오픈소스 소프트웨어다. 보통 '도커'라고 하면 '도커 엔진'을 뜻한다. 1. 도커의 작동 방식사용자가' Docker Container Run' 같은 명령어를 도커 client(도커 CLI)에 입력하면, CLI는 이 명령을 적절한 REST API 요청 데이터로 변환하여 도커 데몬(dockerd)에 POST 요청을 보낸다.요청을 받은 도커 데몬(dockerd)은 레..

1. 인메모리 데이터 Redis, 서버가 꺼지면...Redis는 모든 데이터를 컴퓨터의 주기억장치인 RAM(Random Access Memory)에 저장한다. RAM은 현재 수행 중인 작업과 관련된 데이터를 저장하며, 빠른 속도가 강점이다. 하지만 전원이 공급되는 동안에만 데이터가 유지되는 '휘발성 '메모리이기 때문에, 전원을 끄면 RAM의 정보는 모두 사라지게 된다. 이 경우 Redis에 저장된 데이터도 모두 날아간다. 다행스럽게도 이를 막기 위해 Redis에는 데이터를 디스크로 옮기는 기능이 존재한다. 이렇게 디스크에 저장해 놓은 데이터를 읽어와 메모리에 로딩하기 때문에, 서버가 꺼져도 데이터가 유실되지 않는다. 이를 Redis의 Persistent(영속성) 기능이라고 한다. 2. Re..

채팅 내역 저장 코드를 살펴보던 중, 다음과 같은 부분을 발견하였다. @Getter @Setter public class ChatMessage { private String messageId; private MessageType type; private String message; private String sender; @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime tim..
[문제] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'boardDocumentRepository' defined in com.sparta.elasticsearch_practice.BoardDocumentRepository defined in @EnableElasticsearchRepositories declared on ElasticSearchConfig: Failed to instantiate [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: Constructo..

1. Kibana 연동하기 1) Kibana란? Kibana는 Elastic Stack의 핵심 구성 요소 중 하나로, 데이터를 시각화해서 보여주는 도구이다. Elasticsearch에 저장된 데이터를 기반으로 Dashboard(여러 그래프와 차트를 결합한 페이지)를 만들고, 시각화하여 분석할 수 있도록 돕는다. 쉽게 말해, 데이터들이 어떻게 들어가 있는지, 어떤 검색어가 많이 나왔는지, 핵심 키워드와 같은 데이터를 분석하여 그래프와 차트 형태로 시각화한다. 이 데이터를 기반으로 사용자의 관심사와 시장의 변화를 실시간으로 모니터링할 수 있다. 2) elasticsearch부터 kibana까지 설치하기 - 'elastic'이라는 이름의 도커 네트워크를 만든다. 도커 네트워크는 해당 네트워크에 있는 컨테이너들..

CI/CD에도 사용하고 엘라스틱서치 설치에도 사용한 도커. 이름은 수없이 들었지만 정확히 도커가 무엇인지 알지 못한 채 사용하였다. 도커란 대체 무엇이며 어떻게 사용하면 좋을까? 컴퓨터를 모르는 사람도 이해할 수 있을 정도로 쉽게 설명해 보려 한다. 먼저, 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼 중 하나라는 점을 미리 이야기한다. 도커를 이해하려면 컨테이너를 먼저 이해해야 하고, 컨테이너를 이해하는 가장 쉬운 방법은 가상 머신과 비교하며 이해하는 것이기 때문에, 오늘은 가상머신과 컨테이너에 대해 적어 보겠다. 1. 하나의 컴퓨터에서 성격이 다른 소프트웨어를 실행하는 두 가지 방법 1) 성격이 다른 소프트웨어란? 식당 운영을 한다고 상상해 보자. 이 식당은 이탈리안 파스타도, 한국의 김치찌개도 만드..

1. 검색 엔진이란 무엇일까? 검색 엔진이란 쉽게 말하자면 검색을 빠르고 쉽게 만들어 주는 시스템이다. 사용자가 검색어(ex. 춘식이)를 입력하면 그와 관련된 정보들(ex. 카카오 프렌즈 / 춘식이 인형 / 춘식이 고구마 ... 등)을 찾아서 제시해 준다. 2. ElasticSearch란 무엇일까? ElasticSearch는 아파치 루씬(Apache Lucene = 고성능 풀텍스트 검색 엔진 라이브러리)을 기반으로 한 오픈소스 검색 엔진이다. 아파치 루씬은 다양한 검색 기능을 제공하는 라이브러리인데, ElasticSearch는 루씬의 이러한 기능을 사용하면서 이에 더해 분산 시스템 지원, RESTful API, 실시간 검색과 같은 기능을 추가하여 만든 강력한 검색 엔진이다. 1) 대용량 데이터 처리 El..
1. 현재 이룸은 어떻게 검색을 하고 있을까? ChallengeService.javapublic AllResponseDto getQueryChallenge(String query, int page, int size) { try { // Pageable 객체를 생성하여 페이징 처리 Pageable pageable = PageRequest.of(page, size); // JPA Repository를 사용하여 페이징된 데이터를 가져옴 Page queryChallengesPage = challengeRepository.findByCategoryContainingOrTitleContainingOrDescriptionContaining(que..