분류 전체보기 36

Java Future, ExecutorService 로 NonBlocking 구현

Future, ExecutorService로 NonBlocking을 구현하고자 한다. 이전 내용들과 동일하게 API통신을 예시로 들려한다. Future예시 @PostMapping("/future01") public ResponseEntity future01() { ExecutorService executorService = Executors.newSingleThreadExecutor(); log.trace("Call future01."); restTemplate = restTemplateConfig.restTemplate( restTemplateConfig.factory( restTemplateConfig.httpClient() ) ); // 시간 측정을 위해 선언 final StopWatch stopW..

개발/Java 2022.03.04

WAS Docker배포하기/설치부터 배포

이번에 전달받은 과제는 Dockerise해서 실행할 수 있도록 해주세요. 라는 조건이 있었다. 약 2년전... 기획팀 유차장님이랑 우리 리부장님의 주도하에 정말 잠깐 깔짝 해본 도커... 발표 ppt도 만들었었는데... 안보이네... 다행히 OneNote에 메모한 내용이 있어서 참고해서 간단하게 구성하였다. 내용이 워낙 이것저것 많은데 구조와 이론, 각 명령어들의 의미 등에 대해서는 작성하지 않는다. 아래는 명령어 위주로 작성하고자 한다. 목표는 다음과 같다. 개발한 WAS 프로그램을 Docker Image로 만들어서 배포 이를 위한 단계는 다음과 같다. 01. 개발한 WAS 배포 내용물 준비(여기서는 jar) 02. Docker 설치 03. Docker 이미지 생성 04. Docker 이미지 실행 및 ..

개발/기타 2022.02.22

Socket(Selector)으로 Blocking, NonBlocking 구현

Socket 저번에는 [WebFlux로 Blocking, NonBlocking 구현]을 작성 했었다. 순서가 꼬인거 같지만 이번에는 통신의 가장 기본이 되는 Socket통신으로 구현하려 한다. Socket통신은 TCP/IP 프로토콜을 사용해서 통신을 수행하는 방법이다. 컴퓨터들이 서로 정보를 주고 받는 네트워크는 처리 역할에 따라 계층이 구분되는데 이를 OSI 7계층이라 한다. 이를 실제 업무에서 적용한 표준이 TCP/IP 4계층이다. TCP/IP 4계층 역할 데이타 단위 전송 주소 예시 장비 응용 계층(Application) 응용프로그램 간의 데이타 송수신 Data/Message - 파일 전송, 이메일, FTP, HTTP, SSH, Telnet, DNS, SMTP 등 - 전송 계층(Transport) ..

개발/Java 2022.02.07

WebFlux로 Blocking, NonBlocking 구현

WebFlux 먼저 WebFlux란 Spring 5에 새로게 추가된 모듈이다. Reactive한 개발을 도와주는 모듈로 NonBlocking에 ReactiveStream을 지원한다. 이전에도 비동기/NonBlocking을 구현하는 방법들은 존재했지만 무언가 부족했나보다. 구현 기술이 어려워서였을까? 이 부분에 대해서는 다른 NonBlocking 구현을 수행하면서 그 차이점을 한번에 정리하고자 한다. Spring MVC는 아래와 같은 흐름을 가진다. request - Dispatcher Servlet - Handler Mapper - Controller - B/L - Controller - ViewResolver ... Spring WebFlux는 아래와 같은 흐름을 가진다. request - HttpHa..

개발/Java 2022.01.28

동기와 비동기, Blocking과 Non Blocking

생각해보면 직전 회사에 면접을 볼 때 계셨던 과장님께서 같은 질문을 3번인가 반복하셨었다. 동기와 비동기에 대해 설명해주세요. 3번 다 같은 대답을 하였었는데 최근 면접에서 아래 질문을 받고나서 스스로 깨닳았다. Blocking과 Non Blocking에 대해 설명해주세요. 나 이거 제대로 모르구나. 면접 자리에서 깨닳고 스스로 엄청 부끄러웠다. 그동안 일하면서 알게 모르게 그 차이를 느껴왔던거 같은데 질문 받는 순간 확 느껴졌다. 그동안... 동기 == Blocking 이벤트가 발생했을 때 이벤트가 종료될 때 까지 해당 이벤트가 제어권을 가지고 있는다. 이로 인해 뒤에 들어온 모든 이벤트는 락이 걸린다. 비동기 == Non Blocking 이벤트가 발생했을 때 이벤트의 종료 여부와 상관없이 다음 이벤트..

개발/Java 2022.01.22

Reactive란

면접볼 때마다 항상 나오는 질문이 있다. 동기와 비동기에 대해 설명해주세요. 여기에 나는 아래와 같이 답변을 했었다. 동기는 이벤트가 발생했을 때 그 결과를 기다리고 비동기는 결과를 기다리지 않고 다음 작업을 수행하다가 완료 되면 결과에 대한 처리를 수행합니다. 그런데 최근 면접에서는 아래와 같은 질문을 받았다. Blocking과 Non Blocking에 대해 설명해주세요. 동기, 비동기의 차이에 대한 답변과 동일하게 답변을 하려다가 문득 동기, 비동기와 Blocking, Non Blocking이 같나? 라는 의문이 너무 강하게 들어 몇초 당황하다가 설명하지 못하겠다고 했다. 돌아오는 길에 동기, 비동기의 차이에 대한 답변을 했어야지 왜 못했지? 라는 생각을 했지만 그 순간에는 그러면 안된다고 생각을 했..

개발/Java 2022.01.21

[Git] Branch에 따라 다른 Commit ID

현재 속한 곳에서는 배포를 위해 1. Issue를 처리 한 뒤 2. Commit/Push 후 3. 배포 담당자에게 Commit 메시지와 ID를 전달한다. 그동안 이와 관련하여 문제가 없었으나 오늘 배포 담당자에게 문의가 왔다. - 승리님 전달주신 Commit ID a2db가 조회가 안되는데 확인해주실 수 있으신가요? ?? 얼른 내 SourceTree를 확인해보니 Commit ID의 3을 2로 잘못 작성해서 전달하였다. 죄송합니다. 숫자를 잘못 작성하였네요. 혼란을 드려 죄송합니다. - 그래도 똑같이 조회가 안됩니다. 엥?? 자리로 직접 찾아가서 보니 Git lab 홈페이지에서 보이는 Commit ID는 xx1xx. 내 자리로 돌아와서 확인해보니 여전히 a3db 현재 작업 중인 내용을 우선 스태시에 저장하..

개발/기타 2021.12.14

[java] dual pivot quick sort/정렬

무작위로 삽입되어 있는 Data를 정렬할때에 jdk1.8이상이라면 stream을 이용하면 편하게 정렬할 수 있다. int[] intArray = {5, 2, 7, 1, 0}; int[] result = Arrays.stream(intArray).sorted().toArray(); jdk1.8을 사용할 수 없다면 아래와 같이 dual pivot quick sort를 작성하여 호출하는 식으로 사용하면 된다. public static void intArraySwap(int[] arr, int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } public static void intArrayDualPivotQuickSort(int[] arr, i..

개발/Java 2021.08.11

[java] DataInputStream.read(byte[] b)와 ByteArrayOutputStream.write(byte[] b)의 b

#목적 1. java Socket통신 후 Response Data 처리 과정에서 오류가 발생하였고 InputStream의 read와 OutputStream의 write를 짚고 넘어가고자 작성한다. a. 간헐적으로 HexString의 일부를 읽지 못하고 다른 일부는 0으로 채워지는 현상이 발생하였다. b. 안될거면 처음부터 안돼야지 왜 대부분 잘되다가 가끔 발생하지? c. 다른 기관과 통신을 태울때는 대부분 안되다가 가끔 잘되었다. #내용 1. 흐름은 아래와 같다. a. 인증기관으로 Request Data 전송 b. 인증기관으로부터 4Byte를 읽어들임 (header이며 body의 길이를 나타냄) DataInputStream dataInputStream = new DataInputStream(inputSt..

개발/Java 2021.07.01

[java] JSON null check

#목적 1. JSON Data를 파싱해서 사용하는데 특정 필드의 값이 Null이 아니라고 통과되고는 Null Potinter Exception이 발생 #내용 1. 삽입되는 JSON Data 예시 1. 기존 로직 및 문제점 a. 기존 Json Null Check Logic String ksr = ""; JsonObject successObj = (JsonObject) jsonObject.get("success"); if(successObj.get("ksr") != null) { ksr = successObj.get("ksr").getAsString(); } 위 Logic에서 if문의 null check는 통과한다. 하지만 get("ksr") 이후 getAsString(); 에서 Null Potinter E..

개발/Java 2021.06.13