일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring boot
- 백트래킹
- 이분 매칭
- 서비스 디스커버리
- Spring Cloud Config
- BFS
- 스프링 시큐리티
- 이분 탐색
- 유레카
- 비트마스킹
- ZuulFilter
- 도커
- 다익스트라
- Logback
- 스택
- 트리
- Zuul
- 주울
- 구간 트리
- 구현
- 달팽이
- Gradle
- 게이트웨이
- dp
- 플로이드 와샬
- 완전 탐색
- Java
- 메모이제이션
- spring cloud
- docker-compose
- Today
- Total
목록분류 전체보기 (387)
Hello, Freakin world!
철학은 어떻게 삶의 무기가 되는가 국내도서 저자 : 야마구치 슈 / 김윤경역 출판 : 다산초당 2019.01.22 상세보기 아주 재밌게 읽었다. 철학에 처음 입문한 책이 '소피의 세계'라는 책이었는데, 워낙에 두껍고 또 지루하기도 해서 다 읽지도 못했다. 이 책의 장점은 실용적인 철학 개념을 작가가 선별해 짧은 호흡의 글로 지루하지 않게 독자들에게 설명해준다. 한 챕터마다의 글은 짧을지언정 충분히 독자들로 하여금 생각해보게 만드는 글들이 많았다. 나처럼 철학에 생소한 사람이라면 이 책을 강력추천하고 싶다.
아마 내가 자바 nio에서 제공하는 selector를 이용한 논블로킹 방식에 꽂혀있었는지도 모르겠다. 이 방식으로 모든 네트워크 통신을 처리하려고 했으나 한계가 있다는걸 깨달았다. 이전에 ConnectionLoop를 구현할 때 깨달았던 부분과도 관련이 있다. 지금이 selector를 이용한 논블로킹 방식(이벤트 방식)은 데이터를 보내고 그에 대한 응답을 받아야하는 식의 대화형 애플리케이션은 만들 수가 없다. 그 이유는 이벤트를 보내고나서 그 특정 응답을 선별할 수 없기 때문이다. 이를 구현하려면 동기방식을 쓸 수 밖에 없다. (기존의 웹처럼) 동기방식을 쓰더라도 그 작업을 다른 스레드에 위임하면 논블로킹을 구현할 수 있는데, 아마도 Future와 CompletableFuture를 사용하면 될 듯하다. 자..
비동기 예외 처리? 상황을 자세히 살펴보자. 스레드 A,B가 있다고 하자. A는 호출자 스레드이고 A스레드에서 어떤 작업을 B로 위임했다. B 작업의 결과를 참조하기 위해 우리는 자바에서 지원하는 동시성 api를 사용했고 그 결과는 Future를 통해 접근할 수 있다고 하자. 예제 코드 import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ThreadA { public static void main(String[] args) throws ..
어디에 쓰는 물건인고? ExecutorService에서 비동기 작업의 결과를 감싸는 기능을 하는 클래스다. 다시 말해, 다른 스레드에서의 작업 결과에 접근할 수 있는 참조를 제공하는 역할을 한다. 제공하는 메서드 - cancel(boolean mayInterruptIfRunning) - get() - get(long timeout, TimeUnit unit) - isCancelled() - isDone() 예제 public class Main { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newCachedThre..
Selector에 등록하는 방법 방법 자체는 간단한다. SelectableChannel 클래스를 구현한 클래스의 객체들은 register() 메서드를 이용해 selector에 등록이 가능하다. 주의 사항 1. selector의 key set에 채널이 등록될 때, 채널 객체의 참조값이 키값이 된다. 따라서 targetChannel.register()에서 target이 같다면 register 메서드에 파라미터를 다르게 주면서 여러번 호출하더라도 마지막 파라미터를 값을 가진 채널이 등록된다. (중요!) 2. selected-key set은 key set의 경우와 다르다. 이 set에서 식별키는 interest op 값과 채널의 참조값인듯하다. selection 작업 후 key set에 같은 참조값의 채널이 있..
ConnectionLoop 는 서버와의 연결에 실패했을 때의 상황을 처리하기 위해 구현했다. 사용자의 커맨드에 따라 다시 연결을 시도할지, 연결을 그만두고 애플리케이션을 종료할지 선택할 수 있다. 코드 private void connectionLoop() { while(true) { System.out.println("연결 중..."); Optional socketChannelOpt = Optional.ofNullable(channelManager.connect()); if(socketChannelOpt.isPresent()){ boolean isConnected = channelManager.finishConnect(socketChannelOpt.get()); if(isConnected) { Syste..
Gson 라이브러리 자바 객체와 json:String 서로 간의 변환을 도와주는 라이브러리입니다. toJson, fromJson 과 같은 메서드명으로 구성되어 있어 직관적으로 사용이 가능합니다. 참고사항 - 도메인 객체의 필드만을 이용해 json 포맷의 문자열을 구성합니다. - 필드가 null인 경우 json 객체에 포함되지 않습니다.
이 문서는 java12 documentation 내용을 정리한 것입니다. 이 객체는 SelectableChannel 객체의 멀티플렉서입니다. 멀티플렉서란 아래 그림처럼 다중의 입력을 하나의 출력으로 반환하는 걸 매개하는 것을 의미합니다. Selector 객체는 Selector 클래스의 open 메서드를 호출함으로서 생성됩니다. 내부적으로 미리 설정된 기본 selector provide 객체를 통해서 새로운 selector를 만듭니다. Selector 객체는 커스텀 selector provider의 openSelector 메서드를 이용해서 제공될 수도 있습니다. Selector는 close()로 인해 닫히기 전까지 열려있는 상태를 유지합니다. Selectable channel을 등록하면 SelectionK..
오늘 할 일 - 자바 nio wakeup test해보기 - 테스트하고 정리글 쓰기 - 독서 1페이지 - 운동 푸시업 3개 or 철봉 1개 할 거(우선 순위 순) - 자바 비동기 프로그래밍, 네트워크 관련 토이프로젝트(채팅 기능 구현하기?) - vue.js 이용해서 간단한 게시판 만들기(뒤집어 엎고 다시 시작) - JPA 학습 - 최종 프로젝트 안드로이드 쇼핑몰 앱 만들기?