본문 바로가기

Back-End25

[Spring & DB] 기존 Named Lock 방식 개선하기 들어가며이전에 Named-Lock 을 통해 동시성을 제어하는 방식과 분산락을 이용하여 제어하는 방식을 비교하며, Named-Lock은 경쟁 상태에 들어가는 요청이 늘어나는 경우에, ConnectionPool 이 고갈되는 현상이 생길 가능성이 존재한다며 단점으로 언급하였었습니다.그 이유로는 이전 글에서 언급하였던 것처럼 락을 획득하고 제어하는 트랜잭션 내에서 또 다른 트랜잭션이 필요하였기 때문입니다. 이러한 생각과 함께 또 다른 생각은 그렇다면 락을 획득하고 제어하는 부분에서는 트랜잭션을 걸지 않고 처리하면 되는 것이 아닐까? 라는 생각이 들었습니다. 하지만 Named Lock 을 해제하기 위해선 획득한 세션과 동일한 세션이 필요하며, 이를 유지하는 방법으로 트랜잭션을 묶어 동일한 커넥션을 가져오도록 강제.. 2025. 7. 6.
[WAS] Java 로 순수하게 서버 구축하기 (2) 들어가며이번 글을 마지막으로 WAS 구축하기는 마무리하려고 합니다...! 사이드 프로젝트에 좀 더 힘을 주기 위해서...따라서, 해당 글에서 WAS를 구축하면서 이해한 부분들을 최대한 담고자 노력하였습니다.Front ControllerFront Controller 는 웹 어플리케이션으로 들어오는 모든 HTTP 요청을 가장 먼저 받아들이고, 해당 요청과 부합하는 컨트롤러에 의해 요청을 처리한 후 적절한 결과를 전달하는 컨트롤러 역할을 수행합니다.그리고 이러한 역할이 바로 DispatcherServlet 입니다.물론, 그림과 같이 가장 앞단에서는 Tomcat 에 의해 HttpServletRequest / HttpServletResponse 객체가 생성되고, 그 이후에 필터를 거쳐 DispatcherServl.. 2025. 6. 27.
존재하지 않은 데이터에 대한 잠금의 영향 들어가며이전 글에서 삽입 연산에 대해서 발생하는 동시성 문제를 해결하기 위해서 Rediss의 분산락 또는 MySQL의 네임드락을 통해 순서를 제어한다는 글을 작성하였습니다. 하지만 이후에 비관적락에 대해 학습하다 보니, 존재하지 않은 데이터에 대해서도 잠금을 걸 수 있다는 것을 알 수 있었습니다. 그렇다면 다시 한번 삽입 과정에서 락을 통해 추가적인 구현을 할 필요성에 대해 생각해봐야 할 것 같아 글을 작성하게 되었습니다. [DB] MySQL NamedLock vs Redisson 락 관리.들어가며이전 글(https://kongdevlog.tistory.com/20)에서 Named Lock을 통해 삽입 작업에서의 동시성을 제어하였습니다.다만 이 과정에서, Redisson을 사용하는 방법이 더 좋은 방법.. 2025. 6. 15.
[WAS] Java 로 순수하게 서버 구축하기 (1) 들어가며지금까지 Java/Spring 을 사용하여 REST API Server를 구현하는 경험을 많이 하였지만, 실제 내부적으로 어떻게 동작하는지에 대한 깊은 이해가 떨어진 것 같아서 직접 웹서버를 구축하는 과정을 통해 조금이라도 깊은 이해를 하고자 진행하게 되었습니다!제가 목표하고자 하는 과정을 먼저 진행하신 분의 블로그 글이 있어 링크를 함께 첨부해두겠습니다!* https://onibmag.tistory.com/53목표제가 구현하고자 하는 서버의 역할은 Dispatcher Servlet의 역할입니다. 즉, 클라이언트의 HTTP 요청을 받고 적절한 컨트롤러에게 전달하고 반대로 컨트롤러로부터 전달받은 응답을 클라이언트에게 전달해주는 역할을 수행합니다. 이러한 서버를 구현하기 위해 다음과 같은 순서로 글을.. 2025. 6. 10.
[DB] 인덱스와 잠금 들어가며인덱스를 통해 효율적인 탐색을 하도록 하여 DB의 성능을 높이는데 기여하는 것은 매우 중요한 사실이지만, 그 외에도 인덱스를 통해 탐색을 하며 잠금을 건다는 사실 역시 생성(Insert)/수정(Delete)에도 큰 영향을 미친다는 사실을 확인하고자 글을 작성하게 되었습니다.사전 테이블과 데이터다음과 같이 약 1만개의 데이터를 삽입하였습니다. 이제 인덱스가 걸리지 않은 데이터를 잠그는 경우, 어떤 현상이 발생하는지 직접 확인해보겠습니다.실험현재 name 컬럼에는 인덱스가 존재하지 않기 때문에select * from test_table where name = 'User_7000' for update;쿼리를 실행하고, 어떤 행들에 잠금이 걸리는지 확인해보겠습니다.이와 함께 실제 PK를 확인해보니 1만개.. 2025. 6. 2.
[DB & JPA] 무한 스크롤 계층형 댓글 구현하기 들어가며일반적으로 많은 어플리케이션에서 페이지네이션보다는 스크롤 형식의 댓글을 구현하며, 이와 함께 대댓글 기능을 포함하고 있습니다.저 역시 좋은 기회로 작은 사전 과제에서 이러한 기능을 고민하고 구현하는 경험을 할 수 있게 되어서 해당 과정을 공유하고자 글을 작성하게 되었습니다. 요구사항댓글은 하나의 요청(스크롤)에 5개의 댓글을 불러와야합니다. 또한, 대댓글 기능을 지원해야합니다.기존 요구사항은 위와 같이 어떻게 보면 단순하게 무한 스크롤을 통해 댓글을 5개씩만 불러오면 되는 것이 아닌가? 라고 생각할 수 있을 것입니다. 하지만 아래와 같은 부분을 함께 고민하면 좋을 것 같습니다. 1. 앞서 있던 댓글에 대댓글을 작성하면, 해당 대댓글은 어느 시점에 보여야 하는가?2. 만약, 해당 대댓글이 앞선 댓글.. 2025. 5. 24.