분류 전체보기 33

[CKA] Container & Orchestration

개발자로 살아남기 위해서는 Public Cloud 사용과 더불어 Cloud Native Architecture에 대한 이해와 적용 능력이 반드시 필요할 듯 하다. 꼭 MSA가 아니더라도 자동화와 관리의 측면에서 k8s를 많이 사용하는 추세이다.업무상 필요하기도 하지만, 평소에도 관심이 있었기에 이번 기회에 CKA를 취득해보려고 한다. 2달 정도 열심히 공부해보자.k8s는 아무래도 그 동안 업무에서 devops engineer의 영역이었기 때문에 개발자 입장에서 접할 기회가 많지 않았다. 따라서 beginner course 부터 시작하여 차근차근 내용을 정리해나갈 것이다.강의 내용을 정리하기 전에 Container와 Container Orchestration의 의미에 대해 AI에게 질의해보았다.Contai..

devops/kubernetes 2025.06.24

[Java] CompletableFuture

이번 글에서는 Java 8부터 도입된 CompletableFuture에 대해 정리한다. CompletableFuture 란?자바 진영에는 비동기 처리를 위해 Java 5에 도입된 Future 가 존재한다. 하지만 Future는 예외 처리가 불가능하고, 다수의 비동기 작업을 조합할 수 없는 등 여러 문제점을 안고 있었다.이를 해결하고 보다 나은 개발을 위해 Java 8부터 CompletableFuture가 도입되었다고 보면 된다.CompletableFuture는 Future를 기반으로 보다 확장된 형태의 비동기 처리가 가능하도록 지원한다.다수의 비동기 작업을 조합 가능예외처리 혹은 콜백을 위한 메서드 사용 가능Future와 달리, Blocking 로직이 존재하지 않더라도 콜백 메서드를 통해 비동기에 대한 ..

development/java 2025.04.01

[DB] 트랜잭션 격리 수준과 부정합 문제 (2)

지난 포스팅에 이어 이번 글에서는 트랜잭션 격리 수준에 따른 부정합 문제에 대해 정리할 것이다.격리수준 별로 발생할 수 있는 부정합 문제들을 정리하고, 사례들을 직접 실습해볼 것이다.격리 수준과 부정합 문제DBMS의 부정합 문제는 다음과 같은 것들이 있다.1. Dirty Read : 하나의 트랜잭션에서 데이터의 상태를 변경한 후 커밋 또는 롤백하지 않은 상태에서 다른 트랜잭션이 변경된 데이터를 읽는 것을 의미한다.해당 트랜잭션이 롤백 되는 경우 치명적인 문제가 발생할 수 있다. 롤백이 이루어지기 전에 다른 트랜잭션이 변경된 데이터를 조회한 경우, 서로 바라보는 데이터의 상태에 차이가 발생하기 때문이다.2. Non-Repeatable Read : 하나의 트랜잭션 내에서 동일한 조건으로 조회를 시도했을 때 ..

[AMQP] RabbitMQ와 DLX/DLQ

개요AMQP (advanced message queuing protocol)란 메세지를 생산하는 Producer와 메세지를 소비하는 Consumer 사이에 메세지를 보관하는 Broker를 두어, 생산자와 소비자를 연결하는 네트워크 프로토콜을 의미한다. AMQP를 사용하는 대표적인 서비스로는 RabbitMQ가 있으며, 구성요소는 다음과 같다.Exchange : 메세지 생산자인 Producer는 메세지를 발행할 때 Queue가 아닌, Exchange에 메세지를 저장한다. Exchange에 저장된 메세지는 Binding Key를 사용하여 사전에 정의된 바인딩 규칙에 따라 적절한 Queue로 옮겨진다.Queue : Queue는 Exchange로 부터 이동해온 메세지들을 보관하는 저장소로서, 메세지 소비자인 Co..

CS 2025.03.24

[DB] 트랜잭션 격리 수준과 부정합 문제 (1)

DBMS의 데이터 변경 작업을 진행할 때 우리는 작업의 최소 단위인 트랜잭션을 기준으로 데이터의 상태를 변경한다.트랜잭션을 이해하기 위해서는 전파 속성과 격리 수준을 반드시 살펴보아야 한다. 지난 글에서 전파 속성에 대해 정리하였으니, 이번 글에서는 격리 수준에 대해 정리하고자 한다.그리고 격리 수준에 따른 부정합 문제에 대해서도 간략하게 다뤄본다.스프링을 활용한 개발에서는 일반적으로 Configuration에서 PlatformTransactionManager를 Bean으로 등록한 후 비즈니스 Layer 혹은 application Layer에서 @Transactional 어노테이션을 활용하여 트랜잭션을 관리한다.@Transactional 어노테이션은 전파 속성과 격리 수준을 트랜잭션 별로 제어할 수 있도..