전체 글

전체 글

    CAP란?

    CAP란?

    CAP란 분산 시스템에서 속성인 3가지 일관성(Consistency), 가용성(Availablity), 분할 허용성(Partition tolerance)을 말합니다. 우선, CAP에 대해서 하나씩 알아보겠습니다. 일관성 , Consistency 일관성이란 사용자가 분산 데이터베이스 상의 어떤 노드와 통신하는지 상관없이 같은 데이터를 조회할 수 있는 것을 의미한다. 조회한 데이터는 가장 최근에 쓰여진 데이터. 따라서 하나의 노드에 쓰기 작업이 이루어졌다면, 모든 복제본에 반영이 되어야 한다. 하지만 시스템이 모든 인스턴스에 변경 내용을 즉시 반영하는 것은 불가능에 가깝다. 따라서 일관성이란 데이터의 동기화가 즉시 반영은 아니지만 속도를 높여 사용상의 문제가 없게끔 만들어야 한다. 따라서 일관성은 모든 사용..

    Kafka 간단 정리

    Kafka 간단 정리

    kafka에 대해 알아보기 전에 kafka 탄생배경에 대해 알아보자 kafka 탄생 배경 기존에 각각의 applicatoin 끼리 연결하여 데이터를 처리하는 방식은 source application과 target application 사이의 의존도가 높다. 또한 서비스나 데이터 저장소가 End - to - End로 연결되어 복잡한 구조를 가지고 있다는 단점을 가지고 있었다. 따라서 kafka를 중앙에 배치하여 데이터를 한 곳에 모아 처리할 수 있게 하여 단점을 해결할 수 있었다. kafka를 중앙에 배치하여 복잡도를 낮출 수 있다. 이러한 특징은 여러 마이크로 서비스가 서로 협력하는 MSA 환경에 적합하다. Producer가 kafka에 메세지를 보내면 Consumer가 kafka에서 메시지를 직접 가져..

    Spring WebSocket Ping / Pong

    Spring WebSocket Ping / Pong

    채팅 프로젝트를 진행하던 도중 WebSocket Session을 효율적으로 관리하려면 어떻게 해야할까? 에 대한 질문을 공부하며 이를 코드로 작성하였고 본 포스팅을 작성하게 되었습니다. 서버와 사용자가 WebSocket 연결이 되어있을 때, 사용자가 정상적으로 연결을 끊는다면 서버도 이를 파악하고 정상적으로 사용자와의 연결을 끊을 수 있습니다. 하지만 사용자 측에서 비정상적으로 연결이 끊긴다면 서버가 사용자가 연결이 되어있는지 안되어있는지 판단하지 못해 연결되어 있다고 판단할 수 있습니다. 이번 포스트에선 이를 보완하기 위해 서버와 사용자의 WebSocket 연결이 의도치 않게 끊겼을 때, Ping / Pong 으로 서버가 사용자와의 WebSocket 연결 상태를 확인하는 코드를 작성해 보겠습니다. Pi..

    [프로그래머스 문제풀이]2023 KAKAO BLIND RECRUITMENT 표현 가능한 이진트리

    이번 문제를 풀 때 가장 중요한 점은 주어진 수가 이진트리로 표현할 수 있는가? 였습니다. 따라서 처음에 주어진 수를 이진수로 변환한 뒤 이진트리가 될 수 있도록 패딩을 먼저 진행하였습니다. ( 자릿수가 2의 제곱수보다 1 작도록 설정 ) 그 후 루트 노드 ( 이진수의 가운데 수 )의 왼쪽 트리의 루트 노드, 오른쪽 트리의 루트노드를 검색하는 재귀 함수를 작성하였습니다. 이때 루트노드가 0이며, 왼쪽 트리의 루트 노드, 오른쪽 트리의 루트 노드가 모두 1일 경우 표현 불가능한 이진트리로 판단하였습니다. 문제 자체는 어렵지 않고, 실제로 작년 카카오 코딩테스트 때 구상까지는 완료하였으나, 구현에서 막혀 풀지 못한 문제였습니다. import math def get_digit(number): pow = 0 w..

    스트림

    모던 자바 인 액션 정리본 스트림 스트림은 자바 8 API에 새로 추가된 기능 스트림 특징 스트림을 사용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. ( 데이터를 직접 처리하는 구현 코드 대신 질의로 표현 ) 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. filter, sorted, map , collect 같은 연산은 고수준 빌딩 블록으로 이루어져 특정 스레드 모델에 제한되지 않고 자유롭게 사용할 수 있다. 따라서 데이터 처리 과정을 병렬화하면 스레드와 락을 걱정할 필요가 없다. - 선언형 : 더 간결하고 가독성이 좋아진다. - 조립할 수 있음 : 유연성이 좋아진다. - 병렬화 : 성능이 좋아진다. 스트림 정의 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추..

    JVM이란

    JVM이란

    Java공부를 하면 JVM 이란 단어를 많이 들어보고 공부해 봤을 것이다. 이번 기회에 JVM에 대해 자세히 알아보자. JVM이란? -Java Virtual Machine - 자바를 실행시키기 위한 가상 기계라고 해석할 수 있다. - 사용자의 OS에 종속받지 않고 OS 위에서 가상 기계를 통해 자바를 실행시킨다. 따라서 자바는 사용자의 OS 종류에 관계없이 자바를 실행할 수 있다. - 구성 : 자바 인터프리터, JIT , 클래스 로더, Runtime Data Area, 가비지 컬렉터로 되어있다. JIT & Interpreter 위의 그림을 보게 되면 java 파일을 컴파일러를 통해 .class 파일로 변환한 뒤 JVM이. class 파일을 받아 바이트 코드의 명령에 따라 내재된 기능을 수행한다. Java..

    람다 표현식

    모던 자바 인 액션 정리본 람다 표현식 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징 - 익명 : 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. - 함수 : 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. - 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. - 간결성 : 익명 클래스처럼 코드를 구현할 필요가 없다. 람다는 세 부분으로 이루어진다. ( Apple a1, Apple a2 ) -> a1.getWeight().compareTo(a2.getWeight()); 람다 파라미터 화살표 람다 바디 - 파라미터 리스트 : Comparator의 compare 메서드 파라미터 ( 사과 두 개 ) - 화살표 : 화..

    동적 파라미터화

    모던 자바 인 액션 정리본 동적 파라미터화란? 동적 파라미터화란 메서드가 다양한 동작을 받아서 내부적으로 다양한 동작을 수행할 수 있다. 책에선 이렇게 쓰여있다. 이를 해석하자면 함수의 파라미터로 들어온 인자가 변수뿐만 아니라 메서드로 들어와 함수 내에서 다양한 동작 즉, 인자로 들어온 메서드를 수행할 수 있다.라고 해석할 수 있다. ApplePredicate를 이용한 필터 메서드를 통해 동적 파라미터를 어떻게 동작시키는지 알아보자. public static List filter(List inventory, ApplePredicate p) { List result = new ArrayList(); for (Apple apple : inventory) { if (p.test(apple)) { result...