본문 바로가기

전체 글88

데브코스 백엔드 중간 회고 중간 회고 데브코스 시작 후 3개월이 되었습니다. 후반기로 접어들면서 본격적인 프로젝트에 들어가기 앞서 지금까지 배운 것들, 느낀 것들을 정리해볼 필요성을 느꼈습니다. 코드리뷰 항상 제게 필요하다고 느꼈던 부분이었고 과제를 수행하면서 부족한 점들을 많이 찾고 고칠 수 있는 기회였다고 생각합니다. 멘토님들께 코드 리뷰를 받고 질의응답을 하면서 느낀 점은 객체지향, 스프링, JPA, 계층형 아키텍처 등 그동안 구현하면서 잘 쓰고 있다고 생각했던 것들이 사실은 그렇지 않다는 것이었습니다. 첫 번째 계산기 과제에서 어떤 객체에 책임을 할당해야할지 알지 못했습니다. 책임을 할당한다. 라는 말은 알고 있었지만 말 그대로 알고만 있었습니다. 객체지향에 대한 제대로 된 학습이 필요하다 느꼈습니다. 다행히 객체지향 스터.. 2023. 8. 27.
스프링 시큐리티 인증 프로세스와 데이터베이스 인증 처리 복습 AbstractAuthenticationProcessingFilter는 사용자의 인증을 위한 정보를 모아서 미완성의 Authentication 객체를 만듭니다. 구현체를 기준으로 다시 정리해봅시다. UsernamePasswordAuthenticationFilter는 HTTP 요청으로부터 인증을 위한 파라미터를 뽑아냅니다. 이를 토대로 인증되지 않았고 권한도 없는 UsernamePasswordAuthenticationToken 객체를 만듭니다. 생성된 Authentication 객체는 AuthenticationManager로 전달되어 인증 프로세스를 수행합니다. 다시 한 번 구현체를 기준으로 정리해봅시다. 생성된 UsernamePasswordAuthenticationToken 객체는 Pro.. 2023. 8. 12.
[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.
엔티티 매니저와 영속성 컨텍스트 1. 엔티티 매니저란? 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회 등 엔티티와 관련된 모든 일을 처리하는 관리자이다. 내부에 데이터소스를 유지하면서 데이터베이스와 통신한다. 개발자 입장에서 엔티티 매니저를 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 이때, 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용해서는 안 된다. 이러한 엔티티 매니저는 엔티티 매니저 팩토리에 의해서 생성된다. 엔티티 매니저 팩토리 엔티티 매니저 팩토리는 엔티티를 만들기 위한 공장이다. JPA 구현체에 따라 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는데 많은 비용이 든다. 때문에 어플리케이션은 하나의 엔티티 매니저 팩토리를 공유해서 사용해야 한다. .. 2023. 7. 30.