분류 전체보기48 영속성 컨텍스트와 트랜잭션의 관계 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. REST에서 resource와 representation은 다르다. (feat 삽질기) 1. resource? representation? 의 개념 resource는 data의 추상화를 말하는 것으로 representation과는 구별됩니다. 특정 시점에 resource의 state (상태)를 representation이라고 합니다. selected representation이란 말은 결국, resource의 상태는 하나가 아닌 여러개가 될 수 있고 HTTP 통신에 의해서 resource의 상태 중에 하나가 선택된다고 할 수 있습니다. 예를들어, 회사의 홈페이지에 회사 소개를 하는 페이지가 있다고 생각해봅시다. 회사의 소개 그 자체는 추상화된 개념으로 resource라고 할 수 있습니다. 하지만, 회사의 소개를 json으로 할 수도 있고, html로 할 수도 있고 혹은 이를 다국어 지원으로.. 2023. 7. 13. 왜 많은 회사들은 READ COMMITTED를 사용할까? 한 줄 요약: 여러가지 이유가 더 있겠지만, Gap Lock으로 인한 Dead Lock 발생 문제가 크다. 사내에서 왜 READ COMMITTED를 쓰는지에 대한 질문과 답변을 보고, 공부하여 정리한 글입니다. 1. 왜 READ-COMMITTED를 사용할까 ?대부분의 서비스 회사는 MySQL을 쓰는 경우 READ COMMITTED를 사용한다고 합니다.MySQL은 default isolation-level이 REAPEATABLE-READ를 사용하고 있는데, 왜 READ-COMMITTED로 조정하여서 사용하고 있을까요?2. Gap lock 이란 무엇인가?참고: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-gap-locksgap lo.. 2023. 7. 7. 이전 1 2 3 4 5 6 다음