일전에 Spring Batch가 수행을 하다가 실패를 해도 Jenkins에서는 SUCCESS를 찍는 문제가 있다고 글을 쓴적이 있다. Jenkins Log Parser 사용해서 Application 오류 처리하기 엄청나게 편리한 Jenkins이지만 불편한점도 있다. 예를 들자면 Jenkins를 이용해 batch를 처리할때 분명 batch job은 내가 원하는대로 수행되지 않고 Error가 발생했는데 Jenkins job은 이를 Success 처리를 하 oingdaddy.tistory.com 이런 글인데 이것은 어플리케이션을 수행하고 성공이든 실패든 Jenkins의 Job은 SUCCESS로 출력을 하는데 이 과정의 로그를 분석하여 Jenkins의 Job의 상태를 변경해주는 방법이었다. 어떻게 보면 원칙적인..
Monolithic Architecture에서 Micro Service Architecture까지는 아니더라도 많은 부분이 API로 분리가 되고 이에 대한 인증의 필요성이 생겼다. Spring Security와 JWT를 이용하면 이런 API 서버간의 인증을 간단하게 할 수 있다. 프로젝트 구조 프로젝트의 전체 구조는 위와 같다. 일반적인 maven 기반의 springboot 프로젝트의 구조이다. 구현되어 있는 파일들을 순서대로 보며 알아보자. 프로젝트 설정 (중요한 부분이라고 하기 전까지는 가볍게 읽자) pom.xml org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-securi..
개요 JAVA에서 DB 프로그래밍을 하기 위해서 JDBC가 제공되었다. JDBC는 RDB 사용을 위한 다양한 API를 제공하지만, DB가 방대해지고 각 data간 관계가 복잡해짐에 따라 다수의 메소드를 호출하고 관련 객체를 해제해야 하는 문제점이 심화되었다. 이러한 문제점을 해결하고 더욱 효과적으로 DB를 관리하기 위해 MyBatis가 고안되었다. MyBatis는 개발자가 지정한 SQL, 저장 프로시저 그리고 고급 매핑을 지원하여 개발 생산성을 높이는 persistence framework이다. 기존 JDBC만을 이용한 방식은 프로그램 소스안에서 직접 connection을 맺고 SQL문을 처리하고 rs.next() 등을 이용하여 하나씩 받아와야 해서 코드가 길어지고 SQL의 변경이 필요한 경우에도 jav..
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='_skiprows', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 wi..
지난 시간에는 KeyCloak을 이용해서 같은 Realm에 있는 Client간의 SSO 를 구성을 해 보았다. 이것은 각 서비스들을 SSO로 묶어서 한번에 관리하는것이라면 이번에 다룰 Access Token을 발급받아서 사용하는것은 구성된 Realm의 Client를 내부, 외부에서 직접 접근하고자 할때 이용이 된다. 프로젝트 실습의 틀은 기존에 구성을 한것을 기반으로 한다. 일단 설명에 앞서 왜 Access Token을 사용하는지에 대해 잘 설명된 그림인것 같아서 퍼왔다. 요즘은 참 회사들마다 경쟁적으로 '우리가 이렇게 뛰어난 기술을 가지고 있소!' 하고 활발하게 블로그를 운영하는데 개인적으로 참 부럽다. KeyCloak REST API 이용해서 JWT 발급받기 기존에 KeyCloak에서 만들어 놓은 o..
지난 시간에는 KeyCloak을 어떻게 설치를 하는지 알아보았다. 이제는 이 설치된 KeyCloak을 어떻게 사용하는지 기존에 사용하고 있던 Springboot로 구현된 Application과 연동을 통해 알아보도록 하겠다. KeyCloak 설정 - Realm 생성 일단 설치된 KeyCloak의 Admin Console로 들어가보자. 좌측 맨 위의 Master라는 부분에 마우스를 가져다대면 Add realm 이라는것이 나타날 것이다. realm은 인증, 인가의 범위라고 보면 된다. 예를 들자면 A Portal에서 우리가 카페에서 로그인을 해도 메일도 같은 realm 안에 있기 때문에 별도의 로그인 없이 SSO를 통해 이용을 할 수 있는것이다. 이처럼 같은 realm안에서 한번 로그인을 하면 그 realm..
Server returned HTTP response code: 503 for URL: http://mybatis.org/dtd/mybatis-3-config.dtd 잘 되던 어플리케이션이 갑자기 위와 같은 오류를 내며 deploy가 되지 않는 문제가 있었다. 이 오류구문에 앞에는 mybatis-config.xml 파일이 IO Exception이 발생했다고 한다. 이 문제는 겪어본 바로는 크게 두가지 경우로 원인을 좁힐 수 있었다. 1. 코드에 문제가 있는 경우 코드상에 문제가 있는 경우 WAS에서 디플로이 되는 과정에서 위와 같은 ERROR를 뱉어낼 수 있다. 문제가 있다고 함은 - 중복되는 파일이 있는경우 (배포되는 과정에서 A라는 폴더에 C라는 파일이 존재하고 있는데 변경 된 파일 경로(B라는 폴더..
Spring Batch에서 실행할때 넘겨주는 Parameter 값을 받아서 동적으로 처리를 하고 싶은 경우가 있다. Springboot Batch에서는 이렇게 Program Arguments를 이용해 jobParameters를 전달한다. 바로 이 값을 어떻게 Batch 코드에서 받을수 있을까에 대한 이야기를 해보려 한다. jobParameters도 기본적으로 값을 받을때 @Value("#{jobParameters[testKey]}") 이런 형식으로 값을 받아야한다. 그냥 코드에 딸랑 저것만 넣으면 안된다. 이걸 사용할 수 있게 해주는것이 바로 @StepScope, @JobScope이다. 이것의 뜻은 Step 실행시점에 bean이 생성이 되는것, 혹은 Job 실행시점에 bean이 생성이 되는것이다. 지난번..