WebClient에 대해... WebClient가 단순히 RestTemplate를 대신해서 사용하는 기술이라고 생각하면 나와 같은 문제를 겪을 수 있다… 물론 RestTemplate이 장기적으로 Deprecate될 예정이고, WebClient는 RestTemplate이 제공하지 않는 논블로킹을 지원하기 때문에 WebClient를 사용하는 편이 좋다는 것도 맞다. WebClient의 반환 타입, Mono와 Flux RestTemplate은 바로 Http의 응답인 ResponseEntity를 반환하는 것과는 달리, WebClient의 요청은 Mono 나 Flux를 반환한다. 하지만 RestTempltae의 ResponseEntity를 확인하면(디버거로 체크, 혹은 log로 찍어보면) 응답 값이 잘 나오지만,..
승농
개요 서버 to 서버로 HTTP 요청을 보내는 방법으로 RestTemplate과 WebClient가 있다. Spring 5.0 이전까지는 RestTemplate을 사용했으나, 5.0에서 WebClient가 나왔고, 현재는 WebClient 사용을 권고하고 있다. 대세는 WebClient이고, 추후 RestTemplate의 지원을 중단할지도 모르기 때문에… 현재 대체로 WebClient로 마이그레이션 하고있는 추세라고 한다. WebClient vs RestTemplate 위 글은 RestTemplate과 WebClient에 대해 다루고 있다. 요약: RestTemplate은 아직 사용 가능하다. 단, RestTemplate은 synchronous하고 blocking한 반면, WebClient는 asynch..
@PathVariable은 마지막 “~.com”이 짤린다? 인생 첫 이슈를 받아서(ㅋㅋ) 개발하는 과정에서 @PathVariable로 도메인 문자열을 받아오는데, jsw.com 과 같이 받아오면 디버거에는 jsw만 찍히는 현상이 발견됐다. 알아보니… Spring은 마지막 점 뒤에 있는 모든 것을 파일 확장자로 간주한다고 한다. (단, PathVariable이 가리키는 {무언가}가 URI의 마지막에 있는 경우이다!!) 해결 방법 https://recordsoflife.tistory.com/488 위 포스팅에 따르면 해결 방법은 크게 세 가지가 있다. 1. {변수명:.+} / {변수명:.*} @GetMapping("/init-configuration/{domain:.+}") public boolean ini..

개요 MySQL에서 시간을 출력하는 방법으로 아래 네 가지가 있다. SYSDATE() NOW() CURRENT_TIMESTAMP() CURRENT_DATE() 이 중, NOW()와 CURRENT_TIMESTAMP()는 같다. (YYYY-MM-DD HH:MM:SS) CURRENT_DATE()는 날짜까지만 가져온다. 그렇다면 SYSDATE()가 NOW()와 뭐가 다른지만 보면 된다. SYSDATE()와 NOW() SYSDATE()는 쿼리가 끝난 후 현재 시각이고, NOW()는 쿼리가 시작한 순간의 시각이다. SELECT SYSDATE(), NOW(), CURRENT_TIMESTAMP(), CURRENT_DATE(), SLEEP(5), SYSDATE(), NOW(), CURRENT_TIMESTAMP(), CU..

Arrays.asList(), List.of() 자바는 Array를 List로 변환하기 위해 Arrays.asList( array )를 사용한다. Java 9 부터는 List.of( array )라는 새로운 팩토리 메서드가 도입됐다. 차이점에 대해 알라bo자~ 변경 가능 여부 Arrays.asList()로 반환된 List는 변경이 가능하다. (Mutable) ArrayList를 반환하기 때문에 set이 구현돼있다. (java.util.ArrayList가 아닌 Arrays의 내부 클래스로, add와 remove는 없기 때문에, 크기는 변하지 않는다.) 하지만 List.of()로 반환된 메서드는 변경이 불가능하다. (Immutable) ListN이라는 타입을 반환하고, 이는 불변 객체이다. List list..

