[Kafka] 파티션(Partition)이란? 컨슈머 병렬 처리와 Consumer Lag
·
카테고리 없음
지난 글에서 Kafka의 기본 개념을 정리하며 실습을 하다가 한 가지 의문이 남았었다. API 요청을 세 번 연속으로 보내면 컨슈머가 메시지를 하나씩만 처리해서, 3초짜리 이메일 발송 3개에 9초가 걸리는 현상이었다. https://mari-laveau.tistory.com/306 원자적 UPDATE -> Redis Lua Script 순으로 처리량을 개선해보았었다. 그러다 이메일 발송처럼 오래 걸리는 " data-og-host="mari-laveau.tistory.com" data-og-source-url="https://mari-laveau.tistory.com/306" data-og-url="https://mari-laveau.tistory.com/306" data-og-image="https://..
[Kafka] Kafka 기본 개념 정리
·
Backend/Kafka
들어가기에 앞서최근 선착순 쿠폰 발급 프로젝트에서 동시성 제어를 실습하며 비관적 락 -> 원자적 UPDATE -> Redis Lua Script 순으로 처리량을 개선해보았었다. 그러다 이메일 발송처럼 오래 걸리는 작업을 API 요청 안에서 동기적으로 처리하는 게 맞는지 의문이 들었고, 메시지 큐를 공부하기 위해 Kafka 입문 강의를 수강하며 실습을 진행하였다.실습은 Producer 쪽은 기존에 진행하던 쿠폰 프로젝트에 파일 몇 개만 추가해서 진행했고, Consumer는 별도의 Spring Boot 프로젝트로 구성하였다. Kafka 브로커는 EC2에 설치해두고 사용했다. Kafka의 기본 구성 (Topic, Producer, Consumer)프로듀서(Producer) : 카프카에 메시지(데이터)를 전달하..
[SpringBoot] Argument Resolver란?
·
Backend/SpringBoot
Spring Boot 프로젝트를 진행하면서 작성한 API 에 대해서 문득 궁금한 생각이 들었다 클라이언트의 요청을 받아 비즈니스 로직을 처리한 후, 응답(화면 또는 데이터)을 반환하는 스프링 MVC의 핵심요소인 컨트롤러에서 클라이언트의 요청에 대한 데이터를 받을때 메소드 인자로 @RequestParam, @PathVariable, @RequsetBody를 사용한다. 근데 해당 어노테이션이 어떻게 동작하고 DTO에 대한 클래스에 대한 필드 값을 어떻게 자동으로 매핑을 해줄까?이러한 궁금증으로 좀 더 깊게 파보며 공부를 해보았다. 먼저 RequestParam과 PathVariable, RequestBody 인터페이스를 직접 관찰해보았다. @Target(ElementType.PARAMETER)@Retentio..
[SpringBoot] @EnableRedisHttpSession 이란?
·
Backend/SpringBoot
세션으로 인증방식을 사용하는 것을 구현하며 @EnableRedisHttpSession이라는 어노테이션을 만났고 해당 부분을 공부하다가 먼저 HttpSession이 뭔지 알아야 했기에 글을 정리해본다. 인증 방식이 궁금하다면 해당 글을 참조https://mari-laveau.tistory.com/296 [SpringBoot] 인증 방식을 JWT가 아닌 Session을 활용이전에 계속 해왔던 프로젝트에서 사용자를 식별하기 위해서 로그인이라는 기능을 활용하였고 이후 인증 후 상태를 유지하기 JWT 토큰 방식을 사용하여 클라이언트쪽에 데이터를 저장하였다.mari-laveau.tistory.com HttpSession이란?Http는 무상태(stateless) 프로토콜이며 요청 하나하나가 독립적이라 서버는 방금 ..
[SpringBoot] @PostConstruct란?
·
Backend/SpringBoot
최근에 프로젝트를 수행하면서 회원 닉네임을 생성할때 욕설이 들어가면 안된다는 PD측의 요구사항을 수행하기 위해 욕설 리스트들이 있는 txt 파일을 리스트로 만들어서 kmp 알고리즘을 사용해서 비속어 리스트의 각 단어가 입력한 닉네임 문자열에 포함되는지 확인하고 사용할 수 있는지 없는지 판별하는 API를 만들었었다. 이때 욕설에 대한 데이터를 불러오기 위해 리스트를 생성하고 @PostConstruct 어노테이션을 활용하고 해당 리스트에 담았었다 이때까지만 해도 해당 어노테이션은 실행할때 한번 실행되는걸로 알고 있었고 정확히 어느 시점에 실행되는지, 왜 생성자가 아니라 별도의 초기화 메서드가 필요한지는 깊게 생각해보지 않았다.그러다 문득 의문이 들었다. 생성자 주입을 쓰고 있다면 생성자 안에서 이미 주입받..
[SpringBoot] 인증 방식을 JWT가 아닌 Session을 활용
·
Backend/SpringBoot
이전에 계속 해왔던 프로젝트에서 사용자를 식별하기 위해서 로그인이라는 기능을 활용하였고 이후 인증 후 상태를 유지하기 JWT 토큰 방식을 사용하여 클라이언트쪽에 데이터를 저장하였다. 하지만 Session 방식은 사용해보지 않았다. 그러다 문득 이런 의문이 들었다. "요즘 다 JWT 쓰는데, 세션은 왜 밀려난 걸까? 아니, 정말 밀려나긴 한 걸까?" 게다가 세션은 서버가 상태를 들고 있어야 하니, 인스턴스가 여러 대라면 애초에 동작하지 않는 것 아닌가? 이 글은 그 두 질문에 답을 찾아가는 과정이다. 왜 JWT 토큰을 사용했을까?처음에 개발했을때는 대부분 사람들이 JWT로 인증 방식을 구현한다고 해서 무작정 따라하기만 했다 하지만 시간이 지나고 나니 의문증이 생겼고 다른 사람의 블로그를 참고하며 이러이러..