[BOJ/Gold1] 1700번 멀티탭 스케줄링 - JAVA[자바]
·
PS/백준
난이도 : 골드 1유형 : 그리디 / 구현링크 : https://www.acmicpc.net/problem/1700구현 시간 : 1시간     문제 풀이 이 문제는 그리디 알고리즘 유형으로, 멀티탭에 꽂힌 전기용품 중 어떤 것을 제거해야 하는지 결정하는 문제입니다. 멀티탭의 상태를 관리하기 위해 삭제 및 삽입이 용이한 List 자료구조를 사용하여 구현하였습니다.현재 멀티탭이 비어있거나 빈 구멍이 있는 경우새로운 전기용품을 그대로 꽂습니다.새로운 전기용품이 이미 멀티탭에 꽂혀 있는 경우추가적인 작업 없이 그대로 넘어갑니다.멀티탭이 꽉 찬 상태에서 새로운 전기용품이 등장할 경우 (🔥핵심)1. 이후 사용되지 않는 전기용품이 있다면해당 전기용품을 제거합니다.2. 모든 전기용품이 이후에도 사용된다면가장 마지막에..
[Spring boot] Redis Cache를 적용한 조회 성능 개선
·
Back-End/Spring
들어가며현재 진행 중인 프로젝트의 채팅 기능에서 채팅 내역 조회가 빈번하게 발생하고 있습니다. 사용자가 매번 채팅을 조회할 때마다 데이터베이스에 직접 접근한다면, 사용자가 많아질 경우 데이터베이스에 큰 부하가 가해져 전체적인 서비스 성능이 저하될 수 있습니다. 특히, 채팅 서비스는 실시간으로 데이터가 생성되고 조회되는 특성을 가지고 있기 때문에, 데이터베이스의 부하를 줄이고 빠른 응답 속도를 제공하는 것이 중요합니다. 이러한 문제를 해결하기 위해 캐싱(Caching) 기능을 도입하기로 결정했습니다. 캐싱은 자주 조회되는 데이터를 임시 저장소에 저장해 두고, 동일한 요청이 들어왔을 때 데이터베이스에 접근하지 않고 캐시에서 빠르게 데이터를 제공하는 기술입니다. 이를 통해 데이터베이스의 부하를 줄이고, 사용자..
[Spring boot] No Offset 적용한 페이징 성능 개선 - MongoDB
·
Back-End/Spring
들어가며CATCH-Mi 서비스의 성능 개선을 진행하면서, No Offset Pagination을 통해 페이징 기능을 효과적으로 개선할 수 있다는 것을 알게 되었습니다. 이번 글에는 기존 Offset 방식과 No Offset 방식의 장단점을 비교하고, 실제 서비스에 No Offset 방식을 어떻게 적용했는지 코드와 함께 그 과정을 정리해보고자 합니다. 페이지네이션이란 ?페이지네이션(Pagination)은 대량의 데이터를 효율적으로 조회하기 위해 데이터를 일정한 크기(Page)로 나누어 조회하는 방식입니다. 이를 통해 사용자는 한 번에 모든 데이터를 처리하지 않고, 원하는 부분만 빠르게 조회할 수 있습니다. 페이지네이션은 웹 애플리케이션, 모바일 앱, API 등 다양한 환경에서 널리 사용되고 있습니다.  O..
[BOJ/Silver2] 18353번 병사 배치하기 - JAVA[자바]
·
PS/백준
난이도 : 실버 2유형 : 동적 계획법 / LIS링크 : https://www.acmicpc.net/problem/18353구현 시간 : 30분    문제 풀이이 문제는 ‘가장 긴 감소하는 부분 수열’을 찾는 문제로, LIS(가장 긴 증가하는 부분 수열) 알고리즘을 변형해서 해결할 수 있습니다.DP 테이블은 각 위치에서 끝나는 가장 긴 감소하는 부분 수열의 길이를 저장합니다. 예를 들어, dp[i]는 i번째 숫자를 마지막으로 포함하는 가장 긴 감소하는 부분 수열의 길이를 의미합니다.각 숫자를 기준으로 그 이전 숫자들과 비교합니다.만약 현재 숫자(arr[i])가 이전 숫자(arr[j])보다 작다면, 이전 숫자를 포함하는 감소하는 수열에 현재 숫자를 추가할 수 있습니다.이 경우, dp[i]를 dp[j] + ..
[Spring boot] MySQL → MongoDB 마이그레이션 과정
·
Back-End/Spring
들어가며이번 포스팅에서는 MySQL로 구현된 채팅 데이터베이스를 MongoDB로 마이그레이션 하고, bwildvogel 라이브러리를 사용하여 스프링 내장 MongoDB를 띄워 테스트 코드를 구현하는 과정을 다뤄보겠습니다. 이미 JPA로 구현된 엔티티를 MongoDB로 마이그레이션 하는 이유는 데이터베이스의 스키마가 자주 변경되어 유연성이 필요하거나 관계형 데이터베이스가 필요 없는 경우 등 여러 가지가 있을 수 있습니다. 기존에 MySQL로 저장된 채팅 데이터베이스를 MongoDB로 마이그레이션 한 이유는 크게 두 가지입니다. 1. 유연성과 스키마 변경의 용이성채팅 서비스는 기능 추가나 요구사항 변경에 따라 데이터 구조가 자주 바뀔 수 있습니다. MongoDB는 스키마리스(NoSQL) 데이터베이스로, 이러..
[Spring boot] WebSocket 을 사용하여 채팅 서비스 구현하기(3) - STOMP를 사용하여 실시간 채팅 구현 (비동기 처리)
·
Back-End/Spring
들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 STOMP 프로토콜과 스프링 내장 메시지 브로커를 사용해서 실제 채팅 애플리케이션을 구현하는 과정을 다뤄보려고 합니다. 캐치미 서비스의 채팅 도메인 규칙과 채팅 ERD 설계 과정이 궁금하신 분은 이전 글을 참고해주세요! [Spring boot] WebSocket 을 사용하여 채팅 서비스 구현하기(2) - 채팅 데이터베이스 설계하기들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 캐치미 채팅 서비스의 도메인 규칙에tenaciously.tistory.com  Web..
[프로그래머스/Level3] 블록 이동하기 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 3유형 : BFS / 구현구현 시간 : 1시간링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제 설명로봇개발자 "무지"는 한 달 앞으로 다가온 "카카오배 로봇경진대회"에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 "무지"는 "0"과 "1"로 이루어진 N x N 크기의 지도에서 2 x 1 크기인 로봇을 움직여 (N, N) 위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌..
[Spring boot] WebSocket 을 사용하여 채팅 서비스 구현하기(2) - 채팅 데이터베이스 설계하기
·
Back-End/Spring
들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 캐치미 채팅 서비스의 도메인 규칙에 따라 채팅 데이터베이스를 설계한 경험을 다뤄보려고 합니다. 소켓과 웹소켓, STOMP 프로토콜에 대한 개념, HTTP 통신과의 차이점의 차이점을 알고 싶은 분은 이전 글을 참고해 주세요! [Spring boot] WebSocket 을 사용하여 채팅 시스템 구현하기(1) - 웹소켓(WebSocket), STOMP 이해하기들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 소켓과 웹소켓, STOMP 프로토콜에 대한tenaciousl..
[BOJ/Gold5] 15686번 치킨 배달 - JAVA[자바]
·
PS/백준
난이도 : 골드 5유형 : 조합 / 구현 / 백트래킹링크 : https://www.acmicpc.net/problem/15686구현 시간 : 30분       문제풀이위 문제의 핵심은 M개의 치킨집의 조합에 따라 최소 치킨 거리는 달라진다. 이 말이 무슨 뜻이냐면 항상 작은 치킨 거리의 합을 가지는 경우를 선택하면 안되므로 그리디 알고리즘은 사용할 수 없다. 예를 들어 6개의 치킨집 중 하나의 치킨집을 폐업시킬 때는 6개의 치킨집을 순회하며 하나씩 치킨집을 삭제해보고 최소값을 찾으면 되지만, 이 후 5개의 치킨집 중 하나의 치킨집을 다시 폐업시킬 때는 이전의 선택에 영향을 받을 수 있다는 의미이다.  따라서 현 상황에서 가장 좋은 선택을 하는 그리디 알고리즘은 사용하지 못하고, N개의 치킨집중 M개의 치..
[프로그래머스/Level3] 기둥과 보 설치 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 3유형 :구현 / 시뮬레이션구현 시간 : 2시간 (못품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr       문제풀이위 문제는 많은 조건을 생각해야하는 빡구현 문제다. 주어진 좌표에 기둥과 보를 설치하는 구현은 정말 쉽지만, 기둥과 보를 삭제할 때 고려해야할 경우의 수는 매우 많다. 해당 경우의 수에 대해서 설명해보겠다. 나는 처음 구현할 때, 설치, 삭제 모두 전부 경우의 수를 고려해서 코드를 구현했는데 복잡한만큼 실수가 많아서 실패했다.  포기 후 다른..