전체 글17 NewRelic 도입을 위한 분석기 사내에서 ELK으로 구축된 로깅 모니터링 시스템을 운영 중이다. 메트릭 정보나 RDB 혹은 외부 API 통신 등 트랜잭션(요청) 단위로 세밀하게 성능을 측정할 수 있기 때문에 APM 도입 검토를 하게 되었다. 로깅 모니터링 시스템과 APM은 기본적으로 데이터 수집 방법과 컨셉이 다르다. ELKNew Relic데이터 수집 방식로그 파일 기반Java agent 기반트랜잭션(요청-응답) 혹은 에러를 로그로 남겨서 로그파일에서 데이터를 수집agent에서 로그 수집, 에러 감지 및 수집, 트랜잭션(요청)과 트랜잭션 별 stack trace(span) 수집filebeat 설정에서 수집할 로그 형태를 설정하고 logstash에서 정의한 타입별로 로그를 가공하여 ElasticSearch 인덱스로 저장한다.agent에.. 2025. 10. 4. Auto scaling 라이프사이클 후크(lifecycle hook) 적용기 사내 서버 auto scaling 작업 고려사항데이터 가공 서버에서 매시 정시마다 데이터를 집계하는 스케줄러가 돈다. api 서버와 트래픽을 분산하기 위해서 이 데이터 가공 서버에 일부 api를 라우팅 시키기로 결정되었다. 따라서 데이터 가공 서버도 api 서버와 마찬가지로 auto scaling 설정이 필요하다.scale in 될 때 데이터가 가공되는 시간을 피해야 하므로 lifecycle hook을 적용하게 되었다. (멀티 서버 환경에서 스케줄러 중복 방지는 shedlock 설정이 되어있음) ELB connection drainingELB와 연결을 해제하는 connection draining의 default는 300초이다.(드레이닝: 로드 밸런서가 새로운 요청을 허용하지 않고, 기존 요청이 완료될 때.. 2025. 6. 22. Spring Boot 3 버전 주요 변경 사항 Spring Boot 3.x.x 버전은 Java 17 버전 이상을 지원한다.Spring Security 버전은 6.x.x을 지원한다.Java EE를 jakarta EE로 대체한다.javax 패키지를 jakarta로 변경해야한다.javax.persistence.* → jakarta.persistence.*javax.validation.* → jakarta.validation.*등등 …참고: https://www.samsungsds.com/kr/insights/java_jakarta.htmlJava의 record 키워드java 14버전에 새로 생긴 키워드 record불변 데이터 객체를 쉽게 생성할 수 있는 클래스lombok 대신에 record 클래스로 만들어서 사용하면 lombok과 비슷한 기능을 사용할 수.. 2024. 7. 16. deadlock found when trying to get lock 에러 해결 deadlock found when trying to get lock 에러가 나는 케이스는 실제로 deadlock이 걸렸을 때, 혹은 lock을 걸고 수행하는 트랜잭션이 끝나지 않았을 때 바로 같은 row에 lock을 걸려고 할 때 나타난다. 따닥과 같은 api 중복 요청 시에도 발생했고 최근에는 SQS로 받은 event를 처리하는데 event가 연속으로 날라와서 거의 동시에 처리할 때 에러를 마주했다. 두 개의 다른 event payload가 다른 row에 대해 처리함에도 불구하고 에러를 마주했다. 로직 안의 update문에서는 인덱스를 걸지 않은 컬럼을 where절에 사용했고 따라서 row 전체에 lock을 걸어서 발생한 문제였다.id값을 조회해서 where절에 id를 넣어주는 것으로 해결할 수 있었다. 2024. 7. 16. 이전 1 2 3 4 5 다음