일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Java
- 달팽이
- 백트래킹
- 도커
- 완전 탐색
- 게이트웨이
- spring cloud
- 스프링 시큐리티
- 다익스트라
- 구간 트리
- 비트마스킹
- 메모이제이션
- 이분 탐색
- Logback
- docker-compose
- 주울
- dp
- Spring Cloud Config
- Zuul
- 플로이드 와샬
- BFS
- 이분 매칭
- 구현
- Gradle
- 서비스 디스커버리
- 트리
- 유레카
- 스택
- ZuulFilter
- spring boot
- Today
- Total
목록분류 전체보기 (387)
Hello, Freakin world!
언어의 온도 (3주년 150만 부 에디션) 국내도서 저자 : 이기주 출판 : 말글터 2016.08.19 상세보기 이런 에세이류는 평소에 잘 읽지 않지만 갤럭시탭을 삼과 동시에 밀리의 서재라는 앱을 이용하면서 시험삼아? 읽어보게 된 책이다. 베스트 셀러에 오래 올라와 있어서 제목도 그리 낯설지만은 않았다. 음... 일단 끝까지 읽긴 했지만 내 취향에 맞는 책은 아니었다. 뭐랄까 문체가 문학적 나르시스트가 쓴 글 같다고 해야될까? 글의 내용의 깊이가 있다고 보기는 어려웠다. 하지만 작가는 그걸 멋지게 표현하기 위해 애쓴게 보였다. 가독성은 나쁘지 않았다. 별다른 생각없이 술술 읽을 수 있었지만 읽고 나서 딱히 남는 것은 없었다. 중간중간 생각을 하게끔 하는 부분도 있었지만, 전체적으로 그냥 개인의 일상을 적..
이제까지는 필요한 기능에 따라 클래스 레벨의 목표에 맞춰서 코딩했다. 어느 정도 뼈대가 갖춰졌으니, 목표를 서버와 클라이언트의 전체적인 동작에 맞추어보자. 첫 번째 목표 두 명의 클라이언트가 서버에 연결되고 각각 클라이언트는 서버와 연결되면 콘솔에 메세지를 표시한다. 서버 역시도 콘솔에 메세지를 표시한다.
오늘 할 일 - 채팅앱 코드 한줄 - 언어의 온도 서평 - 독서 1줄 - 푸시업 3개 or 철봉 1개 할 거(우선 순위 순) - 자바 비동기 프로그래밍, 네트워크 관련 토이프로젝트(채팅 기능 구현하기?) - vue.js 이용해서 간단한 게시판 만들기(뒤집어 엎고 다시 시작) - JPA 학습 - 최종 프로젝트 안드로이드 쇼핑몰 앱 만들기?
메서드 설명 - getHandlerMap() 이 메서드는 클래스 내에 존재하는 @Event 애너테이션이 달린 메서드들을 자신의 메서드명(event명)으로 매핑한 맵을 반환한다. (내가 임의로 메서드명과 이벤트명이 같아지도록 구현함) 그 과정에서 Stream api와 Reflection api를 사용했다. - delegate() handler 맵을 순회하면서 전달받은 key에 포함된 eventName 값을 이용해 이와 일치하는 Method를 찾는다. 그리고 찾은 method를 호출한다. 또 다른 중요 키포인트 이 클래스는 외부에 delegate() 만을 노출한다. 직접적으로 핸들러가 호출되는 일은 없다. 이는 클래스 사용자가 어떤 api를 쓸지 고민할 필요가 없게 만든다. 후~ 뼈대 작업이 끝났다. 이제 ..
오늘 할 일 - 채팅앱 코드 1줄 - 블로그글 1개 작성 - 갤럭시탭 xodo 써보기 - 일기 쓰기 - 독서 1 줄 할 거(우선 순위 순) - 자바 비동기 프로그래밍, 네트워크 관련 토이프로젝트(채팅 기능 구현하기?) - vue.js 이용해서 간단한 게시판 만들기(뒤집어 엎고 다시 시작) - JPA 학습 - 최종 프로젝트 안드로이드 쇼핑몰 앱 만들기?
(갤럭시 탭을 구입해서 처음 작성해서 올리는 그림이다. 지금까지 직접 필기한 그림을 올리거나 마우스로 그림판에 그려 올렸는데 삶의 질이 올라간 기분!!) EventController와 같은 컨테이너 클래스를 둔 이유 결론부터 말하자면 핸들러의 유지보수성 때문이다. 지금 당장은 콘솔을 기반으로 한 채팅앱이라 EventHandler 의 핸들러가 처리한 결과를 바로 콘솔에 띄워서 바로 반영할 수 있다. 하지만 이 앱이 GUI 기반의 앱으로 확장될 가능성이 있다면? 핸들러에서 처리한 결과를 어떻게든 반영하기 위해 핸들러는 UI 객체에 대해 알아야 한다. UI를 컨트롤하는 객체는 main context에서 객체를 생성할 터인데 이를 주입받아 이벤트 컴포넌트 들과의 관계들을 설정하는 컨테이너 객체도 필요한 것이다...
selectionKey 객체는 이벤트와 함께 넘어오며 이벤트가 발생한 채널 객체 정보를 가지고 있다. event 로 감쌌지만 이벤트라는 개념을 설명하기 위한 가상의 객체다. (그런데 생각해보니 Event 클래스를 만들어두는게 더 나을지도 모른다는 생각이 들었다. 지금은 넘어가자) EventLoop 스레드에서 selectionKey 객체를 핸들러의 delegate 메서드의 파라미터로 넘겼었다. delegate 메서드는 핸들러에 내부의 메서드들 중 적절한 메서드와 해당 키를 매핑한다. 이런 일대다의 관계에서 매핑을 구현하기 위해 if문을 사용하면 결국 '다'부분의 가짓수가 늘어남에 따라 점점 가독성이 떨어지고 유지보수하기 어려운 코드가 탄생한다. 이를 해결하기 위해 애너테이션을 이용하자. 예를 들면, 스프링..
오늘 할 일 - 채팅앱 코드 한줄 - 블로그 글 작성 1개 - 일기 1줄 - 독서 1줄 리뷰 투썸도 가보니 할만하더라. 내일도 오전에 투썸에 가자. 확실히 글을 작성해나가면서 코딩하는게 더 정리도 되고 좋다. 할 거(우선 순위 순) - 자바 비동기 프로그래밍, 네트워크 관련 토이프로젝트(채팅 기능 구현하기?) - vue.js 이용해서 간단한 게시판 만들기(뒤집어 엎고 다시 시작) - JPA 학습 - 최종 프로젝트 안드로이드 쇼핑몰 앱 만들기?
public class EventLoop extends Thread{ Selector selector; EventHandler eventHandler = new EventHandler(); Logger logger = Logger.getLogger(EventLoop.class.getCanonicalName()); public EventLoop(Selector selector) { this.selector = selector; Thread.currentThread().setDaemon(true); } @Override public void run() { logger.entering("EventLoop", "run"); while(true) { try { selector.select(); logger.fin..
import ... public class SelectorManager { Selector selector; public synchronized Selector getSelector(){ if(!selector.isOpen() | selector == null ) { open(); return selector; } return selector; } public void close(){ try { selector.close(); } catch (IOException e) { e.printStackTrace(); } } private void open() { try { selector = Selector.open(); } catch (IOException e) { e.printStackTrace(); } }..