전체 글48 redis - pub/sub 동작 원리 spring websocket 을 공부하다보니, 기존에 알고 있던 redis pub/sub 에서의 channel 개념과 kafka 의 토픽 개념들이 헷갈리기 시작했다.redis pub/sub 에서 말하는 channel 의 정체는 무엇일까?connection일반적인 웹 애플리케이션 서버들과 클라이언트와의 관계는 http 통신을 통해 비연결적이다.하지만 db, redis 와 같은 서버들과 이를 연결하는 웹 애플리케이션 서버는 tcp 를 통해 연결되어 있다.즉, 일단 접속을 하면 tcp 를 통해 연결이 되어있다.redis pub/subpub/sub일반적으로 pub/sub 은 broker 를 매개로 하여, publisher 가 메시지를 발행하고, subscriber 가 메시지를 수신하는 통신 방법을 말한다.pu.. 2024. 11. 18. JWT JWT 개념정리JWT(JSON Web Token) 은 ID token 으로 주로 사용되지만, 텍스트 기반의 general purpose 메시징 포맷이다. 즉, 인증이 아닌 데이터를 주고 받는 목적으로도 사용될 수 있는 메시지 포맷이다. 물론 메시징 포맷으로써 JWT 를 사용하기도 하지만, 일반적으로 id token 으로 많이 사용되고 있다.구성요소payload : 전달하고자하는 데이터header: payload 와 메시지에 대한 메타 데이터로 JSON Object 이다.signature: 토큰의 서명header, payload 와 시크릿을 통해 생성된다.Claim ? Sub ?이번 블로그를 작성하게 된 것이 사실은 이 두 용어를 헷갈려서 찾아보고 정리했기 때문이다.payload 는 대부분 JSON 형태로.. 2024. 11. 17. @Async 를 통해 비동기 호출을 해보자 스프링에서는 Async 어노테이션을 통해 간편하게 메서드 호출을 비동기 방식으로 만들 수 있다.즉, @Async 어노테이션을 달면, 해당 메서드가 별도의 스레드에서 호출된다.@EnableAsync우선, 스프링의 비동기 메서드 실행을 활성화하기 위해서는 @EnableAsync 어노테이션을 추가해줘야한다.스프링 부트의 AutoConfigure 에 의해서 비동기와 관련된 빈들을 등록해주어야하기 때문이다.해당 Configuration 을 작성하지 않는 경우, 비동기 프로세스로 실행되지 않는다.@Configuration@EnableAsyncclass AsyncConfig : AsyncConfigurer우선 아무런 추가 설정을 추가하지 않고, 아래의 두 코드를 추가해보자.@Serviceclass AsyncDemoS.. 2024. 11. 10. resilience4j - 서킷브레이커 1. 컨셉 살펴보기1.1 개념서킷브레이커는 회로 차단기라는 뜻으로 소프트웨어에서는 호출 대상이 비정상적인 상태일 때, 작업이 실행되지 않도록 하는 장치를 의미한다.여기서 호출 대상은 외부 시스템 api, 데이터베이스 등이 될 수 있다.서킷브레이커는 호출의 성공 여부를 슬라이딩 윈도우를 통해 기록하여, 기준으로 정한 임계값을 넘어서는 경우 회로를 차단하여, 작업이 빠르게 실패하게 한다.서킷브레이커는 크게 3가지 상태를 가지고 있다.CLOSED회로가 차단된 상태로 호출 대상을 정삭적으로 호출할 수 있다.OPEN회로가 열린 상태로, 실패율이 임계치를 넘겨서 더이상 호출 대상을 호출하지 못하는 상태이다.HALF_OPENOPEN 상태에서 일정 시간이 지난 후에 전이되는 상태로, CLOSED 와 마찬가지로 호출가능.. 2024. 10. 5. 책 'Tidy First?' 정리 이 책은 총 3부로 구성되어있다.1부: 정리를 하는 방법2부: 정리를 언제해야하는가?3부: 정리는 왜 해야하는가?책의 순서와 달리 역순으로 정리하고자한다.후기코드 정리라는 것이 무엇인지 어떻게 해야할지보다,우리가 직면하는 상황에서 내가 어떻게 행동하는 것이 좋을지에 대한 부분을 생각하게 만드는 책.경제 개념을 은유하여서, 소프트웨어의 가치를 만들어가는 메이커로서 어떻게 판단하면 좋을지 고민하게 만드는 것 같다.3부. 이론사실 왜 해야하는가? 라고 적었지만, 2부의 언제해야하는가에 대한 이유를 설명하는 장이다.22장. 요소들을 유익하게 관계 맺는 일22장에서는 소프트웨어 설계에 대한 정의를 내린다.좋은 설계란 무엇인가?조영호님의 영상, 오프라인 강연에서 조영호님이 이에 대해서 이렇게 말씀하셨다.변경하기 쉬.. 2024. 9. 18. 코루틴 - 코루틴 스레드 양보와 실행 스레드 스레드 양보란?코루틴이 스레드를 양보한다는 것은 어떤 뜻일까?코루틴에서 대표적으로 아래의 함수들이 스레드를 양보하는 중단함수이다.delayyieldjoinawait아래 코드를 통해 살펴보자.suspend fun main() = runBlocking { val start = System.currentTimeMillis() repeat(3) { launch { delay(1000) println("elapsed time: ${System.currentTimeMillis() - start}") } }}>> elapsed time: 1012>> elapsed time: 1021>> elapsed time: 1021위 코드는 코루틴 .. 2024. 9. 17. 코루틴 - 중단함수 중단함수중단함수란?중단 함수란 코루틴을 중단할 수 있는 중단점을 제공하는 함수를 말한다.suspend fun 을 통해서 구현할 수 있다.기본적으로 일반 함수와 크게 다르지 않으나, 내부에 중단지점을 가질 수 있다는 것이 일반함수와의 차이다.일반적인 함수나 메서드(루틴과 서브루틴)코루틴중단함수는 코루틴이 아니다.코루틴을 처음 접하는 경우 중단함수가 코루틴이라고 착각할 수 있다.중단함수는 코루틴이 아니고, 코루틴 내에서 실행될 수 있는 함수이다.중단함수의 사용중단함수는 코루틴을 중단할 수 있는 함수이다. 그렇기 때문에 일반함수처럼 사용할 수 없다.중단함수를 호출할 수 있는 곳은 아래와 같다.코루틴 스코프다른 중단함수fun main() { myMethod() // 호출 불가능}suspend fun myMeth.. 2024. 9. 17. 코루틴 - 구조화된 동시성 구조화된 동시성구조화된 동시성이란?코루틴은 기본적으로 특정 코루틴 스코프 내에서 여러 코루틴이 협력하여 동작한다.코루틴은 부모-자식 관계를 가지며, 이 부모 자식 관계가 구조화 된다. 이를 구조화된 동시성이라고 한다.여기서 부모 코루틴이라 함은, 코루틴을 생성한 코루틴이라고 할 수 있다.runBlocking 과 같은 코루틴은 스스로 코루틴 스코프를 만들어서 실행하므로, 본인이 루트 코루틴이 된다. 왜 코루틴은 이런 구조화된 동시성을 필요로 할까?그것은 바로 코루틴을 효과적으로 제어하기 위함이다.구조화된 동시성의 특징을 살펴보자.부모의 실행환경을 상속받는다.부모 코루틴의 취소는 자식에게 전파된다.부모 코루틴은 자식 코루틴이 끝날때까지 기다린다.아래에서 각 특징들에 대해 각각 살펴보도록 하자.부모의 실행환경.. 2024. 9. 17. 코루틴 - 코루틴 빌더와 Job 코루틴 상태와 JobJob모든 코루틴 빌더는 Job 객체를 생성하고 반환한다.Job 객체는 코루틴 실행을 추상화한 객체로, Job 을 통해 코루틴의 상태를 추적 및 실행을 제어할 수 있다.코루틴 상태코루틴의 상태에 대해 한번 알아보자.코루틴은 아래와 같은 상태를 가질 수 있다.New : 코루틴 빌더를 통해 코루틴을 생성하면 New 상태가 되며, 지연 실행 옵션을 주지 않으면, active 상태로 전이된다.active: 실행중 상태로, 실제 코루틴을 실행하거나 중단된 상태를 포함한다.completing: 자신의 코루틴이 모두 완료되었으나, 자식 코루틴이 완료되기를 기다리는 상태이다.completed: 자신과 자식 코루틴 모두가 완료된 상태이다.cancelling : 코루틴이 취소요청을 받으면 취소중 상태가.. 2024. 9. 17. 이전 1 2 3 4 ··· 6 다음