반응형

분류 전체보기 406

block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3

WebClient 사용법을 학습하던 중 발생한 오류입니다. WebClient는 비동기식 웹 애플리케이션 구축을 위한 WebFlux의 기능 중 일부로 RestTemplate 클라이언트를 대체하는 새로운 API이며, 비차단 및 반응 웹 클라이언트입니다. (Blocking 또는 Non-Blocking HTTP 요청을 모두 만들 수 있으며 Spring5 릴리즈 이후로 권장되는 방식입니다.) public ResponseEntity getTest() { ResponseSpec responseSpec = webClient.mutate().build() .get() .uri("http://localhost:8082/webServer/get") .retrieve(); ResponseEntity result = respo..

Programming/Error 2021.12.28

스프링 프레임워크 Reactive Stack, Servlet Stack 개념

'스프링 프레임워크(Spring Framework) Reactive Stack과 Servlet Stack' WebClient를 사용하기 위해서 공부하던 중 WebFlux의 개념과 더불어 함께 공부하게 된 부분입니다. 전체적인 Reactive Programming과 함께 공부하며 개념을 잡아가면 더 좋겠지만 당장에 큰 흐름만 파악하기 위해서 정리한 내용이라 틀리거나 부족한 부분이 있을 수 있습니다. 잘못된 부분은 댓글 남겨주시면 다시 공부하여 수정하겠습니다. 미리 감사드립니다. Spring Framework5는 Servlet Stack, Reactive Stack이라는 두 가지 웹 스택을 제공합니다. 하나는 대부분의 Java 엔터프라이즈 애플리케이션이 사용하는 차단 I/O가 있는 고전적인 'Servlet ..

동기와 비동기, 블로킹과 논블로킹 개념 정리

'동기와 비동기, 블로킹과 논블로킹 - 비슷한 듯하면서도 비슷하지 않은 개념들' 프로그래밍을 하며 자주 접하게 되는 단어들이지만 개념적으로 명확하게 차이를 짚고 넘어간 적이 없었는데 이번에 WebClient를 사용하기 위해 공부하던 중 Spring WebFlux, Reactive Programming의 개념을 접하며 논블로킹(Non-Blocking)에 대해서 그리고 블로킹과 동기, 비동기에 대해서도 정리할 필요성을 느껴 정리하게 되었습니다. 동기(Synchronous)와 비동기(Asynchronous) - 동기 방식 동기(Synchronous) 방식은 데이터의 요청과 결과가 한 자리에서 동시에 일어나며, 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청됩니다. 세탁기 돌리기 로봇 청소기로 바닥 청소하기..

Programming/Web 2021.12.28

Java Generic 제네릭 기본적인 개념 이해하기

'제네릭(Generic) 기본적인 개념 이해하기' '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법' 어떤 자료 구조를 만들어서 사용하려고 할 때 String 타입도 지원하고 싶고, Integer 타입도 지원하고 싶고, 다른 타입들도 지원하고 싶은 경우가 있습니다. 그럴 때 String에 대한 클래스, Integer에 대한 클래스 등 타입에 따라 각각의 클래스들을 모두 만드는 것은 너무 비효율적입니다. 자바에서는 이러한 문제를 해결하기 위해 java 1.5부터 제네릭을 사용하게 되었는데요. 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌, 외부에서 사용자에 의해 지정되는 것을 의미하며, 한마디로 특정(Specific) 타입을 미리 지정해주는 것..

Programming/Java 2021.12.24

RestTemplate Logging 요청과 응답 로그 남기기

'RestTemplate 요청과 응답 로그 남기기 (Logging)' 먼저 RestTemplate에 대한 간략한 설명, RestTemplate은 스프링 3.0부터 제공하는 HTTP 통신에 유용하게 쓸 수 있는 템플릿입니다. HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킵니다. 'org.springframework.http.client' 패키지에 있으며, HttpClient는 HTTP를 사용하여 통신하는 범용 라이브러리이고, RestTemplate은 HttpClient를 추상화(HttpEntity의 JSON, XML 등 변환)해서 사용하기 쉽게 제공해줍니다. @Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestF..

역할 분리를 위한 Entity, DTO 개념과 차이점

'Entity, DTO 개념과 차이점 (+ VO)' - Entity Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체입니다. (DB의 테이블과 1:1로 매핑되며, 테이블이 가지지 않는 컬럼을 필드로 가져서는 안 됩니다.) Entity는 데이터베이스 영속성(persistent)의 목적으로 사용되는 객체이며, 때문에 요청(Request)이나 응답(Response) 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다. 또 많은 서비스 클래스와 비즈니스 로직들이 Entity 클래스를 기준으로 동작하기 때문에 Entity 클래스가 변경되면 여러 클래스에 영향을 줄 수 있습니다. *** Entity에서는 setter 메서드의 사용을 지양해..

Programming/Java 2021.12.21

Spring Boot Google OTP 2단계 보안인증 (Authenticator) 개념과 간단한 코드

'Spring Boot 2단계 보안인증 Google OTP, Authenticator' 2FA (Two-factory authentication) 2단계 보안인증이란, 이메일, 문자 메시지 또는 Google Authenticator 앱으로 전송된 6자리 코드를 입력하도록 요청하는 아이디, 비밀번호 로그인 다음의 2번째 인증 단계로 이때 발급된 코드는 30초 또는 60초 후에 만료됩니다. 만약 타인에게 계정의 아이디와 비밀번호가 노출된 경우 2단계 인증이 설정되어 있다면 2단계 인증에서는 계정의 주인에게 전송된 2FA 코드를 확인하기 위해 계정의 주인이 등록한 모바일 장치가 필요하기 때문에 계정을 보다 안전하게 보호할 수 있습니다. 해당 포스팅에서는 Spring Boot 프로젝트에서 2FA 중 Google..

디자인 패턴 - 퍼사드 패턴 (Facade Pattern) 개념과 예시

'디자인 패턴 중 하나인 퍼사드 패턴(Facade Pattern) 개념과 예시' *** 'Facade'는 프랑스어 'Façade'에서 유래된 단어로 건물의 출입구로 이용되는 정면 외벽 부분을 가리키는 말로 '건물의 정면'을 의미합니다. Facade Pattern의 목적은 복잡한 서브 시스템을 인터페이스로 감싸서 사용하기 쉽게 만드는 것인데요. 객체 지향 프로그래밍 분야에서 많이 사용되며, 제3의 API(Third Party API) 같은 외부 라이브러리를 추상화하는데도 사용됩니다. Gof(Gang of Four)에 따르면 Facade 패턴은 "하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스"로 정의되어 있습니다. 퍼사드 패턴은 디자인 패턴(Design Patterns) 중에서도 구조 패턴..

Programming/Web 2021.12.16

Java AES-256 양방향 암호화 제대로 알고 사용하기

'Java 양방향 암호화 AES-256 제대로 알고 사용하기' /* 프로젝트에서 양방향 암호화를 하기 위해서 AES-256 코드를 구글링 하여 사용하였는데, 나중에 알고 보니 사용하던 것이 AES-256이 아닌 AES-128인 경우가 있었습니다. 코드를 가져와서 사용하더라도 기본적인 원리는 알고 사용해야겠다는 생각에 AES-256 암호화를 정리하게 되었습니다. */ 본격적인 시작에 앞서 단방향 암호화 알고리즘과 양방향 암호화 알고리즘의 차이점에 대해서 간단하게 알아보겠습니다. 먼저 단방향 암호화는 평문을 암호화 했을 때 다시 평문으로 되돌리는 것(복호화)을 할 수 없는 암호화 방식으로 패스워드 암호화에 사용되며 대표적으로 'SHA-256'이 있습니다. 양방향 암호화는 평문에서 암호문으로, 암호문에서 평문..

Programming/Java 2021.12.15

Java 직렬화, 역직렬화 방법 Serializable interface

'자바 직렬화(Serialization)와 역직렬화(Deserialization)' 자바 시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를 외부 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술을 '직렬화(Serialization)'라고 합니다. 반대로 바이트로 변환된 데이터를 원래대로 객체(Object)나 데이터(Data)로 변환하는 기술을 '역직렬화(Deserialization)'라고 합니다. 시스템적으로 본다면 JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술이 '직렬화'이며, 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM에 상주시키는 것을 '역..

Programming/Java 2021.12.13
반응형