본문 바로가기

전체 글

DB 프로시저란 무엇일까? 안녕하세요!😆이번 글에는 간단하게 알아두면 실무에서 도움이 될만한 내용인 DB 프로시저(Procedure)에 대해서 소개 해드리려고 합니다!    1. 프로시저 사용 배경저는 지금까지 프로시저라는 개념은 들어만 봤지, 실무에서 직접 사용해 본 것은 처음이었습니다.이번에 프로시저를 사용하게 된 계기는, 협력 고객사와의 QA 테스트 과정에서였습니다. 테스트 시나리오 중 하나는 다음과 같았습니다."한 고객사는 하루에 최대 1,000개의 상품만 등록 가능하다"는 유효성 검증을 테스트해야 했습니다.  내부적으로는 이미 테스트를 완료한 기능이었지만, 협력사 측에서도 직접 검증하고자 했습니다.하지만 상품 구조상, SKU가 1:1로 존재하기 때문에 협력사가 실제로 1,000개의 상품을 등록하려면 각기 다른 상품을 수.. 더보기
[Spring] 어라? 왜 동일 트랜잭션 내 원자성이 보장이 안되지? 안녕하세요! 이번에는 제가 최근 실무에서 겪었던 문제를 공유해 보려고 합니다. 문제 상황은 동일한 트랜잭션 내에서 데이터들의 원자성이 보장되지 않아 일관성이 깨지는 현상이 발생한 것이었습니다. 😮‍💨 이번 경험과 해결 과정을 함께 공유드리겠습니다.   목차트랜잭션 4가지 원칙문제상황원인 분석 및 해결 과정결론   트랜잭션 4가지 원칙 (ACID)문제 상황을 설명하기 전에, 트랜잭션의 4가지 원칙을 간단하게 상기해보겠습니다. 원자성(Atomicity)원자성이란 트랜잭션에 속한 각각의 CRUD문을 하나의 단위로 취급합니다.따라서 문 전체를 실행하거나 그 문의 어떤 부분도 실행하지 않거나 둘 중 하나입니다.일관성(Consistency)트랜잭션이 테이블에 변경 사항을 적용할 때 미리 정의된 예측할 수 있는 .. 더보기
Filter, Interceptor, AOP 차이점과 사용법을 알아보자 안녕하세요! ☺️  이번 시간에는 Filter와 Interceptor, AOP의 차이점과 어느 상황에서 사용하는지에 대하여 포스팅을 해보려고 합니다.       1. 서론스프링 기반의 웹 애플리케이션을 개발할 때, 공통된 기능을 여러 곳에서 반복적으로 구현하는 것은 유지보수성을 낮추고, 코드 중복 발생을 초래합니다.예를 들어, 요청 로깅, 인증 처리, 트랜잭션 관리, API 모니터링 등의 기능을 컨트롤러나 서비스 로직 내부에서 각각 구현하면 불필요한 코드가 증가합니다. 이 문제를 해결하기 위해 Filter, Interceptor, AOP를 활용하면 특정 시점에서 공통 기능을 적용하고, 핵심 로직을 깔끔하게 유지할 수 있습니다.하지만 각각의 동작 방식과 적용 범위가 다르므로, 상황에 따라 올바른 기술을 선.. 더보기
첫 이직과 앞으로의 목표 안녕하세요!저는 2024 회고 및 새해 다짐 글에서 작성한 것처럼 최근 이직에 성공하여서 한 달 여간 새로운 직장에서 근무하고 있습니다.⛄  퇴직 전에는 취업 시장이 이렇게까지 안 좋아 질 줄 모르고 먼저 퇴사 후 이직을 준비했었는데 상당히 쉽지 않았습니다. 그래도 1년 8개월 긴 시간 동안 노력하여 어느 정도 원하는 곳에 취업하여 뿌듯하기도 하고 한편으로는 조금은 아쉬웠던 것 같습니다.    하지만 이렇게 어려운 시기에 잘 취업을 한 만큼 이번 회사에서도 몇 달간은 적응을 잘하는 것이 1순위였기 때문에 한 달 동안은 정신없이 적응하느라 바빴었는데, 이렇게 아무것도 계획하거나 목표하지 않고 단순히 흘러가듯이 개발하게 되면, 1년이 지나고 뒤돌아봤을 때 한 게 없다고 느껴졌던 것이 대부분이어서 이번에는 확.. 더보기
Redisson Lock을 사용해서 동시성 문제를 해결해보자! 안녕하세요! 저는 최근 실무에서 동시성 문제와 관련된 예약 관련 시스템을 구축하게 되었는데, 이에 따른 문제 해결에 대한 여러선택 과정과 해결한 방법에 대해서 설명드리려고 합니다. 😄    목차Lock을 사용하게 된 이유왜 Redisson Lock을 사용했는지?분산 Lock을 사용할 때 주의점Lock 사용 예제 코드와 설명Multi Lock이란?마무리 하며     1. Lock을 사용하게 된 이유이번에 제가 Lock을 사용하게 된 이유는, 여러 명의 사용자가 한정된 수량을 예약하기 위해서 사용하게 되었습니다.위처럼 1번 스레드가 예약 가능 수량을 조회하여 받을 때, 2번 스레드도 비슷한 시간에 조회하였을 경우 아직 갱신되지 않았으므로, 두 스레드 모두 동일한 수량을(50개) 조회하게 됩니다. 그렇게 1.. 더보기
2024 회고 및 새해 다짐 안녕하세요.😊 저는 이전부터 따로 회고 블로그도 작성할 만큼 꾸준히 15개월 간 주간 회고는 작성했습니다. 그래서 이번에는 생애 처음으로 연간 회고를 작성해 보려고 합니다!       ⛄ 2024년 개발자 빙하기.. 2024년에도 어김없이 취업난이 발생하였고 개발자 시장도 상황이 좋지 않은 상황이습니다. 저는 운이 좋게도 막바지에 괜찮은 조건의 회사로 이직할 수 있었지만,,😮‍💨 개발자들에게는 취업이나 이직이 상당히 어려운 시기였다고 생각합니다.따라서 이번 글에서는 2024년 한 해 동안 어떻게 학습하고 준비하여 이직에 성공했는지 회고하려고 합니다. 😊      🎈 2024 한 해 이벤트스터디 참여 (CS 정리 및 면접 스터디, 레디스 스터디)F-Lab 멘토링 마무리스프링을 만들어보는 개인 프로.. 더보기
RabbitMQ 데이터 손실 발생 상황 및 방지 방법 이번 시간에는 RabbitMQ를 사용할 때 메시지가 유실될 수 있는 상황들과 이를 대처할 수 있는 방안에 대해서 알아보려고 합니다.😆 RabbitMQ는 비동기 메시징과 시스템 간 데이터 교환을 효율적으로 처리하는 강력한 도구입니다. 하지만 정합성이 중요한 데이터의 경우, 메시지 유실이 발생하면 심각한 문제로 이어질 수 있습니다. 따라서 이번 글에서는 RabbitMQ를 사용할 때 발생할 수 있는 메시지 유실 상황과 이를 방지하는 구체적인 방안에 대해 알아보겠습니다.        RabbitMQ에서 메시지가 유실될 수 있는 주요 상황RabbitMQ를 사용할 때 주로 다음과 같은 경우 메시지 유실이 주로 발생 할 수 있습니다.메시지를 큐에 넣을 때메시지를 큐에서 가져올 때RabbitMQ 자체 장애   따라서.. 더보기
MySQL 정렬 방식 분석: ORDER BY와 Filesort 이해하기 이번 포스팅에서는 MySQL에서 `ORDER BY`시 처리되는 방법 및 Filesort 대해서 알아보고자 합니다.   목차글을 작성하게 된 계기MySQL 엔진과 스토리지 엔진 차이ORDER BY 처리 방식Sort Buffer의 개념과 역할정렬 알고리즘정렬 처리 방법ORDER BY 실행계획 확인하기결론     1. 글을 작성하게 된 계기팀 프로젝트를 진행하며 `ORDER BY`를 통해 정렬해야 하는 상황이 있었는데, 이때 팀원분께서 재밌는 키워드를 제공해 주셔서 학습을 진행하고 공유하기 위해서 포스팅을 작성하게 되었습니다.😄       2. MySQL 엔진과 스토리지 엔진 차이들어가기 앞서 우선 MySQL에서 사용되는 MySQL 엔진과 스토리지 엔진의 차이를 간단하게 설명해 드리려고 합니다.구분MySQL.. 더보기