본문 바로가기

CS9

[DB] PostgreSQL pgvector Extension 이전에 PostgreSQL의 파급성과 pgvector extension에 대해 알게 되었던 경험을 바탕으로 정리를 해보려고 한다. Open Source No.1 DBMSPostgreSQL은 OSS 사상을 바탕으로 다양한 분야의 커뮤니티로 확대 적용되어 PostgreSQL Ecosystem으로 자리잡았다고 생각한다. 실제 ML/AI 분야에서도 PostgresML, pgVector, pg_sparse 등 PostgreSQL 기반의 다양한 기술들이 적용되고 있다. PostgreSQL이 대두될 수 있었던 원인은 뭘까?1. 수직적인 확장성을 보장하기 때문에2. 사용자 정의 데이터 유형도 지원하기 때문에3. 쉬운 서드파티 도구와 통합될 수 있기 때문에4. 오픈소스 및 커뮤니티 중심의 지원이 가능하기 때문에 실제 .. 2025. 4. 3.
[ElasticDB] ElasticSearch 특징 교육 받은 내용이 있어 자세하게 설명할 수는 없지만 이번주(9월 2주차)부터 본격적으로 MariaDB와 ElasticDB를 이용해서 작업을 하고 있다. 익숙한 RDB와 나에게 아직 생소한 ElasticSearch를 CS 관점에서 비교해보고자 작성하게 되었다. Elastic Kibana를 통해 편하게 쿼리를 날리고 확인하고 있는데 아무래도 튜플 상으로 데이터를 저장하는 형태가 아니고, ElasticDB를 이용해 실제 SpringBoot와 연동하여 데이터를 저장하는 작업이 난생 처음이어서 앞으로의 작업에 더 박차를 가하기 위해 보충 공부를 하고자 한다. 그래도 처음 ElasticSearch 다뤄본건데 이번 주차에 벌써 API 개발을 진행 중이다~ (사실 이 깃헙 레포에서 ES를 다뤄보고 싶어서 시도만 했었고.. 2024. 9. 14.
[Network] 웹소켓 개념 및 동작 원리 채팅 기능을 구현해보려고 하는데 아직 웹소켓에 대해 배운적이 없어 웹소켓에 대한 이해도를 보완하고자 정리한 글이다. 앞으로도 구현에 필요한 CS를 정리하고자 한다.그동안 고학년 전공 수업까지도 실력이 쌓이기 전부터 몰아들었다보니 수업을 들을 때는 이런 CS 지식이 어디에 적용될까 싶었지만 얄팍한 개발 경험이 쌓이기 시작하면서 CS 지식까지 고려하면 더 깊은 이해를 바탕으로 구현할 수 있다는 걸 많이 느꼈다. 대학교에서 학년에 맞는ㅜㅠ 전공 커리큘럼을 짜는데는 다 이유가 있었던 법. 웹소켓(WebSockets)웹소켓은 프로토콜의 일종이다.- 웹 브라우저와 서버 간의 양방향 통신을 지원하는 프로토콜   : 실시간 데이터 통신 가능, 통신 시 지연 시간 최소화 - HTTP 프로토콜의 단방향 통신 단점을 극복 .. 2024. 8. 2.
[ERD] 채팅 기능 ERD 설계 고민 이전에 내가 이 게시글에서 해보려고 하는 시도 중 웹소캣 기반 채팅 기능을 처음 도전해보려고 한다. 내 실력에 비해 굉장히 난이도가 있다고 생각되지만 여기서 멈추면 내 실력이 확정되고 이거를 넘어서면 실력이 확장된다는 생각으로 임하려고 한다. 구현 시작에 앞서 개발의 초석인 ERD부터 설계해보았다. 개념적 모델링일단 현재까지 Spring Security 기반으로 accessToken과 refreshToken을 발급해주는 부분까지 해두어서 Member entity는 이미 존재하는 상황이었기 때문에 채팅 기능을 구현하기 위해 어떤 부분을 고려해야 하는지 브레인스토밍 식으로 필요한 항목(예비 필드들..)을 구상해보았다.   논리적 모델링  위의 ERD가 나오기까지 고민 과정은 아래와 같다. 회원은 여러 채팅방.. 2024. 8. 2.
[DB] SpringBoot + Redis 활용 방법 스프링부트 프레임워크에서 레디스를 활용해서 데이터를 저장하는 여러가지 방법에 대해서 정리하고자 한다. 0. SpringBoot에 Redis 의존성 추가redis를 사용하기 위해 build.gradle에서 아래의 의존성을 추가한다.//redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis'  그리고 나는 application-redis.yml을 따로 프로필을 만들어서 application-datasource.yml MySQL과 분리하는 방식을 사용하고 있다.application-redis.yml은 아래와 같다.spring: config: activate: on-profile: "redis" data: .. 2024. 7. 31.
[DB] MySQL이 아니라 redis에 refresh token을 저장했을 때의 이점이 뭘까 Refresh token을 MySQL과 같은 일반 RDBMS를 사용하는 것이 아니라 RDBMS가 아닌 redis에 저장하여 사용하는 사례가 있어서 "왜?"라는 질문을 던지고 답을 해나아가는 과정을 기록하고자 한다. Redis란redis는 디스크가 아니라 메모리에 데이터를 저장하는 인메모리 방식의 DB이다.익숙한 MySQL의 경우 SSD, HDD와 같은 보조기억 장치(involatile 비휘발성)에 데이터를 저장하는데 In-Memory 방식의 데이터베이스의 경우 컴퓨터의 주 메모리인 RAM(volatile 휘발성)에 데이터를 저장한다. 운영 체제 시간에 배웠던 내용을 떠올려 보면특정 프로세스가 실행이 되면 컴퓨터는 보조기억장치에 저장된 데이터를 RAM으로 불러와 CPU가 일을 수행한다. 따라서 redis와.. 2024. 5. 9.
[DB] index 보호되어 있는 글 입니다. 2024. 4. 26.
[Java] stream API 보호되어 있는 글 입니다. 2024. 4. 24.
[Java] Record Java 14에 새롭게 추가된 record에 대해 알아보고 이를 활용할 방안을 제시하며 record 관련 질문들에 대비하는 시간을 가져보려고 한다.  Record의 경우 백엔드 프로젝트에서 dto를 class가 아니라 record 타입으로 짜는 다른 분의 코드를 보고 처음 알게 되어 내가 직접 dto에 record를 적용하면서 record의 진가에 대해 알게 되었다. Record란?레코드는 코틀린의 data class라고 생각하면 이해하기 쉽다. 정말 순수하게 코틀린의 data class처럼 데이터를 보유하기 위한 specific class이다. 아래는 실제 내가 프로젝트에서 적용한 record이다.package com.sejong.sejongpeer.domain.honbab.dto.response;im.. 2024. 4. 22.