반응형

전체 글 90

Websocket-STOMP 및 DB 통합 테스트해보자

웹소켓 연결 및 메시지를 전송해서 MongoDB에 데이터를 등록해보려고 한다.클라이언트 앱이 아직 준비가 안 돼서 다른 방법으로 테스트해볼 것이다.  WebSocket Debug Tool jiangxy.github.io포스트맨에서는 STOMP 서브 프로토콜을 지원하지 않는다.위의 페이지에 접속하여 테스트해보자.  설정 파일/** * 엔드포인트 설정 * @param registry */@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {    registry.addEndpoint("/ws")            .setAllowedOriginPatterns("*");            .withSockJS();} 컨트롤..

개발/스프링 2025.04.05

[미해결] 다른 서비스의 DB 데이터를 통합 조회할 수 있을까?

💡 문제 상황서로 다른 두 서비스 A, B의 데이터베이스에는 유사한 메타를 가진 테이블이 있음.사용자에게 통합검색 서비스를 제공하는 목적으로 두 테이블의 데이터를 합쳐 보여 달라는 요구사항이 발생함. ✅ 조건데이터량이 방대하여 페이징이 필요함. 또한 사용자가 검색 조건을 입력하거나, 정렬 기준을 선택할 수 있음.사용자의 화면에서 특정 버튼을 누르면 A 테이블엔 B 테이블의 ID, DB 구분(A/B)을 포함한 행 데이터가 추가됨.단 ID 외의 다른 정보는 B 테이블에만 존재함  시도 - 애플리케이션 차원 데이터 병합서버단에서 A 테이블의 ID, DB 구분을 전체 조회DB 구분별로 ID를 나눠 구분별 리스트 변수에 저장구분별 리스트 변수를 인자로 하여 각 DB에 IN 조회 수행 및 조회 조건 포함조회된 데..

개발 2025.04.02

[Trouble-shooting] 클라이언트에서 Websocket-STOMP 연결 요청 시 FALLBACK이 사용되는 현상

서버 쪽 핸들러에 문제가 있는 건가 했는데, 결론적으로는 클라이언트에서 웹소켓 연결 요청할 때 전달되는 쿼리스트링에 인코딩 되지 않은 특수문자가 포함되어 있던 것이 원인이었다. Websocket-STOMP & SockJS 코드 일부분✅ 클라이언트 코드const socket = new SockJS('http://localhost:8083/ws?token=' + username); ✅ 서버 코드@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {    registry.addEndpoint("/ws")            .setAllowedOriginPatterns("*")            .setHandshakeHan..

개발/스프링 2025.03.28

[Beakjoon] 1978. 소수 찾기 #B2 #Java

문제주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.예제 입력 141 3 5 7예제 출력 13제약조건✅ 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.✅ 주어진 수들 중 소수의 개수를 출력한다. 문제풀이public class Main { public static void main(String[] args) throws IOException { // 1. 변수 선언 및 초기화 int maxValue = 1_000; int[] primeArr = new int[maxValue + 1]; BufferedReader br = new BufferedRe..

[Trouble-shooting] 중첩 클래스명 중복으로 Swagger가 고장났다

스웨거로 사용자를 등록하려고 하는데, API 문서 내 DTO가 제대로 매핑이 되고 있지 않다는 걸 알게 됐다. @Schema(description = "공지사항 요청 DTO")class NoticeRequestDto {    @Schema(description = "공지사항 등록 요청")    class CREATE (        @Schema(description = "제목")        val title: String,        @Schema(description = "내용")        val content: String,        @Schema(description = "작성자 이메일")        val writerEmail: String    )}@Schema(descriptio..

개발/스프링 2025.03.21

Faker가 만들어 주는 테스트 데이터, 또 나만 몰랐지

본인은 여태 테스트용 데이터는 무조건 만들어진 기능을 통해 생성해 왔다.기존 시퀀스에 영향을 주거나 특정 기능에 연쇄돼서 생성되어야 하는 데이터가 존재하기 때문에 SELECT 쿼리 외에는 DB를 통해 데이터를 조작하는 걸 꺼려했던 것이다.그런데, 반대로 생각하면 기존 데이터나 다른 테이블에 영향을 주지 않는 선에서는 DB 조작을 통해 데이터를 생성해도 무방하다는 것이다.오늘 공지사항 화면을 개발하고, 페이지네이션 버튼이 잘 생성되는 지 확인하기 위해 테스트용 더미 데이터가 필요했다. 그런데 DB에 ID, 제목, 내용, 등록일자, 수정일자, 작성자 이메일 등 직접 컬럼 값을 작성하기가 너무 귀찮은 것이다. 그래서 테스트용 더미 데이터를 생성할 수 있는 라이브러리 Faker를 들고 왔다. Faker는 Jav..

개발/스프링 2025.03.19

[Trouble-shooting] MyBatis는 카멜케이스 설정을 직접 해야 한다

@Schema(description = "공지사항 목록 조회 응답 DTO")class NoticeResponseDto (    @Schema(description = "작성자 이메일")    val writerEmail: String,    @Schema(description = "작성자 이름")    val writerName: String,    @Schema(description = "제목")    val title: String,    @Schema(description = "내용")    val content: String,    @Schema(description = "등록일자")    val createdDate: String,    @Schema(description = "수정일자")   ..

개발/스프링 2025.03.18

[Baekjoon] N과 M (1 ~ 12) #BackTracking

그동안 너무 쉬운 문제만 풀어와서 백트래킹을 까먹었다..백트래킹을 이해하기 좋은 N과 M 문제들을 모두 풀어보았다. N과 M (1)https://www.acmicpc.net/problem/15649 문제1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 문제풀이public class Main { // 전역 변수 static int n, m; static boolean[] visited; // 백 트래킹 처리 메서드 static void backtracking(int depth, String str) { if (depth == m) { System.out.println(str); return; } ..

[Baekjoon] 1052. 물병 #G5 #Java

문제지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번에 K개의 물병을 옮길 수 있다. 하지만, 지민이는 물을 낭비하기는 싫고, 이동을 한 번보다 많이 하기는 싫다. 따라서, 지민이는 물병의 물을 적절히 재분배해서, K개를 넘지 않는 비어있지 않은 물병을 만들려고 한다.물은 다음과 같이 재분배 한다. 먼저 같은 양의 물이 들어있는 물병 두 개를 고른다. 그 다음에 한 개의 물병에 다른 한 쪽에 있는 물을 모두 붓는다. 이 방법을 필요한 만큼 계속 한다.이런 제약 때문에, N개로 K개를 넘지않는 비어있지 않은 물병을 만드는 것이 불가능할 수도 있다. 다행히도, 새로..

이미저를 통해 라즈베리파이5에 우분투를 설치해보자

Raspberry Pi OS – Raspberry PiFrom industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.www.raspberrypi.com 라즈베리파이는 여러 종류의 운영체제를 지원한다. 라즈베리파이 OS 우분투 MATE 윈도우 10 IoT Core 위에 첨부한 라즈베리파이 공식 사이트에서 라즈베리파이 이미저를 다운로드할 수 있다. 라즈베리파이 이미저를 MicroSD 카드에 설치하여 본품에 삽입하면 된다. 장치 선택 → 운영체제 선택 → 저장소 선택 순으로 진..

개발 2025.03.14