목록Spring (36)
Rootable의 개발일기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dEDlhO/btsGR0ZqNrC/k5wHxGUK66SXrpqo5FKB81/img.png)
📌 Overview Spring Security와 JWT를 이용하여 토큰 기반 인증 구조를 구현하면서 GenericFilterBean과 OncePerRequestFilter로 구현한 코드를 보게 되었다. 그래서 두 방식의 차이점을 아래에서 비교해 보고자 한다. 🧾 Filter 위 그림은 Spring MVC에서 요청의 lifecycle을 나타낸 그림이다. javax.servlet-api나 tomcat-embed-core를 사용하면 제공되는 Servlet Filter Interface로서 클라이언트의 서블릿 요청을 가장 먼저 받는다. ✅ Filter interface package jakarta.servlet;import java.io.IOException;publ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yhrHV/btsD6wFFGPe/KbjIKYEpYQUpwwhla8UcNK/img.png)
스프링 시큐리티는 Authentication(인증)과 Authorization(인가)라는 두 가지 큰 흐름으로 처리된다. 때때로 Authorization을 'Access Control'이라고 말하기도 한다. 📌 인증 방식 인증(Authentication) : Who are you? 인가(Authorization) : What are you allowed to do? 스프링 시큐리티는 기본적으로 인증 절차를 거친 후 인가 절차를 진행하며, 인가 과정에서 해당 리소스에 접근 권한이 있는지 확인한다. 스프링 시큐리티에서는 인증과 인가를 위해 Principal을 아이디로, Credential을 패스워드로 로 사용하는 Crendential 기반의 인증 방식을 사용한다. Principal(접근 주체) : 보호 받는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EncrZ/btsqwWdXNzZ/ycLfVpwxk0b8BQhkk3qDT0/img.png)
📌 목적 서비스 계층이 다른 계층에 의해 변경 영향을 받지 않도록 하기 위함 🔎 트랜잭션 추상화 ✔ 문제점들 예를 들어 서비스 계층에서 계좌이체라는 비즈니스 로직을 수행한다면 반드시 필요한 두 메서드는 조회와 변경이다. 두 메서드 모두 DB에 접근을 해야만 결과를 내줄 수 있다. 하지만, 서비스 계층에서 트랜잭션 관련 로직인 트랜잭션 획득, 커밋, 롤백 등을 포함하면 순수 Java 로직과 데이터 접근 로직이 섞여 유지보수나 테스트에 불리하다. 그리고 가장 큰 문제는 데이터 접근 기술을 교체할 수 없다는 것이다. 그 이유는 서비스 계층에서 구체적인 접근 기술에 의존하기 때문이다. ✔ 해결책 서비스 계층이 인터페이스에 의존하도록 하자 스프링은 트랜잭션의 주요 기능을 추상화한 PlatformTransactio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIUZid/btspZD534Se/XIEW9LtsRRKOOsg5FSAPD0/img.png)
📌 HTML 폼 전송 방식 🔎 application/x-www-form-urlencoded 방식 HTML 폼 데이터를 서버에 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type으로 application/x-www-form-urlencoded를 추가한다. 폼에 입력한 전송할 항목을 HTTP body에 문자로 "username=kim&age=20"과 같이 &로 구분해서 전송한다. ✔ 문제점 파일은 문자가 아니라 Binary 데이터를 전송해야 하므로, 해당 방식으로는 전송이 어렵다. 또한, 보통 폼을 전송할 때 파일뿐만 아니라 다른 데이터도 함께 전달한다. 따라서, Binary 데이터와 문자 데이터를 동시에 ..