Log Level Notes 로그 레벨은 왜 필요한가 로그 레벨은 모든 로그를 같은 무게로 다루지 않기 위한 장치다. 개발 중에는 자세한 로그가 필요하지만, 운영 환경에서는 중요한 신호를 빠르게 골라낼 수 있어야 한다. 보통 다음 순서로 심각도가 올라간다. TRACE DEBUG INFO WARN ERROR Logback의 아키텍처 문서는 이 순서를 T... 2024/09/07 Web
Log4j vs Logback vs Log4j2 Notes 세 프레임워크의 관계 Java 로깅 생태계에서는 API와 구현체를 구분해서 본다. 보통 애플리케이션 코드는 SLF4J 같은 로깅 API를 호출하고, 실제 출력은 Logback이나 Log4j2 같은 구현체가 담당한다. SLF4J는 구현체를 배포 시점에 끼우는 파사드(추상화 계층)다(SLF4J 매뉴얼). Log4j: 오래된 Apache 로깅 프레... 2024/09/07 Web
Log4j Vulnerability Notes 무엇이 문제였나 Log4j 취약점은 보통 Log4Shell로 불린다. 핵심은 로그 메시지 안의 특정 문자열이 원격 조회로 이어질 수 있었고, 그 결과 원격 코드 실행까지 이어질 수 있었다는 점이다. 가장 널리 알려진 이슈는 CVE-2021-44228이다. NVD에는 2021년 12월 10일에 등록되었고, 같은 날 CISA의 ‘실제 악용이 확인된 ... 2024/09/07 Web
OpenID Connect Notes OpenID Connect란 OpenID Connect, 줄여서 OIDC는 OAuth 2.0 위에 사용자 인증 계층을 올린 규격이다. OAuth 2.0이 “권한 위임”에 집중한다면, OIDC는 “이 사용자가 누구인가”를 표준 방식으로 전달한다. 즉 OIDC는 로그인 문제를 다룬다. 명세의 소개 문장도 같은 말을 한다. OpenID Connect ... 2024/09/07 Web
Preflight Request Notes Preflight Request란 Preflight Request는 브라우저가 실제 cross-origin 요청을 보내기 전에, 그 요청이 허용되는지 먼저 확인하는 OPTIONS 요청이다. 개발자가 직접 보내는 경우보다 브라우저가 자동으로 발생시키는 경우가 대부분이다. 이 요청은 보통 다음 정보를 담는다. Origin Access-Con... 2024/09/07 Web
Session and JWT Notes 두 방식의 공통점 세션과 JWT는 모두 “HTTP가 기본적으로 상태를 기억하지 않는다”는 문제를 보완하기 위한 장치다. 사용자가 로그인한 뒤 다음 요청에서도 인증 상태를 이어가려면, 서버나 토큰 어딘가에 인증 정보를 유지해야 한다. 둘의 차이는 그 정보를 “어디에” 두느냐다. 세션은 서버에 두고 클라이언트에는 그것을 찾는 열쇠만 준다. JWT는 정... 2024/09/07 Web
Single Sign-On Notes SSO란 SSO, 즉 Single Sign-On은 한 번의 로그인으로 여러 시스템을 이용할 수 있게 하는 방식이다. 사용자는 애플리케이션마다 다시 로그인하지 않고, 중앙 인증 시스템이 발급한 인증 결과를 공유받는다. 용어를 먼저 맞춰 둔다. 사용자를 인증하는 중앙 시스템을 IdP(Identity Provider, 신원 제공자)라고 하고, IdP의 ... 2024/09/07 Web
Token Authentication Notes Authentication에서 로그인 이후의 요청을 인증하는 방식은 세션과 토큰 두 가지로 나뉜다고 정리했다. 이 글은 그중 토큰 방식을 다룬다. 토큰 기반 인증은 로그인에 성공한 사용자에게 서버가 토큰을 발급하고, 이후 요청마다 클라이언트가 그 토큰을 함께 보내 신원을 증명하는 방식이다. 토큰 인증의 흐름 Okta의 설명을 따르면 흐름은 네 ... 2024/09/05 Authentication Authentication Basics 2편
Unique ID Generation Strategy in Distributed Systems Notes 분산 환경에서 고유한 키를 생성하는 것에는 많은 고려사항이 있다. DB 한 대를 쓸 때는 AUTO_INCREMENT 같은 기능이 1, 2, 3 순서로 겹치지 않는 번호를 알아서 매겨 준다. 그런데 쓰기를 받는 서버나 DB가 여러 대가 되면 “다음 번호”를 아는 곳이 하나가 아니게 된다. 모든 노드가 한 곳에 번호를 물어보면 그곳이 병목이자 단일 장애... 2024/09/05 Architecture
Microservices Architecture Notes The History of Software 소프트웨어의 역사를 보면 하드웨어에 의존적인 구조에서 점점 변화에 유연하고 하드웨어로부터 독립적인 방향으로 발전해왔다. 소프트웨어 아키텍처의 역사는 추상화를 거듭하면서 점점 더 고도의 관심사를 추구하는 방향으로 변화했다고 볼 수 있다. 1960 ~ 1980s: Fragile, Cowboys ... 2024/09/05 Architecture