본문 바로가기
관리자

Programming-[Backend]

(390)
k8s 환경에서 keycloak multi pod로 실행하기 keycloak은 인스턴스가 여러 개일때 서로 세션 정보 등을 공유하기 위해 infinispan이라는 캐시를 사용한다. 이런 세션 공유를 위해서는 서로 통신해야하는데, 이 때 쓰이는 통신 스택의 종류로 UDP, TCP, Kubernetes 등이 있다. JGroups자바로 작성된 라이브러리로 일대일 또는 일대다 통신을 지원한다. 프로세스 그룹을 생성하고 그룹 내 멤버들이 서로 메시지를 주고 받을 수 있게 해준다. 이는 클러스터링, 분산 캐시 및 채팅 애플리케이션에 활용될 수 있다. keycloak의 infinispan도 JGroups를 사용한다. k8s와 같이 pod이 소멸되고 생성될 수 있는 환경에서는 각 pod의 주소를 알아야하는데, 이를 구현하기 위해 keycloak pod들을 headless ser..
[비공개] Keycloak 클라이언트별 Admin 관리자 만들기 보호되어 있는 글입니다.
Keycloak 세부 권한 관리(admin-fine-grained-authz) Master Realm(Master) : Realm Level Realm-Role설명  비고admin• 모든 Realms을 관리 할 수 있는 슈퍼 유저• 새로운 realm을 생성하면 새로운 realm에 대한 권한도 부여됨create-realm• 새로운 Realm을 생성 할 수 있는 권한 기본적으로 생성되는 Master 영역은, 여러 영역을 관리 할 수 있음 : master-realmMaster에 있는 User에게는 다른 영역을 관리할 수 있는 권한을 부여할 수 있음master 영역에서만 여러 영역을 동시에 관리할 수 있음즉, master 영역의 사용자만 master-realm의 역할을 가질 수 있음master-realm 안에서만 부여 가능 (Master > Realm roles 확인 가능)모든 영역이 아..
성능 테스트: K6, influxDB, grafana, RPS, 지연율과 DB Connection pool 지난 jmeter와 chaos monkey를 이용한 성능 테스트에 이은 글이다. 이번에는 K6, influxDB, grafana를 통해 성능 테스트를 하는 글이다. 지난글:https://whitepro.tistory.com/1065 성능 테스트: jmeter, @Profile, chaos monkey배경로컬에서 잘 만든 애플리케이션을 클라우드 환경 등에 배포하기 위해서는 컴퓨팅 자원을 얼마나 쓸 것인지 결정하는 것이 필요하다. 실제 애플리케이션의 요구사항에 따른 적절한 자원 임whitepro.tistory.com    1. K6개요 및 설치ref.) https://velog.io/@prismy/%EC%84%B1%EB%8A%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8-k6grafanainflux..
JPA, ddl-auto, MYSQL, index 등 테이블 생성 기초 정리 Spring Boot + JPA + Hibernate + MYSQL 조합으로 DB를 구축할 때 주의해야할 점들에 대해 기록해둔다. 1. ddl-auto로 만들어진 순서 그대로 DB 컬럼의 순서들을 그대로 두지 말 것  hibernate.ddl-auto = create로 처리하면 아무런 세팅이 되지 않은 DB에서 Entity들을 이용해 빠르게 Table 들을 만들어낼 수 있다. 하지만 여기서 컬럼들의 순서들을 변경하지 않으면 안된다. 왜냐하면 DB 컬럼의 순서대로 차례대로 데이터를 읽어나가기 때문이다. DB는 블록 단위로 데이터를 저장하고, 조회 시에 레코드의 앞에서부터 읽어들이기 시작한다. 따라서 DB 컬럼의 순서는 PK, FK, 카디널리티가 높은 순서대로 배치하고 날짜 등 Range로 조회될 가능성이 ..
[TIL] JVM HeapSize, HeapDumpPath 설정 buildPack의 bootBuildImage를 통해 JvmOption을 줄 때, 아래와 같이 설정함 static def getEnvs(heapDumpPath, envVal) {def jvmOptions = ["-Xms512m","-Xmx1024m","-XX: MaxDirectMemorySize=100M","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=${heapDumpPath}"]return [ "BPE_DELIM_JAVA_TOOL_OPTIONS": " ", "BPE_APPEND_JAVA_TOOL_OPTIONS": jvmOptions.join(" ")] Heap Memory Size를 512 ~ 1024 MB로 설정, nio 패키지..
Swagger UI(feat. keycloak Open API) 1. Swagger UISwagger UI라는 도커 이미지가 제공된다!https://github.com/swagger-api/swagger-ui/blob/HEAD/docs/usage/installation.md  docker run -p 80:8080 swaggerapi/swagger-ui  해당 도커 컨테이너를 실행하고, localhost로 접속하여 위 쪽 입력창에 .json 파일의 웹 주소를 입력하면 API를 사용할 수 있는 Swagger 문서가 생성된다.   나는 keycloak의 REST API를 확인해보기 위해서 keycloak의 OPEN API 문서의 주소를 붙여넣었다.https://www.keycloak.org/docs-api/latest/rest-api/openapi.json   2. Ke..
[TIL] @JsonInclude: 응답 객체 json의 끝부분이 깨질 때 문제외부 서버에서 응답을 받아왔는데, 맨 끝에 }로 json이 닫히는 부분이 제대로 오지 않아서 parsing이 일부 실패하여 오류가 나고 있었다. 원인Ro 객체로 응답을 지정하고 있었는데, body의 마지막 데이터들이 results가 아닌 code, name, description 속성값들이 모두 null로 오고 있었다. json에는 null이 없으므로 null이 맨 마지막에 오면 역직렬화 시에 위와 같이 불완전한 parsing이 일어날 수 있다. 해결책 1. 응답하는 쪽에서 null 데이터가 있는 경우 "null"로 String 처리해주는 것이 좋다.2. Ro 객체에 아래처럼 @JsonInclude(JsonInclude.Include.NON_NULL)을 추가해주면 null 데이터는 역직렬화시에 무시되..