전체 글
-
약 일년만에 돌아온 회고 포스팅입니다 일년동안 정말 많은 일이 있었는데요 월별로 살펴보겠습니다 1월1월 1일부터 건강이 박살난채로 시작했습니다막 열이 39도 이렇게 나고 마지막엔 몸에 염증 수치도 높고 해서 정밀 검사를 받아봤던 기억이 있네요 그건 그렇고 카카오테크캠퍼스 부트캠프가 끝나고 스프링을 좀 더 자세히 공부하려고 김영한님의 스프링 MVC 강의를 들었습니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 30,110명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 저때까지만 해도 뭐 서블릿 컨테이너? 이러..
도전과 성과가 있었던 2025년 리뷰해보기약 일년만에 돌아온 회고 포스팅입니다 일년동안 정말 많은 일이 있었는데요 월별로 살펴보겠습니다 1월1월 1일부터 건강이 박살난채로 시작했습니다막 열이 39도 이렇게 나고 마지막엔 몸에 염증 수치도 높고 해서 정밀 검사를 받아봤던 기억이 있네요 그건 그렇고 카카오테크캠퍼스 부트캠프가 끝나고 스프링을 좀 더 자세히 공부하려고 김영한님의 스프링 MVC 강의를 들었습니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 30,110명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 저때까지만 해도 뭐 서블릿 컨테이너? 이러..
2026.01.02 -
요즘 MSA 이론 강의를 사서 듣고 있습니다 근데 도파민 뿜뿜 라이브 코딩은 안 나오고 이론 강의만 몇 시간을 하시더라고요직접 또 안 해보니까 머리에 그려지는 것도 크게 없고 그래서 일단 무작정 머리에 집어넣어 보기로 했습니다 렛츠고 이번에 선택한 강의는 주문시스템으로 알아보는 분산트랜잭션| 최상용 - 인프런 강의현재 평점 4.9점 수강생 256명인 강의를 만나보세요. MSA 환경에서 겪을 수 있는 정합성 문제와 해결할 수 있는 방법을 배워요 MSA 환경에서 트랜잭션을 제어하는 방법, 분산트랜잭션www.inflearn.com 최상용 님의 주문 시스템으로 알아보는 분산 트랜잭션입니다이분 다른 강의도 들어봤는데 상당히 깔끔하게 강의를 해주시더라고요심지어 제가 좋아하는 라이브 코딩 스타일입니다 어쨌든 MSA에..
TCC 까짓거 한 번 해보죠요즘 MSA 이론 강의를 사서 듣고 있습니다 근데 도파민 뿜뿜 라이브 코딩은 안 나오고 이론 강의만 몇 시간을 하시더라고요직접 또 안 해보니까 머리에 그려지는 것도 크게 없고 그래서 일단 무작정 머리에 집어넣어 보기로 했습니다 렛츠고 이번에 선택한 강의는 주문시스템으로 알아보는 분산트랜잭션| 최상용 - 인프런 강의현재 평점 4.9점 수강생 256명인 강의를 만나보세요. MSA 환경에서 겪을 수 있는 정합성 문제와 해결할 수 있는 방법을 배워요 MSA 환경에서 트랜잭션을 제어하는 방법, 분산트랜잭션www.inflearn.com 최상용 님의 주문 시스템으로 알아보는 분산 트랜잭션입니다이분 다른 강의도 들어봤는데 상당히 깔끔하게 강의를 해주시더라고요심지어 제가 좋아하는 라이브 코딩 스타일입니다 어쨌든 MSA에..
2025.12.28 -
올해 삘 꽂혀서 PS를 시작한지 거의 1년이 되어가네요 근데 뭐 새로 시작한건 아니고 작년 상반기에 바짝하다가 작년 하반기에 좀 쉬고 올해 다시 시작했습니다 여러 주제를 풀고 있는데요, 갑자기 새로 배운 주제인 펜윅트리에서 아이디어가 하나 떠올랐습니다 저희 캠퍼스 실시간 정보 거래 서비스에서는 서비스 지역을 S2 셀로 나누어 관리하는데요 기존에 이 셀당, 혹은 현재 전체 셀 안에 있는 사용자들의 수를 파악하는 기능은현재 유저 위치를 저장하는 레디스에 직접 요청을 넣어 다 가져오는 방식이었습니다 그럼 레디스에 셀별 개별 요청을 반복적으로 넣어 전체 사용자 수를 집계해야 하니까 많은 호출과 부하로 인해 응답 지연, 서버 과부하 등의 문제가 생깁니다 그럼 여기서 두 가지 개선점이 필요해보입니다.1. 전체 집계..
PS 하길 잘했다! 펜윅트리로 실시간 유저 집계하기올해 삘 꽂혀서 PS를 시작한지 거의 1년이 되어가네요 근데 뭐 새로 시작한건 아니고 작년 상반기에 바짝하다가 작년 하반기에 좀 쉬고 올해 다시 시작했습니다 여러 주제를 풀고 있는데요, 갑자기 새로 배운 주제인 펜윅트리에서 아이디어가 하나 떠올랐습니다 저희 캠퍼스 실시간 정보 거래 서비스에서는 서비스 지역을 S2 셀로 나누어 관리하는데요 기존에 이 셀당, 혹은 현재 전체 셀 안에 있는 사용자들의 수를 파악하는 기능은현재 유저 위치를 저장하는 레디스에 직접 요청을 넣어 다 가져오는 방식이었습니다 그럼 레디스에 셀별 개별 요청을 반복적으로 넣어 전체 사용자 수를 집계해야 하니까 많은 호출과 부하로 인해 응답 지연, 서버 과부하 등의 문제가 생깁니다 그럼 여기서 두 가지 개선점이 필요해보입니다.1. 전체 집계..
2025.11.19 -
안녕하세요. 문제는 그렇게 시작됐습니다. 드디어 Mockito를 완전히 이해해 버린 도등어, 테스트 작성할 때 애매하다 싶으면 바로 Mockist가 되어버리고 있습니다. 오늘의 테스트 중인 코드는@Componentpublic class AuthUserResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(Login.class) && parameter.getParameterType().equals(AuthUser.class..
Mockito에서만난에러때문에제네릭이해가쏙쏙되잖아안녕하세요. 문제는 그렇게 시작됐습니다. 드디어 Mockito를 완전히 이해해 버린 도등어, 테스트 작성할 때 애매하다 싶으면 바로 Mockist가 되어버리고 있습니다. 오늘의 테스트 중인 코드는@Componentpublic class AuthUserResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(Login.class) && parameter.getParameterType().equals(AuthUser.class..
2025.11.03 -
안녕하세요 이번 추석에 레빗 엠큐를 딥하게는 아니고 아주 살짝 맛만 봤습니다 'RabbitMQ' 카테고리의 글 목록 dockerel.tistory.com 근데 레빗 엠큐 이거 좀 맛도리더라구요 제일 맘에 드는건 데드레터 처리하고 자동 재시도 그래서 제가 한 프로젝트 중에 이걸 어디에 한번 적용해보아야 할까 생각하다가 Redis Pub/Sub 기반으로 구현했던 실시간 알림 기능에 한번 도입을 해봤습니다 근데 이걸 왜 함? 사실 그 당시에는 레디스를 인증 파트에서 refresh token 관리를 위해 사용하고 있었기에 다른 메시지 큐와 같은 새로운 기술 스택을 도입하지 않아도 레디스 선에서 커버칠 수 있다는 생각에 도입했습니다 근데 문제는 그렇게 발생했습니다 웹 서버를 배포할 때 다중 인스턴스로 배포해버린..
RabbitMQ를 적용하며 발생한 풍부한 버그와 다양한 삽질의 향연안녕하세요 이번 추석에 레빗 엠큐를 딥하게는 아니고 아주 살짝 맛만 봤습니다 'RabbitMQ' 카테고리의 글 목록 dockerel.tistory.com 근데 레빗 엠큐 이거 좀 맛도리더라구요 제일 맘에 드는건 데드레터 처리하고 자동 재시도 그래서 제가 한 프로젝트 중에 이걸 어디에 한번 적용해보아야 할까 생각하다가 Redis Pub/Sub 기반으로 구현했던 실시간 알림 기능에 한번 도입을 해봤습니다 근데 이걸 왜 함? 사실 그 당시에는 레디스를 인증 파트에서 refresh token 관리를 위해 사용하고 있었기에 다른 메시지 큐와 같은 새로운 기술 스택을 도입하지 않아도 레디스 선에서 커버칠 수 있다는 생각에 도입했습니다 근데 문제는 그렇게 발생했습니다 웹 서버를 배포할 때 다중 인스턴스로 배포해버린..
2025.10.17 -
이번에는 메시지 단위의 트랜잭션 처리에 대해 알아보겠습니다. 이전에 백기선님의 예외와 트랜잭션에 관한 영상을 본 적이 있습니다. 그 당시에 볼 때는 이게 무슨 소리지 했었지만공부를 제대로 안했나 봅니다.이제는 무슨 소리인지 알죠. 간단히 설명드리자면 모든 블로그에서 언체크드 예외와 체크드 예외에 대해 무조건 롤백을 한다 / 롤백을 하지 않는다 로 작성해 놓은 글에 대해 비판하시는 영상이었는데요, 그 이유는 트랜잭션에는 DB 트랜잭션만 있는것이 아니고 그리고 설사 DB 트랜잭션을 의미하는 것일지라도 기본적으로 런타임 계열의 언체크드 예외는 롤백, 그 외에 체크드 예외에는 롤백을 하지 않고 커밋되는 것이 맞지만 이것도 사실 rollbackFor 혹은 try-catch 등의 처리를 통해 충분히 롤백할 수 있다..
RabbitMQ에서 Transaction 처리는?이번에는 메시지 단위의 트랜잭션 처리에 대해 알아보겠습니다. 이전에 백기선님의 예외와 트랜잭션에 관한 영상을 본 적이 있습니다. 그 당시에 볼 때는 이게 무슨 소리지 했었지만공부를 제대로 안했나 봅니다.이제는 무슨 소리인지 알죠. 간단히 설명드리자면 모든 블로그에서 언체크드 예외와 체크드 예외에 대해 무조건 롤백을 한다 / 롤백을 하지 않는다 로 작성해 놓은 글에 대해 비판하시는 영상이었는데요, 그 이유는 트랜잭션에는 DB 트랜잭션만 있는것이 아니고 그리고 설사 DB 트랜잭션을 의미하는 것일지라도 기본적으로 런타임 계열의 언체크드 예외는 롤백, 그 외에 체크드 예외에는 롤백을 하지 않고 커밋되는 것이 맞지만 이것도 사실 rollbackFor 혹은 try-catch 등의 처리를 통해 충분히 롤백할 수 있다..
2025.10.09 -
메시지들이 발행되고 ready에서 제대로 처리되지 못한 경우 unacked 상태가 되는데 만약 클라이언트에서 메시지 처리를 성공한 경우 ack 그 외에는 nack 혹은 reject 상태가 됩니다. 이렇게 메시지가 nack, reject 상태가 되거나 ttl 만료, 길이 초과 그리고 큐 설정 초과 등 특정 Dead Letter 조건이 충족한 경우 DLQ(Dead Letter Queue)로 이동됩니다.@Beanpublic Queue orderQueue() { return QueueBuilder.durable(MAIN_QUEUE) .withArgument("x-dead-letter-exchange", DLX) .withArgument("x-dead-letter-routing-ke..
DeadLetterQueue와 Retry로 재처리하기 참 쉽죠?메시지들이 발행되고 ready에서 제대로 처리되지 못한 경우 unacked 상태가 되는데 만약 클라이언트에서 메시지 처리를 성공한 경우 ack 그 외에는 nack 혹은 reject 상태가 됩니다. 이렇게 메시지가 nack, reject 상태가 되거나 ttl 만료, 길이 초과 그리고 큐 설정 초과 등 특정 Dead Letter 조건이 충족한 경우 DLQ(Dead Letter Queue)로 이동됩니다.@Beanpublic Queue orderQueue() { return QueueBuilder.durable(MAIN_QUEUE) .withArgument("x-dead-letter-exchange", DLX) .withArgument("x-dead-letter-routing-ke..
2025.10.08 -
안녕하세요. 이전 포스팅에서 용어들을 좍 정리해봤습니다. RabbitMQ 시작하기추석을 맞아 인프런의 향로님께서 추석 완강 챌린지를 열어주셨습니다. 그래서 이참에 관심있었던 강의 하나를 완주해보기로 했습니다. 바로 메시지큐 라이브러리인 RabbitMQ입니다. 사실 예전dockerel.tistory.com이제 그럼 코드로 몸통박치기 해봐야겠죠? 1. 단순 메시지 전송간단하게 하나의 큐에서 메시지를 주고 받는 과정을 보겠습니다. 메시지 전송 측은@Component@RequiredArgsConstructorpublic class Sender { private final RabbitTemplate rabbitTemplate; public void send(String message) { ..
RabbitMQ 코드로 몸통박치기안녕하세요. 이전 포스팅에서 용어들을 좍 정리해봤습니다. RabbitMQ 시작하기추석을 맞아 인프런의 향로님께서 추석 완강 챌린지를 열어주셨습니다. 그래서 이참에 관심있었던 강의 하나를 완주해보기로 했습니다. 바로 메시지큐 라이브러리인 RabbitMQ입니다. 사실 예전dockerel.tistory.com이제 그럼 코드로 몸통박치기 해봐야겠죠? 1. 단순 메시지 전송간단하게 하나의 큐에서 메시지를 주고 받는 과정을 보겠습니다. 메시지 전송 측은@Component@RequiredArgsConstructorpublic class Sender { private final RabbitTemplate rabbitTemplate; public void send(String message) { ..
2025.10.07