본문 바로가기

전체 글

(16)
Kafka 내부 메커니즘 - 2)요청처리 Kafka의 요청 처리 당연히 클라이언트가 요청하는 주체 일 것이고, 요청을 처리하는 주체는 Broker가 된다. 또 여기서 말하는 클라이언트는 아마 Producer, Consumer가 될 것이다. Kafka는 TCP로 전송되는 이진 프로토콜을 갖고 있으며, 항상 요청을 수신한 순서대로 브로커가 처리하기 때문에 카프카가 메세지 큐처럼 동작이 가능하다. 그럼 Kafka가 갖고있는 프로토콜의 모양을 살펴보자 프로토콜 헤더 살펴보기 요청타입 ID 16bit, 정수형 요청 타입을 구분하는 값이 들어간다 ex. Produce하는 요청의 ID값은 1, Consumer하는 요청의 ID값는 2 (아마 Kafka 내부적으로 정의된 값이 있을 것이다. 위 예시는 정말로 예일 뿐) 요청 버전 16bit, 정수형 API 버전..
구조분해 할당(Destructuring assignment) Front-End 소스를 보던 와중 아래와 같은 소스를 보게 되었고 내가 하고싶었던 것은 onMenuClick을 구현하고 싶었다. const Menu = ({ resource, onMenuClick, logout, classes }) => ( ... ); 그런데 onMenuClick을 구현 하더라도, 이를 Menu로 어떤식으로 전달을 해야하나 싶었다. 왜냐하면 파라메터 부분에 있는 중괄호 때문에. 이를 보고 Arrow Function으로 접근하였지만 답이 안나왔다. 다시 찾아보니 구조분해 할당(Destructuring assignment) 문법이라는것을 찾아 낼 수 있었다. Destructuring assignment은 ES6에서 배열과 object를 조금 더 쉽게 다루는 방식 중 하나로 추가되었다고 한..
Arrow Function(화살표함수) 최근들어 Front-End 작업을 하는데, Arrow Function이 상당히 많이 보이기 시작했다. 깊게 공부하기 귀찮아서 어느정도 자체 해석하면서 넘어가려고 하다, 이 정도 사용률이라면 제대로 알고 넘어가야 할것 같아 공부를 하기로 하였다. // 함수 표현식 function () {} // 화살표 함수 표현식 () => {} 먼저 Arrow Function는 ES6 문법이며, let, const만큼 많이 사용되고 있다고 한다. Arrow Function 공식 문서는 다음과 같다. 나는 내가 이해할 정도로만 짧고 명료하게 공부하고 넘어갈 것이기 때문에 구체적인 내용을 보고 싶다면 링크를 참고하는것을 추천한다. Arrow Function Expression 화살표 함수 화살표 함수 표현(arrow fun..
Spring Cloud Data Flow 이직을 했더니, 주로 배치 job을 수행하고 MSA 구조로 구성된 작업들이 많이 있었다. 이들은 기존에 Jenkins로 batch Job을 수행시키고 있었지만 최근부터 개발되는 작업들은 모두 Spring Cloud Data Flow를 사용하려는 경향이 있어 이를 공부하고자 이 글을 남긴다. 근데 생각보다 Google에 자료가 많이 없다. 잡다한 설명들은 다 빼고 키워드 위주로 내가 이해한것들을 기록하고자 남긴 것이니 설명이 다소 부족할 수 있는점 이해 바란다. 아직 Docker에 대한 이해도 모자라서, 업무를 진행 해 가면서 이 글을 더욱더 깊이있게 채워나갈 예정이다. 혹시 틀린 내용이 있다면 댓글 달아주세욥. Spring Cloud Data Flow이란 ? 런타임 환경에서, Spring Boot App..
[GC] GC 시작하기 - 2(Old 영역) Old 영역에 대한 GC Old 영역은 기본적으로 데이터가 가득 차면 GC를 실행한다. GC 방식에 따라 처리 절차가 달라지는데, JDK 7 기준으로 아래 5가지 방식이 있다.(JDK 9인가 10에 GC 알고리즘 관련 업데이트 된 내용이 있었다. 추후 조사해보자) Serial GC Parallel GC Parallel Old GC(Parallel Compacting GC) Concurrent Mark & Sweep GC(이하 CMS) G1(Garbage First) GC Serial GC Old 영역의 GC는 mark-sweep-compact이라는 알고리즘을 사용한다. 이 알고리즘의 첫 단계는 Old 영역에 살아있는 객체를 식별(Mark)하는 것이다. 그 다음에는 힙(heap)의 앞 부분부터 확인하여, ..
[GC] GC 시작하기 - 1 (GC 과정, Minor GC) GC 이론에 대해 차근차근 이해해 볼 예정이다. 기본 내용은 여기를 참고해 기재할 예정이라, 글의 목록 내용등이 거의 일치하겠지만, 내가 이해한 방식으로 다시 글을 작성하기 때문에 근소하게 다를 것이다. 하늘색 글자들은, 포인트가 될만한 내용을 표시한 것이고 초록색 글자들은, 추후 또 하나의 주제로 찾아볼만한 내용들에 대해서는 표시한 것이니 참고 바람 시작하기 GC에 대해 알아보기전에 알아야 할 용어가 있다. 바로 'stop-the-world'. 여기서 말하는 world는 JVM에서 실행되고 있는 애플리케이션을 뜻한다. 그럼 'stop-the-world'는? GC가 JVM에게 본인의 작업을 수행하기에 앞서 명령을 내린다고 생각하면 된다. stop-the-word가 발생하면 GC를 실행하는 쓰레드를 제외한..
토비의 스프링 2장 - 테스트 2장을 읽고난 후 든 생각, '테스트'는 개발의 '전부'이자, '테스트'가 없으면 '개발'도 없다 TDD 방식이 너무 매혹적으로 다가왔고, 차주부터는 반드시 적용해볼 생각이다 토비님의 정리 - 테스트는 자동화돼야 하고, 빠르게 실행할 수 있어야 한다 - main()테스트 대신 JUnit 프레임워크를 이용한 테스트작성이 편리하다 - 테스트 결과는 일관성이 있어야 한다. 코드의 변경 없이 환경이나 테스트 실행 순서에 따라 결과가 달라지면 안된다 - 테스트는 포괄적으로 작성해야 한다. 충분한 검증을 하지 않는 테스트는 없는것보다 나쁠 수 있다 - 코드 작성과 테스트 수행의 간격이 짧을수록 효과적이다 - 테스트하기 쉬운 코드가 좋은 코드다 - 테스트를 먼저 만들고 테스트를 성공시키는 코드를 만들어가는 테스트 주..
토비의 스프링 1장 - 오브젝트와 의존관계 책의 정리 내용 - 책임이 다른 코드는 분리한다. 관심사별로 클래스를 나누기 - 그 중에서, 추후 수정이 있을것 같은 클래스는 인터페이스로 구현해서, 인터페이스의 정의부와 구현부로 나눈다 > 이렇게 하면 인터페이스의 구현부가 달라지더라도, 이 인터페이스를 참고하는 쪽에서는 수정할 부분이 없기때문(전략패턴) - 결국 한쪽의 기능 변화가 다른쪽의 변경을 요구하지 않아도 되게 했고(낮은 결합도), 자신의 책임과 관심사에만 순수하게 집중하는(높은 응집도) 깔끔한 코드를 만들 수 있다 - 오브젝트가 생성되고 여타 오브젝트와 관계를 맺는 작업의 제어권을 IoC(Inversion of Control) 컨테이너로 넘겨서 오브젝트가 자신이 사용할 대상의 생성이나 선택에 관함 책임으로부터 자유롭게 만들어 줬다 - 전통적인..