BE13 [Spring] 커넥션 점유를 늦추는 LazyConnectionDataSourceProxy 구조 완벽 해부 1. 배경현재 저는 'SOPT' 라는 동아리에서 재밌고 편리한 동아리 활동을 위해 관련 서버를 운영하고 있습니다. 서버를 운영하면서 사용자 경험을 높이기 위해선 문제 상황을 빠르게 인지&대처를 하는 것이 정말 중요하다고 생각합니다. 그래서 pinpoint 를 활용한 모니터링 서버를 구축하여 서버의 전반적인 상태에 대한 관측 가능성(observability)을 높였습니다. 제가 담당하고 있는 서비스에는 위와 같이 스파크성 트래픽이 있습니다. 특정 행사의 선착순 신청을 하기 위한 트래픽인데요. 대학생인 저에겐 부하테스트를 제외하고 이러한 트래픽은 처음 겪어봤습니다. 보통 부하테스트의 경우엔 상황을 설정하고 진행하기에 원인이 단순합니다. 하지만 실제 트래픽은 많은 사용자가 다양한 액션을 하기에 정말 다양한.. 2024. 12. 28. 가비지 컬렉터와 메모리 할당 전략 - 1. 죽은 객체 판단 1. 그걸 왜 알아야 하는데?프로그램을 운영하다 보면, 메모리 오버플로와 누수 문제를 해결해야 하는 상황이나 더 높은 동시성 달성을 위해 GC가 방해되는 상황이 옵니다. 저는 아직 그런 경험을 직접 해본 적은 없지만, 네이버나 배민 등 많은 기술블로그에서 해당 이슈를 확인할 수 있었습니다. https://d2.naver.com/helloworld/1326256https://techblog.woowahan.com/2628/ 도움이 될수도 있는 JVM memory leak 이야기 | 우아한형제들 기술블로그도움이 될지도 모르는 JVM memory leak 얘기인데 제목을 뭐라고 하지? 안녕하세요. 배민 플랫폼실 주문중계 시스템팀 오민철입니다. 이 글은 몇 줄의 코드와 어디서 걸렸는지 모를 dependency .. 2024. 12. 22. JVM에서 객체 들여다보기 Java는 많이 사용하지만 Java 힙에서 객체 생성부터 전 과정에 대해서는 알지 못했습니다. 그래서 전 과정에 대해 구체적으로 알아보고자 합니다. 책 JVM 밑바닥까지 파헤치기의 내용을 참고했지만, 더 쉬운 이해를 위해 제가 각색하고 내용을 추가해봤습니다. 1. 객체 생성언어 수준에서는 단순히 new 키워드를 사용하면 됩니다.가상 머신 수준에서는 어떤 과정을 거쳐 객체가 생성될까요? JVM이 new 명령에 해당하는 바이트 코드를 만난다면, 이 명령의 매개변수가 상수 풀 안의 클래스를 가리키는 심벌 참조(Symbolic Reference)인지 확인합니다. 이 과정을 구체적으로 설명해보겠습니다. 먼저 아래와 같은 코드가 있다고 가정해보겠습니다.public class Example { public st.. 2024. 12. 17. [Database] 실수하기 어려운 환경 만들기 서버 개발하면서 DB 관리와 관련된 중요한 부분을 간과하고 있었던 것이 있었습니다. 바로 로컬 환경에서 프로덕션 DB로의 연결이 쉽게 가능했고, ddl-auto 옵션을 사용하여 언제든지 DB가 초기화될 위험을 안고 개발해 왔던 점입니다.https://www.youtube.com/watch?v=SWZcrdmmLEU&t=32s 위 영상과 같이 ddl-auto: create로 인한 이슈는 흔치 않지만, 누구나 한 번쯤은 겪을 수 있는 문제라고 생각했어요. 저희 팀도 이 점을 알고 있었으나, 바쁜 기능 개발에 치여 이 문제를 나중에 개선하자는 식으로 미루어 왔습니다.문제 상황 발생결국 운영 DB에서 이슈가 발생하고 말았습니다. 테스트 편의성 때문에 프로덕션 DB에 직접 테스트를 진행하는 경우가 있었고, loca.. 2024. 9. 16. 이전 1 2 3 4 다음