본문 바로가기

코딩 공부204

[DB] Redis RedisRedis는 오픈 소스로, 데이터베이스로 사용되는 Key-Value 저장소입니다. 또한 다양한 인메모리 데이터 구조를 제공히며, 비정형 데이터를 저장, 관리하기 위한 오픈 소스 기반의 NoSQL 입니다. 그래서 웹 서버의 부담을 획기적으로 줄이고, 고속으로 데이터 제공이 가능합니다.NoSQL란?Not Only SQL 혹은 Non-Relational Operational DataBase의 약자로 비관계형 데이터베이스를 지칭합니다. 기존의 RDBMS와 같은 관계형 데이터 모델을 지양하며 대량의 분산된 비정형 데이터를 저장하고 조회하는데 특화된 데이터베이스로 스키마 없이 사용하거나 느슨한 스키마를 제공하는 저장소입다.스키마란?데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것입니다.위 사.. 2024. 10. 9.
[DB] Index Index 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조입니다. 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다. 이렇게 인덱스가 생성하였다면 앞으로 쿼리문에 "인덱스 생성 컬럼을 Where 조건으로 거는 등"의 작업을 하면 옵티마이저에서 판단하여 생성된 인덱스를 탈 수가 있습니다.   즉 인덱스는 책에 있는 목차라고 생각하시면 편합니다. 우리가 책에서 정보를 찾을때도 먼저 원하는 카테고리를 목차에서 찾고 목차에 있는 페이지 번호를 보고 찾아가듯 인덱스도 인덱스에서 내가 원하는 데이터를 먼저 찾고 저장되어 있는 물리적 주소로 찾아갑니다. 🏷️ Index의 장점 테이블에 데이터들이 인덱스의 가장 큰 .. 2024. 10. 6.
[Spring / WebSocket] WebSocket와 STOMP WebSocketWebSocket은 클라이언트와 서버를 연결하고 실시간으로 통신이 가능하게 하는 프로토콜입니다.기존 HTTP 통신은 요청을 보내야만 요청을 받는 단방향 통신이고, Stateless(상태를 저장하지 않는) 방식이였습니다. 하지만 WebSocket은 양방향 통신으로 연결이 이루어지면 클라이언트가 별도의 요청을 보내지 않아도 데이터를 송신할 수 있으며, 상태를 유지하는 Stateful 프로토콜입니다.기존 HTTP 같이 양쪽 방향으로 송수신이 가능한 양방향 통신이지만 한 번에 하나의 전송만 이루어지도록 설정된 것을 반이중 통신(Half Duplex)이라하고, WebSocket 같이 데이터를 동시에 양방향으로 송수신 할 수 있는 것을 전이중 통신(Full Duplex)라고 합니다.만약 Notion.. 2024. 10. 5.
[Axios / Vue / Pinia] Axios를 사용할 때, JWT token 정보와 같이 요청하는 방법 Axios를 사용할 때, JWT token 정보와 같이 요청하는 방법프로젝트를 진행하면서 Vue를 사용하게 되었는데, 이때 JWT를 사용하여 Spring으로 요청을 보내면서 토큰을 같이 보내야 했습니다. 그래서 요청 헤더에 토큰을 넣어서 보내야 하는 방법이 필요하게 되었습니다. 그래서 찾아본 결과 Vue의 Pinia를 통해서 토큰을 관리하고 요청을 보낼 때, 같이 보내는 방법을 사용하게 되었습니다.🏷️ 사용 코드import { defineStore } from "pinia";export const useAuthStore = defineStore('auth', { state: () => ({ token: localStorage.getItem('token') || '', userId: '', .. 2024. 10. 5.
[Spring / SSE] SSE(Server Sent Event) 제가 진행하는 프로젝트에사 실시간 알림 기능을 계획하고 구현을 하게되었습니다. 이때, 실시간 알림 기능은 클라이언트가 서버에게 요청을 보내는 기존 기능과는 달리, 서버가 클라이언트에게 데이터를 보내면 클라이언트가 이를 인지하고 알림을 띄워줘야하는 동작을 해야했습니다. 하지만 HTTP 프로토콜의 주요 특징은 비연결성 입니다. 따라서 서버가 클라이언트에 데이터 전송시 인지해야할 경우, 서버가 전송하고 싶어도 해당 클라이언트와 지속적으로 연결이 되어있지 않기 때문에 보낼 수 없는 상황이 발생하게 되는 것입니다.이를 해결하는 방식으로 Polling, Long Polling, WebSocket, SSE 총 네 가지가 존재합니다. 그래서 SSE에 대해 설명하기 전 SSE를 제외한 3가지를 간단하게 설명하고 넘어가고.. 2024. 10. 4.
[Spring / Redis] Redis LocalDateTime 역직렬화 오류 Redis LocalDateTime 역직렬화 오류오류에 대해서 설명하기 전에 직렬화와 역직렬화에 대해 설명을 하려고 합니다.🏷️ 직렬화(Serialization)와 역직렬화(Deserialization) 객체를 데이터로 변환하고, 다시 데이터를 객체로 변환하는 과정을 의미하며, 주로 네트워크 통신이나 파일 저장 등에서 객체를 전송하거나 저장할 때 사용합니다.✅ 직렬화직렬화는 객체를 바이트 스트림(데이터를 바이트(byte)의 연속으로 나타낸 것)으로 변환하는 과정입니다. 직렬화를 위해서는 직렬화 가능한 클래스에 Serializable 인터페이스를 구현해야 하지만, Spring Boot에서는 직렬화된 객체를 웹 요청 또는 응답으로 전송할 때 자동으로 직렬화를 수행합니다.Spring Boot 에서는 일반적으.. 2024. 10. 3.