일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Coroutine
- flink watermarks
- flink
- kotlin
- contravariant
- processing time
- Generics
- watermark
- Perfect Watermark
- MapReduce
- 공변
- 불공변
- Stream
- watermarks
- coroutines
- java
- Hadoop
- Heuristic Watermarks
- lambda
- 가변성
- Perfect Watermarks
- covariant
- apache flink
- Generic
- ingestion time
- HDFS
- flink watermark
- event time
- Heuristic Watermark
- Today
- Total
목록개발 (21)
mm Home
예전에 공부했던 내용을 정리~ 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..
중첩 클래스를 생성할 일이 생겼었다. 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..
Lambda Translation어떻게 람다가 바이트코드로 변환되어지고, 사용되어지는지 대략적으로 살펴보자. 람다식은 functional interface를 구현한 구현체 오브젝트를 생성하는 것이 아니다. (익명 클래스와 다르다) 해당 클래스 내에 바이트코드를 생성한다. public void test5() { Consumer consumer = (Integer i) -> System.out.println(i); } 위와 같은 람다식이 있다고 가정하자. 저것은 람다식일 뿐, 실제 사용은 consumer.accept(1) 과 같이 클로져(closure)의 형태로 사용할 것이다. 이제 Translation 과정이 어떻게 이루어지는 살펴보자. 우선 (Integer i) -> System.out.println(i..
앞에서 변화하는 요구사항에 효과적으로 대응하는 코드 구현 방법을 살펴보았다. 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 간결하게 만들 수 있는지 살펴본다. 람다란 무엇인가? 익명함수를 단순화한 것이라고 할 수 있다. 람다는 세 부분으로 이루어져 있다. 파라미터 리스트, 화살표, 바디. 아래의 람다 표현식을 살펴보자. (Apple a1, Apple a2) -> log.debug("a1 : {}, a2 : {}", a1.getWeight(), a2.getWeight()) (Apple a1, Apple a2) : 파라미터 부분-> : 화살표 (파라미터와 람다 바디의 구분) log.debug("a1 : {}, a2 : {}", a1.getWeight(), a2.getWeight()) : 바디 람..
소비자의 요구사항은 항상 바뀐다. 기능은 쉽게 구현할 수 있어야 한다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다. 동작(함수)를 파라미터화 한 것. 동작 파라미터화의 과정은 이보다 훨씬 길지만.. 간략히 적어보면! 사과의 종류에 따른 분류를 하려고 한다면?? 매번 분류하는 작업마다 코드를 추가하는건 쉬운 방법이지만 코드의 중복 + 복잡. 동작 파라미터화를 사용하면,, filter를 하는 동작과 실제 분별하는 동작을 구분하여, 인자로 받게 된다. 실제 filter를 하는 시점에 분별하는 동작을 수행하게 되므로 다양한 분별 작업만 정의해서 건네주면 된다. 아래와 같은 코드로 표현할 수 있다. (ApplePredicate라는 test메소드가 있는 인터페이스. 인터페이스..