Spring

Request 와 Response 이글을 찾아보는것은 개발을 접한지 얼마 안된 사람일수 있다. 이것을 추리 할 수 있을 정도로 개발을 시작하면 빠르게 만날수 있고 모르면 개발이 어려워지는 중요한 개념이다. HTTP 의 특징 Request(요청) / Response(응답) 클라이언트에서 Request 를 서버에게 보낸다 서버에서 Response 를 클라이언트에게 보낸다 Stateless 상태를 유지하지 않는다는 특성으로 HTTP 통신은 독립적이기 때문에 과거의 통신에 대한 내용은 전혀 알수 없다 따라서 모든 통신에는 필요한 모든 정보를 담아 요청을 하게 된다는 것을 알수 있다. Request 메세지의 구조는 크게 세부분으로 구성되어있다. 1. Start line 요청의 첫번째 줄 이며 이또한 세부분으로 나..
1. 정적 리소스를 제공하는 방법 정적 리소스란, 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공한다 주로 웹 브라우저에서 요청을 한다. 2. HTML 페이지를 제공하는 방법 동적으로 필요한 HTML 파일을 생성해서 전달한다. 그럼 웹 브라우저는 동적으로 생성된 HTML 파일을 해석해서 읽은 후 사용자에게 보여주는 역할을 한다. 3. HTTP API를 제공하는 방법 HTML 이 아닌 데이터를 전달하는 경우 주로 JSON 이 많이 사용되며 다양한 시스템에서 호출하고는 한다 다양한 시스템은 서버에서 데이터만 전달하고 UI 화면이 필요하면 클라이언트가 별도로 처리하는것을 말한다 웹 클라이언트 to 서버 - 흔히 알고 있는 웹은 자바스크립트를 통해 동적으로 서버에게 API 요청또한 진행할수 있다..
데이터를 받은 서버에서 처리해야 하는 업무가 무엇일까? 웹 애플리케이션 서버 직접 구현한다면 우리는 무엇을 만들어 주어야 하는가? 우리가 어떠한 형태의 데이터를 전송 받았다. 예를 들어 이렇게 생겼다고 생각해보자 그렇다면 우리는 받은 데이터를 이제 알맞게 조작을 해서 전달을 해주어야 한다. 그럼 알맞게 조작을 할때 서버가 해야 할일은 아래와 같다. 왼쪽의 사진은 서버에서 받은 데이터를 가공하는 과정이다 초록색으로 칠한 부분인 비즈니스 로직을 제외한 나머지 작업이 너무 많았다. 이는 굉장히 비효율적이다 때문에 우리는 비즈니스 로직만을 다루고자 나머지 과정을 지원해주는 서블릿이라는 것이 나타났다. 서블릿 ▶ 서블릿 코드 사용법 서블릿을 사용하기 위해 코드를 작성하는 방법은 매우 간단하다. 해당 클래스에 서블..
서블릿을 호출하는건 도데체 누구? 기본적인 요청과 응답의 과정이다. 그림에 보이는 연결이 되고 서블릿을 호출하는 과정에서 도데체 누가 Servlet 을 호출하는것일까? 그것이 바로 쓰레드라는 녀석이다. 쓰레드의 역할 애플리케이션 코드를 하나하나 순차적으로 실행하는것이 쓰레드이다 자바 Main 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다 쓰레드는 한번에 하나의 코드 라인만이 수행 할 수있다 "동시 처리"가 필요하다면 쓰레드를 추가로 생성한다. 단일 요청과 다중 요청("동시 처리") ▶ 단일 요청 단 한개의 요청만 생기고 쓰레드를 할당하여 서블릿을 호출하고 응답한다. 이는 굉장히 알기 쉬운 예제라고 생각한다. ▶ 다중 요청 우리는 서비스를..
웹서버 ( Web Server ) HTTP 기반으로 동작하는 서버 정적 리소스를 제공하며, 기타 부가기능 또한 제공합니다 정적 리소스란? HTML, CSS, JS, 이미지, 영상 등을 뜻한다 대표적인 웹 서버로는 NGINX 와 APACHE 라는 것이 있다. 웹 애플리케이션 ( WAS ) HTTP 기반으로 동작한다 웹 서버 기능을 포함하고 정적 리소스 또한 제공하고 있다 프로그램 코드를 실행해서 어플의 로직을 수행할 수 있다는 것이다. 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 대표적인 WAS 로는 톰캣과 Undertow 등이 있다. 굉장히 비슷하면서도 다른 이 두가지의 차이가 뭘까? 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직이다. 하지만 두개의 경계는 모호..
세션의 단점을 보안하기 위해 나온 Token들은 굉장히 다양하다. 우선 기본적으로 토큰은 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하면서 유효성 검사를 도와준다. 이러한 시스템에서는 더 이상 사용자의 인증 정보를 서버나 세션에 유지하지 않고 클라이언트 측에서 들어오는 요청만으로 작업을 처리한다. 즉, Stateless 성격을 띄고있다. 장점 무상태성 & 확장성 : 토큰은 클라이언트 측에 저장되기 때문에 서버는 완전히 Stateless 하며, 클라이언트와 서버의 연결고리가 없기 때문에 확장하기 매우 적합하다 여러 플랫폼 및 도메인 : 서버 기반 인증 시스템의 문제점 중 하나인 CORS 를 해결할 수 있다 토큰을 사용하면 어떤 디바이스, 어떤 도메인에서도 토큰의 유효성 검사를 진행한 후에 요청을 처..
시큐리티를 접하면 가장 많이 공부하게 되는 필터이고 모르고 넘어갈래야 넘어갈수가 없는 필터로 왔다 이번에는 해당 필터에 대해서 배워보자 우선 가볍게 정말 당연하지만 우리가 로그인 하는 방식을 알아보자 사용자는 로그인을 먼저 하는것이 아니다! 우리의 전제 조건은 항상 인증이 필요한 요청을 한 사용자의 입장에서 먼저 시작한다 그렇다면 시큐리티는 사용자의 인증을 확인한다. 우리는 인증이 되지 않은 사용자를 기준으로 공부해볼것이기 때문에 인증이 안된 사용자로 시큐리티는 인식한다. 그럼 우린 인증이 안된 사용자에게 로그인 창을 권유하게 되는것이다. 그럼 로그인창으로 사용자는 formdata에 username과 password가 담신 post형태의 데이터를 넘긴다. 그럼 서버는 해당 사용자를 확인하고 session..
ExceptionTranslationFilter (인증과 인가의 예외 처리) AuthenticationException 인증 예외 처리 AuthenticationEntryPoint 호출 로그인 페이지로 이동하고, 401 오류 코드를 전달한다. 인증 예외가 발생하기 전의 요청 정보를 저장한다 RequestCache - 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘 SaveRequest - 사용자가 요청했던 request 파라미터 값들, 그 당시의 헤더값들 등이 저장되어있다. AccessDeniedException 인가 예외 처리 AccessDeniedHandler 에서 예외를 처리한다. 이 두가지의 예외를 누가? 누가 담당하고 발생시키는 것일까? 그 필터는 바로 FilterSec..
권한 설정이 무엇일까? 바로 우리가 시큐리티를 하게 되면 가장 고민하고 설정을 깔끔하게 해야할 부분이다 권한 설정은 방식이 설정되어 있는데 이는 두가지로 나뉜다. 선언적 방식 URL 을 통한 선언적 방식 http.requestMatcher("/user/**").hasRole("USER") Method 를 통한 선언적 방식 @PreAuthorize("hasRole('USER')") public void user() { System.out.println("user") } 동적 방식 - DB 연동 프로그래밍 URL Method 이런식으로 나뉜다. 각 페이지는 사용할수 있는 권한들이 있고 이는 사용자가 설정해주어야 한다. 그러면 훨씬 많은 페이지를 보다 간편하게 다룰수 있는것이다. 코드를 보면 이런식으로 설정이..
Anonymous 라는 이름 굉장히 친숙하다. 익명의 사용자를 뜻하는 Anonymous 를 처리하는 Filter가 있다니 굉장히 놀랍다 익명의 사용자 인증 처리 역시나 생각보다 굉장히 간단한 로직을 타고 있다. 하지만 여긴 중요한 것이 있기 때문에 꼭 알아두어야 할것이다 익명 사용자 인증 처리 필터 익명 사용자와 인증 사용자를 구분 화면에서 인증 여부를 구현할 때 isAnonymuos() 와 isAuthenticated() 로 구분해서 사용한다. 인증객체를 세션에 저장하지는 않는다. 우리는 상식적으로 인증을 할 때 과정은 유저가 인증을 하면 세션에 인증된 user객체를 저장하고 해당 사용자가 어딘가에 접근하려고 한다면 해당 세션에서 저장한 객체를 확인해서 이 객체가 null 인지 아닌지 확인해 인증을 판..
늦은산책
'Spring' 카테고리의 글 목록 (2 Page)