전체 글 134

[Troubleshooting]JSON_TABLE과 LEFT JOIN으로 인한 카테시안 곱

문제프로젝트를 진행하며 MBTI 기반 매칭 시스템을 작업하던 중 문제가 발생했다.사용자의 기술 스택 정보를 조회하는 쿼리에서 한 사용자의 기술 스택이 계속 중복되어 나타나는 것이다.예를 들어 '춘식이'라는 사용자의 기술 스택이 4번씩 반복되고 있었다. 똑같은 기술 스택이 4번씩 반복되고 있었다. 원인 분석문제의 원인을 찾기 위해 쿼리를 자세히 살펴봤다. LEFT JOIN JSON_TABLE( #{companyMbti}, "$[*]" COLUMNS(company_mbti CHAR(4) PATH "$") ) jt ON JSON_VALID(#{companyMbti}) AND jt.company_mbti IS NOT NULLLEFT JOIN mbti_compat compat ON compat...

TroubleShooting 2025.07.23

[Redis] 레디스 자료형 8가지

요즘 Redis를 찾아보며 자료형이 정말 다양하다는 걸 깨달았다.처음엔 그냥 Key-Value 저장소인 줄 알았는데, 알고 보니 8가지나 되는 자료형을 지원하였다. 📚 기본 자료형 5가지1. String> SET mykey "안녕하세요!"OK> GET mykey"안녕하세요!"> SET counter 100OK> INCR counter(integer) 101 가장 기본적이고 많이 사용되는 자료형텍스트, 숫자, 이진 데이터 모두 저장 가능최대 512MB까지 저장 가능숫자라면 INCR, DECR 같은 연산 가능사용하기 유용한 상황간단한 캐싱할 때세션 정보 저장할 때카운터 (조회수, 좋아요 수 등)API 토큰 저장할 때2. List - 순서가 중요한 데이터들> LPUSH mylist "첫번째"(integer)..

DB 2025.06.24

TransientDataAccessResourceException

문제 Spring batch 사용 시 Read 방식을 List로 구현하였을 때에는 정상적으로 동작이 수행되었다이후, read방식을 paging 으로 변경 후 quartz가 실행되었을 때, TransientDataAccessResourceException 발생하였다. org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 문제의 본질mybatis는 내부적으로 3가지 실행자(executor)를 지원한다.SIMPLE (디폴트) : 구문 실행마다 새로운 PreparedStatement를 생성REUSE : PreparedStateme..

TroubleShooting 2025.06.02

Github, Jenkins, Docker를 활용한 CI/CD - 3

이전 글에서 CI를 통해 Docker-compose.xml, dockerfiles 및 .jar file 이 jenkins 아카이브에 저장되었었다. 아카이브에 저장된 데이터들을 토대로 CD를 구현하기 위해 새로운 pipeline을 만든다. 1. 배포할 .jar 파일명2. public IP 명과금문제로 인해 IP가 바뀌게 되므로 이 두가지 값을 매개변수로 지정하여 사용할 예정이다. .jar 매개변수 명 : 이후에 작성할 script에서 호출하기 위한 이름Default Value : 초기 파라미터 값을 지정해준다. 잦은 변경이 일어나지 않을경우 유용하다설명 : 해당 파라미터가 어떤 파라미터인지 알아볼 수 있도록 설명하기 위한 부분 위와 동일하지만 public IP는 자주 바뀌기 때문에 default Value..

CI\CD 2025.05.19

Github, Jenkins, Docker를 활용한 CI/CD - 2

CI를 위한 pipeline 구성 젠킨스에서 하나의 CI/CD 프로젝트를 구축하기 위해서는 아이템(Item)을 생성하여야 한다.하나의 젠킨스 서버에 여러개의 아이템을 만들 수 있고 각각의 아이템들은 개발자가 설정하는 것에 따라 다르게 동작한다.젠킨스에서 아이템을 만드는 방법은 대표적으로 FreeStyle과 Pipeline이 존재한다.Freestyle장점웹 기반의 GUI를 통해 여러 플러그인을 쉽게 사용할 수 있다.단점:CI 파이프라인에 변경 사항을 만들기 위해서는 젠킨스에 로그인해 각각의 프리스타일 잡의 설정을 변경해야만 한다.CI/CD의 과정을 콘솔을 통해서만 확인할 수 있다.각각의 과정들을 한번에 보기 어렵다.Pipeline장점:파이프라인은 코드로 프로젝트 설정을 할 수 있어 프리스타일과 다르게 젠킨..

CI\CD 2025.05.17

Github, Jenkins, Docker를 활용한 CI/CD - 1

기본 세팅 github 토큰 발급Settings -> Developer settings -> Personal access tokens -> Tokens (classic) 필요한 권한 설정 후 생성 Docker 설치 Windows 11에 Docker Desktop 설치하기_2024.11목표Windows 11에 Docker Desktop 설치하기Docker 사용해보기 오랜만에 Docker설치하려고 하니 Docker 설치 UI가 바뀌어 2024.11.05 기준 다시 정리해보았습니다. 이번 정리에는 Docker 이미지 사용 예제도 함께herojoon-dev.tistory.com Docker 로 Jenkins 설치 docker로 jenkins 설치1. Jenkins를 Docker 이미지로 pulldock..

CI\CD 2025.05.17

docker로 jenkins 설치

1. Jenkins를 Docker 이미지로 pulldocker image pull jenkins/jenkins:jdk17 2. DockerfileFROM jenkins/jenkins:jdk17USER rootRUN apt-get update &&\ apt-get upgrade -y &&\ # 빌드가 완료된 프로젝트를 Jenkins(컨테이너) 외부의 서버에서 실행시켜야 하기 때문에 # ssh 를 통해 서버에 접속해 빌드된 프로젝트를 실행시키는 방법을 사용하기 위함 apt-get install -y openssh-client 3. docker-compose.ymlservices: jenkins: container_name: jenkins-container build: ..

CI\CD 2025.05.09

[Websocket] Redis pub/sub, WebSocket 기반 실시간 채팅 구현

1. RedisConfig RedisMessageListenerContainerRedis에서 발생하는 이벤트를 수신하는 리스너를 관리하는 빈 객체setConnectionFactory: Redis와의 연결을 담당하며 Redis 채널에서 들어오는 메시지를 수신하기 위해 사용한다RedisTemplateRedis 서버와의 데이터 전송 시 직렬화 및 역직렬화를 처리하고, Redis와의 상호작용을 담당한다Redis는 다양한 데이터 구조를 지원하지만, Java 객체를 Redis에 저장하려면 직렬화가 필요하다 Jackson2JsonRedisSerializerRedis에 저장되는 객체가 JSON 형태로 직렬화되고, Redis에서 가져온 데이터를 JSON으로 역직렬화할 수 있도록 설정한다. 2. WebsocketCon..

카테고리 없음 2025.05.08

[React] Vite 를 사용하여 React 설치 및 기본설정

1. npm create vite@latest : 리액트 파일 생성 명령어2. Y : 파일 생성 여부를 물어봄. y 입력 시 생성 진행3. 원하는 프로젝트 이름 입력, 키보드로 react선택, 키보드로 JS 선택4. 해당 폴더로 이동 npm i : package.json에 기록되어 있는 dependency 설치npm run dev → react 실행. index.html을 기준으로 실행됨http://localhost:5173/ : 해당 URL 접속 시 연결 확인 가능서버 종료 : 터미널 클릭 후 Ctrl + C main.html main.jsximport { StrictMode } from 'react'import { createRoot } from 'react-d..

FrontEnd 2025.04.26

docker란?, docker 사용방법

DockerDocker는 어플리케이션을 ‘컨테이너’라는 독립적인 환경에서 실행할 수 있도록 해주는 오픈 소스 플랫폼이다.어떤 앱이든 컨테이너 안에 넣어두면 어디서든 동일하게 실행될 수 있도록 해주는 도구라고 보면 된다.기본적으로 필요한 라이브러리, 설정, 종속성 등을 "컨테이너"로 패키징하므로 환경이 달라도 똑같이 동작하게 해준다. ✅ 이미지 (Image)컨테이너를 실행하기 위한 템플릿(실행 전의 정적인 스냅샷)애플리케이션, 라이브러리, 환경설정 등이 포함되어 있으며, 이 이미지를 바탕으로 컨테이너가 만들어진다 ✅ 컨테이너 (Container)이미지를 실행시켜 동작 중인 상태애플리케이션과 그 실행에 필요한 모든 파일, 라이브러리, 종속성 등을 포함한 격리된 실행 환경이 안에 들어 있는 앱은 외부 환경과..

CI\CD 2025.04.24