[Apache Kafka] Kafka Producer의 데이터 멱등성 보장하기
·
Infra & Cloud
[Spring] kafka 파헤치기현재 캡스톤 프로젝트에는 사용자 개인의 마인드맵 CRUD 과정이 이루어지는 기능이 들어간다. 간단히 말하자면,1. 사용자가 마인드맵을 생성 (마인드맵의 Root Node 생성)2. 사용자가 마인드맵을 수sksmsfbrjs51.tistory.com  이전 포스트에서는, Kafka의 필요성과 Kafka가 어떤 구조로 이루어져있는지 분석해보았다. Kafka를 활용하여 지속적으로 마인드맵 데이터를 Producer에게 전송하여 이를 DB 및 Client에게 전송해줘야 하는 구조임을 알게 되었다. 하지만 여기서 걸리는 것이, 그럼 결국 Publisher에게 호출한 토픽이 같은 경우, 가장 마지막에 요청된 Topic으로 DB에 저장, 수정되거나 사용자에게 반환해줘야 하는게 아닌가? ..
[Apache Kafka] kafka 파헤치기
·
Infra & Cloud
현재 캡스톤 프로젝트에는 사용자 개인의 마인드맵 CRUD 과정이 이루어지는 기능이 들어간다. 간단히 말하자면,1. 사용자가 마인드맵을 생성 (마인드맵의 Root Node 생성)2. 사용자가 마인드맵을 수정 (마인드맵에서 노드를 생성하고 가지를 뻗어나가는 과정)  이때, 사용자의 지속적인 마인드맵 수정 작업이 이루어지는 로직을 기획하고 있었다.[x, y 좌표 배치 및 노드 데이터 변경] 현재는 데이터베이스에 직접 end-to-end 방식으로 API를 호출하는 방식으로 아키텍쳐를 구상한 상황이지만, 크게 4가지의 잠재적인 문제점을 내포했다.  1. 시스템 복잡도의 증가중앙화된 데이터 전송 영역이 없어, 데이터의 흐름을 파악하기 어렵고, 시스템 관리가 복잡함.시스템의 일부분에 문제가 발생하면, 연결된 모든 애..
[Spring] Spring Batch를 활용한 배치 프로세싱
·
Back-end/Spring
💡 Spring Batch이란?Spring Batch는 대량의 데이터를 처리하기 위한 경량화된 프레임워크로, 반복적인 작업을 수행하는 일괄 처리(Batch Processing) 작업을 효율적으로 처리할 수 있는 기능을 제공해준다. 기본적으로 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 작업 건너뛰기, 리소스 관리 등 대용량 데이터를 처리하는데 필수적인 기능을 제공해준다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스를 제공해주기도 한다. 배치 프로세싱이란?여러 개의 데이터베이스 쿼리나 트랜잭션을 그룹화하여 한 번에 처리하는 기술즉, 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있다.    ✈️ Spring Batch의 장..
[Nginx] 413 Request Entity Too Large 오류
·
Infra & Cloud
문제 상황2024년 2학기 AI를 활용한 회의 지원 솔루션 플랫폼 "Clerker" 프로젝트를 개발할 때 EC2에서 Port forwarding을 위해 nginx를 사용했다. Nginx를 Reverse proxy로 사용할 때, 다음과 같은 에러가 발생했다.413 Request Entity Too Large 413 Request Entity Too Large 에러는 클라이언트가 서버로 전송한 요청의 크기가 서버에서 허용한 크기보다 클 때 발생한다. 이 문제는 특히 파일 업로드 또는 POST 요청 데이터가 많을 때 자주 나타난다.발생 원인1. Nginx 설정의 제한 Nginx는 너무 큰 사이즈의 request를 서버에 전송하지 못하게 제한을 걸 수 있다.request의 Content-Length 헤더값이 여..
[Spring] @RequestPart vs @RequestParam vs @RequestBody
·
Back-end/Spring
@RequestPartContent-Type 이 'multipart/form-data' 에 특화된 어노테이션HTTP request body 에 multipart/form-data 가 포함되어 있는 경우에 사용 MultipartFile 을 받을 때 사용 가능단, HttpMessageConverter 가 Content-Type 을 참고하여 알맞는 Converter 로 처리한다 MultipartFile 이 포함되는 경우에 MultipartResolver가 동작하여 역직렬화를 하게 된다.(역직렬화 : Byte로 되어있는 데이터를 객체 형태로 변환)단, MultipartFile 이 포함되어있지 않다면, @RequestBody 와 마찬가지로 HttpMessageConverter가 동작된다.@RequestParamH..
[Spring] Security + JWT + Redis를 활용한 로그인 구현 (1)
·
Back-end/Spring
Security를 활용한 로그인 구현을 위해 여러 블로그들을 참고하여 작성한 글입니다.내용에 잘못된 점이 있다면 지적해주시면 감사하겠습니다! 먼저 로그인 구현에 앞서 JWT가 뭔지 개념을 정리해보도록 하자. JWT란?JWT는 JSON Web Token의 약자로, Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.언제?권한 부여 : JWT를 사용하는 가장 일반적인 방식. 사용자가 로그인하면 각 후속 요청에 JWT가 포함되어 사용자가 해당 토큰으로 서비스 및 리소스에 접근할 수 있다.정보 교환 : 공개/개인 키 쌍을 사용해 JWT에 서명이 가능하기 때문에 발신자가 누구인지 식별 가능하다. 또한 헤더와 페이로드를 사용하여 서명을 계산하므로 콘텐츠 변조여부를 식별할 ..
[Spring] WebClient를 통한 공공데이터 Open API 호출
·
Back-end/Spring
공공데이터 Open API를 사용하는 서비스의 흐름을 알기 위해 공부를 하면서 알게 된 내용들을 기록하는 글입니다. 오류나 고쳐야 할 사항들이 있다면 피드백 부탁드리겠습니다!WebFlux 라이브러리를 사용한 이유Spring에서 외부 API를 사용할 수 있는 종류는 다음과 같다.HttpURLConnectionRestTemplateWebClientHttpURIConnection은 URLBuilder를 사용하여 코드를 작성한 것으로, 생각보다 코드가 길고 장황하다.RestTemplate은 Spring에서 지원하는 객체로, 동기식으로 Rest 방식 API를 호출할 수 있는 Spring 내장 클래스이다.동기적으로 동작하기 때문에 요청/응답 동안 스레드가 차단되는 문제점이 있을 뿐더러, Spring boot 5...
[Spring] H2 DataBase 사용법
·
Back-end/Spring
1. H2 DataBase란?H2 데이터베이스는 설치가 필요 없고 용량이 가벼우며 개발용 로컬 DB로 사용하기 좋은 DBMS이다.자바 기반의 오픈소스 관계형 데이터베이스 관리 시스템(DBMS).서버(Server) 모드와 임베디드(Embedded) 모드의 인메모리 DB 기능을 지원.브라우저 기반의 콘솔 모드를 이용할 수 있음.별도 설치과정이 없고 2.5MB 이하의 저용량 DB.표준 SQL의 대부분을 지원로컬 및 테스트 환경에서 많이 사용됨.2. 설치 후 사용법1. http://h2database.com/html/main.html 에서 다운로드.2. C:\Program Files(x86)\H2\bin 위치에서 h2 window 파일 실행하기. H2 DBH2 DB에는 3가지 모드가 있다.- Server Mod..