본문 바로가기

분류 전체보기115

Transactional Outbox Pattern Transactional OutBox Pattern 이란 ?메시지를 DB 트랜잭션과 묶어서 커밋하여 비동기적으로 메시지 브로커에게 전달하는 패턴무엇을 해결하기 위해 등장?이벤트를 활용한 분산환경에서는 특정 작업을 완료한 후 이벤트를 발행해야한다.E-Commerce를 예를 들면 상품을 구매하고 결제를 완료했을때 결제를 완료했다는 이벤트를 발행하여 다음단계인 배송준비 프로세스를 진행하는 것 처럼 다음단계 비즈니스 로직을 진행할 수 있도록 한다.하지만 이벤트로 분리된 애플리케이션 환경에서는 애플리케이션 로직상 트랜잭션이 완료되기 전에 이벤트가 발행된다.그러면 이후 비즈니스 로직이나 쿼리에서 예외가 발생하여 트랜잭션이 실패될 경우 롤백이 될 수 있다.그러면 작업이 완료되지 않았는데 이벤트 메시지만 발행되는 상황.. 2025. 2. 20.
인프런 워밍업 클럽 2기(클린코드/테스트 코드) Day4 미션 1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다. 사용자가 생성한 '주문'이 유효한지를 검증하는 메서드.Order는 주문 객체이고, 필요하다면 Order에 추가적인 메서드를 만들어도 된다. (Order 내부의 구현을 구체적으로 할 필요는 없다.)필요하다면 메서드를 추출할 수 있다.public boolean validateOrder(Order order) { if (order.getItems().size() == 0) { log.info("주문 항목이 없습니다."); return false; } else { if (order.getTotalPrice() > 0) { .. 2024. 10. 3.
Exception 과 Error 예외란? (Error vs Exception) 자바에서는 실행시(runtime) 발생할 수 있는 오류를 에러와 예외 두 가지로 구분한다. 에러(Error) 메모리부족 (OutOfMemory) 나 (StackOverflow)와 같이 발생하면 복구할 수 없는 오류 시스템에 비정상적인 상황이 생겼을 때 발생한다. 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류이다. 개발자가 미리 예측할 수 없다. 에러는 일반적으로 복구할 수 없으며 프로그램의 실행을 중단시킨다. 예외(Exception) 예측가능한 오류 런타임 예외 (Unchecked Exception) 과 예외 (Checked Exception) 으로 나눠진다. 런타임 예외 런타임 예외는 명시적인 예외 처리가 필요하지 않고, 프로그래머의 실수에 의한 오류.. 2023. 6. 8.
JPA Dirty Checking 과 Transaction Dirty Cheking이란? Transaction 안에서 엔티티의 변경이 일어날 경우 변경 내용을 자동을 데이터베이스에 반영하는 JPA 특징 JPA 에는 update는 존재하지 않는다. entity save를 진행할 경우 isNew메서드를 통해 entity가 새로운 Entity인지 존재하는 Entity인지 판단한다. 존재할 경우 merge를 진행 새로운 Entity라면 persist를 진행한다. @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entit.. 2023. 5. 30.
인덱스란 ? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 만약 우리가 책에서 원하는 내용을 찾는다고 하면 책의 모든 페이지를 찾아보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨앞 또는 맨뒤에 색인을 추가하는데 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕는다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다. // Mang이라는 .. 2021. 8. 3.
선착순 이벤트 서버 생존기!(우아한테크토크) 정리 순간적인 대량 트래픽 소화 선착순 주문 이벤트 진행 📍문제점 평소 트래픽 10배가 들어올거라고 예상 ( 실제로는 150배 예상하지 못한 트래픽이 들어온다!!) 주문 뒤에는 PG사가 있다 PG사에서 에러가 터질 수도 있다. 📍해결방안 처리할수 있을만큼만 순서대로 입장시켜라!! (모든트래픽을 차례차례 순서대로 우리가 처리할 수 있을만큼만 들여보내자) 큐 시스템 기능 모든 이벤트 대상에게 번호표 발급 번호표를 발급받은 사용자를 줄을 세운다 (대기열) 대기열의 사용자에게 현재 몇번째 대기순서를 알려준다. 서버가 소화할 수 있을 만큼 사용자를 입장(참가열) 고려사항 고성능 처리 가능 (Redis) 왜 레디스? 많은 서비스에서 사용하는 검증된 저장소 입/출력이 빠른 In-Memory 데이터베이스 다양한 자료구조 지.. 2021. 7. 28.
인증 쿠키와 세션 JWT HTTP 프로토콜의 특징 connectionless클라이언트가 request를 서버로 보내면 서버는 클라이언트가 보낸 request에 맞게 response를 보내고 연결을 끊는다. 클라이언트와 서버가 요청과 응답을 한 번 주고받으면 연결을 끊어버리는 특징 Stateless예를들어 메인페이지에서 로그인을 하고 다른 페이지로 넘어가면 더시 로그인을 해야한다. 요청과 응답으로인해 통신이 끝난다면 상태 정보를 유지하지 않는 특징. 이런 특징들 때문에 쿠키와 세션 혹은 jwt를 이용하여 사용자 인증에 대한 정보를 유지할 수 있다. 📍 쿠키 쿠키는 클라이언트에 저장되는 Key와 Value로 이루어진 데이터 인증 유효 시간을 설정할 수 있고 유효 시간이 정해진다면 클라이언트가 종료되어도 쿠키가 유지된다. 쿠키의 동작.. 2021. 7. 25.
HTTP를 알아보자 HTTP(HyperText Transfer Protocl) 인터넷 상에서 데이터(하이퍼텍스트)를 빠르게 교환하기 위한 프로토콜의 일종으로 서버와 클라이언트의 사이에서 어떻게 메시지를 교환할지를 정해놓은 규칙으로 80번 포트를 사용한다. HTTP의 구조는 요청(Request) 응답(Response)로 구성되어 있다. 인터넷 주소 맨 앞에 들어가는 http://가 바로 이 프로토콜을 사용해서 정보를 교환하겠다는 표시 요청들은 서버로 보내지며, 서버는 요청을 처리하고response라고 불리는 응답을 제공해준다. 요청 과 응답 사이에는 여러 개체들이 있는데 예를들면 다양한 작업을 수행하는 게이트웨이 또는 캐시 역할을 하는 프록시 등이 있다. TCP HTTP는 전송 프로토콜을 요구하지 않는다. 하지만 신뢰할 수 .. 2021. 7. 25.
NoSQL NoSQL 비 관계형 데이터베이스는 구조화 되지 않고 분산되어 있다. 기본적으로 SQL(관계형 데이터베이스)와 반대되는 접근방식을 따르기 때문에 지어진 이름이다. 스키마가 없고 관게도 없다. NoSQL DB 종류 NoSQL 데이터베이스의 종류는 키-값 데이터베이스, 도큐먼트 데이터베이스, 칼럼 패밀리 데이터베이스, 그래프 데이터베이스로 나뉘며 아래 그림은 관계형 데이터베이스와 4가지 종류의 NoSQL 데이터베이스를 각각의 대표 제품과 함께 나타낸 그림입니다. 키-값 데이터베이스 : 키와 값으로 구성된 배열구조의 데이터베이스로 NoSQL 데이터베이스 중 가장 단순한 구조입니다.(※ redis는 "개발자를 위한 레디스 튜토리얼 01 - https://meetup.toast.com/posts/224" 참조) .. 2021. 7. 24.