전체 글 53

Elasticsearch (엘라스틱서치)의 기본 랭킹 알고리즘 - BM25

TF-IDF정보 검색과 텍스트 마이닝 등에서 사용되는 가중치이다.여러 문서로 이루어진 문서군에서 특정 문서 내에서 어느 단어가 얼마나 중요한지를 나타내는 통계적 수치이다.TF: Term Frequency하나의 문서 내에 여러 번 등장하는 단어의 중요도는 어떨까?예를 들면 ChatGPT를 설명하는 글에서는 "ChatGPT" 라는 단어가 아주 잦은 빈도로 등장할 것이다.이것은 굉장히 중요한 단어이다. IDF: Inverse Document Frequency많은 문서에서 등장하는 단어는 어떨까?예를 들면 "굉장히", "다양한" 같은 문서일 것이다.이것은 중요하지 않은 단어이다. TF-IDF는 이에 착안하여 특정 단어의 중요도를 나타내는 계산 방식이다.다만 문서의 숫자가 너무 많아질수록 기하급수적으로 값이 커지..

Java의 Slf4j, Logging Framework와 Dependency

SLF4J (The Simple Logging Facade for Java)Java에는 Logback, Log4j2와 같은 다양한 Logging Framework이 있다.내가 예를 들면 Apache Project를 개발하고 있다고 해보자.실제 사용자가 어떤 Framework을 사용할지 모르니 Logback에 대한 코드, Log4j2에 대한 코드 등을 모두 추가해야할까?  이런 때에 가장 적합한 Design Pattern이 Facade Pattern이다. 공통된 기능을 가지는 여러 Library를 단일 API를 이용하여 활용하도록 해주는 것이다.이름에서도 알 수 있듯이 이 Facade Pattern 이용하여 여러 Framework에 대한 고려를 해주는 것이 SLF4J이다! SLF4J를 이용한다면 코드 내부..

기타 주제 2024.09.02

Maven / Gradle의 Dependencies Conflicts

Maven DependenciesLibrary 들을 project files인 pom.xml 내의 선언하게 된다.Maven에서는 이 Library 들을 Dependencies에 선언하고,이를 일반적으로 Library가 아닌 Dependencies(Dependency)라고 부른다. 프로젝트에 사용되는 모든 dependencies는 그 자체가 선언되거나 parents에 의해 dependencies로 선언되어 있다.. ... group-a artifact-a 1.0 group-c excluded-artifact group-a artifact-b 1...

기타 주제 2024.09.02

트랜잭션 격리 수준 / Transaction Isolation Level

트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다.크게 아래 4단계로 분류한다.READ UNCOMMITTED어떤 트랜잭션의 변경내용이 COMMIT이나 ROLLBACK과 상관없이 다른 트랜잭션에서 보여진다.사용되지 않는 격리수준READ COMMITTED어떤 트랜잭션의 변경 내용이 COMMIT 되어야만 다른 트랜잭션에서 조회할 수 있다.Oracle DB에서 사용NON-REPETABLE READ 정합성 문제 발생하나의 Transaction 내에서 READ를 여러 번 할 경우 결과가 다른 문제REPEATABLE READ트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회한다.즉, 자신의 Transaction Id보다..

Data 2024.07.07

Spring JPA Transactional과 Transaction Isolation Level 격리수준 실습

2022.11.04 - [Backend & Spring (스프링)] - Spring Data JPA와 Hibernate. 그리고 Persistence Spring을 이용해 RDB를 다루면 JPA, Transactional과 DB 격리 수준에 대해서 많이 들어보았을 것이다.다만, 각각에 대해서는 잘 들어봤더라도서로 정확히 어떻게 동작하는지, 어떤 경우에 에러가 발생하는지에 대한 정보는 부족하다. 이 글에서는 특히 Transactional과 Database Isolation Level에 대한 관계를 실제 코드를 이용해서 실험해보고자 한다. 격리 수준에 대한 자세한 내용은 다음 링크 참고 - 2024.06.21 - [Data] - 트랜잭션 격리 수준 / Transaction Isolation Level 현재 ..

