[예약 대기 시스템] 1. 답답하니까 직접 만들게요
·
Project
불친절한 예약 시스템제가 정말 좋아하는 방탈출 테마가 있습니다.서울 여러 지점에 걸쳐 다양한 테마를 운영하는 아주 유명한 방탈출 카페입니다.이 방탈출 카페는 온라인 예약제로 운영되는데요,전체 예약 프로세스는 다음과 같습니다.1. 예약 페이지로 이동2. 지점/날짜/테마 선택3. 예약 정보 입력4. 결제5. 예약 완료이 예약 프로세스에서 정말 불친절하다고 느낀 부분은 바로[1. 예약 페이지로 이동] 단계, [2. 지점/날짜/테마 선택] 단계와 [3. 예약 정보 입력] 단계입니다. 하나씩 살펴보면요,하나. [1. 예약 페이지로 이동]: 1단계부터 불친절하다.가장 먼저 예약 페이지로 이동할 때 이런 알림창을 보게 됩니다.접속자 수가 많아서 다음에 다시 시도하세요. (20)그리고 다시 메인 페이지로 랜딩되다가도 ..
[RabbitMQ] 3. 스프링 부트에서 RabbitMQ 설정 방법
·
Message Broker
이전 포스팅에선 AMQP 에 대해 살펴봤는데요, 2024.08.15 - [Message Broker] - [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해2024.08.16 - [Message Broker] - [RabbitMQ] 2. AMQP 란? 이번엔 스프링 부트(Spring Boot 3.x)에서 RabbitMQ 를 설정하는 법을 알아보겠습니다. 1. RabbitMQ 의존성 추가먼저, https://start.spring.io/ 에서 프로젝트를 초기 설정할 때를 예시로 들겠습니다.ADD DEPENDENCIES 버튼을 눌러 "rabbitmq" 로 검색하여 의존성을 추가합니다.그러면 build.gradle 에는 다음과 같이 적용되어 있습니다.dependencies { impl..
[RabbitMQ] 2. AMQP 란?
·
Message Broker
이전 포스팅에선 메시지 브로커에 대해 알아봤습니다.2024.08.15 - [Message Broker] - [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해 이번 포스팅에선 표준화된 메시지 프로토콜인 AMQP 에 대해 알아보겠습니다.AMQP(Advanced Message Queuing Protocol) 란?AMQP 는 메시지 지향 미들웨어(Message Oriented Middleware;MOM)에서 메시지 브로커 간 통신을 표준화하기 위해 설계된 프로토콜입니다.서로 다른 시스템(이기종 포함)들이 소통할 때 각자 다른 방식을 사용한다면 한 쪽에서는 메시지를 읽는 방식을 맞춰줘야하는 불편함이 있거나 아예 소통하지 못할수도 있습니다.이런 문제를 해결하기위해 탄생한 AMQP 는 안전하..
[RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해
·
Message Broker
프로젝트를 진행하며 채팅 시스템에 사용될 '비동기 메시지 큐'를 구현하기 위해 메시지 브로커(Message Broker)에 대해 학습했고, 이 과정에서 얻은 지식들을 정리하는 포스팅을 연재해 볼까 합니다. 이 포스팅은 연재의 첫 번째로써 메시지 브로커에 대한 이해를 바탕으로 한 꺼풀씩 풀어보고자 합니다. 메시지 브로커란?메시지 브로커는 애플리케이션 간 서로 통신할 때 정보를 주고받을 수 있도록 도와주는 소프트웨어입니다.우체국처럼 메시지를 보내는 쪽인 생산자(Producer)와 메시지를 받는 쪽인 소비자(Comsumer) 사이에서 메시지를 전달하는 역할을 수행합니다.그렇기 때문에 MSA(Micro Service Architecture) 또는 분산 시스템에서 서비스 간 통신에 주로 사용되는 경우가 많고, 시..
[Kotlin] Quick Sort(퀵 정렬) 알고리즘
·
Algorithm
이번 포스팅은 정렬 알고리즘 중 빠르다고 알려진 Quick Sort(퀵 정렬) 에 대해 3가지 주제를 중심으로 알아보려 합니다.퀵 정렬의 기본 원리퀵 정렬의 시간 복잡도피벗 선택 방법의 차이퀵 정렬의 기본 원리Quick Sort(퀵 정렬)은 분할 정복(Divide and Conquer) 알고리즘을 기반으로하는 알고리즘입니다. 퀵 정렬의 기본 동작을 알아보겠습니다.피벗 선택: 배열에서 요소 하나를 선택해서 피벗으로 정합니다.분할: 정한 피벗을 기준으로 배열을 두 부분으로 나눕니다.이때 피벗보다 작은 요소는 피벗의 왼쪽으로, 피벗보다 큰 요소는 피벗의 오른쪽으로 위치합니다.재귀적 정렬: 분할된 두 부분에 대해 재귀적으로 퀵 정렬을 수행합니다.퀵 정렬의 시간 복잡도퀵 정렬의 시간 복잡도는 피벗을 어떻게 선택하..
[Java] opencsv 로 CSV 읽고 저장하기
·
Java
개요이 글에서는 Java와 OpenCSV 라이브러리를 사용하여 간단한 웹 크롤러를 구현하고, 수집한 데이터를 CSV 파일로 저장하거나 CSV 파일에서 읽어오는 방법을 다룹니다.OpenCSV 의존성 추가먼저, 프로젝트에 OpenCSV 라이브러리를 추가합니다. build.gradle 파일에 다음 의존성을 추가하세요.implementation 'com.opencsv:opencsv:5.9'Java POJO 구현다음은 CSV 파일의 데이터를 매핑할 Java POJO 클래스입니다.import com.opencsv.bean.CsvBindByName; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTim..
[Svelte] 채팅 시스템 - 새로운 채팅이 생겼을 때 스크롤을 맨 아래로 내리는 방법
·
Svelte
채팅 시스템을 만드는 프로젝트를 만들다가새로운 채팅이 생겼을 때 해당 채팅으로 스크롤을 내리는 기능이 필요했습니다.이렇게요! 구현 방법: beforeUpdate() & afterUpdate()전체 코드를 먼저 보겠습니다....{#each chatLogs as chat, idx} {/each}... 저는 채팅 메시지를 저장할 배열(chatLogs)을 만들었습니다. 그리고 채팅 메시지 한 건마다 'data-chat-id' 라는 값을 부여해줬습니다. (이 부분은 나중에 백엔드와 연결되면 메시지의 id 가 되겠죠?)왜냐면 data-chat-id 값을 찾아서 해당 태그로 스크롤 이동을 해야하기 때문이죠. 마지막으로 새로운 채팅이 배열에 추가될 때 마다 beforeUpdate() 와 afterUpdate()..
[Querydsl] MySQL 공간 데이터(Point)의 반경 검색 (ST_CONTAINS)
·
Querydsl
이번 포스팅에선 숙소 예약 프로젝트를 진행하며 Querydsl로 공간 데이터를 조건으로하는 표현식(Expression)에 대해 알아보겠습니다.기본 환경 및 의존성기본 환경과 의존성은 다음과 같습니다.- Java 17- Spring Boot 3.3.0- DB: MySQL 8.0- ORM: querydsl 5.1.0- 공간 데이터 의존성: hibernate-spatial 6.5.2Entity@Entitypublic class Stay { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "STAY_ID") private Long id; @Column(name = "POINT", columnDefinitio..