본문 바로가기

공부방22

SOLID 원칙 SOLID 원칙은 우리에게 좋은 소프트웨어 구조를 만들기 위한 원칙을 제공해줍니다. 클린 아키텍처에 따르면 SOLID 원칙의 목적은 중간 소프트웨어 구조가 다음과 같도록 만드는 데 있습니다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SOLID는 이를 구성하고 있는 다섯 가지 원칙의 첫 번째 글자들로 만든 단어입니다. 이는 다음과 같은 원칙들로 구성되어 있습니다. 단일 책임 원칙(Single Responsibility Principle, SRP) 각 소프트웨어 모듈은 오직 하나의 책임만 가져야 한다. 개방-폐쇄 원칙(Open-Closed Principle, OCP) 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에.. 2024. 3. 23.
CORS는 왜 필요할까? CORS란 교차 출처 리소스 공유(Cross Site Resource Sharing, CORS)는 애플리케이션을 통합하기 위해 서로 다른 출처 간 요청을 허용하기 위한 메커니즘입니다. 기본적으로 모든 브라우저는 보안 상의 이유로 동일 출처 정책(SOP)을 구현하고 있으며 이로 인해 교차 출처 리소스 공유라는 별도의 메커니즘을 이용하여야 합니다. CORS는 웹 어플리케이션 개발자라면 기본적으로 숙지해야 하는 내용입니다. 왜 동일 출처의 요청만을 허용하게 되었는지, 다른 출처의 요청을 허용하기 위한 CORS의 기본 메커니즘이 어떻게 되는지 알아야합니다. 왜 다른 출처의 요청을 허용하지 않는가? 과거에는 프론트엔드, 백엔드의 구분 없이 요청을 처리하고 브라우저를 렌더링하였습니다. 시간이 흐르면서 프론트엔드와 .. 2024. 3. 17.
[TIL] 스프링 시큐리티 인증 아키텍처와 프로세스 1. 스프링 시큐리티 인증 아키텍처 SecurityContextHolder SecurityContextHolder는 스프링 시큐리티 인증 모델의 핵심입니다. 이것은 인증된 사용자에 대한 세부 정보(details)를 저장하는 곳입니다. 어떤 값이 포함되어 있든 간에 값이 포함되어 있기만 하면 인증된 사용자로 간주됩니다. SecurityContextHolder는 전략 패턴을 사용합니다. SecurityContextHolderStrategy를 클래스 변수로 가지며 ThreadLocal을 사용하여 세부 정보를 저장하는 ThreadLocalSecurityContextHolderStrategy을 기본 전략으로 사용합니다. final class ThreadLocalSecurityContextHolderStrategy.. 2023. 8. 6.
[TIL] 스프링 시큐리티 아키텍처 1. 스프링 시큐리티 아키텍처 FilterChain 스프링 시큐리티는 서블릿 필터를 기반으로 동작합니다. 사용자가 애플리케이션에 요청을 보내면 서블릿 컨테이너는 요청 URI를 기반으로 HttpServletRequest를 처리하는 FilterChain을 생성합니다. 각 필터는 순차적으로 요청과 응답에 대한 여러 작업을 수행하게 됩니다. 스프링 웹 애플리케이션이라면 마지막에 오는 Servlet은 DispatcherServlet이 될겁니다. DelegatingFilterProxy 스프링은 서블릿 컨테이너의 라이프사이클과 스프링의 ApplicationContext 사이를 연결할 수 있는 DelegatingFilterProxy라는 필터 구현체를 제공합니다. 이 녀석이 모든 작업을 Filter를 구현하는 스프링 b.. 2023. 8. 5.
[TIL] 스프링 시큐리티 Quick Start 1. 스프링 시큐리티 스프링 시큐리티는 인증, 권한 부여, 악의적인 공격으로부터 보호하기 위한 포괄적 지원을 제공하는 프레임워크입니다. 공식 문서에서는 스프링 기반 애플리케이션에서 보안을 위한 사실상(de-facto) 표준이라고 표현하고 있습니다. 스프링 시큐리티가 제공하는 기능은 다음 세 가지로 요약할 수 있습니다. 1) 인증(Authentication) 스프링 시큐리티는 사용자 인증을 위한 지원을 제공합니다. 가장 일반적인 방법은 사용자의 아이디와 패스워드를 입력하도록 요청하는 것입니다. 인증이 완료되면 신원을 파악하고 권한 부여를 수행할 수 있습니다. 2) 악의적인 공격으로부터 보호(Protection Against Exploits) 일반적으로 알려진 악의적 공격으로부터 보호 기능을 제공합니다. 3.. 2023. 8. 5.
[TIL 07/05] Spring MVC, REST API 1. Spring MVC 경로 변수 @PathVariable @RequestMapping에서 URL 경로를 템플릿화 할 수 있다. 이때, @PathVariable을 사용하면 URL 경로 안에서 변수를 가지고 올 수 있다. @GetMapping("/customers/{customerId}") public String customerId(@PathVariable Long customerId) { sout(customerId); return "ok"; } 변수 이름이 같은 경우 자동으로 매칭되며 일치하지 않는 경우에는 @PathVariable("customerId")와 같이 명시해주어야 한다. 지원되지 않는 타입으로 변환하려는 경우 TypeMismatchException이 발생한다. 만일 원하는 데이터 유형으.. 2023. 7. 7.