목록전체 글 (27)
두리공장
스프링 배치를 이용하여 일괄 처리를 하고자 한다.일반적인 배치는 간단하게 쉘 스크립트 + crontab 을 이용해서 작업하거나,별도의 프로시저를 작성해 두고 해당 프로시저를 호출하는 쉘 스크립트를 crontab 에 등록해 두고 사용한다.하지만 복잡한 비즈니스가 있거나 상호 연결해야 할 주체가 다른 경우에는 결국 스프링배치를 사용해야 할 때도 있다.(이기종 DB 간의 데이터 연동, API 연동 및 복잡한 비즈니스 처리 등등..)그런데 비교적 데이터 연동 건수가 작거나 DB to DB 인 경우에는 비교적 속도가 빨라서 일반적인 구현 방식으로도서비스하기에는 문제가 없어 보인다 (tasklet & chunk 형태)그런데 연동대상이 외부 API 이거나 대용량 데이터인 경우에는 연동 속도가 느려지는 경우가 발생하기..
스프링부트에서 keycloak admin restapi 를 사용해야 할 경우가 있다. (사용자 계정에 대한 정보 변경 등등...) 나의 경우에는 사용자가 등록한 OTP 정보를 admin cli 를 사용하여 삭제해 주어야 하는 미션이 있었다. 몇몇 방법이 있지만 구글링 결과 키클락에서 제공하는 라이브러리를 사용하기로 했다. (순수 restapi를 구현하여 사용하는 방법도 있디만,,,ㅎㅎ) 1. pom.xml 에 디펜던시 추가 org.keycloak keycloak-admin-client 20.0.5 2. application.yml 에 접속정보 추가 keycloak: server-url: http://localhost:9080/ realm: master username: admin password: XXX..
ELK 를 구성하여 RDBMS 에 있는 데이터를 logstash 로 pipeline 을 셋팅하여 저장해 보기로 한다. 먼저 ELK 를 설치해야 하는데, docker 로 설치한다. docker repo : https://github.com/deviantony/docker-elk GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose. The Elastic stack (ELK) powered by Docker and Compose. - GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose. github.com W..
SPI 를 사용하면서 외부DB의 Custom Role을 적용하고 싶어졌다. 하지만 github 에는 아래와 같은 문구가 있었다. Limitations - Do not allow user information update, including password update - Do not supports user roles our groups 지원을 안한다고 해서, 그냥 쓸수는 없지 않은가.... 그래서 직접 구현해 보기로 했다. 인터넷에 찾아보니 UserAdapter 에서 getRoleMappings 를 오버라이드해서 추가 구현이 가능함을 볼 수 있었다. 그래서 아래와 같이 추가해 보았다. public class UserAdapter extends AbstractUserAdapterFederatedStora..
지난번에 singular-keycloak-database-federation 를 사용하여 keycloak 에서 external Database 를 연결하는 것을 시도해 보았다. 동기화는 잘 되었는데 user 에 보면 create at 부분이 "invalid Date" 라고 뜨는 문제가 있다. 여기에 날짜를 정상적으로 보여주기로 했다. UserAdapter 는 AbstractUserAdapterFederatedStorage 를 상속하여 사용하는데, 이걸 열어보면, public static String FIRST_NAME_ATTRIBUTE = "FIRST_NAME"; public static String LAST_NAME_ATTRIBUTE = "LAST_NAME"; public static String EM..
SSO 연동을 위해 keycloak을 사용할 경우가 있다. 그런데 대부분의 경우에는 user DB에 사용자를 등록해 놓고 user 정보를 연동하기를 원할 것이다. 이 경우에는 keycloak 에서 제공하는 provider 를 사용하여 외부 DB 와 연동할 수 있다. 아래는 연동 프로세스를 표현한 다이어 그램이다. keycloak 에서 연동을 위해서는 Service Provider Interface 를 구현해야 한다. 해당 스펙에 대해서는 keycloak 공식문서에 잘 설명되어 있지만,, https://www.keycloak.org/docs/latest/server_development/#_user-storage-spi Server Developer Guide This functionality depend..
Nifi 를 사용하여 원천 DB에서 수집DB로 데이터를 복제하는 방법을 연구해 본다. setMaxValue : QueryDatabaseTable 프로세스를 사용하며, 원천테이블에 있는 데이터를 읽어서 해당 필드중에 가장 큰 값을 셋팅하는 역할을 한다. 일반적으로 수정일자(lsdt) 를 셋팅해 놓으면, attribute 에 해당 값이 설정되며, 더 큰 값이 보여지기 전까지는 재수집을 하지 않는다. getData : ExecuteSQL 프로세스를 사용하며, 원천테이블에 있는 데이터를 가져온다(Avro 포맷) truncateDeployTable : PutSQL 프로세스를 사용하며, 수집/적재할 테이블의 데이터를 삭제(초기화) 한다. insertData : PutDatabaseRecord 프로세스를 사용하며, ..
필요에 따라서는 VO를 계속 만들지 않고 innerClass를 사용하는 경우가 있다. innerClass 는 아래의 형태와 같다. @Data public class CommonVO { @Getter @Setter public static class BOOK { private String column1; private String column2; private String column3; private String column4; } } 그런데, mybatis에서 이러한 모양의 모델을 불러와야 할 경우에, alias가 안먹는 경우가 있다. 이때에는 아래와 같이 정의해 준다. 이렇게 하면, mapper에서 아래와 같이 사용할 수 있다. 여담으로, RestAPI로 사용할 경우, 필드값에 null이 있을 경우 ..