본문 바로가기

ALL

(132)
1장 - 카프카 개요 MSA의 등장 과거에는 하나의 어플리케이션에 모든 기능이 들어가있는 모놀릭 아키텍처가 대부분이었다. 따라서 모든 데이터의 흐름은 어플리케이션 안에서 이루어지고, 다른 어플리케이션과의 데이터 공유는 제한적이었다. 하지만 시대가 변하고, 최근에는 대부분의 어플리케이션이 마이크로서비스 아키텍처를 채택하고 있다. 마이크로서비스 아키텍처는 하나의 어플리케이션을 각각의 기능을 가지는 여러 서비스로 나누고, 이들을 결합하여 운영하는 구조이다. 따라서 서비스간의 활발한 데이터 공유가 이전보다 더욱 많아지고 중요해졌다. 문제발생 서비스간 데이터 공유를 한다는 것은 공통에 저장소에서 데이터를 사용하는 것(Reddis나 Oracle Database 같은 경우)일 수도 있다. 아니면 한 서비스에서 다른 서비스로 데이터를 전송..
교차 출처 리소스 공유 (CORS) : 개발자라면 한번은 보았던 것 동일 출처 정책(Same-Origin Policy) 사이드 프로젝트를 진행하다보면 자주 보는 것이 하나있는데 바로 CORS 에러다. CORS 에러는 브라우저의 동일 출처 정책(Same-Origin Policy)을 위반하면 발생하는 에러인데, 여기서 동일 출처란 프로토콜, 호스트(도메인), 포트가 모두 같은 것을 말한다. 'http://mypage:8080'에서 요청을 보낸다고 했을 때, 동일 출처 정책을 위반한 경우는 아래와 같다. https://mypage:8080/v1/api/product/list로 요청을 보낸 경우 > 프로토콜 불일치 http://yourpage:8080/v1/api/product/list로 요청을 보낸 경우 > 호스트(도메인) 불일치 https//mypage:8090/v1/api..
3. 스프링 배치: Job, JobParameter, JobInstance, JobExecution Job Job이란 개념적으로 스프링 배치가 수행할 하나의 작업 그 차체를 의미한다. "일별 판매 정산" 일괄처리 작업이 있다면 "일별 판매 정산"이 Job으로 만들어지는 것이다. Spring Batch의 객체로써 보면, 위와같은 모습이다. 이름, 재시작 가능여부, JobParametersIncremeter, JobParametersValidator를 가져올 수 있는 메소드. 그리고 Job을 실행할 메소드를 기본적으로 가지고 있다. 하위에는 이를 구현한 여러 종류의 Job들이 있다. JobInstance JobInstance란 Job에 JobParameters가 전달되어 만들어지는 실행가능한 논리적 작업 단위 객체이다. JobInstance에 실제 내부 동작을 위한 필드나 메소드는 존재하지않고, Job의 ..
2. 스프링 배치: 배치 테이블 스키마 배치 테이블 생성 스프링 배치는 실행된 작업마다 여러 요소(Job, JobParameter, Step...)들의 상태, 그리고 성공/실패에 관한 이력을 알아서 저장해준다. 개발자는 스프링 배치가 사용할 배치 테이블을 생성하고, DB 연결정보를 정의해주기만 하면 된다. 배치 테이블을 생성하기위한 DB 스키마는 소스에 포함되어있으니, 사용하는 DB에 맞는 스키마을 찾아서 사용하면 된다. 메타 테이블 종류 batch_job_instance: 실행된 배치의 JobInstance 정보가 저장되는 테이블 JOB_INSTANCE_ID: 실행된 JobInstance의 id VERSION: 배치 테이블의 낙관적 락 전략을 위해 사용되는 데이터 JOB_NAME: 실행된 Job의 이름 JOB_KEY: JobParameter..
CORS 에러: The request client is not a secure context and the resource is in more-private address space `local`. 웹서비스를 개발 하던 중 위와 같은 에러를 만났다. 서버 응답에 Access-Control-Allow-Origin: * 와 같은 CORS 허용 헤더를 다 넣어줬지만 위와 같은 에러가 계속 발생했다. 알고보니 origin 보다 더 낮은 수준의 네크워크로 요청을 보내는 경우, 위와같이 에러를 발생한다. 이를 해결하기 위해서는 브라우져 설정에서, 위와 같은 제한을 해제해주어야 한다. 그리고 당연한 소리겠지만, 운영 환경에서는 위와 같은 상황이 발생하면 안된다. 크롬의 경우: chrome://flags/#block-insecure-private-network-requests 에 들어가서 설정 disabled 엣지의 경우: edge://flags/#block-insecure-private-network-reque..
1. 스프링 배치: Hello World Spring Batch 일괄 처리(Batch Process) 일괄처리(Batch Process)는 사용자의 개입 없이 또는 정해진 로직대로 스케줄링/실행되는 작업을 의미한다. 즉각적으로 처리될 필요가 없는 작업의 경우, 자원의 효율적 사용을 위해 이와 같은 방식을 사용한다. 예를 들어 쇼핑몰에서 매일의 판매 집계 데이터를 만드려고 한다면, 각각의 판매가 이루어 졌을때마다 데이터를 만들고 수정할 수도 있지만, 매일 자정에 일괄 처리를 한다면 더욱 효율적으로 같은 결과를 얻을 수 있다. 스프링 배치(Spring Batch) 스프링 배치는 일괄 처리를 위해 만들어진 프레임 워크이다. 스프링 배치는 개발자가 일괄 처리를 위한 부가적인 기능에 대한 고민 없이, 서비스를 위한 일괄처리 작업 구현에만 집중할 수 있도록 해준다. 일괄 처리를..
CSR 시대의 동적 크롤링 with Selenium Server Side Rendering / Client Side Rendering SSR(Server Side Rendering)이란 사용자에게 보여질 페이지가 서버에서 완성되어 전달되는 것을 말한다. 클라이언트(브라우저)는 그저 서버로 부터 받아온 정보를 사용자에게 그대로 보여주기만 하면 충분하다. SSR은 클라이언트의 성능에 크게 영향을 받지 않고, SEO 측면에서도 장점이 있다. CSR(Client Side Rendering)은 사용자에게 보여질 페이지가 클라이언트(브라우저)에서 만들어지는 것을 말한다. 서버는 완성된 HTML 파일이 아니라, 이를 만드는데 필요한 스크립트 코드와 관련 정보들을 반환한다. 클라이언트는 이를 자체적으로 스크립트를 실행하여 비어있는 HTML 코드들을 완성시킨다. CSR은..
채팅을 위한 노력의 역사 그리고 WebRTC 웹에서 기본적으로 클라이언트와 서버의 통신은 HTTP 방식으로 이루어진다. 클라이언트는 필요에따라 서버에 요청을 보내고 서버는 요청에 대한 응답을 보낸다. HTTP의 특징인 "단방향성"과 "비연결성"은 위와 같은 일반적인 웹상황에서 부족함이 없었다. 하지만 웹이 발전하고 풍부해짐에 따라 문제가 발생했다. 이제 사람들은 단순히 웹에서 정보 조회 뿐 아니라 사람들과 소통하고 싶어했고, 서비스 제공자들은 웹에서 채팅기능을 추가하고 싶었다. 하지만 지금까지 문제 없었던 "단방향성"과 "비연결성"이 발목을 잡았다. 처음 사람들이 생각해낸 방법은 짧은 주기로 계속 요청을 보내는 것이다(이를 Polling Request라고 부른다). 예를들어 1초마다 새로 올라온 채팅내역이 있는지 계속 요청하는 것이다. 이를 통해 ..