0. 서론 식스펙 HTTP 요청 메서드 - HTTP | MDN HTTP는 요청 메서드를 정의하여, 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만, 일부 developer.mozilla.org 1. 본론 우선 각 요청에 대해 공통적으로 평가할 기준, Safe 와 Idempotent, Cacheable에 대해 간단히 보za Idempotent는 앞선 포스팅들에서 언급한 바 있다. 멱등성이다. 동일 요청을 한 번 보내는 것과 여러번 보내는 것이 결과가 같고, 서버의 상태를 변화시키지 않는다면 멱등성을 갖는 것이다. Safe, 안전함은, 멱등성의 상위 개념이다. (안전하면 멱등성을 갖지만, 멱등성을 갖는..

HTTP Method의 멱등성 HTTP 메서드의 멱등성(Idempotent)에 대해 알아보자 velog.io 0. 서론 RESTFul한 API를 설계하기 위해 포스팅을 한 적이 있는데 https://seungnong.tistory.com/entry/RESTFul%ED%95%9C-API-%EC%84%A4%EA%B3%84 사실 그냥 URI 규칙만 정리한거지, 실제 적용은 어려운 포스팅인 것 같다. (직접 해보니까 할수록 질문만 생긴다) 앞 포스팅에서 멱등성이 나왔는데, 이번엔 HTTP Method들의 멱등성에 대해 더 알아보ja ja ja ja 1. 멱등성 멱등성(Idempotent)는 수학이나 전산학에서 연산을 여러 번 적용해도 결과가 달라지지 않는 성질을 의미한다. f( f(x) ) = f(x) 와 같이..

0. 서론 HTTP Method를 다루게 된 계기: RESTFul한 API 설계를 하기 위해 프로젝트를 리팩토링하는 과정에서... 요청의 행위를 표현하기 위해 HTTP Method를 잘 활용해야 한다는 점에 주목했다. 때문에 GET, POST, PUT, DELETE를 썼는데, 내용적으로 PUT보다 PATCH가 맞을 것 같다는 피드백이 있어서 이에 대해 조사해보았다. 1. PUT과 PATCH PUT 정의: HTTP PUT 메서드는 요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체한다. PATCH 정의: HTTP PATCH 메서드는 리소스의 부분적인 수정을 할 때 사용된다. 정의만으로 내가 알던 것과 다르고, 차이점도 드러나는 것 같다. 그래도 더 부연하자면, PUT은..
1. Atomic ... 클래스 Long 과 AtomicLong은 어떤 차이가 있을까? 개요 프로젝트를 진행하면서 HashMap을 이용해 Key-Value 형태로 된 InMemory DB를 직접 구현하던 도중, 유저의 정보를 저장할 때 Long Type으로 선언된 유저의 ID값을 증가시켜줘야 하는 경우가 생겼습니 simgee.tistory.com 앞서 멀티스레드 환경에서 동시성 이슈가 발생할 수 있기 때문에 synchronized, volatile 등을 쓴다고 언급한 바 있다. 그리고 AtomicLong이 약간 갑자기 등장한 감이 있는데 이에 대해 요점만 정리해보자. 자바에서는 AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference 클래스를 제공한다. 이 ..
논 블로킹 알고리즘(Non-blocking Algorithms) 이 글은 원 저자 Jakob Jenkov의 허가로 포스팅된 번역물이다.원문 URL : http://tutorials.jenkov.com/java-concurrency/non-blocking-algorithms.html 동시성에서의 논 블로킹 알고리즘이란 쓰레드간의 공유된 상태(자원) parkcheolu.tistory.com 0. (1/2)에서의 낙관적 락에 대해... 앞서 언급한 컴페어 스왑을 통한 낙관적 락은 공유 자료구조에 알맞게 동작한다. 이 공유 자료구조는 단일 컴페어 스왑 연산에서 전체 자료구조가 새로운 자료구조로 교체될 수 있는 (swappable) 성질을 가진다. 그러나 전체 자료구조를 변경된 복제본으로 교체하는 일이 언제나 가..