본문 바로가기

분류 전체보기45

AWS 네트워크 - VPC, ELB, Route53 1. VPC (Virtual Private Cloud)가상 네트워크로써 네트워크 환경을 논리적으로 격리시켜줌.환경을 분리(dev, live)보안, 트래픽 등을 분리하나의 VPC 안에는 여러 서브넷이 존재함.1.1 서브넷VPC 내에서 리소스를 그룹화 한 것을 서브넷이라고 함. 여기서 리소스라 함은, ec2 와 같은 것을 뜻함.서브넷은 퍼블릭 서브넷과 프라이빗 서브넷으로 나뉜다.퍼블릭 서브넷은 인터넷 게이트웨이를 통해 인터넷과 연결될 수 있는 서브넷이고, 프라이빗 서브넷은 VPC 내에서만 통신이 가능하다. (NAT 게이트웨이를 통하면 외부 통신 가능. 아래에서 추가 설명)1.2 라우팅 테이블라우팅 테이블은 네트워크의 라우팅 정보를 담는 테이블이다.VPC 생성시 라우팅 테이블이 생기고, 서브넷마다 라우팅 테이.. 2024. 3. 24.
jackson for kotlin part3. 삽질기 (feat. jacksonObjectMapper) https://pius712.tistory.com/19 jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리 kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation( pius712.tistory.com 위 글을 쓰면서, 잠깐 삽질을 했었다. 글을 쓰면서, 동작 확인차 테스트 코드를 만들어서 돌리는데 설정이 안먹히는 것이었다. 문제의 발단 serialize 를 설정해놓고 아래와 같이 테스트 코드를 돌렸다. 테스트 실패. // 설정 @Configuration cla.. 2024. 3. 10.
jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation("com.fasterxml.jackson.module:jackson-module-kotlin") spring initializer 로 스프링 프로젝트를 구성하다보면, 자동으로 해당 라이브러리가pius712.tistory.com  Spring 부트에, JSON 형식의 요청을 하거나, 응답을 할 때는 ObjectMapper 인스턴스를 사용하게 된다.ObjectMapper 를 통해 marshalling, unmarsha.. 2024. 3. 10.
카프카 컨슈머 lock 삽질기 - 리밸런싱 3줄 선요약AWS 에는 스팟 인스턴스(Spot Instance)는 인스턴스가 죽을 수 있다.처리 도중 리밸런싱이 발생하면 오프셋 커밋을 하지 않아서 중복으로 메시지를 처리할 수 있다.컨슈머는 at least once 라는 것을 고려해서 개발해야한다.컨슈머 리밸런싱이란?카프카의 컨슈머 그룹내의 특정 컨슈머가 동작하지 않으면, 파티션을 다른 컨슈머에게 재할당하게 되는데, 이를 리밸런싱이라고 한다.리밸런싱은 크게 아래의 과정을 거치게 된다.트리거: 컨슈머 그룹에 변경 발생시 리밸런싱이 트리거 된다.파티션 재할당: 브로커는 그룹 코디네이터 역할을 하는데, 현재 컨슈머 그룹에 대해 파티션을 재할당한다.리밸런싱 진행프로세스 재게컨슈머를 추가하거나, 컨슈머가 장애가 나서 중단되는 경우에 리밸런싱이 일어나게 된다.일반.. 2024. 2. 26.
카프카 톺아보기 - 기본개념 애플리케이션 개발자의 입장에서 카프카에 대해서 간단하게 살펴보고자 한다. (깊게는 필자도 잘 모른다.)아파치 카프카는 분산 이벤트 스트리밍 플랫폼이다.일반적인 pub/sub 구조의 rabbitMQ, redis pub/sub 과 달리 메시지를 저장한다는 특징이 있다. 1. 브로커데이터를 쓰는 producer 와 데이터를 읽는 consumer 는 broker 를 통해서 데이터를 주고 받는다. 그리고 broker 는 발행된 데이터를 저장하는 공간이기도 하다.브로커는 하나의 서버에서 작동하며, 각기 다른 서버에서 작동하는 여러 브로커를 묶어서 클러스터로 구성할 수 있다.  카프카에서 브로커는 여러 역할을 하는데 크게 아래와 같은 역할을 한다. 해당 역할들에 대해서는 아래에서 추가적으로 살펴볼 것이다.컨트롤러데이.. 2024. 2. 25.
mikro orm의 request context 주저리 회사에서 최근에 typeorm에서 mikro orm 으로 이동하기 시작했다. 일단 typeorm 에 비해 mikro orm 이 가지는 장점들이 분명히 있음에도 주의해야할 사항이 있어보였다. 사용하다가 조금 개념이 헷갈리는 부분이 있었는데, request context, identity map 이 그 부분이다. identity map 은 JPA 의 persistence context 와 비슷 혹은 같은 개념이다. 그런데, nest에서 mikro orm 을 사용하면, 이 context 가 request 단위로 할당된다는 점이다. 이는 OSIV 와 비슷한 개념인데, 아래 포스트에 설명이 되어있다. https://pius712.tistory.com/14 영속성 컨텍스트와 트랜잭션의 관계 1. 영속성 컨텍스트와 .. 2024. 2. 18.
영속성 컨텍스트와 트랜잭션의 관계 1. 영속성 컨텍스트와 트랜잭션의 관계 spring data jpa 만 사용하다보니, typescript의 mikro orm 사용하다가 헷갈리는 개념이 있었다. 그것은 바로 머릿속에 다른 것들은 지워지고, persistence context 는 당연히 transaction 단위로 할당 라는 개념만 남아있었던 것이다. 이것은 일부는 맞고, 일부는 틀린 얘기인데, spring 과 같은 컨테이너 환경에서 jpa 는 트랜잭션당 persistence context 를 가지고 있다. 즉, spring 환경 기준에서는 아래의 식이 맞으나 (OSIV 를 옵션을 끈 상태라면) , 다른 경우에는 아닐 수도 있다. transaction : persistence context = 1 : 1 만약 transaction 이 co.. 2024. 2. 18.
spring cloud gateway - 기능 간단 살펴보기 앞선 포스트에서, api gateway 에 대해서 개괄적으로 알아보았다.이번 포스트는 spring cloud gateway 를 통해 api gateway 를 구현하는 방법에 대해서 알아볼 것이다. https://pius712.tistory.com/12 api gateway 란?1. 외부 api 설계 이슈 마이크로 서비스의 경우, 모노리식과는 다르게 서비스에 직접 접근하여 api 를 호출하는 것은 여러가지 문제가 될 수 있다. 모놀리식인 경우에는 하나의 서비스에 api 를 호pius712.tistory.com참고로, 기존 api gateway 는 WebFlux 기반인데, 최근 mvc 기반으로도 api gateway를 구성할 수 있게 되었다.1. 라우팅자세한 내용에 대해서는 이후에 좀 더 보도록하고, 라우팅.. 2023. 12. 30.
api gateway 란? 1. 외부 api 설계 이슈 마이크로 서비스의 경우, 모노리식과는 다르게 서비스에 직접 접근하여 api 를 호출하는 것은 여러가지 문제가 될 수 있다. 모놀리식인 경우에는 하나의 서비스에 api 를 호출하면 되지만, 마이크로 서비스는 데이터가 여러 서비스에 분산되어있다. 따라서 마이크로 서비스 아키텍처를 채택하는 경우, 기존 모놀리식에서 제공하는 데이터를 제공하기 위해 여러 서비스가 사용된다. 하지만 마이크로 서비스 아키텍처가 장점만 있는 것은 아니다. 아래와 같은 문제점들이 있을 수 있다. 인터넷은 느리다. 인터넷은 느리기 때문에, 직렬로 api 를 호출할 수 밖에 없으면 여러 서비스를 호출시 더 오랜 시간이 걸릴 수 있다. 클라이언트 마다 다르지만, 일부 클라이언트에 따라 변경이 어렵다. 모바일 애플.. 2023. 12. 30.