전체 글

Java & Spring

Spring Cache Abstraction

웹 애플리케이션의 성능을 위해 고려해야할 부분은 정말 많습니다. WS 관점에선 이중화, 로드밸런싱, 캐싱, 커넥션 등, WAS 관점에선 스레드풀, 커넥션, 억셉트카운트, DB커넥션풀 등, DB 관점에선 커넥션 수와 인덱스 등이 있습니다. 그 중에서도 가장 드라마틱한 성능 개선을 만들어주는 것은 바로 캐시입니다. 가장 큰 병목을 유발하는 지점에 대해 수행하지 않고 재사용하거나, 수행하더라도 아주 짧은 시간 내에 처리될 수 있게 개선해주기 때문입니다. 캐시도 CPU에서부터 WAS, WS까지 정말 여러 영역에 걸쳐있는데요 첫번째로 WAS에서 사용되는 로컬 캐시에 대해 이해해보고자 합니다. 거기서도 다시 좁혀서 스프링에서 캐싱이 어떻게 제공되는지 살펴보겠습니다. 이를 위해 스프링 공식 문서를 통해 스프링이 제공..

Java & Spring

응답 DTO, N+1, Open Session In View

open-in-view WARNING 로그 spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 관련하여 별도 설정을 하지 않았다면, 스프링 부트 애플리케이션을 실행할 때마다 위와 같은 로그를 보게 됩니다 spring.jpa.open-in-view 라는 설정이 기본 설정값에 의해 활성화 되어있습니다. view 렌더링 과정에서 쿼리가 수행될 수 있음을 경고하고 있습니다. view 렌더링 과정까지 쿼리가 수행될 수 있기 때문에, 그 과정..

Life

유튜브 버튼 커스터마이징

Before & After 최근 유튜브 UI에 변경이 있었습니다. 전체적으로 둥글둥글한 테두리 안에 요소들을 담는 형태로 변경되었습니다. 추가로 일부 버튼들이 생기기도 했고, 정렬 순서가 바뀌기도 했고, 반응형이 적용되기도 했습니다. 그 과정에서 자주 사용하는 버튼이 숨겨지는 불편함이 있어서 이를 해결한 과정을 공유해봅니다. 결과적으로 사용하지 않는 오프라인 저장, Thanks, 클립 버튼을 제거하고, 해상도와 상관없이 자주 사용되는 저장 버튼이 항상 노출될 수 있게 했습니다. uBlock Origin 크롬 확장프로그램, uBlock Origin을 활용했습니다. 이전부터 광고 차단 및 특정 사이트 내 관심 없는 요소 제거 등의 목적으로 사용해오고 있었는데요, 이번에도 사용하지 않는 버튼 요소들을 필터로 ..

Java & Spring

Spring 외부 설정 파일 import 및 프로퍼티 리팩터링

MyRSS 프로젝트를 진행하며 스프링 설정 파일을 리팩터링한 내용을 정리해봤습니다. 설정 파일 공개 필요성 spring: config: import: - classpath:/2022-MyRSS-secret/application.yml 위 내용은 리팩터링 이전 application.yml 파일 내용의 전부입니다. 서브모듈로 Private Repository를 품고 있고, 그 안에 환경 설정 내용들을 담아두었습니다. Github Actions, Jenkins에서는 Github Personal Token을 전달해 서브모듈까지 가져와서 CI/CD를 수행합니다. 그대로 계속 작업해도 아무 문제 없지만, 공개 가능한 설정은 공개하도록 리팩터링하고 싶었습니다. 추가적으로, 서브모듈로 관리되는 보안이 필요한 접속정보 ..

Server & Infra

Grafana, Loki, Promtail 을 이용한 로그 모니터링 및 알림 시스템

로그 모니터링 시스템의 필요성 Logback을 이용해 날짜별, 로그 레벨별 로그 파일들을 관리하고 있었지만, 로그를 확인하려면 개발, 운영 서버에 직접 들어가서 log 파일을 열어서 확인해야 했습니다. 날짜별로, 레벨 별로도 분리되어 있고, 개발 운영 환경별로도 로그가 분리되어 있어 통합적으로 모니터링하는 것은 상당히 어렵습니다. 또한 최근 일주일 동안 특정 로그가 몇 건 발생했는지와 같은 로그 집계나 특정 시간 내에 어떤 로그가 몇 건 이상 발생 시 알림 전송 기능도 있으면 크게 도움될 것 같습니다. Grafana, Loki, Promtail의 역할 promtail is the agent, responsible for gathering logs and sending them to Loki. loki i..

리차드
화음을 좋아하는 리차드🎶