분류 전체보기50 카프카 톺아보기 - 기본개념 애플리케이션 개발자의 입장에서 카프카에 대해서 간단하게 살펴보고자 한다. (깊게는 필자도 잘 모른다.)아파치 카프카는 분산 이벤트 스트리밍 플랫폼이다.일반적인 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. jackson for kotlin part1. 동작 원리 kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다.implementation("com.fasterxml.jackson.module:jackson-module-kotlin")spring initializer 로 스프링 프로젝트를 구성하다보면, 자동으로 해당 라이브러리가 설치되어있기 때문에 별 생각없이 쓰게 된다.개인적으로 토이 프로젝트를 하던 도중, 해당 라이브러리가 설치가 안되어있어서 json 변환관련 에러가 나서 도대체 이것이 뭔지 찾아보게 되었다.왜 jackson-module-kotlin 없이는 변환이 안될까?기본적으로 jackson 자체는 코틀린을 위한 라이브러리가 아니다.코틀린의 data class 와 같은 것들은 기본 jackson library 가 이해하지.. 2023. 12. 30. @RequestBody, @ResponseBody 의 동작 원리 HandlerMethodArgumentResolver 와 HandlerMethodReturnValueHandler의 동작에 대해서 알아야하는데, 이를 알아보기전에 스프링 부트에서 http 요청이 어떻게 처리되는지 우선 알아야한다.dispatcher servlethttp 요청이 들어오면 dipatcher servlet의 doDispatch 메서드를 거치게 된다.doDispatch 메서드를 간소화하자면,getHandler 를 통해서, 요청을 처리할 수 있는 Handler 를 찾는다.handler 를 처리할 수 있는 handlerAdapter 를 찾는다.handlerAdapter를 통해서 실제 handler 를 호출한다.protected void doDispatch(HttpServletRequest reque.. 2023. 10. 21. companion object 는 클래스이자 객체다. companion object 는 클래스이자 객체이다. 코틀린에서 object 키워드는 클래스 선언이자 동시에 객체 초기화를 동시에 하도록 동작한다. object expression 으로 동작하는 경우 무명 클래스를 선언하고 객체화하는 것과 같고, companion object 처럼 declration 으로 동작하는 경우에도 마찬가지이다. 이를 확인해보기 위해 아래와 같이 선언해보자. class NamedCompanion { companion object Foo { } } 그리고 간단하게 이를 확인하기 위해, 아래 테스트를 만들어보면 동작함을 알 수 있다. 만약, companion object가 아닌 일반 클래스를 아래와 같은 방식으로 작성하게 되면, 동작하지 않는다. foo 는 객체로 취급되지만, Na.. 2023. 10. 9. 설계 원칙 소프트웨어 아키텍처의 목표는 무엇인가? 생산성을 극대화하기 위함이다. 그렇다면 생산성을 극대화 한다는 것은 무엇을 의미하는가? 변경에 유연하고, 기능을 확장할 수 있어야한다. 그렇다면 어떤 코드가 변경에 유연해야하고, 어떤 코드가 확장되어야할 코드일까? 그러니까 어떤 영역을 우리는 지켜야 할까? 바로 우리의 도메인 영역이다. 도메인 영역을 잘 지키기 위해서는 어떻게 해야할까? OCP OCP 는 이런 관점에서 중요한 설계 원칙이다. 기존 코드의 변경없이, 기능을 확장할 수 있어야한다. 그렇다면 이것은 어떻게 가능할까? OCP는 단순히 다형성만으로 설명할 수 있는 개념은 아니다. 아키텍처 관점으로 볼때, OCP가 잘 이루어지기 위해서는, 컴포넌트와 모듈은 응집력있고, 컴포넌트와 모듈의 결합은 낮아야한다. 이.. 2023. 9. 3. 이전 1 2 3 4 5 6 다음