본문 바로가기
관리자

Programming-[Backend]

(408)
keycloak User 정보 마스킹 처리 보호되어 있는 글입니다.
keycloak 비밀번호 알고리즘 argon2, pbkdf2-sha256, 마이그레이션 필요 여부 keycloak 기본 설정keycloak 25버전 이상의 기본 비밀번호 해싱 알고리즘은 argon2로 되어있다. argon2는 2015년 알고리즘 대회에서 우승한 알고리즘이고, 기존 알고리즘들을 보완하여 나온 최신의 알고리즘이다. argon2에 대해기존 알고리즘들은 해싱이 빠르고, 그만큼 해킹할 수 있는 brute force식 공격이 편했다. 그래서 salt를 추가하고, 해싱을 반복하여 해킹 시도 한 번에 들어가는 시간이 늘어나도록 하였다. 그런데, 성능을 위해 빠른 해싱을 했다가 다시 시간이 늘어나도록 하는 것은 비효율적이고 동적이지도 못했다. 이에 따라 argon2와 같은 알고리즘은, 해싱을 시도하는 컴퓨터의 cpu, memory 등 리소스를 자동으로 탐색하고 그에 맞게 해싱 반복 횟수를 조절하여 환..
[TIL] 문자열 LIKE 검색 인덱스 MYSQL DB 컬럼 설계 시 name과 같이 사람이 알아볼 수 있는 문자열의 컬럼이 있고, 그를 검색하는 로직이 있는 경우가 흔하다. 이 때, name을 index로 잡더라도 LIKE 검색 시에는 무조건 동작하지 않는다. MYSQL에 한해, 다음과 같은 조건으로만 인덱스가 적용된다. 인덱스가 적용되지 않을 경우 full scan이 적용되어 주의해야한다. • Containing → %값% (부분 검색) → 인덱스 사용 X• StartingWith → 값% (접두어 검색) → 인덱스 사용 O• EndingWith → %값 (접미어 검색) → 인덱스 사용 X  JPA의 경우의 예시이다. 위 규칙에 따라 적용된다고 생각하면 된다. findByNameContaining("abc") WHERE name LIKE '%abc%..
.jar java SPI 모듈 개발: Factory Pattern(w/o Spring), ServiceLoader, @AutoService 배경Java용 SPI .jar 파일을 build하여 다른 프로젝트에 dependency 형태로 추가하여 사용하는 작업이 필요했다. 구체적으로는 keycloak의 provider를 .jar로 개발해야하는 상황이였다. 순수 Java로 개발하는 경우, Spring의 의존성을 최대한 지양하는 것이 좋다. 다른 프로젝트에서는 Java만을 통해 해당 .jar를 사용할 것이기 때문이다.  1. Factory Pattern기존에 Spring을 사용할 때는 dependency injection을 위해 @Autowire 등을 사용하여 한 객체에서 다른 객체의 Bean을 참고하도록 처리했다. 그러나 Spring을 사용하지 않을 때는 직접 구현체를 넣으면 될 것이다. 예시를 들자면 아래와 같다. public class Tes..
Spring actuator 기본 개념 feat. Chaos Monkey 1. 배경 프로젝트의 성능 테스트를 위해서 실제 로직을 Chaos Monkey를 이용하여 대체했다. 실제 로직 수행에 1초가 걸리면, 아래와 같이 설정하여 chaos monkey가 1초간의 지연을 모사하도록 할 수 있다. 이를 통해 성능 테스트를 했는데, management는 어떤 설정인지가 궁금했다. enabled: true는 chaos monkey를 적용하는 것일텐데, 그럼 endpoints는 뭘까? chaos: monkey: enabled: true watcher: bean-classes: - {chaos monkey를 적용할 서비스 구현체의 패키지명 ex. com.exmample.service.TestServiceImpl} assaults: late..
keycloak k8s 배포 1. 배경keycloak을 k8s로 배포하는 방법에 대해 정리한다. 여러 가지 방법들이 있겠지만 요즘 현업에서 가장 많이 사용하는 방식은 k8s로 배포하는 방식이다. 그리고 이전 글에서 정리한 것처럼 infinispan을 외부로 빼서 따로 처리하는 방법도 있겠으나(https://whitepro.tistory.com/1083, https://whitepro.tistory.com/1013, https://whitepro.tistory.com/1015), 이번에는 편의를 위해 embedded 형태로 keycloak과 infinispan은 1개 pod의 JVM 내에 배포하고 infinispan에 대해서는 신경쓰지 않는 기본적인 방법으로 배포를 하는 방법에 대해 정리한다.   2. Dockerfile다음과 같은 ..
[TIL] keycloak first_name, last_name 제거해도 google 소셜 로그인 시 값 생성됨 배경keycloak에서 기본적으로 생성되는 User Profile의 attribute 중, first name과 last name이 있다. 사용자의 이름 정보가 굳이 중요하지 않고, 개별 attribute로 저장하기 위해 이 두 속성값을 제거했는데 구글 소셜 로그인 시에는 자동으로 이 값들이 매핑되어 Users 화면에서 보이는 현상이 있었다.   원인keycloak에서 google용 Identity Provider의 기본 Mapping 설정상, first_name, last_name이 있어서 그렇다. 아래 화면처럼 Google IDP의 Mapper 설정이 비어있지만, spi 코드상 기본적으로 first_name, last_name이 세팅되도록 되어있다.  또 하나 중요한 점은, User를 정의하는 use..
[TIL] keycloak Theme 변경으로 admin console 접근이 불가할 때 해결방법(with 테마 캐시) 배경master realm의 console에서 커스텀한 테마를 적용해볼려고 했다. master는 슈퍼 유저용의 특별한 realm 이므로 굳이 테마를 변경할 필요가 없고, 기본 테마를 사용하는 것이 좋다. 그런데 실수로라도 이렇게 변경한 경우, 테마에 에러가 있으면 master realm의 admin console에 접근이 불가능하여 테마를 원상 복귀할 수가 없다. 해결방법DB를 수정하는 것 외에 다른 방법을 찾지 못했다. admin-cli client로 접근하여 REST API 방식으로 수정할 수 있으나, admin-cli의 client secret을 알아야하는 등의 문제가 있다면 이 방법은 불가하기 때문이다. DB의 값을 직접 수정하는 것은 금기 사항이다. 그러나 realm의 테마 값을 변경하는 것은 ..