Data 2024.06.21

Project Reactor 테스트

TestPublisher source = TestPublisher.createNoncompliant(TestPublisher.Violation.ALLOW_NULL); StepVerifier Operator 체인이 시나리오대로 동작하는지 테스트 StepVerifier .create(Mono.just("Hello Reactor")) // 테스트 대상 Sequence 생성 .expectNext("Hello Reactor") // emit 된 데이터 검증 .as("expect Hello Reactor") .expectComplete() // onComplete Signal 검증 .verify(); // 검증 실행. expectSubscription() expectComplete() expectError() ex..

Project Reactor 디버깅하기 - Debug Project Reactor

디버깅의 어려움기존의 Blocking 프로그래밍에서 Exception이 발생한 경우Exception의 Stacktrace 를 출력하여 확인하거나Breakpoint를 걸어서 문제가 발생한 원인을 단계적으로 찾아가면 되기 때문에 상대적으로 디버깅이 쉽다. 하지만 Reactor는 대부분 비동기적으로  실행되며 선언형 프로그래밍 방식으로 구성되므로 디버기이 쉽지 않다.이를 위해 Reactor에서 몇 가지 방법을 제공한다. 디버그 모드 (Debug Mode)Hooks.onOperatorDebug()Debug Mode 활성화하는 코드  static { fruits.put("banana", "바나나"); fruits.put("apple", "사과"); fruits.put("..

OAuth 2.0 & OIDC with JWT

Authorization (허가) Authentication (인증) 총 정리 - MAC AEAD 에 이어지는 글9. JWT (JSON Web Tokens)JWT는 Token 기반 인증에서 RFC 7519 의 표준으로 지정된 Token ※ Claim이란 어떠한 주제에 관해 주장하는 정보이며, name/value pair로 표시한다. 9-1. Javascript Object Signing and Encryption (JOSE)Claim을 안전하게 전송하기 위한 프레임워크 JWK, JWS, JWE, JWT 등을 포함한다. 9-2. JWK(Json Web Key): 암호화 키를 나타내는 Json Data 구조jwk = {'k': }위와 같이 표현되며, k가 key 혹은 password를 나타낸다. 9-3. J..

Authorization (허가) Authentication (인증) 총 정리 - MAC AEAD

1. Authorization과 Authentication- Authentication 이란 자신이 누구라고 주장하는 사람을 확인하는 절차- Authorization 이란 가고 싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정2. Why Authorization & Authentication ?- 당신의 서비스가 가지고 있는 정보가 소수의 사람들만의 비밀이거나 이들만을 위한 정보라면, 당신이 보길 원하는 사람만 정보(Resources)를 보도록 해야한다.이 페이지에서는 이러한 Resources를 보호하기 위해 많은 사람들이 사용하는 "표준적인" 방법을 정리한다. 3. Session 기반 인증이 페이지에서 Session 기반 인증은 자세히 다루지 않는다.- Client가 브라우저를 사용한다면 S..

IaC - Terraform으로 EKS Node까지 관리하기 - 1. Architecture

1. Infrastructure of EKS Production 환경에서 일반적으로 구성할 수 있는 AWS Architecture 중 하나를 그려보면 위와 같은 그림을 그릴 수 있다. 1. Route 53으로 Domain Routing 2. ACM으로 HTTPS ssl 검사 3. WAF로 요청에 대한 전반적인 검사 4. EKS의 ALB (혹은 NLB 등)으로 Routing 5. ALB에서 정의된 룰에 따라 EKS Private Subnet의 EKS Container에 요청 전달 및 응답 반환 6. (Optional) Container에서 Database Subnet 의 DB로 CRUD 요청 7. (Optional) Public Subnet의 NAT Gateway로 외부와 통신 2. 기존 Terraform..

반응형