본문 바로가기

분류 전체보기

(46)
json 역직렬화 성능 측정(feat. jackson, gson, JSONObject) - 2 1. json 역직렬화(feat. jackson)2. json 역직렬화 성능 측정(feat. jackson, gson, JSONObject)개요저번 글에서 jackson이 역직렬화를 어떻게 수행하는지 메서드 콜 스택을 뜯어 소스코드를 직접 살펴보며 알아보았다. 이 때 한 가지 의문점이 있었는데, 정말 성능적인 차이가 있는 것이냐는 문제다.일반적인 설명으로는 jackson이 streaming api를 이용해서 데이터를 메모리에 모두 올려두지 않고 token('{', ':' 등의 구분자를 토큰으로 명명해둠)로 메모리에만 올려서 해석한 뒤에 flush 시켜서, 성능적으로 더 우위가 있다고 말한다. 하지만 'jackson이 성능적으로 정말 이점이 있는가?'에 대해서는 따져볼 필요가 있다고 판단했다.jmhJMH(..
json 역직렬화(feat. jackson) 1. json 역직렬화(feat. jackson)2. json 역직렬화 성능 측정(feat. jackson, gson, JSONObject)개요spring 프레임워크를 사용하고 있다면 request dto 객체를 만들고 @RequestBody 어노테이션을 붙이면 자동으로 json desirialization을 통해 객체 매핑하여 요청값을 처리할 수 있다.사내에서는 spring이 아닌 다른 공통 프레임워크를 사용하고 있는데, fixed length 방식으로 요청/응답을 처리하고 있으므로 json 형식의 데이터는 취급하고 있지 않다. 다만, 다양한 모듈의 요청/응답(메서드 파라미터와 응답값을 포함)에 대한 송수신 객체를 유사 wrapper 클래스로 처리하고 있는데, json 역직렬화에 대한 api 지원이 마..
[개인기록] gps 기반 출퇴근 시스템 간편 일지(3) 지난 기록12월 초에 mvp를 만들어서 매니저님께 말씀드린 후에 팀장님 포함 보임자 회의 시에 계획을 설명해달라고 하셨다. 팀장님도 긍정적으로 검토하신다고 하셔서 그냥 들어가는 것보다는 바쁘신 분들에게 정리하여 말씀드리기 위해 ppt까지 만들었는데, 업무 때문에 계속 바쁘셔서 회의에 참석할 수 없었다ㅠ 서비스 고도화 프로젝트가 곧 오픈하는 건이 있었는데 그 일 때문에 바쁘신거겠지.. 이해하였다.회의날에 안부르시길래 매니저님께 슬쩍 다시 말씀드렸는데 회의가 너무 오래걸려서 깜빡했다고 미안하다고 하셨다. 그 다음날 회의에 부르겠다고 하셨는데 또 안 부르셔서.. 흐음.. 긍정적으로 생각하지 않으시는데 에둘러 거절하시는건가.. 하였다. 그래도 포기할 수 없어서 로비에서 서성이는 팀장님이 보이시길래 일부러 어슬렁..
[개인기록] gps 기반 출퇴근 시스템 간편 구현 일지(2) 지난 기록gps 기반 출퇴근 시스템을 만들겠다고 일요일 저녁에 마음을 먹고 백엔드 서버 구성을 마친 뒤 월요일 저녁에 다시 손을 댔을 때, 조금만 더 하면 MVP 완성인데라는 생각에 결국 새벽에 MVP는 구현해냈다.웹페이지 및 Geolocation API 연동월요일에 진행한 내용은, 백엔드 서버는 구성해서 프로세스를 띄워두었으니 프론트 웹페이지를 만들고 로컬 서버와 통신 테스트를 한다. 단순한 fake 로그인 기능을 만들고 버튼 클릭 시 출근 api를 호출하게 하였다. 이후 Geolocation API를 연동해 출근지 기준 위도와 경도를 설정한 뒤에 허용 범위에 따라 출근 로직을 수행하게 만들었다.중간에 fake 로그인 기능을 만들면서 users 스키마 변경이 조금 있었고 백엔드 orm domain 로..
[개인기록] gps 기반 출퇴근 시스템 간편 구현 일지(1) 개인 기록용이므로 설명이 자세하지 않고 친절하지 않을 수 있습니다.계기회사 출근 절차는 다음과 같다. 회사 건물 앞에 도착한다. 엘레베이터를 기다린다. 엘레베이터로 00층에 간다. MDM을 켜고 인증한다. 업무용 컴퓨터를 켠다. 로그인을 한다. 출퇴근 관리 시스템 사이트에 접속한다. 출근을 찍는다.이것이 불편해서 작년에 '업무용 컴퓨터를 켠다~ 출근을 찍는다'의 과정을 사무실 입구 쪽의 모바일 단말을 통해 nfc 터치 방식으로 바꾸어 사원증을 태깅만 하면 출근이 찍히도록 했다. 작년에도 '회사 건물 앞에 도착하면 바로 찍으면 안돼??'라는 의문이 있어서 짬 있으신 선임 분이 시도해봤지만, 사내 방화벽 정책으로 인해 외부망의 inbound를 허용해주지 않았다.그런데 문제는 회사 건물 앞에 도착까지 한 것은..
중복 거래 방지를 위한 uuid 생성(UUIDv7, time-based uuid) 계기uuid란?Custom UUIDv7 구현결론계기동일 입출금에 대한 중복 거래 방지를 위해서는 어떻게 해야 하는가? 입출금 거래 시스템에 대한 애플리케이션 로직을 구현하며 '요청의 동일성을 어떻게 검증할 것인가?'에 대한 고민이 있었다. 여러 client에서 들어오는 입출금 요청은 단 한 번만 처리되어야 한다. 구현은 단일 서버를 가정하였기 때문에 입금과 출금 모듈도 하나의 트랜잭션으로 처리되지만, 네트워크 오류나 클라이언트-서버 간의 timeout, 재처리 로직 등에 의해서 동일 입출금 요청이 여러 번 서버에 요청이 올 수도 있다.예를 들어 사용자가 100원을 A통장에서 B통장으로 옮기고자 한다면, A통장에서 100원을 출금해 B통장으로 100원을 입금해야 한다. 출금과 입금은 한 번씩만 이루어져야 ..
Toss Slash 24 - 대규모 사용자 기반 서비스 운영 아래 글은 Toss Slash 24 세션 참가 후 느낀 소감과 발표 내용을 단순 개조식으로 변환한 내용입니다. 자세한 내용은 아래 유튜브 영상에서 확인하실 수 있습니다.https://www.youtube.com/watch?v=5I7ehDTvnWA 24년 9월 12일에 좋은 기회가 되어 Toss에서 개최하는 컨퍼런스 Slash 24에 다녀왔다. 총 10개의 세션을 들었는데, 그 중에서도 가장 인상 깊었던 세션이 '대규모 사용자 기반의 마이데이터 서비스 안정적으로 운영하기'라는 세션이었다. 발표의 내용과 구성, 발화자의 딕션, ppt, 전달력 등 최근 들었던 발표 중에 가장 깔끔하지 않았나 싶다.발표에 따르면 70,000 TPS 트래픽이 발생하는 서비스를 안정적으로 운영하는 노하우에 대한 내용이다. 이를 ..
비동기 메시징 패턴 응용 통신(Microservices Patterns) 마이크로서비스 패턴(Microservices Patterns) by Chris Richardson 책의 3.3장 비동기 메시징 패턴 응용 통신을 개괄적으로 정리한 내용입니다. 메시징은 서비스가 메시지를 서로 비동기적으로 주고 받는 통신 방식이다. 메시지 구성 요소메시지header송신된 데이터에 대한 metadata에 해당하는 key-value로 구성messageId(송신자 또는 메시징 인프라에서 생성)응답이 출력될 메시지 채널을 가리키는 반환 주소(option)body실제로 송신할 텍스트 또는 이진 포맷의 데이터종류문서(document)데이터만 포함한 제네릭한 메시지(e.g. 커맨드에 대한 응답)메시지를 어떻게 해석할지는 수신자가 결정커맨드(command)RPC 요청과 동등한 메시지호출 작업과 전달할 매..