🎯 DataBase Concurrency ControllRace Condition경쟁상태는 두 개 이상의 스레드가 공유 데이터에 액세스 할 수 있고, 동시에 변경을 하려고 할 때 발생하는 문제Race Condition 으로 동시에 들어오는 요청들이 갱신 전 값을 읽고, 수정하면서실제 갱신이 누락되는 현상이 발생SeriesJava Concurrency ControlDatabase Concurrency ControlRedis Concurrency ControlKafka Concurrency ControlCompare Concurrency ControlDatabase Lock데이터베이스 락의 종류데이터베이스 락(Lock)의 종류와 역할공유 락(Shared Lock, Read Lock)데이터를 변경하지 않는 ..
🎯 Java Concurrency ControlRace Condition경쟁상태는 두 개 이상의 스레드가 공유 데이터에 액세스 할 수 있고, 동시에 변경을 하려고 할 때 발생하는 문제Race Condition 으로 동시에 들어오는 요청들이 갱신 전 값을 읽고, 수정하면서실제 갱신이 누락되는 현상이 발생SeriesJava Concurrency ControlDatabase Concurrency ControlRedis Concurrency ControlKafka Concurrency ControlCompare Concurrency Control🏹 Java Asynchronous동시에 들어오는 요청들이 갱신 전 값을 읽고, 수정하면서 실제 갱신이 누락before: 100, after: 99 // 갱신 전 값..
Transaction Propagation스프링 트랜잭션을 다시 공부하며 영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의 내용을 요약해 보았습니다.트랜잭션 전파Spring Transaction Propagation Use transaction twice[출처: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2]로그를 보면 트랜잭션1, 2가 같은 conn0 커넥션을 사용 중인데, 이것은 커넥션 풀 때문트랜잭션1은 conn0을 모두 사용 후 커넥션 풀에 반납하고, 이후 트랜잭션2가 conn0을 커넥션 풀에서 획득히카리(HikariCP) 커넥션 풀에서 커넥션을 획득하면 실제 커넥션을 그대로 반환하는 것이 아니라 내부 관리를 위해히카리..
Spring Transaction스프링 트랜잭션을 다시 공부하며 영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의 내용을 요약해 보았습니다.추상화org.springframework.transaction.PlatformTransactionManager 인터페이스를 통해 트랜잭션 추상화package org.springframework.transaction;public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; void commi..
jackson Serialized/DeserializedJackson 직렬화/역직렬화에 대하여 알아보려고 합니다.Field먼저 필드의 접근 제어자와 Jackson의 관계는 어떠할까요?!ℹ️ Jackson 은 public 필드만 기본적으로 직렬화하고 있습니다.@Testvoid jackson_and_access_level_test() throws Exception { ObjectMapper mapper = new ObjectMapper(); JacksonAndAccessLevelTest dtoObject = new JacksonAndAccessLevelTest(); String dtoAsString = mapper.writeValueAsString(dtoObject); System.ou..
Spring 공통 예외 처리(ControllerAdvice, ExceptionHandler) @ControllerAdvice, @ExceptionHandler 는 애플리케이션의 모든 컨트롤러에서 발생할 수 있는 예외를 한 곳에서 관리하기 위해 설계된 기능입니다. 예외 발생 시 ResponseEntity 또는 JSON/XML 형태로 클라이언트에게 에러 정보를 제공할 수 있고, 특정 컨트롤러, 패키지에 대한 예외만 처리할 수도 있습니다. . 아래 코드를 보면 bindingResult 를 검증하는 코드와 try-catch 로 예외를 핸들링하는 것을 볼 수 있습니다. 모든 컨트롤러에 아래와 같은 형태로 구현을 하게 되면 컨트롤러에 코드가 거대해지고 코드를 읽기도 어려워질 것 같죠?! 제가 그랬었답니다..😅 @P..
대규모 시스템 설계 독서 후 링크드인 시스템 분석 대부분의 서비스 회사에서는 이미 어느 정도의 시스템이 구축되어 있다 보니 시스템 설계에 대한 관심이 크지 않았었는데, 사이드 프로젝트를 진행하며 시스템 설계에 대한 궁금증과 관심이 생기게 되었고 그 시기에 우연히 보게 된 책 제목에 흥미를 가지고 대규모 시스템 설계 기초 책을 읽게 되었습니다. 당시 링크드인을 막 시작할 무렵이다보니 문득 "링크드인 서비스는 대규모 트래픽을 감당하기 위해 시스템이 어떻게 설계되었고, 어떤 기술을 어디에 어떻게 적용하고 있을까?" 라는 궁금증을 가지고 읽게 되었습니다. 책에서는 다양한 시스템 설계 방법에 대하여 소개하고 있는데 링크드인 시스템 분석(사실 분석이라는 말은 거창하지만..)을 위해 적용해 볼 수 있는 몇 가지 주제..
Record record 클래스를 잘 알고 사용하기 위해 java14에 출시한 record 클래스를 알아보려고 합니다. Intro Record 클래스는 데이터를 저장하는 데 사용되는 DTO(Data Transfer Object)나 VO(Value Object) 같은 간단한 데이터를 운반하기 위한 불변 클래스를 정의할 때 간결하고 유용하게 사용할 수 있습니다. record 클래스는 데이터를 저장하는데 사용되는 DTO(Data Transfer Object)라고 불리는 클래스를 API 요청, 쿼리 결과 등의 데이터 이동에 사용하곤 합니다. DTO는 대부분 불변성을 가지고 있는데, 불변 클래스로 만들기 위해 적지 않은 노력이 필요합니다. 각 데이터에 private, final 키워드 선언 각 필드에 대한 get..