목록분류 전체보기 (111)
Spring & Java
인증 & 인가 개념 다시한번 정리인증과 인가가 무엇이였는지 다시 한번 잡아 보고 갑시다. 인증 ( 401 에러 코드 )인증 " 너 누구야? " 를 확인하는 과정이겠죠. 개념 사용자의 신원 (Identity)을 확인하는 절차클라이언트가 자신이 누구인지를 증명아이디/비밀번호, 토큰, 인증서 등 다양한 방식 사용예시 로그인 시 아이디/비밀번호 입력 -> DB 조회 -> 일치하면 인증 성공JWT 토큰 헤더에 포함 -> 토큰 유효성 검증 -> 인증 성공결과인증에 성공하면, 사용자 정보가 보안 컨텍스트에 저장 됨이 정보를 바탕으로 이후 요청 처리 시 누가 요청 했는지 판단할 수 있음인가 ( 403 에러코드 )인가 " 너 이거해도 돼" 를 판단 하는 과정 개념인증된 사용자가 요청한 리소스나 기능에 접근할 권한이 있..
우리는 앞전에 JWT를 통해서 인증 인가/인가 처리하는 것을 해봤습니다.API가 요청이 들어오면 JWT가 있는지 없는지 검사하고 없다면 해당 토큰이 유효햔지를 검사 했습니다.유효하면 Controller로 접근을 허용하고 그렇지 않다면 접근을 막았습니다.이런 작업을 모든 요청에 일괄적으로 적용한다면 Controller에서 일일이 요청할 필요가 없어지는 겁니다 무슨 말이냐면 모든 컨트롤러 메서드 마다 url 마다 매번 넣어줫어야 했습니다.이렇게 되면 똑같은 코드의 무한한 반복, 코드를 수정을 할 때 코드를 계속 바꿔야 하고 코드도 길어지는 불편함이 생깁니다.@GetMapping("/get")public String api1(){ // JWT 인증/인가 검사 // 실행하고 싶은 로직}@GetMappin..
JWT 이해 JWT가 무엇인지, JWT 장점이 무엇인지를 학습 하면서 로그인 기능을 구현해볼까 합니다.시작전에 학습 자료를 먼저 살펴보고 내용을 기록에 남기는 것으로 JWT에 대한 내용을 시작해보겠습니다. JWT란 무엇인가요 ?JWT는 출입증이랑 동일하다고 보면 됩니다. 예시로, 회사 출입증 같은거라고 보면 이해하기 쉬울 것 같네요. 회사에 매일 출입 하는데 절차가 복잡하고 인증 하기가 쉽지 않다면 회사를 다니기 쉽지 않겠죠 ?그래서 그 간편한 절차로 인증을 하도록 만든 방식입니다. ( JWT : 토큰을 생성해서 로그인 하도록 유지 ) 말그대로 가지고 다닐수 있는 출입증으로 통과 하는 방식이라고 보면 되겠네요.위 이미지는 JWT 방식 출입증이라고 보면 매우 쉽습니다. https://token.dev/..
필터란? 말그대로 들어온 것을 걸러주는 역할을 한다.스프링으로 치면 들어온 모든 입력에 대해서 가장 먼저 처리하는 역할을 하게 되는것이다. 필터는 본격적인 스프링 로직이 실행되 전에 사용자의 요청을 한번 걸러주는 역할을 합니다. 기존에 우리가 알고 있던 동작 순서[Postman (User)] ↓ - 요청 보냄 ↓[Controller] ↓ - 응답 보냄 ↓[Postman (User)] 실제 동작 하는 순서[Postman (User)] ↓ - 요청 보냄 ↓[Filter] ↓ [Controller] ↓[Filter] ↓ - 응답 보냄 ↓[Postman (User)] 모든 요청은 Controller에 들어가기 전과 나가기 전에 Fil..
DI/IoC가 뭔줄 알아? Spring DI/IoC : 의존성 주입, 객체를 주입 한다. = 스프링이 주입을 한다! 라고 이해하고 있음. DI와 IoC를 설명해야 되는 순간이라면 느슨한 결합과 인터페이스라는 개념이라고 보면 된다.느스한 결합은 뭐냐? 스프링이 가장 핵심적으로 중요시 여기는 아키텍처 원칙 중 하나 이 " 느슨한 결합 "을 왜 써야 될까?객체들은 서로 너무 강하게 결합 되어있기 때문에 테스트도 힘들고 변경도 어렵기 때문이다. 예를들어 A객체가 B객체를 내부적으로 계속 생성하고 B 객체가 C 객체를 생성하고 이런 구조를 가지게 된다. 반대로, 느슨한 결합은 인터페이스를 통해서 이 친구들을 서로 참조하게 된다. 예시로 몇가지 보여주면 강하게 결합 된 예시로 보여주면 이렇다. public clas..
베이직반 1차 수업 ( (자바 복습 + 스프링 시작) )베이직반 2차 수업 ( (3 Layer Architecture + JPA) )베이직반 3차 수업 ( (스프링 입문) )베이직반 4차 수업 ( (스프링 입문2) )베이직반 5차 수업 ( (IoC/DI/Bean) )베이직반 6차 수업 ( (Bean등록, 연관관계) ) 베이직반 7차 수업 ( (JPA 연관관계) )베이직반 8차 수업 ( (세션 로그인/로그아웃) )베이직반 9차 수업 어노테이션 / 벨리데이션 벨리데이션 @SessionAttribute(name = "loginUser" , required = false) SessionUser sessionUser ;서버 세션(HttpSession) 안에 저장된 값을 읽어오는 역할이에요.
ArgumentResolverArgumentResolver는 Spring MVC에서 " 컨트롤러 메서드의 매개변수 (파라미터) " 에 적절한 객체를 자동으로 바인딩해주는 컴포넌트 입니다.즉, 컨트롤러 메서드에 코드를 예시로 들자면@GetMapping("/user")public String getUser(@RequestParam String name, @PathVariable Long id, @RequestBody UserDto dto, @AuthenticationPrincipal User user) { ...} 이때 스프링은 각 매개변수마다 자동으로 " 값을 주입 " 해주죠. 이걸 누가 ..
학습 목표● Session과 JWT의 이해● Stateful과 Stateless의 이해● JWT의 구성 요소● AcceessToken과 RefreshToken Session 세션 - 세션 인증은 서버가 사용자의 로그인 상태를 기억하고 관리하는 방식입니다." 마치 단골가게 주인이 우리를 기억하고 같은 메뉴를 줄까요? " 라고 묻는 형식과 같다.핵심 특징 : Stateful ( 상태 유지 )세션 방식의 가장 큰 특징은 Stateful, 즉 서버가 사용자의 상태 (로그인 정보)를 계속해서 저장하고 유지한다는 점입니다. 1. 로그인을 하면 서버는 무작위의 유니크한 Session ID ( = Session Key ) 를 생성하고 이를 키 값으로 하여 로그인 정보를 저장 하고, ID 클라이언트에게 반환합니다. 2...
HTTP 복습 ● Start Line 시작줄가장 첫 줄요청의 종류 ( GET, POST 등 )응답의 여부 ● Header 헤더○ 보내는 사람, 받는 사람, 내용물의 종류 등 메시지를 처리하는데 필요한 각종 설정과 데이터가 담김 ● 본문 (Body)○ HTML 문서, 이미지 파일, JSON 데이터 등이 여기에 담긴다. HTTP의 특징 - StatelessHTTP의 가장 중요한 특징은 무상태 프로토콜이라는 것입니다. 이를 우리는 Stateless 라고 학습 합니다.HTTP가 Stateless라는 뜻은, 매 요청마다 HTTP 요청 스스로가 자신이 누군지를 밝혀야만 '로그인' 상태가 유지된다는 뜻입니다. HTTP의 StatelessStateless이므로 매 요청마다 자신이 누군지 밝혀야합니다. 그리고 그것이 ..
인증과 인가 인증 ( Authentication )인증은 사용자가 누구인지 확인하는 절차입니다.시스템에 등록된 사용자인지를 증명하는 과정이라고 할 수 있습니다.● 웹 사이트에 아이디와 비밀번호를 입력하여 로그인하는 것● 스마트폰 잠금을 지문이나 얼굴 인식으로 해제하는 것● 건물 출입구에서 신분증을 자시하여 신원을 확인받는 것웹 서비스는 HTTP가 Stateless(무상태) 이기 때문에, 서버는 이 요청이 어떤 사용자로부터 왔는지를 기억할 수 없습니다.그래서 로그인 이후에도 사용자를 식별하려면 "상태를 유지하는 방법" 이 필요합니다. 인가 ( Authorization ) 권한인가는 인증된 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지 확인하는 절차입니다.즉 "무엇을 할 수 있는지" 를 허가 ..