일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MapReduce
- coroutines
- Heuristic Watermark
- Hadoop
- flink watermarks
- watermark
- apache flink
- contravariant
- Generics
- 불공변
- Heuristic Watermarks
- Generic
- java
- HDFS
- Perfect Watermark
- Perfect Watermarks
- watermarks
- event time
- 공변
- flink watermark
- flink
- 가변성
- ingestion time
- lambda
- Coroutine
- kotlin
- covariant
- Stream
- processing time
- Today
- Total
목록전체 (25)
mm Home
최근 자바 9에서는 Reactive Streams API 가 추가되었다. 비동기 논블록킹의 개발방식이 떠오르면서 자바에서도 도입한것 같다. Reactive가 왜 나오게 되었는지, 어떤 개발 방식인지 살펴 보자. 간단하게 자바 9로 예제도. 기존의 절차지향적인 개발방식에서 Reactive 프로그래밍 패러다임이 떠오름.왜 Reactive ?기존의 절차지향적이고 쓰레드풀을 이용한 처리의 문제점.블록킹이 걸려있는 상태에서 대기하고 있는 쓰레드의 성능 문제 (특히 MSA 같은 서비스에서 API 콜 수행시 부하도 없이 쓰레드를 붙잡고 있는 상황 연출)쓰레드의 변경마다 발생하는 context-switch 비용한정적인 자원의 쓰레드 풀. 쓰레드간 공유하는 자원으로 인한 side-effect 가능성.Event-drive..
예전에 공부했던 내용을 정리~ HTTP 동작 순서 일반적으로 표현하는 클라이언트는 브라우저가 될 것이고, 서버는 웹 서버 혹은 웹 어플리케이션 서버가 될 것이다. 1. 사용자가 웹 브라우저에 URL 주소 입력 2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청한다. 3. 웹 서버와 TCP 연결 시도. - 3 way Handshake : 클라이언트 - 서버간 신뢰성있는 연결을 하기 위해 3번의 패킷 교환 과정이다. SYN : 클라이언트가 서버로 임의로 생성한 시퀀스 번호를 전달한다 SYN ACK : 서버는 클라이언트에서 전달한 시퀀스를 +1 시켜서 전달한다 (서버의 패킷을 정상 수신했다는 신호) ACK : 클라이언트가 서버에서 전달해준 시퀀스를 +1 시켜서 다시 전달함 (서버-클라 간 패킷..
OSI 7 은 대학생때 배웠지만 역시나 기억이 나지 않으므로.. 정리를 한다. OSI 7 이 왜 나왔을까?TCP/IP Model(4계층) 에서 보다 표준화, 학습도구, 문제 해결을 위하여 계층간 독립성을 가지기 위해서 개발.계층을 더 세분화함으로써 계층간 독립성을 구분시킬 수 있고, 독립성을 가지는 각 계층으로 인해 문제 해결도 보다 빠르게 할 수 있을 것이다. 물리계층 (1계층) - 전송 매체의 물리적 인터페이스 기술- 통신 케이블로 전기 신호 전송에 관한 인터페이스- 물리 계층이기 떄문에 데이터 전달만 할뿐 알고리즘 없음 (소프트웨어적 구현이 없는 유일한 계층) 데이터링크 계층 (2계층)- 물리계층 바로 위의 계층이다보니, 물리적 오류없이 한 장치에서 다른 장치로 프레임(데이터)을 전달하는 역할- 송..
스프링 MVC는 어떻게 작동하는가? 스프링 MVC 프레임워크는 Model-View-Controller 아키텍쳐를 제공해주고, 쉽고 유연한 개발을 하도록 지원해준다. 스프링 MVC에서 가장 큰 주체는 DispatcherServlet이다. DispatcherServlet은 Java EE의 Servlet을 래핑한 클래스이다. 컨트롤러의 컨트롤러 같은 느낌으로 개발을 아주 편리하게 하게 해준다. Request를 올바른 처리 핸들러에 위임하는 것부터 Model과 View 처리, Controller 매핑 등.. 다양한 기능을 지원해준다. 이미지 : https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch15s02.html 'Front controller' 라고 ..
대학생때 서블릿으로 개발을 하다가, 입사 이후 스프링을 처음 사용할 때 신기했다. 어떻게 동작하는지 궁금하지 않은가?? 스프링 부트를 사용하면서부터는 component scan 도 관습에 의해 설정할 필요도 없으니 스프링 부트만 사용해본 개발자는 스프링 내부를 더 알기 어렵지 않을까 하는 생각이 들었다. 어노테이션 기반의 개발 과정이 편리하지만 그 내부를 들여다보기 어려운 점이 있었는데 이번 달에 릴리즈될 스프링 5에서는 다시 처음으로 돌아가는 개발을 할 수 있다고 하니 좀 더 내부를 이해하기 쉬울것 같다는 생각도 들었다.예전에 스프링을 공부하면서 context와 mvc쪽을 살짝 공부한적이 있었는데 정리해본다.깊이있게 좀 파악하고 싶은데.. 언제나 깊이있는 공부는 어려운것 같다. 어떻게 component..
루비온레일즈 가이드 홈페이지 내용을 공부하면서 정리한 내용이다. (http://rubykr.github.io/rails_guides/) Rails 철학레일즈란? 루비로 쓰여진 웹 어플리케이션 프레임워크. 같은 것을 반복하지 말 것(Don't Repeat Yourself: DRY)설정보다 규정을 우선한다(Convention Over Configuration) : 기존의 경험이나 관습에 기초해, 각 설정들의 기본값을 정해두고 있다. 모든 의견을 수용하기 위해 자유롭게 설정할 수 있는 스프링과 달리 독단적으로 결정된 기본값이 있다. (설정이 쉬움) Rails 기본 구조 IDE에서 rails 프로젝트를 신규 생성하면 아래와 같은 구조를 가지는 프로젝트가 생성된다. (rails new 명령어를 이용해 생성됨) g..
사내에서 상당히 많은 레거시 프로젝트가 루비로 개발되어 있다.최근에는 레거시 프로젝트 이외에는 잘 안쓰이는것 같고, 한창 국내에서 루비가 떠오를때 많이 사용되었던것 같다. 루비가 간편하고 빠르게 개발할 수 있다는 건 익히 들었지만 실제로 접하기 전까지는 추상적으로만 알고 있었다.루비온레일즈(RoR)로 짜여진 프로젝트를 맡게 되어서 공부를 하게 되었는데 재미있었다.확실히 철저한 관습에 따른 편리성이 자바&스프링 개발자인 나에게 큰 매력으로 다가왔다. 음.. 그냥 서론은 그만하고 그때 공부했던 내용을 올린다 ㅎㅎ Ruby 철학 Ruby 뜻 : 마츠모토 유키히로 지인의 탄생석스트레스가 없는 쉬운 프로그래밍!을 위하여스크립트 언어. 당시 이상적인 프로그래밍 언어는 반드시 이룰 수 있는 것이라고 믿었고, 가능하면..
중첩 클래스를 생성할 일이 생겼었다. static으로 만들까 non-static 으로 만들까 고민을 했다. 그런데 static을 그저 객체 생성없이 사용 가능하게하는 키워드로만 알고 있었으니, static 중첩 클래스는 객체가 생성이 안되는것인가?? 라는 착각마저 불러일으켰다. static에 대해서 잘 모르는 부분이 있어서 공부를 해보았다. static이란? 정적이라는 뜻의 단어이다. 이 단어만 가지고서는 잘 이해하기 어려운것 같다. 고정된이라는 뜻이면 좀 더 이해가 쉬울까? 어쨋든.. static 은 프로그램상의 고정된 자원이다. 동적인 자원과 달리, 라이프사이클이 어플리케이션의 구동과 함께 생성되어지고, 종료시에 사라지게 될 것이다. 모든 클래스가 static? 본론에 들어가기 앞서 일반 클래스는 s..
Neflix 에서 만든 오픈소스. 사내에서 Hystrix를 사용하고 있는 프로젝트가 꽤 있길래 좀 살펴보았다. Hystrix 란? 공식 페이지에 많은 설명이 쓰여있지만.. 그냥 가볍게 사용해본 개인적인 느낌으로는 '분산 환경에서의 안정적인 서비스를 지원해주는 라이브러리'라고 생각한다. 그 안정적인 서비스를 지원해주는 기능으로 무엇이 있는지는 밑에 나열해볼 것이고... 추상적이지만 안정적인 서비스를 지원해주는 라이브러리가 어떤 느낌인지 예를 들어 설명해보겠다. 분산 환경에서 각 서비스별 의존성을 지니는 경우가 많다. 이를테면, 이벤트 서버에서 회원에 대한 조회를 할때 Membership 서버에 Request를 날리는 것과 같이 의존성이 있을 수 있다. 만약 멤버쉽 서버(외부 자원)의 응답이 늦어진다면, 이..
스트림 API이란? 연속적인 데이터 항목들의 모임들을 처리하는 API 라고 생각한다. 연속적인 데이터를 생성하여, 사용자에 맞는 중간 연산과, 종료연산을 통해 원하는 결과를 추출하도록 도와준다. 가볍게 구조를 나누어보면 이렇게 나눌 수 있다. - Stream 생성 - 중간 연산 (Intermediate Operations) - 종료 연산 (Terminal Operations) 구조별로 살펴보자. 스트림 생성 스트림을 생성하는 방법은 여러가지 있다. 연속적인 데이터를 어떻게 Stream의 인터페이스로 생성하느냐의 문제이다. (parallelStream 은 나중에) Array to Stream //#1 String[] arr = { "program", "creek", "program", "creek", "j..