전체 글

백엔드 애플리케이션 간 통신을 구현해야 하는 경우가 종종 있다. 특히 여러 서비스를 포함하는 백엔드 애플리케이션에서는 이러한 통신이 필수적이다. 이와 같은 상황에서 시스템에 OAuth 2 기반의 인증 및 권한 부여가 적용되어 있다면, 동일한 방식을 사용하여 애플리케이션 간 호출을 인증하는 것이 권장된다. 일부 경우에는 간단함을 위해 HTTP Basic 및 API 키 인증 방법을 사용하는 개발자도 있지만, 시스템을 더 일관되고 안전하게 유지하려면 OAuth 2 클라이언트 자격 증명 승인 타입 (Client Credentials Grant Type)을 사용하는 것이 선호된다. 1. OAuth 2 로그인 구현Spring Boot를 사용하면 표준 사례에서, 인증 서버가 OAuth 2 및 OpenID Connec..
권한 서버는 사용자를 인증하고, 사용자가 사용하는 애플리케이션(클라이언트)과 백엔드에서 보호된 리소스에 접근하기 위한 인증 증명으로 작동하는 토큰을 발급하는 역할을 한다. 때로는 클라이언트가 사용자를 대신해 이러한 작업을 수행하기도 한다.Spring 생태계에서는 OAuth 2/OpenID Connect 권한 서버를 구현하기 위한 완전히 커스터마이징 가능한 솔루션을 제공하며, 이 중 Spring Security 권한 서버는 현재 Spring 기반 애플리케이션에서 권한 서버를 구현하는 데 사실상의 표준 방식으로 자리 잡고 있다. 1.1 JSON 웹 토큰을 사용하여 기본 인증 구현Spring Security 권한 서버 프레임워크를 사용하여 basic OAuth 2 권한 서버를 구현한다.권한 서버를 올바르게 설..
보안과 원활한 인증 방법이 중요한 시대에 OAuth 2 및 OpenID Connect와 같은 프로토콜이 산업 표준으로 자리잡았다. 이 장에서는 이러한 프로토콜의 복잡성을 해체하고, 그들의 메커니즘, 이점, 그리고 잠재적인 위험 요소에 대해 설명한다.액세스 토큰의 목적을 이해한다.OAuth 2 시스템에서 토큰이 발급되고 검증되는 방법을 파악한다.OAuth 2 / OpenID Connect 시스템에 관여하는 역할을 알아낸다. 여러가지 도구를 사용하는 대규모 조직에서 근무한다고 가정한다. 예를 들어, 버그 추적 앱, 업무 문서화 앱, 시간 등록 앱 등을 매일 사용해야 한다. 각 앱에 접근하려면 매번 인증을 해야 한다. 이러한 앱에 대해 서로 다른 자격 증명을 사용하게 되는데. 이는 사용자에게 번거로움을 주고 ..
마이크로서비스와 같은 분산형 아키텍처에서는 보안, 로깅, 그리고 여러 서비스 호출 간의 사용자 추적과 같은 중요한 작업을 수행해야 할 필요가 생긴다. 모든 개발 팀이 이러한 기능을 독자적으로 구현하는 대신, 각 서비스에서 일관되게 적용할 수 있는 방법을 찾는 것이 중요하다. 공통 라이브러리나 프레임워크를 사용해 이러한 기능을 각 서비스에 통합할 수도 있지만, 이 접근 방식은 유지보수와 확장성 측면에서 문제를 일으킬 가능성이 크다.이러한 기능을 각 서비스에 일관되게 구현하기 어렵다: 개발자는 제품 기능 구현에 집중하느라 바쁜 일상을 보내는 경우가 많아, 서비스 로깅이나 추적 기능처럼 필수적이지만 부가적인 작업을 간과하기 쉽다. 특히, 이러한 기능이 반드시 요구되는 규제 산업이 아니라면 더욱 잊혀지기 쉽다...
모든 시스템, 특히 분산 시스템은 실패를 겪기 마련이다. 이러한 실패를 처리할 수 있는 애플리케이션을 설계하는 것은 소프트웨어 개발자의 중요한 과업이다. 그러나 회복 가능한 시스템을 설계할 때, 대부분의 소프트웨어 엔지니어는 주로 인프라스트럭처나 주요 서비스의 일부가 완전히 작동하지 않을 상황만을 고려한다. 이들은 핵심 서버의 클러스터링, 서비스 로드 밸런싱, 인프라스트럭처를 여러 위치로 분산하는 등의 기술을 활용하여 애플리케이션 각 계층에 중복성을 확보하는 데 초점을 맞춘다. 이 접근법은 시스템 구성 요소가 완전히, 그리고 종종 심각하게 손상되는 상황을 상정하지만, 이는 회복력 있는 시스템 구축에서 일부 문제만 다루는 것에 불과하다. 서비스가 완전히 중단되면 이를 감지하고 애플리케이션이 우회하도록 처리..
·자바
자바에서 execute() 메서드는 보통 JDBC나 SQL 쿼리 실행, 또는 Apache Commons Exec 라이브러리와 같은 외부 라이브러리에서 사용된다. 1. JDBC에서의 execute() 메서드JDBC에서 execute() 메서드는 Statement 객체의 메서드로, SQL 쿼리를 실행하는 데 사용된다. 이 메서드는 쿼리의 결과가 ResultSet을 반환하는지 여부와 관계없이 SQL 문을 실행할 수 있다. 반환값은 boolean 타입으로, 쿼리가 ResultSet을 반환하면 true, 그렇지 않으면 false를 반환한다.JDBC에서 execute() 사용import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statem..
분산 아키텍처에서는 호스트 이름과 머신이 위치한 IP 주소를 파악하는 것이 필수적이다. 이 개념은 분산 컴퓨팅의 초기부터 사용되었으며, '서비스 디스커버리'라는 이름으로 공식화되었다. 서비스 디스커버리는 애플리케이션에서 사용하는 원격 서비스 주소를 포함하는 간단한 프로퍼티 파일을 관리하는 방식부터, UDDI 저장소와 같은 정교하고 구조화된 접근 방식까지 다양한 형태로 구현될 수 있다.수펑 확장 (horizontal scaling or scale out): 이 패턴은 일반적으로 애플리케이션 아키텍처에서 클라우드 환경 내 서비스 인스턴스와 컨테이너 수를 늘리는 등 추가적인 조정을 필요로 한다.회복성 (resiliency): 이 패턴은 비즈니스에 영향을 주지 않으면서 아키텍처와 서비스 내부에서 발생한 문제를 ..
애플리케이션 구성 정보를 코드에서 분리하는 것은 매우 중요하다. 대개 이 말은 코드에 하드코딩된 값을 사용하지 않도록 하라는 의미이다. 이 원칙을 무시하면 구성 정보가 변경될 때마다 애플리케이션을 재컴파일하고 재배포해야 하므로 애플리케이션이 복잡해진다. 애플리케이션 코드에서 구성 정보를 완전히 분리하면 개발자와 운영자는 재컴파일 없이 구성 정보를 변경할 수 있다. 그러나 이로 인해 개발자에게는 애플리케이션과 함께 관리하고 배포해야 할 추가적인 산출물이 생기므로 복잡성이 증가한다. 많은 개발자들이 프로퍼티 파일(YAML, JSON, XML)을 사용해 구성 정보를 저장한다. 이러한 파일을 통해 애플리케이션 구성을 설정하는 작업은 간단하고, 대부분의 개발자는 구성 파일을 소스 제어 시스템에 추가하고 애플리케이..
GLaDiDos
GLaDiDos의 티스토리