[개발일지] 230630 Spring WebClient (Mono)
·
성장이야기/TIL
지난 포스팅에 이어 Spring WebClient에 대해 정리해 보자. Spring WebClient WebClient는 Spring 5에서 도입된 클라이언트 측에서 HTTP 요청 작업을 처리할 때 사용되는 비동기, Non-Blocking 방식의 웹 클라이언트이다. Spring에서 제공하는 기존의 HTTP 클라이언트인 RestTemplate의 리액티브 버전으로 생각할 수 있다. RestTemplate은 Blocking I/O를 기반이기 때문에 하나의 요청을 처리하는 동안에는 해당 스레드는 다른 작업을 처리할 수 없다는 특징이 있다. 반면, WebClient는 비동기적이고 Non-Blocking 기반이기 때문에 HTTP 요청을 보내고 응답을 비동기적으로 처리하는 것이 가능하다. 하나의 요청을 처리하는 동안..
[개발일지] 230629 Spring WebFlux란? (with. Reactive programming)
·
성장이야기/TIL
오늘은 기존에 작성되어 있던 코드에서 별도의 프로젝트 모듈을 만들어서 분리하는 작업을 했다. 프로젝트 세팅하고 코드만 옮기면(ctrl c + ctrl v만 하면 되는 줄..) 되는 간단한 문제인 줄 알았는데 생각보다 변경되어야 할 점이 많아 시간을 많이 잡아먹었다.. 우선 기존 프로젝트는 Quarkus라는 프레임워크를 이용해 AppSync를 통해 실시간 데이터를 전송하고 있던 프로젝트였는데 분리해서 만들어야하는 프로젝트는 Quarkus 프레임워크가 아닌 Spring 프레임워크를 이용해서 새로운 프로젝트를 세팅해야 했다. Spring 프로젝트를 만들어서 코드를 옮기는데 Quarkus에만 존재하는 어노테이션들이나 기능들이 있어서 Spring으로 마이그레이션하는데 찾느라 시간을 많이 잡아먹었던 것이었다. 그중..
[개발일지] 230628 AWS DynamoDB Partition
·
성장이야기/TIL
Partition DynamoDB는 테이블을 생성할 때 partition key와 선택적으로 sort key를 지정할 수 있다. DynamoDB는 방금 생성해준 partition key를 기반으로 자동으로 partition(DynamoDB 내부의 물리적 저장소)이라는 물리적 저장 공간을 생성하는데 하나의 partition key는 하나의 partition에만 할당할 수 있다. 하지만 partition에 데이터가 많아질수록 DynamoDB는 partition을 자동으로 분할하여 더 많은 저장 공간을 제공하고 처리량을 늘린다. DynamoDB는 같은 partition key를 가진 item들을 같은 partition에 저장되도록 설계되어 있기 때문에 같은 partition key를 가진 item을 다른 pa..
[개발일지] 230623 AWS DynamoDB Partition Key와 Sort key
·
성장이야기/TIL
DynamoDB DynamoDB는 AWS에서 제공하는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공한다. DynamoDB의 특징으로 완전관리형 NoSQL DB라는 점과 뛰어난 확장성이 있다. 완전 관리형: 인프라 관리, 백업과 복원 등등 이러한 여러 가지 작업들을 모두 AWS가 자동으로 처리해 주는 것을 말한다. 확장성: DynamoDB는 수 백만 개의 요청을 초당 처리하고 테라바이트 이상의 데이터를 저장할 수 있다고 한다. DynamoDB는 두 가지 종류의 기본 키(primary key)를 지원하는데 오늘은 이 두 가지 키에 대해 공부했다. Partition key partiotion key는 한가지 속성으로 구성된 기본키(primary key)를 의..
[개발일지] 230620 GraphQL과 AppSync를 이용해 실시간 데이터 전송 (With Redis)
·
성장이야기/TIL
며칠 전 회사에서 단순 API 기능 개발을 하고 있던 나에게 실시간 관련 기능에 필요한 간단한 실시간 파이프 라인을 한번 구축해 보는 게 어떻겠냐고 제의를 해주셔서 아무것도 모르지만 일단은 해보겠다고 했다. (오랜만에 새로운 기술을 접한다는 사실에 설렜었다..) 그래서 약 일주일 좀 넘게 GraphQL, AppSync, Amplify, Quarkus 등등 새로운 기술을 많이 접하고 공부를 했다. 이해 안 되는 부분들(특히나 GraphQL, AppSync, Amplify 이 세 개의 전체적인 상관관계를 파악하는 게 힘들었다.)은 물어보면서 최대한 이해하려고 했다. 하지만 아직은 저것들을 누군가에게 설명할 수 있을 정도로 공부한 건 아니지만 기초적인 개념과 사용법 정도는 익힌 것 같다. 그래서 오늘은 지금까..
[개발일지] 230616 Quarkus Redis WRONGTYPE Operation against a key holding the wrong kind of value
·
성장이야기/TIL
Quarkus Redis 문제해결에 시간을 많이 사용한 하루였다. 문제 상황은 아래와 같다. 기존 redis에 key에 대응되는 하나의 value값을 String 타입으로 저장하고 있었늗네 이 key값(동일한 key)의 value를 3개 저장해야 했다. 그래서 데이터 타입을 hash로 변경해서 redis에 데이터를 저장을 하려고 했다. 기존에 작성된 코드 부분을 살펴보니 ValueCommands를 구현해서 String 값을 저장하고 있음을 알 수 있었다. 그래서 hash값을 저장하기 위해서 RedisCommands에 대해 알아보니 ValueCommands로 구현되어있던 부분을 hash 자료구조로 저장하기 위해서는 HashCommands로 변경하면 된다고 나와있었다. HashCommands 위와 같이 각 ..