본문 바로가기

전체 글16

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.
[Filebeat] 파일 수집과 registry 파일 수집과 registryfilebeat는 registry에 파일을 어디까지 읽었는지 offset으로 저장한다.cursor의 offset에 해당하는 숫자가 파일내의 바이트 단위 offset이다.output으로 설정된 시스템(es나 logstash)와 연결이 끊기면 마지막으로 전송된 줄을 추적하고 연결이 다시 되면 다시 마지막으로 전송된 줄부터 파일을 읽어서 전송한다.logstash가 죽더라도 logstash가 정상 구동되고 filebeat와 연결되면 그때부터 다시 로그를 수집하고 registry가 업데이트된다. 파일비트의 파일 식별 기준리눅스 파일시스템에서 파일비트는 inode와 device 값을 사용하여 파일을 식별한다.디스크에서 파일을 제거하면 새로운 파일이 제거된 inode와 device값을 할당.. 2024. 7. 14.