Spring + RabbitMQ를 통한 1:1 채팅방 구현 - 채팅내역을 MongoDB로 (2)
·
Project/RabbitMQ(STOMP)를 적용한 1:1 채팅
GitHub - lsh2613/spring-rabbitmq: Spring + RabbitMQ를 활용한 1:1 채팅방 구현Spring + RabbitMQ를 활용한 1:1 채팅방 구현. Contribute to lsh2613/spring-rabbitmq development by creating an account on GitHub.github.com 1. 채팅 내역을 MongoDB에 저장하는 이유1. MongoDB는 NoSQL의 한 종류로 RDB보다 더 빠른 읽기/쓰기 성능을 가진다.2. 사용자가 많아질수록 채팅 데이터는 훨씬 많아지기 때문에 scale-out을 고려해야 하는데, 대부분의 NoSQL을 클러스터링을 지원하여 보다 쉬운 scale-out을 적용할 수 있다.3. 채팅은 정형화되어 있기 보다는 언..
Spring + RabbitMQ를 통한 1:1 채팅방 구현 (1)
·
Project/RabbitMQ(STOMP)를 적용한 1:1 채팅
GitHub - lsh2613/spring-rabbitmq: Spring + RabbitMQ를 활용한 1:1 채팅방 구현Spring + RabbitMQ를 활용한 1:1 채팅방 구현. Contribute to lsh2613/spring-rabbitmq development by creating an account on GitHub.github.com  1. RabbitMQ 선택 이유우선 채팅방을 구현하기 위해 실시간으로 데이터 통신이 이루어져야 하기 때문에 HTTP가 아닌 소켓을 활용해야 한다.STOMP라는 소켓을 활용한 메시징 프로토콜을 사용하면 채팅을 쉽게 구현할 수 있다.STOMPSTOMP(Simple Text Oriented Messaging Protocol)는 이름 그대로 간단한 텍스트 기반의 메..
[백준] 감시 15683 - 자바
·
Coding Test/백준
https://www.acmicpc.net/problem/15683 15683번: 감시스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감www.acmicpc.net문제 풀이이 문제의 입력조건을 보면 값이 작은 편이라 완전탐색을 할 수 있고 완전탐색을 하기 위해서 백트래킹을 사용할 수 있다. 먼저 본인의 접근법은 각 cctv가 감시할 수 있는 모든 경우의 수를 조합하여 백트래킹을 실행하여 cctv가 켜지면 감시당하는 지역의 값을 -1, cctv가 꺼지면 (백트래킹이기 때문에 cctv를 꺼야 된다) 해당 지역의 값을 +1을 해준다.모든 cctv를 탐색이 ..
[백준] 14891 톱니바퀴 - 자바
·
Coding Test/백준
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 문제 풀이 이 문제를 풀 때 가장 중요한 것은 중앙 톱니바퀴를 기준으로 좌측/우측의 극이 다를 경우 회전을 하게 되는데 이때 중앙 톱니바퀴를 회전하기 전에 좌측/우측의 극을 먼저 확인 후에 회전시켜야 한다는 것이다. 또한 극이 다를 경우 좌측/우측의 톱니바퀴가 회전하게 되는데 이 톱니바퀴에 의해 또 다른 좌/우측의 톱니바퀴가 회전할 수 있다. 따라서 재귀를 통해 좌/우측의 극이 같을 때까지 ..
[백준] 16236 아기 상어 - 자바
·
Coding Test/백준
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 문제 풀이 주어진 보드에서 탐색을 통해 물고기를 얼마나 먹을 수 있는지 구하는 문제이다. 하지만 물고기를 먹는데 우선순위가 있다. 가장 가까운 물고기를 먼저 먹는다 같은 거리라면 가장 위에 있는 물고기를 먹는다 같은 높이라면 왼쪽에 있는 먹이를 먹는다 물고기의 크기가 아기 상어보다 작아야 한다. 이를 통해 각 물고기를 향하기 위한 우선순위 조건을 파악할 수 있고 우선순위 큐를 사용하여 해당..
swagger + springdoc 연동 및 파라미터 이름 미스매핑 arg0 해결
·
Error Solution
기존에는 spring boot 2.* springfox를 사용하여 swagger를 이용했지만 boot 3.* 부터는 springdoc을 더 권장하는 분위기이고 springfox는 2년 전 개발이 중단되었지만 springdoc은 계속 개발되고 있어 이번에는 boot3과 springdoc을 사용해보았다. 설정 부분에서는 크게 달라진 점 없었고 아래 종속성만 추가해주면 된다. //swagger 연동 implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' boot3으로 넘어오면서 바뀐건지 해당 종속성 문제인지는 모르겠지만 앱 실행하면 다음과 같은 에러가 발생한다. jakarta.validation.NoProviderFoundExcepti..
[백준] 14503 로봇 청소기 - 자바
·
Coding Test/백준
https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 문제 풀이 구현-시뮬레이션 문제는 조건에 맞게 천천히 구현하기만 하면 돼서 알고리즘적으로 크게 어렵진 않다. 주어진 좌표부터 시작하여 각 좌표에 방향을 추가적으러 관리하고 청소되지 않은 조건에 대하여 각 상황에 맞는 행동을 하도록 if문을 추가해주면 된다. 먼저 주어진 방향에 대해 구현해보면 다음과 같다. 상수를 활용하여 휴먼에러를 최소화하였다, ..
[백준] 1339 단어 수학 - 자바
·
Coding Test/백준
https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 문제 풀이 몇 십분 동안 고민했지만 해결법이 안 떠올라 구글링을 통해 해법을 찾고 구현을 시도했다. 단순히 따라치는 것이 아니라 설계를 이해하고 직접 쳐보는 것이 중요한 것 같다. 처음 내가 생각한 접근법은 비슷했다. 1. 각 알파벳이 높은 자리수에 위치 2. 같은 자리수라면 더 많이 등장한 횟수 위 접근법을 구현하고자 자리수와 등장횟수를 관리하기에는 너무 어려웠다. 구글링해서 얻은 해법은 ..
[2023 KAKAO BLIND RECRUITMENT] 이모티콘 할인행사 - 자바
·
Coding Test/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 순열을 이용하여 각 상품의 적용할 수 있는 할인율을 모두 구하여 완전 탐색을 통해 원하는 결과를 얻을 수 있다. 할인율 4개, 이모티콘 갯수 최대 7개로 순열의 경우의 수는 4^7로 16384개가 나오고 이렇게 나온 모든 경우의 수에 대하여 각 유저가 구매할 수 있는지 체크해야 하므로 최대 유저 100명이니까 1,678,400의 연산이 수행된다. 비교적 적은 횟수로 완전 탐색을 진행하..
[2023 KAKAO BLIND RECRUITMENT] 개인정보 수집 유효기간
·
Coding Test/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 알고리즘이 들어가지 않은 기본적인 구현 문제라 크게 어렵진 않았을 것이다. 문자열을 분리하여 년, 월, 일을 구분하고 두 날짜의 차이를 구할 수 있다면 쉽게 해결할 수 있다. 필자는 두 날짜의 차이를 구하기 위해 일(day)로 변환하는 작업을 진행했다. 기본적으로 today가 privacy의 날짜보다 더 크다. 또한 약관 terms는 Map에 저장하여 파기해야 하는 정보인지 비교할 때..