상황 백오피스 시스템에서 조회 기간 길게해서 엑셀 파일 다운로드했더니 OOM 발생 해당 엑셀 다운로드 로직에서는 파일 생성을 위해 poi 라이브러리의 SXSSF 구현체 사용중 전에 XSSF 구현체와 비교했을때, SXSSF는 row를 메모리에서 디스크로 flush 하면서 생성한다고 했는데 왜 OOM이 발생한걸까 ? (SXSSFRo...
MySQL - LOCK 살펴보기
락을 잘 모르면 비효율적인 쿼리를 작성하거나, 데드락을 유발하거나, 불필요한 성능저하 등을 일으킬 수 있다고 생각한다. 또한 디버깅시 실마리를 못잡을 수도 있다. 이런 일을 최대한 겪지 않도록 MySQL에서는 어떤 락을 제공하는지 살펴보자. Lock 유형 InnoDB는 행 수준(row-level) 잠금을 구현하며(테이블 수준 잠금도 ...
MySQL - ReadView 들여다보기
MySQL InnoDB에서 트랜잭션 격리수준이 READ COMMITTED이면 다른 트랜잭션에서 커밋 완료한걸 읽을 수 있고, REPEATABLE READ이면 다른 트랜잭션에서 커밋을 완료했더라도 해당 데이터를 무조건 읽을 수 있는 것은 아니다. 이게 어떻게 가능한걸까 ? 결론부터 말하면, MVCC 매커니즘은 현재 트랜잭션 내에서 어떤...
MySQL - CHAR vs VARCHAR
CHAR vs VARCHAR 데이터를 저장하고 조회하는 방식에서 차이가 있음 또한, 최대 길이와 후행 공백(trailing spaces) 유지 여부에서도 차이가 있음 엄격한(Strict) SQL 모드가 활성화되어 있지 않은 경우, CHAR 또는 VARCHAR 열에 해당 열의 최대 길이를 초과하는 값을 할당하면, 그 값은 열의 크기에 맞게...
Spring - @Transactional 살펴보기 (1) - AOP Proxy
AOP Proxy 스프링 : https://docs.spring.io/spring-framework/reference/core/aop/introduction-proxies.html 스프링 부트 : https://docs.spring.vmware.com/spring-boot/docs/3.0.14/reference/htmlsingle/#featur...
WEB - nginx 처리율 제한 살펴보기
nginx는 처리율 제한을 위해 ‘leaky bucket algorithm’ 사용 leaky bucket algorithm 물 : 사용자 요청 버킷 : 요청이 대기하는 큐 넘치는 물 : 큐가 다 차서 거절되는 요청 새는 물 : 서버에 의해 처리되는 요청 limit_req_z...
자바에서 null 처리에 대해 생각해보기
나는 언제 주로 null을 사용했을까 ? 참조값이 ‘없음’을 표현하는 경우 따라서, 보통 아래와 같이 코드를 작성하게 되는 것 같다. if (obj != null) { // do something } if (obj == null) { // null인게 비정상적인 상황이라면 적절한 예외 발생시키기 } // do somet...
Controller는 어떤 부분을 테스트 해야할까 ?
웹 서비스에서 보편적으로 사용되는 레이어 구조(Controller - Service - Repository)에서 Controller는 어떤 부분을 테스트하면 좋을지 생각해보자. 테스트 코드의 필요성 ? 내가 생각하기에 테스트 코드가 필요한 이유는 크게 두 가지가 있을 것 같다. 코드가 변경됐을 때, 변경된 부분은 의도한대로 잘 ...
Spring - Spring Rest Docs란 ?
Spring REST Docs RESTful 서비스를 문서화하는 데 도움을 주는 도구 Asciidoctor로 작성한 수동 문서와 Spring MVC Test를 통해 자동 생성된 스니펫을 결합하여 사용 Spring WebFlux의 WebTestClient나 REST Assured 5 사용도 가능 이 프...
OS - 리눅스 Load Average 살펴보기
Load Average ? 리눅스의 load average는 시스템 전체의 부하 평균을 나타내며, 실행 중이거나 대기 중인 스레드(태스크)의 수를 평균으로 나타낸 것. 즉, 실행 가능한(runnable) 태스크뿐만 아니라, uninterruptible sleep 상태(중단 불가능한 대기 상태)에 있는 태스크들도 추적 역사 처음엔 실...