본문 바로가기

백엔드17

Jackson record 역직렬화 예외 can not set final 요약ObjectMapper의 PropertyNamingStrategy SNAKE_CASE로 설정한 뒤 record 클래스의 역직렬화를 시도했을 때 해당 예외가 발생이 외에도 @JaonNaming 등 NamingStrategy를 변경하고 record 클래스를 역직렬화하는 경우에 해당 예외가 발생해당 문제는 Jackson 라이브러리가 record 클래스를 지원하기 시작한 2.12 버전부터 해당 문제가 수정되기 이전인 2.15 버전 사이에 발생할 수 있음예외 발생 상황최근 실무를 접하면서 새로운 로직을 개발할 일이 있었습니다. 원격 저장소의 json 파일을 읽어들여 프로덕트 DB에 적재하는 일이었습니다. 해당 파일의 json 필드들은 스네이크 케이스(field_name)로 되어 있었고, bean으로 동록되어 .. 2025. 1. 19.
[우아한 티켓팅] 대기열 시스템 응답 시간 스파이크 해결하기 들어가기에 앞서본 게시글을 우아한 티켓팅 프로젝트의 대기열 시스템 성능 개선에 관한 이야기를 다룹니다. 이전 게시글 [우아한 티켓팅]대기열 시스템 10,000명 부하 테스트하기를 통해 어떻게 부하 테스트를 했고, 결과가 어땠는지를 다뤘습니다. 해당 게시글에 이어서 이번에는테스트 결과를 살펴보던 중 발견한 응답 시간 스파이크원인 분석과 개선에 대해 다룹니다.응답 시간 스파이크 발견우아한 티켓티의 대기열 시스템은 [우아한 티켓팅]대기열 시스템 10,000명 부하 테스트하기에서 다룬 것과 것 부하 테스트를 통해 10,000명을 견딜 수 있는지 검증했습니다. 결과는 다음과 같았습니다.가상 사용자 2,500명, 테스트 시간 5분, 1초 주기 폴링일 때 95%의 요청을 600ms 내로 처리가상 사용자 10,000명.. 2024. 10. 6.
[우아한 티켓팅] 대기열 시스템 10,000명 부하 테스트하기 들어가기에 앞서본 게시글은 우아한 티켓팅 프로젝트의 대기열 시스템 성능 측정에 관한 이야기를 다룹니다. 이전 게시글 [우아한 티켓팅]대기열 시스템 설계하기의 내용을 바탕으로 저희 팀은 Java 자료 구조를 이용한 대기열, Redis를 이용한 대기열을 구현하였습니다. 팀의 목표 중 하나인 10,000명을 견딜 수 있는 대기열 시스템을 검증하기 위해테스트 환경은 어떻게 구성했는지테스트 결과는 어떗는지에 대해 기록을 남기려 합니다.부하 테스트 환경 구성테스트 시나리오테스트 대상 시스템은 대기열 시스템입니다. 다른 기능과 섞어서 성능을 측정하기 보다는 대기열 시스템 자체의 성능만을 측정하기 위해 시나리오는 다음과 같이 구성했습니다.사용자 인증 정보 획득을 위한 사용자 로그인 JWT 토큰 생성티켓팅의 시작점 인 .. 2024. 9. 29.
직접 구현한 스텁으로 이상적인 테스트 작성하기 들어가기에 앞서본 게시글은 이상적인 테스트를 작성하기 위해 했던 저의 고민과 결론을 공유하는 것에 목적을 두고 있습니다. Java, Spring 환경에서 테스트를 작성해본 경험이 있는 분들을 대상 독자로 하고 있으며 배경 지식을 위해 테스트 더블에 대해서 먼저 정리합니다. 다만, 저의 고민과 결론에 부족한 부분이 있을 수 있습니다. 부족한 부분은 지적해주시고 너그럽게 봐주시길 부탁드립니다.본 게시글은 우아한테크캠프에서 미니 세미나를 통해 동기 교육생들에게 공유한 내용을 블로그 게시글의 형태로 정리한 것입니다. 이전에 동일한 내용을 가지고 작성했던 게시글이 존재하나 우아한테크캠프의 특강 중 하나인 "테크니컬 라이팅"에서 배운 내용을 적용, 불필요한 내용을 제거하고 퇴고를 거쳐 다시 작성한 게시글입니다. 이.. 2024. 8. 5.
테스트 더블, 목과 스텁 이야기 얼마 전, 우아한테크캠프에 참여하며 미니 세미나를 통해 테스트 더블과 이상적인 단위 테스트를 작성하기 위해 했던 고민을 다른 사람들과 공유하였습니다. 본 게시글을 통해 당시 진행했던 세미나의 내용을 글로써 정리하고 다시 한 번, 이 글을 읽으실 분들과 저의 고민을 공유해보고자 합니다.테스트 더블스턴트 더블이 장면을 보신적이 있나요?이 장면은 미션 임파서블 폴아웃의 오프닝 시퀀스의 장면 일부를 따온 것으로, 톰 크루즈가 이륙하는 실제 비행기에 매달려서 스턴트를 소화하고 있는 모습입니다. 보시는 바와 같이 톰 크루즈는 이런 위험한 스턴트 장면도 대역 없이 직접 소화하는 것으로 유명한 배우입니다. 보통은 실제 배우 대신 스턴트 장면을 대신 촬영할 위한 전담 대역을 두는 것이 일반적입니다. 위 사진은 드웨인 .. 2024. 7. 8.
테스트 더블과 mock 객체 사용 시 주의점 그동안 프로젝트를 진행하고 테스트 코드를 작성하면서 협력하는 객체들은 주로 목킹(mocking)을 했습니다. 실제 구현체 대신 목 객체를 사용하면서 개인적으로 느끼는 바가 있었습니다. 이번 글에서는 테스트 더블 4가지와 느낀 점에 대해 한 번 정리해보려 합니다. 테스트 더블(Test Double) 테스트 더블(테스트 대역)은 프로덕션 코드에서 실제 상호작용하는 객체 대신 테스트 코드에서 사용하는 가짜 객체들을 뜻합니다. 영화의 스턴트맨처럼 테스트 코드에서 실제 객체 대신 활약하는 스턴트맨의 역할을 수행합니다. 목(Mock) 목은 객체가 기대한 대로 상호작용하는지 확인하기 위한 객체입니다. 자바에서는 Mockito를 이용하면 쉽게 목 객체를 생성할 수 있습니다. @ExtendWith(MockitoExten.. 2024. 1. 27.