Spring Boot
[Spring Boot] Spring 에서 Redis 를 사용할 때 ConnectionFactory 를 왜 Bean 으로 등록해서 사용해야 할까?(feat. Kotlin, Lettuce, LettuceConnectionFactory was not initialized through afterPropertiesSet())
발단 RedisTemplate 의 connectionFactory 를 Bean 으로 등록된 RedisConnectionFactory 로 사용하는 예제가 많은데 왜 그래야 하는지 설명이 없어 궁금하여 찾아보게 되었다. (Bean 으로 등록하여 사용하지 않으면 `LettuceConnectionFactory was not initialized through afterPropertiesSet()` 오류가 발생한다.) 설명 Spring 에서 Redis 서버와의 연결을 위해 getConnection 메서드를 호출한다. getConnection 메서드 내부에는 assertInitialized 검증 메서드를 호출한다. assertIntialized 는 initalized 변수를 통해 초기화 여부를 판단하는데, 해당 변..
[Spring Boot] custom error page 적용(feat. 예제, ErrorController)
상황 Spring 을 통해 웹서비스를 제공할 때 오류가 발생하면 에러 페이지(white label, 위사진)에 도달하게 되는데, 해당 에러 페이지와 웹서비스의 디자인이 많이 다름으로 사용자로 하여금 혼란이 올 수 있다는 생각이 들어서 임의의 에러 페이지를 제공하고자 하였다. 간단한 설명 Spring 에서는 에러 페이지 생성을 위해 ErrorController 를 제공한다. ErrorController 를 사용하면 default 에러 페이지 핸들러를 대체하게 된다. 예제 코드 밑에 자세한 설명을 포함하였습니다. Custom Error Page 예제 View 생성 성공적으로 접근 되는 것을 확인하기 위한 페이지와, 에러 페이지 중에서 404 와 500 을 재연하기 위해 세개의 view 를 생성한다. inde..
[Spring Boot] JWT 라이브러리를 의존성 추가했음에도 빌드 오류가 나는건 왜일까?(feat. `io.jsonwebtoken:jjwt-api`)
발단흔히 사용하는 jwt 라이브러리인 jjwt 를 사용하여 개발하려 하니 2018년도 이후로 업데이트 되지 않고 있었다. 예제로도 jjwt 를 사용하는 경우가 많지만 최신 패키지인 jjwt-api 가 있기에 이를 사용하여 공부하던 도중 문제가 발생한 의존성에 대해 트러블 슈팅 하는 과정을 작성하였다. 환경Spring Boot: 3.1.0 (kotlin, gradle)jjwt-api 0.11.5 jjwt 와 jjwt-api 의 상관관계 GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and AndroidJava JWT: JSON Web Token for Java and Android. Contribute to jwtk/jjwt d..
[Spring Boot] s3 aws-java-sdk(v 1.1) 을 사용하는 개발환경에서 SSL 인증서와 무관하게 통신하는 방법(feat. ValidatorException: PKIX path building failed)
발단 개발 환경에서 object storage 에 접근할 때 SSL 인증서 이슈로 임시로 https 를 허용해야 하는 상황이 발생하였다. PKIX(Public Key Infrastructure X.509) 오류 PKIX : 인증서 기반의 보안 인프라 오류 발생 경우 일반적으로 신뢰할 수 없는 인증 기관에 의한 발급 인증서의 유효 기간이 만료 도메인 이름과 일치하지 않는 경우 혹은, Java 의 신뢰할 수 있는 인증서 리스트에 등록한 인증서가 없는 경우 코드 /** * 설명 * - AmazonS3 클라이언트를 구성하는 코드입니다. * */ AmazonS3ClientBuilder.standard() .withEndpointConfiguration( ... ) .withClientConfiguration( C..
[Spring Boot] Spring Boot 에서 JPA 로 값을 수정시 알 수 없는 이유로 sql 에러가 발생할 때(feat. SQL Error: 1064, SQLState: 42000)
발단 DB 에서 값을 변경하려고 JPA 를 통해 시도하였을 때 필자 입장에서는 단순한 VARCHAR(1) 구조의 필드 였음으로 수정되어 마땅한 상황이었지만, 왜인지 SQL Error: 1064, SQLState: 42000 오류가 지속적으로 발생하였다. 설명 필자가 사용한 테이블에는 DB 의 예약어를 포함하고 있었다 (예약어인지 모르고 필드로 사용). 테이블의 값을 수정하려 할 때 예약어를 수정하려 한 것은 아니지만, JPA 가 객체 형태로 영속성 매니저에게 값을 전달하고 있었기에 DB 에 전달한 query 를 실행하면서 syntax error 가 발생하게 된것이다. 예시 DB 구조 CREATE TABLE `test1` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `openYn..
[Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)
설명 환경 윈도우즈 docker desktop 설치됨 Spring Boot 프로젝트 kotlin Gradle 로 빌드툴을 설정했을 경우 다음과 같은 탭을 찾아볼 수 있다. Gradle 빌드 툴이 제공해주는 docker image 빌드 명령어이다. Image 저장되는 장소 아무런 설정을 하지 않았을 경우 docker 로컬에 저장된다. 이는 docker desktop 과 docker CLI 를 통해 확인 가능하다. docker command : docker images docker 이미지 변경 build.gradle.kts 파일에서 다음과 같이 작성할 경우 이미지명이 변경된다. tasks.getByName("bootBuildImage"){ imageName.set(".../request-test:latest..
[Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)
발단 ASP.NET 이라고 규정할 수 없지만, 필자는 특정 서버와의 통신에서 왜 인지 특정 이유는 알 수 없지만 field 가 전달되지 않는 이슈를 겪었다. 설명 - 요청 메서드는 post 방식을 사용하였고 그에 따라 body 에는 객체를 담아 전송하였다. - body 객체는 String 과 List 을 포함하는 흔한 dto 이다. - 왜인지 ASP.NET 서버는 field validation 에 실패하였다는 값을 응답하였고 필자가 전송할 때 실수한게 있나 싶어 cURL 로 요청을 보냈을 때 요청은 성공적이었다. 해결 - 설명에서 언급한대로 여전히 정확한 이유에 대해서는 알지 못한다. - 그러나, cURL 로의 요청이 성공했다는 것을 근거로 객체의 serialize 과정에서 문제가 있을 수 있다고 생각하..