java (19) 썸네일형 리스트형 Toss Slash 24 - 대규모 사용자 기반 서비스 운영 - (2) Toss Slash 24 - 대규모 사용자 기반 서비스 운영 - (1)이전 글에서 toss slash24에서 인상 깊었던 세션에 대해서 글을 적었었는데, 이를 실제로 간단한 코드로 구현해보고자 한다. 전체 세션 내용을 모두 적용하기에는 무리가 있어, 전체 중 '장애대응' 부분에 한해서 살펴보고자 한다.핵심은 Coordinator 서버를 두어 api 제공기관 시스템 트래픽을 자동으로 제어하고자 하는 것이다.기존 resilience4j를 사용했을 때는 서버 단위로 서킷 브레이커가 적용되어 차단 메커니즘에 왜곡이 있어, 전체 인스턴스 단위로 서킷 브레이커를 적용하자는 취지다. 추가하여 canary 배포 방식에 맞춰 처음과 끝 인스턴스 2대를 master 서버로 설정해 api 호출이 가능한지 지속 체크해준다.배.. 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 지원이 마.. 중복 거래 방지를 위한 uuid 생성(UUIDv7, time-based uuid) 계기uuid란?Custom UUIDv7 구현결론계기동일 입출금에 대한 중복 거래 방지를 위해서는 어떻게 해야 하는가? 입출금 거래 시스템에 대한 애플리케이션 로직을 구현하며 '요청의 동일성을 어떻게 검증할 것인가?'에 대한 고민이 있었다. 여러 client에서 들어오는 입출금 요청은 단 한 번만 처리되어야 한다. 구현은 단일 서버를 가정하였기 때문에 입금과 출금 모듈도 하나의 트랜잭션으로 처리되지만, 네트워크 오류나 클라이언트-서버 간의 timeout, 재처리 로직 등에 의해서 동일 입출금 요청이 여러 번 서버에 요청이 올 수도 있다.예를 들어 사용자가 100원을 A통장에서 B통장으로 옮기고자 한다면, A통장에서 100원을 출금해 B통장으로 100원을 입금해야 한다. 출금과 입금은 한 번씩만 이루어져야 .. 동시성 이슈 해결하기(feat. spring(java), MySQL, Redis(Redisson)) Single ThreadMulti-ThreadingTomcat - Spring framework분산 시스템(Distributed Systems)단일 DB에서의 처리NoSQL에서의 처리 - Redis(Redisson library) 이번 글에서는 좀 더 실용적으로 접근해볼 예정입니다. 그래서 실제 서비스 운영 환경에서 동시성 이슈를 어떻게 해결해야 할지에 대해 직접 코드를 작성하며 살펴보고자 합니다.앞으로 설명할 내용들은 이전 글들(동시성 처리 - intro와 동시성 처리 - Lock Algorithms(락 알고리즘))의 내용에 기반하고 있기 때문에 먼저 읽고 오시면 아래 내용을 더 잘 이해하실 수 있을겁니다!concurrency, blocking, non-blocking, sync, async, lock.. LocalDateTime, Instant, OffsetDateTime, ZonedDateTime 사용법 차이 WHY?최근 사내 근태 관리 시스템을 구축하면서 시간 정보를 어떻게 저장할까에 대한 이야기가 나왔습니다.결론은 서버가 사내에 위치해 있어 시간도 Asia/Seoul 기준으로 설정되어 있고, global 서비스를 하는 것도 아니므로 프로젝트를 같이 진행하는 사람들이 가장 다루기 쉬운 java LocalDateTime 클래스를 사용하자고 결론을 내렸습니다.그렇다면 다른 날짜/시간 관련 클래스는 어떤 상황에서 사용해야 할까요? 서버가 해외 region에 위치해있다면?//2024-05-19T17:21:46.011254LocalDateTime.now();현재를 24년 5월 19일 17시 21분이라고 해봅시다. 서버가 국내 region에 있다면 LocalDateTime으로 확인했을 때 동일 시간이 나올 것입니다./.. [Java] http 요청과 응답 구현하기 - 2(apache tomcat의 http 처리) 개요 지난 글에서 library를 이용하지 않고 Socket을 이용해 'http' 프로토콜 요청을 구현해보았다. 이 때 apache tomcat 기반의 타겟 서버가 http message 규칙에 맞는 요청을 적절히 처리하여 응답한 것을 확인할 수 있었다. 그렇다면 apache tomcat은 어떻게 http 요청을 해석할 수 있었을까? http 응답을 위한 call stack 뜯어보기 yourkit 이라는 툴을 활용해 health check 서버가 SocketClient의 요청을 어떻게 처리했는지 콜스택을 살펴보자. call stack 특성상 가장 하위의 메서드부터 실행되어 응답되는 구조다. Thread가 실행되고, NIO를 통해 socket 연결 수립 후 실행된다. 이후 AbstractProtocl의 s.. [Java] http 요청과 응답 구현하기 - 1(socket으로 http 요청하기) 네트워크 - 요청과 응답 네트워크를 이용하면 멀리 떨어진 대상과도 자료를 주고 받을 수 있다. 가령 이 블로그 글의 정보를 얻기 위해 사용자는 개인 PC 서버에서 웹브라우저를 통해 tistory 서버 어딘가에 저장된 글이라는 데이터를 받고 있다. 네트워크는 OSI 7계층이나 TCP/IP 4계층 등으로 분류되는 개념으로 동작한다. 전기 신호를 직접 전달하는 하드웨어가 위치한 계층에서부터 실제 데이터를 주고 받는 주체인 'application'까지 계층적으로 각 역할을 수행한다. 요청을 주고 받는 과정을 TCP/IP 4계층의 용어로 설명하면, 'Network Access Layer'의 하드웨어를 이용해 'Internet Layer'에서 통상 IP로 목적지 네트워크 주소를 판별한다. 이후 'Transport.. 이전 1 2 3 다음