본문 바로가기

Kafka란? Kafka란? 아파치 카프카(Apache Kafka)는 LinkedIn에서 개발된 분산 메시징 시스템입니다. 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 producer, consumer, connectors, streams processors, broker로 구성됩니다. 특징 카프카의 브로커(broker)는 토픽(topic)을 기준으로 메시지를 관리합니다. 프로듀서(producer)는 특정 토픽의 메시지를 생성한 뒤 해당 메시지를 브로커에게 전달합니다. 브로커가 전달받은 메시지를 토픽별로 분류하여 쌓아놓으면, 해당 토픽을 구독하는 컨슈머(consumer)들이 메시지를 가져가서 처리하게 됩니다. 카프카는 확장성(scale-out)과 고가용성(high availability)..
Iaas vs Paas vs Saas Cloud Computing이란? 클라우드 컴퓨팅은 서로 다른 물리적인 위치에 존재하는 컴퓨터들의 리소스를 가상화 기술로 통합해 제공하는 기술을 말합니다. 예를들면 개인용 컴퓨터나 기업의 서버에 개별적으로 저장해 두었던 프로그램이나 문서를 클라우드(대형 컴퓨터)에 저장하고 웹 브라우저 등 필요한 어플리케이션을 구동해 원하는 작업을 수행할 수 있는 사용자 중심의 컴퓨터 환경을 말합니다. 네이버 오피스, Google DOCs(Google), Work Space(Microsoft), Acrobat(Adobe) 등등이 여기에 해당합니다. 가상화와 클라우드 컴퓨팅의 차이 가상화는 기술이고 클라우드는 방법론 입니다. 가상화? 가상화는 우리가 쓰던 VMware나 Virtualbox와 같이 단일한 물리 하드웨어 시스템..
집계함수 RollUp ROLLUP의 원리 위 이미지가 ROLLUP의 원리를 전부 설명해줍니다. 각 번호는 해당 칼럼으로 GROUP BY를 한 결과를 준다는 뜻입니다. 첫번째 GROUP BY절 같은 경우는 총 4개의 GROUP을 만든다는 뜻 입니다. 예를 들어, 회원유형, 기명/무기명 여부, 집계 대상 컬럼이 존재한다고 가정을 합시다. 결과값으로 나는 회원유형별, 회원유형별, 기명/무기명 여부 별 전체 집계 를 내고 싶다고 할때, 2번 case인 ( 회원 유형, 기명/무기명여부 ) 을 사용한다면, 선투컬럼을 기준으로 회원유형별 Group by 1개 1,2번을 기준으로 회원유형별, 기명/무기명 여부별 한개 그리고 3번인 전체 한가지의 경우를 낼수가 있다. 결론 데이터를 집계하고 싶고, 화면을 동적으로 구성하고 싶다면 RollUp..
테이블의 설계가 잘되었다라는걸 어떻게 증명할수 있을까? 나는 테이블을 설계할때 가장 주의 깊게, 심도있게 설계를 했다. 그렇다보니 당연한게 되었다. 왜 테이블 설계가 잘 되었다라는 걸 생각하지 못했었다. 너무 당연하게 여겨졌던 행동들이었다. 그런데, 가만히 생각해보면 나만 알고 있었다. 남을 설득시켜야 했는데, 그러기 위해서는 체계화 시킬 필요가 있었다. 그렇기에 체계화 해보려고 한다. 이론적인 부분을 설명하고 1정규화, 2정규화, 3정규화, BCNF정규화 내 경험에 비추어서 내가 세운 기준들을 말씀드리려 한다. 1정규화 : 컬럼의 원자이 유지되는가 이다 2정규화 : 특정 기본키에만 종속되는 부분적 종속이 없어야 한다. 3정규화 : 이행적 종속이 없어야 한다. A-> B, A->C일때, B->C를 결정하는걸 이행적 종속이라고 한다. BCNF정규화 : 모든 결..
크롬80,84 쿠키정책 변경 이슈 크롬 80버전 2020년 2월 4일 크롬80 쿠키정책이 변경되었다. 도메인이 서로 다른 사이트 간 이동을 하는 경우 쿠키 전달 불가 서로 다른 도메인 간 이동 시 쿠키 전달 불가로 인한 세션 오류 발생(결제 pg사) 기본 SameSite를 Lax로 변경 문제 사이트에 간헐적으로 결제시 세션이 끊기는 현상이 발생하였다. 원인(PG사) 크롬80 쿠키정책에 대응을 하더라도 사용자가 임의로 위에처럼 차단시에 결제등 외부 쿠키관련 데이터가 막힐수 있다. 차단시 인클루드된 외부사이트 스크립트에서 문제가 발생하였다. 해결법 각사이트 header나 공통 페이지에 아래처럼 기재하였다. httpServletResponse.setHeader("Set-Cookie", "JSESSIONID=" + session.getId() ..
Spring Validation과 JsonSerializer<Errors> 목적 스프링은 비즈니스 로직에만 집중할수 있도록 애플리케이션 전 계층에서 도메인 객체를 검증할수 있는 인터페이스를 제공한다. Validator Interface Spring은 도메인 객체를 검증할 수 있도록 Validator 인터페이스를 도입했다. Validator 인터페이스는 객체를 검증하는데 실패하면 Errors 객체에 에러를 등록함으로써 동작한다. 예시 supports(Class): 매개변수로 전달된 클래스를 검증할 수 있는지 여부를 반환 validate(Object, org.springframework.validation.Errors): 매개변수로 전달된 객체를 검증하고 실패하면 Errors 객체에 에러를 등록한다. validator의 validate함수에서 reject 함수를 호출하면 Bindi..
Spring hateoas Spring Hateoas란? HATEOAS는Hypermedia As The Engine Of Application State의 약자로 서버가 클라이언트에게 하이퍼 미디어를 통해 정보를 동적으로 제공해주는 것입니다. API에서 리소스에 대한 어떤 행동을 할수 있는지 URL을 통해 전달하여 클라이언트가 참고하여 사용할수 있도록 합니다. 예를 들면, 리스트를 전달할때 각 리스트안에 요소에 self_url을 전달하여 보내는 것입니다. 이러한 메시지를 표현하기 위해서 헤더의 Content Type을 application/hal_json으로 전달하면 클라이언트에서는 _link필드에 링크정보가 있다고 예상할수 있습니다. 예시 사용법 의존성 추가하기 org.springframework.boot spring-boot-..
Circuit Breaker - resilience4j Circuit Breaker 개별 모듈 장애로 인한 서비스 장애를 방지하기 위해 나온패턴이 서킷브레이커 전기 회로 차단기의 개념을 차용한 패턴으로 전기 흐름에 문제없으면 close 문제가 생기면 open하여 흐름을 차단 Circuit Breaker의 상태 정상 상태 : Closed 오류 상태 : Open 반열림 상태 : Half Open (일부 request만 실행해보면서 기능이 다시 정상적으로 동작하는지 확인하는 과정) 3가지 상태 전환 과정 Closed 상태 특정 모듈이 요청한 결과(성공/실패)를 기록. 실패 횟수(또는 시간)가 임계치에 도달했을시 Open 상태로 전환 Open 상태 지정된 시간만큼 open 상태를 유지하며 요청에 대해 지정된 결과를 응답한다.(예외를 던지거나 임시복구 데이터를 응답한..