Opensearch 데이터/설정/인덱스 초기화 이슈
·
기타
벌써 세번째 초기화 이슈가 발생했다… 처음 겪었을때는 이게 해킹인가 싶어서 보안설정을 강화했고 두번째는 aws 계정팀에 문의해서 cognito를 통한 인증을 진행하라는 답변을 받았고 이제 세번째에서야(바보) 문제원인을 확신하게 되었다.결론은 복제본없이 노드 하나만 사용하는 상황에서 소프트웨어 업데이트를 진행하면 기존 데이터를 보존하지 못한다. 아래 근거를 대기전에 디깅한 과정을 기록한다.처음에는 대시보드 로그인부터 안되니깐 무슨 문제인지 몰라 aws support 분께 도움을 요청했고, 브라우저 har 로그 수집해서 업로드 하라는 답변이 왔습니다.- 개발자도구 - 왼쪽상단에 clear network log 로 로그 싹 지운다움 preserve log 체크- 새로운 창에서 열리므로 그대로 트래킹 해야함- ..
AWS Cognito 로 OpenSearch 대시보드 접근하기
·
기타
AWS Cognito 로 OpenSearch 대시보드 접근하기문제상황기존 OpenSearch에서 내부 데이터베이스 마스터 사용자를 생성해서 대시보드에 접근하고 외부 어플리케이션에서도 해당 아이디 비번으로 HTTP 기본 인증으로 접속했다.근데 몇주 전, 원인을 알 수 없는 이슈가 발생해서 이틀연속으로 사용자 계정과 인덱스가 없어지는 사건이 발생했다.로그를 보면 순차적으로 데이터가 지워진 모습..답변을 보면 계정팀 부서라서 확인에 한계가 있는걸로 보입니다.. 지원 플랜을 이용하면 전문 부서의 솔루션이 이용가능하다는데 비용부담도 그렇고, 개인적으로 추측하건데 계속 업데이트를 미루던 상황에서 업데이트 이후 해당 이슈가 안 일어나는걸로 보아 일단은 오케이… 이런 상황이었습니다.그래도 보완은 해야하므로 내부 사용자..
ElasticSearch to OpenSearch(라이센스 체크우회)
·
기타
Nori to Seunjeon{ "analysis": { "analyzer": { "facilities_analyzer": { "char_filter": [], "tokenizer": "nori_tokenizer", "filter": ["nori_part_of_speech", "nori_readingform", "lowercase"] } } }}💡nori_analyzer 구성을 직접 명시한 모습엘라스틱서치에서 한국어 형태소 분석기를 nori_analyzer 로 사용했습니다.GET _cat/plugins?v그런데 analysis-nori 플러그인은 존재하지 않았고 대신에 analysis-seunjeon 로 사용해야합니다. (은전한닢){..
OIDC 정리
·
개념잡기
OIDC간단하게 요약하면, 기존 oauth2에서 액세스토큰을 받으면 유효한 사용자인지 인증하기 위해서 한번더 요청을 보냈는데, 이 과정을 줄이고자 사용자인증기능을 위한 JWT 토큰을 액세스토큰과 함께 보내 내부 검증할 수 있게 만든 구조입니다.카카오 로그인에서는 ‘id_token’ 이 이에 해당됩니다.💡Id_toekn 구조헤더(Header) - 공개키 ID(어떻게 암호화 되어있는지)페이로드(Payload) - 사용자 인증 정보서명(Signature) - 토큰의 유효성을 검증할 때 사용할 값공개키 ID는 헤더의 ‘kid’ 필드, 키(key id) 에 해당됩니다. 우리는 이제 공개키목록에서 kid에 해당하는 공개키 값을 확인하고 그 값으로 ‘서명’ 부분을 검증하면 됩니다.public class OidcId..
가비지 컬렉션
·
개념잡기
가비지 컬렉션기본개념자바 기준으로, JVM Heap 영역에 동적으로 할당된 메모리 중 더이상 사용하지 않는 영역에 대해서 주기적으로 정리하는 과정을 뜻합니다.SomethingClass1 sc = new SomethingClass1();free(sc)..?쉽게 말해 이런식으로 객체를 생성해두었으면 원래는 개발자가 메모리를 해제하는 과정을 진행해야합니다.그렇지않으면 메모리가 낭비되기 때문이죠. (메모리 누수)c언어에서는 free() 함수로 직접 작성해줬던 기억이 나는데요, 자바에서는 이 과정을 가비지 컬렉터가 대신해줍니다.기본과정 그렇다면 사용하지 않는 객체(쓰레기, Garbage)는 어떻게 판단해야할까요? 단순히 하나하나 검사하기에는 많은 시간이 소요되어 프로그램 성능에 치명적일 것입니다. 그래서 HotS..
[오늘의 문제] String Constant Pool
·
Java
public class Main { public static void main(String[] args) { String a = "a"; // String constant pool에 저장됨 String b = "a"; String c = new String("a"); // heap 영역에 저장됨 System.out.println(a == b); System.out.println(b == c); System.out.println(a == c); }}정답은 true, false, false 입니다.왜냐하면 String을 리터럴로 선언할 경우 String pool이라는 곳에서 인스턴스로 관리되고, 이후에 해당 문자열이 있다..
[Spring Batch] 이모저모
·
spring
이번에 요양시설 관련한 프로젝트에 참여하게 되어 공공데이터를 다룰 상황이 생겼습니다.예전에 간단히 학습해본 스프링배치를 통해서 파일들을 읽어보면서 학습하려고 합니다.고유하지 않은 고유 ID칼럼정의서에 따르면 첫번째 칼럼은 고유 ID 필드인데, 중복되어있음을 확인했습니다.확인을 해보니, 뒷자리가 1842로 되어야 고유값인데, 갑자기 0002로 초기화된 모습입니다.org.hibernate.exception.ConstraintViolationException: could not execute statement [Duplicate entry 'KCOCFPO23N000000001' for key 'cultural_facility.PRIMARY'] 무결성 제약조건 예외 발생기본적으로 JdbcItemWriter는 B..
[오늘의 문제] List
·
Java
LinkedList list = new LinkedList();list.add(1);list.add(2);list.add(3);// 1. forfor (int i = 0; i 위 코드에서 더 빠른 성능을 보여주는 코드는 무엇인가요?ArrayListArrayList는 이름 그대로 배열을 사용해서 데이터를 관리합니다.public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable{ private static final int DEFAULT_CAPACITY = 10;private Object[] grow(int minCapacity) { int oldCa..
웹 공격으로 생각해보는 JWT
·
개념잡기
CSRF(Cross-Site Request Fogery)피해자가 서버로 공격자의 의도가 담긴 요청을 하게 만드는 공격로그인된 사용자의 요청에 공격자가 원하는 요청으로 유도하는 공격 방법입니다.공격 가능 예시를 살펴보겠습니다.잘못쓴 GET 요청게시판 서비스에서 모 개발자가 게시글을 삭제하는 URI를 다음과 같이 정의했습니다.GET https://gucoding.com/post/delete/1모 개발자는 해당 요청을 작성자 본인만 보낼 수 있게 설계해서 안전하다고 생각했습니다. 그러나 이것은 틀렸습니다.공격자는 작성자 본인은 의도하지 않게 요청을 보내도록 의도할 수 있습니다.예를들어, 공격자가 공격을 위한 게시글을 하나 올립니다.해당 게시글에 이미지를 첨부하는데, 이 때 이미지 태그에다음 html 태그를 첨..
캐시
·
개념잡기
부끄럽지만 컴퓨터공학 관련 용어 베이스가 제대로 잡혀있지 않은 상태입니다…반성하고자 지금부터라도 [개념잡기] 시리즈에서 틈틈이 정리하고자합니다.기본 개념들에 대한 간략한 설명이 좀 많은 점 양해 부탁드립니다.개념캐시란 데이터나 값을 미리 복사해 놓는 임시 장소 개념입니다.주 저장소에서 접근하는 시간을 줄이거나, 값을 다시 계산하지 않고 싶을 때 사용합니다.이 개념은 다양한 컴퓨터 분야에서 사용됩니다. 캐시는 제가 이해하기 쉽도록, 편의상 크게 하드웨어 수준과, 애플리케이션 수준으로 구분하겠습니다.하드웨어 캐시CPU 캐시 : CPU에서 주기억장치(RAM)에 접근을 빨리하고자 칩 내부에 별도로 탑재하는 작은 메모리디스크 캐시 : 디스크 제어와 외부와의 인터페이스를 위해 작은 컴퓨터를 내장하고 있다. 이 작은..