본문 바로가기
이벤트 기반(pub/sub) 시스템 개발 경험 정리 이벤트 기반 시스템이란? 말 그대로 이벤트 기반으로 동작하는 시스템이다. 이벤트 발행 시 수신 채널들에서 해당 이벤트를 처리하도록 고안된 시스템! API 시스템과는 차이점은 무엇이 있을까? 경험을 토대로 써봐야겠다. 첫번째 요청 처리 관점으로 비교 해보면API는 요청 받음과 동시에 처리를 시작하고 응답해야한다.이벤트 기반 시스템은 곧바로 처리할 수도 있고, 일정시간 딜레이 주고 처리할 수도 있다. 두번째 확장성 관점으로 비교 해보면API는 하나의 요청으로 하나의 처리 만을 할 수 있다.이벤트는 1개지만 이벤트 처리 시스템을 N개 만들면 여러 처리를 할 수 있음 이벤트 기반 시스템을 선택해야했던 이유는? 처리량을 제어할 수 있는 시스템이 필요했다. 오픈 초기에는 요청량이 적지만 점차 비즈니스에 따라 사용량.. 2020. 12. 25.
[Java] IO - 문자(char) 단위 IO 개념 그리고 예제코드 repo [IO 관련 예제코드] - 레포 : https://github.com/imjinbro/javaBasic/tree/master/src/com/jinbro/source/io - 아직 포스팅 하지않았지만 스트림 사용(byte, char 단위 각각, 콘솔, 파일 네트워크IO) 예제가 있음 - 네트워크 IO는 콘솔기반 다중접속 채팅프로그램을 구현하면서 익히는 중 (1) 소켓 - 스트림 데이터 통신(2) 서버(1) : 클라이언트(N) - 대기실 채팅, 명령어까지 구현(3) 방 만들고 따로 참여해서 방 채팅하는 것은 구현하는 중 (4) 이후 리팩토링까지..... : 객체지향스럽게(https://imjinbro.github.io/) [Reader]- 문자(char) 단위로 데이터를 읽어올 떄 사용하는 스트림- 메서드(.. 2017. 12. 7.
[Java] IO - 바이트 단위 IO 개념 그리고 예제코드 repo [IO 관련 예제코드] - 레포 : https://github.com/imjinbro/javaBasic/tree/master/src/com/jinbro/source/io - 아직 포스팅 하지않았지만 스트림 사용(byte, char 단위 각각, 콘솔, 파일 네트워크IO) 예제가 있음 - 네트워크 IO는 콘솔기반 다중접속 채팅프로그램을 구현하면서 익히는 중 (1) 소켓 - 스트림 데이터 통신(2) 서버(1) : 클라이언트(N) - 대기실 채팅, 명령어까지 구현(3) 방 만들고 따로 참여해서 방 채팅하는 것은 구현하는 중 (4) 이후 리팩토링까지..... : 객체지향스럽게(https://imjinbro.github.io/) [I/O]- 데이터를 외부에서 읽고, 외부로 출력하는 작업 : Input, Output.. 2017. 12. 7.
[Java] 자바 IO - IO, 스트림 개념 [IO 관련 예제코드] - 레포 : https://github.com/imjinbro/javaBasic/tree/master/src/com/jinbro/source/io - 아직 포스팅 하지않았지만 스트림 사용(byte, char 단위 각각, 콘솔, 파일 네트워크IO) 예제가 있음 - 네트워크 IO는 콘솔기반 다중접속 채팅프로그램을 구현하면서 익히는 중 (1) 소켓 - 스트림 데이터 통신(2) 서버(1) : 클라이언트(N) - 대기실 채팅, 명령어까지 구현(3) 방 만들고 따로 참여해서 방 채팅하는 것은 구현하는 중 (4) 이후 리팩토링까지..... : 객체지향스럽게(https://imjinbro.github.io/) [I/O]- 데이터를 외부에서 읽고, 외부로 출력하는 작업 : Input, Output.. 2017. 12. 7.
[자료구조 알고리즘] 자료구조 효율적인 탐색을 위한 정렬알고리즘#2 [구현한 코드]- https://github.com/imjinbro/datastructure/tree/master/src/main/java/com/jinbro/source/sorting- 이제 배운 정렬 알고리즘으로 여러 데이터를 정렬해봐야지 [병합정렬]1) 큰 문제를 더이상 쪼갤 수 없을 떄까지 쪼개서 해결(정렬)하면서 결합- 결합하면서 정렬 : 1개까지 쪼개버려서 정렬하면서 붙임(완전 단순화)- 실제로 쪼개는게 아니라 접근 제한(1) 쪼갤 수 있을 떄까지 쪼개고(2) 최소한의 상태로 쪼개진 2개를 가지고 정렬 - 병합 2) 성능 : NlgN (데이터 N개 일 때 최악의 경우 얼마나!)- 연산 : 분할(나눠) + 병합(비교 정렬 후 합치기) - 둘 중에 병합 평가만 일단(1)병합 단계가 데이터 개수에 .. 2017. 11. 17.
[Java] 람다식 - 단순히 syntactic sugar 아니네요 [더 자세한 내용은] - 케빈님 영상 : https://www.youtube.com/watch?v=bKzMl7LKIO0&index=21&list=PLRIMoAKN8c6O8_VHOyBOhzBCeN7ShyJ27 [단순히 syntactic sugar 아니네요]- 단순하게 컴파일 타임 때 Anonymous class 형태로 바뀌지않음 1) 스코프가 다름 : 자체스코프 가지나 안가지나- 익명클래스는 외부 인스턴스 필드에 접근 스코프 액세스 메서드도 만들어줌 : access$000 (getter), 접근할 방법이 없으니깐 2) 파일 생성이 달라(클래스 - 인스턴스 생성 달라) : 익명클래스 수만큼 클래스 파일 추가, 람다는 따로 생성안하고 람다레시피 추가- 디컴파일 : javap -c -p 파일명.class (An.. 2017. 11. 14.
[자료구조 알고리즘] 자료구조 효율적인 탐색을 위한 정렬알고리즘#1 [정렬]- 자료구조 연산 : 삽입 - 삭제 - 탐색(정렬되어있는 상태로)- 탐색을 위한 정렬 : 탐색을 효율적으로 하기위해서 [버블정렬]1) 구현하기는 쉽지만 데이터 개수가 늘어남에 따라 연산 횟수도 늘어남2) N개의 데이터에서 순서대로 2개씩 잡고 오름/내림차순(비교와 이동 연산)에 따라 정렬함3) 공간복잡도 O(N) : 같은 배열에서 진행하기때문에4) 시간복잡도 - 워스트 케이스- 비교했을 때 모두 이동함- 어쨌든 비교를 데이터 개수만큼 해야하고 비교를 어떻게 하나 : (n-1)번 + (n-2)번 + ...... + 1- 등차수열의 합 : n(n-1)/2 -> O(N^2) static void sort(int[] arr){ int length = arr.length; for(int i=0; i 2017. 11. 11.
[자료구조 알고리즘] 기능성 이진트리 - 우선순위큐, 힙 [구현코드 - github]- primitive val heap : https://goo.gl/FYP5im- heap : https://goo.gl/kc6KKT [우선순위큐]1) 입구 - 출구가 나뉘어져있어서 붙여진 이름 큐2) 비선형자료구조 : 우선순위에 의해 계층적으로 데이터를 표현/동작, 선형자료구조인 큐와는 다름(단지 입출구때문에)3) 우선순위에 의해서 Out 순서가 정해짐 : 들어온 순서는 상관없음4) 힙을 기반으로 만들어짐 : 내부적으로 힙을 사용, 힙의 메서드 호출, 같은 구현내용 [힙 소개]- 배열로 만들어지는 이진트리 : 삽입, 삭제 과정에서 트리의 마지막노드를 알아야 쉽게 구현할 수 있어서- 기능성 이진트리 : 우선순위에 의한 내부 정렬 + 데이터 계층 표현 1) 조건 : 완전이진트리 .. 2017. 11. 9.
[Java] 자료구조 API - 컬렉션프레임워크 [샘플코드]- https://github.com/imjinbro/javaBasic/tree/master/src/com/jinbro/source/collection [컬렉션 프레임워크]- 객체 자료구조를 API로 제공함 : 인터페이스와 인터페이스 구현 클래스 제공- 주요 인터페이스1) List : 선형자료구조(순서O), 중복O2) Set : 순서X, 중복X3) Map : key-value 쌍으로 저장, 순서X, key는 중복되면 X / value는 중복되어도 상관X0) Collection 인터페이스 > List, Set : List와 Set은 Collection으로 묶임- 같은 메서드가 많으니 하나의 타입(Collection)으로 묶음 : 타입에 대한 의미랄까- 제네릭 사용 : 타입인자 넘겨주지않으면 기본.. 2017. 11. 8.
[Java] java8 - Functional Programming이 뭘까 왜 쓰지 그리고 람다식은? [github 코드] - 함수형인터페이스 직접 만들어본 코드는 아래에 나머지 샘플 코드들은 깃헙에 푸쉬해놓음 - https://github.com/imjinbro/javaBasic/tree/master/src/com/jinbro/source/fp [FP를 OOP에서 왜?]- FP가 필요한 부분이 있으니깐 사용하겠다 1) 동시성 side effect 없애기 : 멀티쓰레딩 공유자원 안전- 객체 상태 변화에 민감한 부분에서 순수함수형프로그래밍이 좋다 : 같은 input -> 같은 output- 변경 개념이 아니라 복사되고 복사된 것이 함수를 거쳐 결과값으로 : side effect 없앰 2) 함수에만 신경쓰면 됨 : 메서드에만 집중가능함- 객체지향설계 메서드 single responsibility princi.. 2017. 11. 2.