![[Spring] Mysql Replication 트러블슈팅](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdYjOAf%2FbtsQIYclrKz%2FAAAAAAAAAAAAAAAAAAAAAAJm1iYCXiX3k8XAZiAo1fpPC0NA0GhNo7EJKV1tNK_H%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DFb5bmVQD9g3p4I0GWJJ%252BYWm6DQw%253D)
🫢 문제 상황Spring Boot에서 Master/Slave 패턴으로 DB 구조를 구현했지만, @Transaction(readOnly = true)로 설정한 메서드가 계속 Master DB(3306)로 접근하는 문제가 발생하였습니다. Slave DB(3307)로 라우팅되어야 하지만 실제로는 읽기 전용 설정이 false로 인식되는 문제가 발생하고 있었습니다. ⚙️ 환경설정DB 설정(application.yml)spring: datasource: master: hikari: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/bank?serverTimezone=Asia/S..
![[DB] Master/Slave 패턴이란 ?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FeiFeow%2FbtsQG2NTmOw%2FAAAAAAAAAAAAAAAAAAAAADWM7kkBypLMO1b_YVd2rjtcMMHS78_ngFKoqoWPFsfm%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DVqVn18PZJTPTBrDy8l1A%252BpqbS5Y%253D)
Master/Slave 패턴이란 ?우리가 서비스를 이용하다 보면 보통 등록, 수정 보다 조회 요청이 많다는 것을 알 수 있습니다. 이때 사용자가 증가함에 따라 해당 요청을 처리하기 위해 DB에 많은 트랜잭션을 처리해야 하는데 이 요청으로 DB서버가 다운되면 서비스를 이용할 수 없게 될 것입니다.Master와 Slave는 이러한 문제를 해결하기 위해 설계된 DB 아키텍처로 Master에서는 등록과 수정, 삭제와 같은 작업을 처리하고, 이를 Slave에 복제고, 조회 요청은 Slave에서 처리하도록 트래픽을 분산합니다. 이로써 만약 Master 서버가 다운 되어도 Slave 서버를 마스터로 승격하여 서비스 복구를 빠르게 할 수 있어 고가용성이 증가됩니다.Master DatabaseMaster DB는 서비스의..
![[Claude Code] 클로드 코드로 바이브 코딩](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbldHnQ%2FbtsQzjudT1M%2FAAAAAAAAAAAAAAAAAAAAALA97bW75ilmbhG9npA7fEJipXiwetRmGnl5ay9I3UP1%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DAMuwXw7iPOhPl9zZ25ZNTvieugE%253D)
AI가 빠르게 발전하면서 개발자의 업무를 돕거나 대신할 수 있는 수준까지 발전했습니다. 빠르게 변화하는 세상속에서 뒤처지지 않기 위해 AI와 개발자가 협업하여 코드를 작성하는 바이브 코딩을 통해 프로젝트를 만들어 보았습니다. 바이브 코딩을 진행하면서 제가 겪었던 경험을 얘기해보겠습니다 !🙋🏻 나의 경험개발의 진입장벽가장 큰 장점 중 하나는 개발의 진입장벽이 낮아진다는 것입니다. 기존에는 프로그래밍 언어를 배우고, 개발 환경을 설정하고, 기본적인 문법을 익히는데 많은 시간이 필요했습니다. 하지만 단순히 원하는 기능이나 아이디어를 설명하는 것만으로도 바로 실행 가능한 코드 초안이 생성됩니다. 덕분에 비개발자라도 아이디어만 있으면 작은 프로젝트를 직접 시도해볼 수 있다는 점이 큰 매력으로 다가왔습니다. 분..
![[Redis] Redis 캐시 무효화란 ?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F3Z7We%2FbtsP9IHuLj6%2FAAAAAAAAAAAAAAAAAAAAAMzvJBhhl-JhRuhunRrAfovNIdzV9sA8bvBcvy5q4nGx%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3Dl4nYFme1%252BkVfqqoL5jG1YH8ri1I%253D)
프로젝트를 진행하다 보면 캐시에 저장된 데이터가 실제 DB와 다른 값을 반환하는 문제를 겪을 수 있습니다.저 역시 최근 Redis를 사용하면서, 데이터 변경이 발생했음에도 불구하고 잘못된 캐시가 계속 반환되는 상황을 발견했습니다. 원인을 확인해보니, 캐시 무효화 키 설계가 부정확하여 실제 데이터가 수정되더라도 Redis에 저장된 기존 캐시가 삭제되지 않고 남아 있었습니다. 이번 글에서는 캐시 무효화가 무엇인지, 키 설계 시 지켜야 할 컨벤션은 무엇인지 알아보겠습니다 ! 🗑️ 캐시 무효화(Cache Invalidation)란 ?캐시는 애플리케이션 성능을 높이기 위해 자주 조회되는 데이터를 메모리(Redis 등)에 저장해 두고 재사용하는 기법입니다. 하지만 실제 데이터(DB)가 변경되었는데 캐시가 그대로..
![[Java, 자바] final 필드, final 메소드, final 클래스의 차이](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fti7OS%2FbtsP9CUOyqW%2FAAAAAAAAAAAAAAAAAAAAAJOpb0wiq-GRBJtquhwj6RHyt3SacHew0DWw0hcKAR6W%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DN9Ah5j6LHNFQsVKUyPX4LuWDPTg%253D)
오늘은 final 키워드에 대해 자세히 알아보겠습니다.그동안 final = 상수라는 생각만 가지고 있었는데, 이번에 조금 더 공부할 기회가 생겨서 final이 필드, 메소드, 클래스에 적용되었을 때 각각 어떤 차이가 있는지 정리해보겠습니다 ! 🤔 final이란?final 키워드는 '변경을 제한한다'는 의미를 가지며, 변수(필드), 메소드, 클래스에 적용할 수 있습니다.선언한 위치에 따라 특징이 달라지므로 하나씩 살펴보겠습니다. ✅ final 필드 (final field)final 필드는 한번 초기화하면 더 이상 값을 변경할 수 없는 변수입니다.우리가 흔히 알고 있는 “상수” 역할을 합니다.final int number = 10;// number = 20; // 컴파일 오류 발생상수는 모든 객체에서 공통..
![[홈서버] 맥미니로 홈 서버 구축하기1(고정 IP, 방화벽, 포트 포워딩, 화면 공유)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbN0jcj%2FbtsOyvEC9MU%2FAAAAAAAAAAAAAAAAAAAAADj6ER9qLJxf0qUz3z9z4vDA-19zO1vNmTNkV2Jo9pex%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DEl1oIzphgjZUJKilwvNpbmWQJ%252FQ%253D)
🙋🏻 홈서버를 만들게된 이유는 ?요즘 회사 업무 이외로 멋쟁이 프론트 개발자와 서비스를 구축하고 있다. 아키텍쳐 제작 중 운영해야 될 서버가 생각보다 많다고 느껴져 지갑이 텅텅 비기 전에 자체 서버를 구축하기로 마음먹었다 ! 호스팅 서버를 통해 운영하고 있는 작은 사이트도 있기 때문에 장기적으로 봤을 때 비용 면에서 확실히 좋아 보였다 ! AWS, Google 등 다양한 클라우드 서버의 선택지도 있었지만 프리티어로 사용한다 해도 언제 요금이 빠져나갈지 몰라 불안에 떨기 싫었다. 그럼 맥 미니를 선택한 이유는 ?앱등이인 나는 맥 포기 못해.....가 가장 큰 이유였다. 홈서버 구축을 생각한 뒤 라즈베리파이, 미니 PC, 노트북 등 수 많은 블로그 포스팅 글과 커뮤니티 통해 조사해 봤지만 어느 하나 특출..
![[Spring] Spring에서 이벤트 발행과 구독](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FBgKPH%2FbtsN7U5OWdL%2FAAAAAAAAAAAAAAAAAAAAADCXXVLKXwYsXdLOuhZso0gG2bHppfCT1OtLJZBQPIhb%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DTFWR%252BQhrqcOfKtvzKrv0NzB2XUw%253D)
❓이벤트(Event)와 Spring Boot 이벤트의 이해먼저 프로그래밍에서 이벤트란, 애플리케이션 내에서 발생시킬 수 있는 어떤한 사건이나 상태 변경 등을 의미한다. 애플리케이션에는 어떠한 이벤트를 발생시키는 주체와 정해진이벤트의 발생을 탐지해 동작을 처리하는 주체가 존재할 수 있다. Spring Boot는 이벤트 처리를 위해 ApplicationEvent 클래스와 ApplicationEventPublisher 인터페이스를 제공한다.Spring에서 발생하는 모든 이벤트는 ApplicationEvent 클래스를 상속하여 정의되며, 이벤트를 발생시킬 때 전달되고, ApplicationEventPublisher는 이벤트를 발생시키고 이벤트를 구독하는 리스너에게 전달하는 역할을 합니다. Spring Conte..
![[회고] 2025년 1분기 회고](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FVESoV%2FbtsMOeEspB1%2FAAAAAAAAAAAAAAAAAAAAAHiEluY-97GPxZN0mVBAkmctunACYN5325w_WGUTeCx0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D8FlMQRHEsX39fXDEovf0H5g8vGI%253D)
2025년 들어 기술블로그 글을 많이 올리지 못했다. 이유는 내가 작성한 글을 돌아볼 때마다 게시글의 내용이 알차지 못하고, 정리 정돈이 되어있지 않다고 느껴졌다.글을 썼다 지우고 썼다 지우고, 임시저장 되어있는 글이 수두룩하다.어떻게 정리해야 가독성이 좋고, 어떤 레퍼런스를 참고해서 공부를 해야되는지 다른 분들의 기술블로그를 보면서 기록하는 방법에 대해 열심히 공부하고 있다.이 회고글도 임시저장 목록에 그대로 쌓일지, 등록할지는 잘 모르겠다~ ☀️ 2025년기획과 설계의 결과물 1월6년간 이어오던 느릿느릿한 ASP로 만든 사이트를 걷어내고 리팩토링하기 위해 8월부터 몇 달간 기획과 설계를 했다. 운영중인 서비스라 유지보수하면서 기획하고, 다른 사이트도 운영하고 이런 저런 상황에 기획과 설계의 속도가 빠..