목록Back-end (17)
쏭의 개발 블로그

[1] Transactional Outbox와 Transaction Log Tailing 개념Transactional Messaging이란?애플리케이션 비즈니스 로직에 의해 데이터베이스를 수정하는 작업과 메시지 큐에 메시지를 발행하는 작업을 원자적으로 수행하여 데이터의 일관성을 보장하는 것Transactional Messaging을 달성하기 위한 분산 트랜잭션 방법Two Phase CommitTransactional OutboxTransaction Log TailingTransactional Outbox메시지 큐에 메시지를 바로 보내지 않고 데이터베이스의 outbox 테이블에 넣는 방식데이터베이스 트랜잭션이 커밋되면 주기적으로 아웃박스 테이블의 내용을 읽어 메시지 큐에 보낸다.적어도 한번 이상(at-le..

[1] Kafka란?실시간으로 스트리밍 데이터를 수집하고 처리하는 데 최적화된 분산 이벤트 스트리밍 플랫폼대규모 데이터를 실시간으로 처리여러 서비스 간에 대규모 이벤트를 생산 및 소비하며 통신특징고성능, 확장성, 내구성, 가용성Producer와 ConsumerProducer : 데이터 생산자Kafka로 데이터를 보내는 클라이언트로, 데이터를 Topic단위로 생산하고 전송한다Consumer : 데이터 소비자Kafka에서 데이터를 읽는 클라이언트로, 데이터를 Topic 단위로 소비하고 처리한다.Producer→Consumer로 데이터를 전송한다 (API, Message Queue)[2] 대규모 데이터 처리를 위한 구조(1) 기본 구조 : API 통신직접 통신하는 방법으로, 요청/응답의 구조동기적인 방식이다...

프로젝트에서 이미지, 비디오, 오디오 등 파일을 저장하기 위해 어떤 클라우드 스토리지를 사용할지 고민했다. 프로젝트의 요구사항과 개발 방식, 비용을 고려하여 효율적이고 저렴한 클라우드 스토리지를 선택하고자 했다. 이번 포스트에서는 프로젝트에서 사용했던 AWS S3와 Wasabi를 비교하고, 실제로 두 환경을 모두 구성하고 파일 저장 코드를 구현한 내용을 공유하고자 한다. AWS S3 환경 구축과 구현에 대한 블로그들은 많지만, Wasabi를 다루고 AWS S3와 Wasabi 전환을 고려한 자료는 찾기가 쉽지 않아 이참에 포스트를 작성해보았다. [1] AWS S3 vs Wasabi 비교내가 프로젝트에서 고민한 클라우드 스토리지는 AWS S3와 Wasabi이다.AWS S3먼저, AWS S3는 클라우드 기반..
지난 포스트에서의 Spring Boot와 Redis 연동 과정에서 언급했던 RedisSerializer 선택 기준에 대해 이 포스트에서 다뤄보고자 한다. Spring은 총 3가지 직렬화/역직렬화 클래스를 제공한다.JdkSerializationRedisSerializer, GenericJackson2JsonRedisSerializer, Jackson2JsonRedisSerializer 3가지를 지원한다.각 Serializer에 대해 알아보자. [1] JdkSerializationRedisSerializerJdkSerializationRedisSerializer는 Java의 기본 직렬화 기법인 JDK 직렬화를 사용하여 객체를 처리한다. RedisTemplate의 기본 직렬화 방식으로, 별도로 등록된 Seri..
프로젝트에서 Redis 관련 전역 환경 설정을 위해 Spring Boot와 Redis를 연동했다. 연동 방법과 그 과정에서 어떤 것을 고민했는지 기록하려고 한다. [1] Redis 의존성 추가 및 application.yml 설정먼저 Spring Boot에서 Redis를 사용하기 위한 의존성을 추가해보자. build.gradle에 Spring Data Redis 의존성을 추가해주면 된다. Spring Data Redis는 Spring에서 Redis연동을 쉽게 해주는 라이브러리로, RedisTemplate, StringRedisTemplate, Spring Cache 등의 기능을 제공한다.implementation 'org.springframework.boot:spring-boot-starter-data-..
[1] JWT란?JWT는 RFC 7519 웹 표준으로 지정된 JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 Web Token이다. 사용자의 인증 정보를 안전하게 전달하기 위한 방식이라고 생각하면 된다. JSON 데이터를 Base 64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 HMAC, RSA, ECDSA 등의 암호화 방식을 사용한 전자 서명도 들어있다. 여기서 Base URL-safe Encode는 일반적인 Base 64 Encode에서 URL에서 오류 없이 사용하도록 '+'와 '/'를 '-'와 '_'로 표현한 것이다.JWT는 서버가 사용자에게 발급하며, 사용자는 이를 활용하여 서버와의 통신에서 자신을 입증할 수 있게 된다. (1) 구조aa..
1. Soft Delete 논리 삭제Soft Delete는 데이터베이스에서 데이터를 삭제하지 않지만 사용자 입장에서는 데이터에 접근 할 수 없게 하는 방식이다.테이블에 deleted 컬럼을 만들어 boolean 값으로 데이터 사용 여부를 결정한다고 생각하면 된다. deleted가 false면 조회가 가능하도록 하고 deleted가 true면 조회가 불가능하도록 한다. 데이터가 삭제된 것처럼 해당 데이터에 사용자가 접근할 수는 없지만 데이터베이스에서 여전히 데이터가 존재한다. 장단점Soft Delete의 장점은 다음과 같다.데이터 복구 쉬움 : 실수로 삭제해도 UPDATE를 사용하여 복구할 수 있다.참조 무결성 유지 : 다른 테이블에서 참조 중인 데이터를 유지하면서 삭제가 가능하다.삭제 로그 관리 용이 :..

💡 OAuth 2.0이란? OAuth 2.0이란?OAuth 2.0은 인증을 위한 개방형 표준 프로토콜입니다. 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이라고 할 수 있습니다.구글, 페이스북, 트위터와 같은 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해, 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임받아 리소스 서버에서 제공하는 자원에 접근할 수 있도록 하는 표준 프로토콜을 제공합니다. 등장배경과거에는 서비스(제3자 클라이언트)가 사용자를 대신하여 페이스북, 구글 등 다양한 플랫폼을 활용하는 기능을 만들 때, 사용자의 ID와 ..