본문 바로가기

Programing

(387)
[블리자드] 장기 미이용 계정의 휴면 전환 안내 후 로그인 안되는 현상 블리자드 회원 가입을 11월에 해서 그런지 11월에 장기 미이용 계정의 휴면 전환 안내 메일이 또 왔다. 일단 구입했던 게임이 있으니 로그인을 통해 휴면 전환은 막는 것이 좋을 것 같아서 로그인을 했다. 그런데 이메일, 비밀번호를 넣고 로그인 버튼을 눌렀으나 overview 로 이동하지 않고 계속 로그인 창이 떴다. 혹시나 싶어 로그인 문제 해결을 눌렀다. 벌써 계정 잠김이 되었나 싶어서 계정 잠김 해제을 눌러 해제 절차를 했다. PASS 인증으로 본인 인증을 수행한다. 이후에 다시 로그인을 하니 그 동안 약관이 많이 바뀌었는지 세 개의 약관에 대해 동의 화면이 나타났다. 동의를 하고 계속 버튼을 눌렀더니 로그인이 잘되지 않았다. (다시 로그인 화면으로 나왔는지 또 다른 약관 동의가 나왔는지 블로그를 기..
fastcampus: 실무 프로젝트로 배우는 Kotlin & Spring - Part 4/Ch02/03 오류 발견 위치: https://fastcampus.app/courses/211160/clips/779520?position=1248&organizationProductId=13720 Part 4. 실제 예제를 기반으로 자바 프로젝트에 코틀린 도입해보기 ch02. 자바 프로젝트(ToDo프로젝트) 코틀린으로 리팩토링 하기 03. 컨트롤러 레이어 리팩토링 22:51 자바로 되어 있는 코드를 코틀린으로 옮기는 것을 예제로 보여 주는 강좌였다. 18:04경에 Assert.notNull 을 코틀린의 checkNotNull로 바꾸는 부분이 있었다. 이 부분을 보면서 저 변환은 계약 위반이라고 생각했다. 그 이유는 무엇일까? 기존에 Assert.notNull 는 스프링이 제공해주는 Assertion utility이다. 코드를 ..
WebClient: 기본 헤더 설정을 Consumer 를 이용하기(Java/Kotlin) Java WebClient 에 공통적으로 사용하는 헤더가 있다면 defaultHeader 를 이용하여 설정해놓으면 매번 WebClient 사용할 때마다 설정할 필요가 없어진다. WebClient webClient = WebClient.builder() .baseUrl("http://markbucciarelli.com") .defaultHeader("Authorization", "Bearer 7e0af818e0564a238bbcf6b9a0f7c176") .build(); Authorization 는 알려져 있는 헤더이므로 org.springframework.http 패키지의 HttpHeaders 클래스의 상수에 이미 정의되어 있다. package org.springframework.http; public ..
[Spring] @Repository Bean에서 예외 변환 없이 전파하기 @Component 는 스프링 IOC 컨테이너에 Bean 을 등록하도록하는 어노테이션이다. 실제 업무를 하다보면 @Controller, @Service, @Repository 로 유스케이스 별로 특정 의미를 더 부여하여 특징을 부여할 수 있다. 더 자세한 것은 스프링 레퍼런스 1.10.1. @Component and Further Stereotype Annotations 참고 @Repository 의 경우 다른 스테레오 타입과 달리 예외 변환기(Exception Translation)를 거친다는 것이 차이점이 있다. 이는 하이버네이트나 JPA 같은 DAO를 사용하게 되면 구현체에 따라 반환하는 예외가 다양해질 수 있는데 이렇게 하면 예외 처리도 힘들어지기 때문에 프레임워크 역할의 스프링이 의미를 파악할 ..
[Kotlin] byte[]을 String으로 바꾸기 과거에 [Java] byte[]을 String으로 바꾸기 글을 쓴 적이 있다. 요즘은 코틀린을 주로 사용을 해서 글을 다시 써보았다. 방법에 대해서는 https://www.baeldung.com/kotlin/byte-arrays-to-hex-strings 에 잘 나와 있기에 링크를 참고하는 것이 더 좋다. 최초 코드 원래 코드을 method extract 로 리팩토링을 해보니 아래와 같이 표현을 할 수 있는 코드였다. (원래코드는 아래에 나옵니다. ^^;;) private fun bytesToHexString(bytes: ByteArray): String { val hash = StringBuilder() for (aByte in bytes) { val hex = Integer.toHexString(0x..
SimpleR2dbcRepository 를 사용한 R2DBC 학습 계기: Spring Tips: Reactive Summit Keynote: Here and There → Spring R2DBC + MySQL 회사에서 WebFlux 를 사용하여 프로젝트가 되어 있었다. Redis는 ReactiveRedisTemplate 을 사용하여 작성이 되어 있었으나, RDBMS는 jooq 를 이용하고 있었는데 ExecutorService 를 이용해서 CompletionStage 로 바꾸고 Mono.fromCompletionStage 로 래핑을 사용하는 형태로 구성이 되어 있었다. R2DBC를 이용하면 ReactiveRedisTemplate 를 사용하는 것처럼 Mono 나 Flux로 바로 받을 수 있으니 좀 더 편하게 사용할 수 있을까 생각했는데 Spring Data R2DBC 드라..
Electron ≥ 12.x : 컨텍스트 분리(Context Isolation) 3년전에 둘째 출산 휴가 때 진행했던 serami 프로젝트를 얼마 전에 다시 보게 되었다. 이메일 인증을 개발하면서 템플릿의 결과를 확인하게 위해 사용을 했는데 개발한지 오래되었다보니 Github에서 버전 업데이트에 대한 경고를 그 동안 지속적으로 받고 있었다. 라이브러리 업데이트를 하고나서 보니 "Uncaught ReferenceError: require is not defined" 에러가 발생했다. 에러의 부분을 찾아보니 리액트를 bootstrap 하는 부분인 require 이라는 부분에 문제가 발생하였다. 일단 찾아보니 Electron 12 부터 Context Isolation 이라는 것이 활성화 되었고 Renderer Process 에서 수행할 수 있는 것들이 제한이 생겼다. stackoverfl..
[WebFlux] block()/blockFirst()/blockLast() are blocking, which is not supported in thread 후기 백엔드를 개발하다가 이제 회원 백엔드를 맡으면서 Spring WebFlux를 다루게 되었다. 아직 Reactive Stack에 대한 경험이 부족해서 도메인 객체를 포함해서 DB연결 및 Redis 연결을 동기식으로 처리를 했다. 그런데 이전에 개발된 회원 번호에 대한 유효성 확인을 하는 함수가 Mono 를 반환하게 되어 있었다. 어디서 들은 지식으로 block()을 이용해서 블로킹 처리를 하려고 했더니 아래와 같은 에러 메시지가 발생했다. block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-2 누가 이렇게 에러를 던지나 찾아보았다. Mono의 block()은 아래와 같이 구현되어 ..