쓰레드 로컬

동시성 문제 수도코드는 다음과 같다. 흔-한 웹서비스 컨트롤러 + 서비스 구조. 서비스에 classVariable 라는 변수가 있다. 저 구조에서 /hello-number 를 슬립 시간인 5초 내에 연속으로 따딱 요렇게 때리면 어떻게 될까? (임의로 슬립을 5초나 준 이유) /hello-number?num=1 /hello-number?num=2 /hello-number?num=3 (수도코드라 안해봤지만) 로그는 요렇게 떨어진다. 왜 그럴까 동시성 문제때문이다. 동시성 문제가 무슨 소리냐 하면… 기본적으로 최초 수도코드의 … Read more

맥에서 VScode 완전 삭제 하는 방법

출처 https://2vup.com/mac-vscode-reset/ VScode를 키고 VScode 내의 터미널 활성화만 시키면 맥이 그냥 뻗는다. 쉘도 안열리고, 크롬도, 아무튼 모든 프로세스가 예외없이 죽지도,실행되지도 않는다. 그냥 먹통이 되고 그냥 맥 자체가 눈뜬 장님이 된다. 어플 하나따위에 죽는 OS를 만들어놨어..(그래도 만든놈은 나보단 잘하지..) VScode를 지우고 까는 것만 수십번… 화가 나서 구글링을 해 봤다 그러니 VScode를 클린설치 하는 방법이 있다. 물론…. … Read more

몽고 디비 인 액션 7장-2

MongoDB 업데이트와 삭제 [업데이트 타입과 옵션] MongoDB 업데이트 방식– 타깃방식– 대치방식 다중 도큐먼트 업데이트 – 기본적으로 쿼리 셀렉터와 일치하는 첫 번째 도큐먼트만을 업데이트 함 => 여러 개를 하려면 다중 업데이트 사용 업서트– 아이템이 없을 경우 새로 추가하고 이미 있다면 업데이트 하는것 (=merge 와 같은..) 업서트는 대치 방식의 업데이트에서는 수행될 수 없다. [업데이트 연산자] 표준적인 업데이트 … Read more

모던 자바 인 액션 19장 (2)

게으른 리스트 만들기 스트림 API와 함수형 프로그래밍 개념을 이용하여, 메모리 낭비를 덜 하는 linked list를 만들어보자. 익히 알고 있는 linked list는, 모든 리스트의 내용이 메모리에 얹어져 있다. 하지만 책에서 만드는 LazyList는 Function이 ‘요청해야 생성’되는 구조이다. 긴 말이 필요없다. 코드를 본다. 이 코드는 아직 Lazy한 로딩방식이 아니다. 일반적인 Linked list처럼 모든 요소들이 메모리에 얹어져 있다.(인스턴스 생성과 … Read more

모던 자바 인 액션 19장

함수는 모든 곳에 존재한다 19장의 내용은 함수형 프로그래밍의 각종 기법을 배우는 장이다. 일단 함수형 프로그래밍이라는 것은, ‘함수를 일반 값처럼 사용해서 인수로 전달하거나, 결과로 반환받거나, 자료구조에 저장할 수 있음’ 을 의미한다. 그리고 이 때 사용하는 함수를 우리는 ‘일급 함수’ 라고 한다. 함수형 프로그래밍 -> 일급 함수를 제대로, 잘 사용하는 프로그래밍 뭐…예를 들어 이런거다 함수값을 스트림으로 처리하거나, … Read more

모던 자바 인 액션 18장

시스템 구현과 유지보수 쉽게 유지보수할 수 있는 프로그램이란… 자바개발자들은 귀에 딱지가 앉게 들어보는 것이 있다. 시스템의 구조를 이해하기 쉽게, ‘클래스 계층으로 반영’ 낮은 결합성(coupling), 높은 응집성(cohension) 하지만 현실은 그렇지 않다. 대부분 의도한대로 코드가 동작하지 않는다. 그리고, 그 의도하지 않은대로 코드가 동작하지 않는 경우를 통계를 낸다면, 아마 ‘코드 크래시 디버깅’ 문제가 1위를 차지할 것이고ㅋㅋ, 그 코드 … Read more

Spring WebClient

웹클라이언트!! 공식 API 문서는 다음과 같다. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html 암만 한글이 좋아도 우선 영어 원문… API문서의 헤드 부분만이라도 보자. 논블럭킹 I/O인 반응형 HTTP클라이언트이고, 뭐 빠르고 유창하고 어쩌구저쩌구…… 여기서 핵심은 ‘논블럭킹’ 이다. Non-Blocking I/O 서버개발자에게 필수 덕목인 ‘어렵고 반응속도가 빠른’ 개발방법이다. 기존의 RestTemplate은 ‘멀티스레드이긴 하지만 블로킹 I/O방식’ 이다. RestTemplate를 이용해 HTTP request를 날리면, HTTP response가 올 때까지 계속 … Read more

모던 자바 인 액션 17

라떼는 응답속도가 느려? 서버 더 늘려~ 스토리지가 부족해? 하드 더 사~ 응답시간이 느려? CS로 때워~ 유지보수 그거 당연한거임 ㅇㅇ 하지만 이제는 상황은 변하기 마련이다. 빅데이터 보통 빅데이터는 페타바이트(테라*1024) 단위로 구성되며, 그마저도 매일매일 증가함 다양한 환경 PC.. 모바일.. 코어가 수천개인 클러스터까지, 어플리케이션을 배포하는 환경이 매우매우 다양해진다 사용패턴 사용자는 24시간 7일내내 항상 서비스를 사용할 수 있고, 밀리초 … Read more

모던 자바 인 액션 16장

CompletableFuture로 비동기 어플리케이션 만들기 각종 온라인몰의 최저가를 구하는 어플리케이션을 구현하는 것을 통해, CompletableFuture을 구현하는 방법을 실습해 본다(실습이라기보다는 개념확인 정도에 가깝지 않을까..) 그 전에 CompletableFuture가 자바 8을 통해 출시되기 전, 자바5부터 지원했던 Future의 단순한 활용법을 한번 살펴보고 가자. 자바8에서 구현한 Future의 샘플 코드 뭐…. doSomeLongCompute(); 가 원래 하고자 하는 행위이고, 얘를 main스레드가 아닌 새로운 스레드를 통해 … Read more

모던 자바 인 액션 15장

CompletableFuture 현재 소프트웨어 개발 방법에서 두가지 유행이 있다. 멀티코어 프로세서의 등장 –> 병렬실행 독립 동작이 아닌 컨텐츠 제공 매시업 형태의 어플리케이션 대두 –> MSA 동시성 : 1 core multi thread 병렬성 : multi core multi thread 동시성 & 병렬성 동시성 & 병렬성을 만족하며 어플리케이션의 응답속도를 최대한 빠르게 구현할 수 있는지에 대한 것은 매우 중요하다. 모던 … Read more