2021/개발 12

WebFlux Log Tracing

WebFlux를 처음 사용해보면서 로깅하는데 며칠을 애먹었다. Spring MVC와는 다르게 레퍼런싱할 수 있는 자료들이 거의 없었다. 그래서 다른 분들의 시간을 단축시켜주고자 글을 적어본다. (좀 더 좋은 자료가 있는 곳이 있다면 댓글로 공유부탁드립니다 🙇) 결론부터 말하자면, WebFlux에서 MDC Context로 로깅을 '잘' 하려면 아래와 같이 HttpHandlerDecoratorFactory의 구현체를 하나 만들면 된다. package com.tistory.mjin1220.decorator; import org.slf4j.MDC; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http..

2021/개발 2021.12.04

OAuth 2.0

OAuth란, OAuth는 인터넷 사용자등리 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로 사용되는, 접근 위임을 위한 개방형 표준이다. 각 애플리케이션마다 다른 인증방식을 표준화한 것으로 OAuth 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없다. OAuth를 사용하면 특정 서비스에서 제공하는 서비스의 일부 기능을 사용할 수 있다. OAuth 2.0 OAuth2.0의 일반적인 요소는 Resource Owner, Client, Authorization Server, Resource Server로 구성된다. 구분 설명 Resource Owner Client가 제공하는 서비스를 이용하려는 사용자 Client ..

2021/개발 2021.10.10

Spring Batch - 기본 프로젝트 만들기

Spring Batch 를 활용한 기본적인 프로젝트를 만들어서 돌려보자. (아래 작성한 소스코드는 여기에서 확인할 수 있다. 👉 github.com/mjin1220/spring-batch-project) 먼저 Spring Boot로 기본 프로젝트를 생성해본다. 자바 기본 프로젝트(with gradle)를 생성하고, 스프링 부트 공식 사이트에서 제공하는 build.gradle을 복사해서 적용한다. 복사한 설정 값 중에서 group, sourceCompatibility를 수정하고, 필요한 라이브러리가 있다면 더 추가한다. plugins { id 'org.springframework.boot' version '2.4.4' id 'io.spring.dependency-management' version '1.0..

2021/개발 2021.05.01

ELK - Elasticsearch 설치

ELK 환경을 구성하기 위해 Elasticsearch를 설치한다. (OS는 macOS) Elasticsearch를 설치하기 위해서 Elastic Homebrew repository를 탭한다. $ brew tap elastic/tap 탭하고 나면, brew install을 이용하여 elasticsearch를 설치할 수 있게 된다. $ brew install elastic/tap/elasticsearch-full (...생략...) ==> Caveats Data: /opt/homebrew/var/lib/elasticsearch/elasticsearch_mjin/ Logs: /opt/homebrew/var/log/elasticsearch/elasticsearch_mjin.log Plugins: /opt/hom..

2021/개발 2021.04.27

Spring Boot - An illegal reflective access operation has occurred

Mybatis 를 연동하는데, 아래와 같은 메세지가 뜨면서 경고를 주는 경우가 있다. WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.apache.ibatis.reflection.Reflector (file:/Users/mjin/.m2/repository/org/mybatis/mybatis/3.4.6/mybatis-3.4.6.jar) to method java.lang.Class.checkPackageAccess(java.lang.SecurityManager,java.lang.ClassLoader,boolean) WARNING: Please consider reporti..

2021/개발 2021.04.24

JWT(JSON Web Token)

JWT는 클라이언트와 서버, 서비스와 서비스 사이 통신 시 권한 인가(Authorization)를 위해 사용하는 토큰이다. URL에 대해 안전한 문자열로 구성되어 있기 때문에 HTTP 어디든 위치할 수 있다. 구조: [HEADER].[PAYLOAD].[SIGNATURE] => 각 부분은 Base64로 인코딩되어 표현됨 HEADER: JWT를 어떻게 검증하는가에 대한 내용을 포함(alg. typ) PAYLOAD: JWT의 내용, 페이로드에 있는 속성들을 '클레임 셋' 이라고 함 클레임은 3가지로 나뉜다. => Registered Claim, Public Claim, Priavate Claim SIGNATURE: 점(.)을 구분자로 해서 헤더와 페이로드를 합친 문자열을 서명한 값 생성된 토큰은 HTTP 통신..

2021/개발 2021.02.06

Docker Commands

docker run [OPTIONS] IMAGE[:TAG|DIGEST] [COMMAND] [ARG...] docker를 이용하여 이미지를 컨테이너를 생성한다. Operator exclusive options 이미지 개발자가 아니라 컨테이너를 생성하는 시점에만 줄 수 있는 옵션들 - Detached vs foreground - Detached (-d) - Foreground - Container identification - Name (--name) - PID equivalent - IPC settings (--ipc) - Network settings - Restart policies (--restart) - Clean up (--rm) - Runtime constraints on resources - ..

2021/개발 2021.01.06

9012. Parenthesis

9012번 문제는 괄호의 유효성 검사를 하는 문제이다. 자료구조인 스택을 활용하여 문제를 해결한다. 입력으로 '('가 들어오면, 스택에 넣는다. 반대로 ')'가 들어오면, 스택에서 '('가 있는지 꺼내어 본다. 만약 짝이 맞지 않다면, 유효하지 않은 것으로 판단한다. #include #include #define MAX_STACK_SIZE 50 char stack[MAX_STACK_SIZE]; int top_index; void init(void) { int i; for (i = 0; i < MAX_STACK_SIZE; i++) { stack[i] = 0x00; } top_index = -1; } void push(char c) { top_index++; stack[top_index] = c; } cha..

2021/개발 2021.01.03

인증서 유효성 검증 방법

인증서 유효성 검증 방법에는 크게 CRL, OCSP가 있다. 1. CRL: Certificate Revocation List; 인증서 폐기 목록 인증서 발급자(CA)로부터 폐기된 인증서 목록을 의미하며, 폐기된 인증서의 Serial, 폐기 날짜, 폐기 사유 등을 담고 있다. RFC 3280에 의하면, 영구적인 폐기(Revoked)와 임시적인 폐기(Hold)가 있다. No. 인증서 폐기 사유 설명 0 unspecified 특별한 폐기 사유가 없음 1 keyCompromise 인증서 소유자의 전자서명키가 손상 2 cACompromise 인증서 발급자의 전자서명키가 손상 3 affiliationChanged 소유자 명칭 또는 기타 정보의 변경 4 superseded 키 손상 없이 인증서를 폐기(인증서만 대체하..

2021/개발 2021.01.03
반응형