본문 바로가기

전체 글

(80)
검증의 책임에 대해 회원의 권한 검증에 대해 나는 학교 스터디 관련 웹을 만들고 있는 중이다. 해당 웹의 관리자와 일반 회원이 존재한다. 이 웹에서는 다른 웹에서와 마찬가지로 기본적으로 회원은 자신의 프로필 정보를 수정하고 삭제할 수 있어야한다. 관리자는 회원의 닉네임이 부적절하거나 회원의 부적절한 행위에 대해 제제하기 위해 삭제 행위 등을 수행할 수 있어야한다. 또한, 관리자는 스터디에 관한 모든 권한을 가지고 있다. 물론, 관리자가 어떤 누군가가 만든 스터디를 직접적으로 수정할일은 별로 없겠지만 부적절한 스터디로 간주되는 경우 혹은 신고 시스템이 생겨 신고 누적으로 인해 부적절한 스터디로 간주되는 경우 삭제를 진행해야 할 것이다. 그리고 어떤 사람이 스터디를 만들었다. 해당 스터디는 "생성자에 한해" 수정 및 삭제가 가..
[Spring] JWT, OAuth2.0, Email - Redis로 구현 시작하기에 앞서 우리는 이전에 JWT와 이메일 인증을 구현하는데 있어 각각의 토큰들을 DB에 저장하였다. JWT는 Member 엔티티에 RefreshToken이라는 속성을 만들고, 이메일 인증은 EmailAuth라는 엔티티를 만들었다. 물론 이러한 구현이 틀렸다는 부분은 아니지만 이러한 인증 토큰과 관련된 부분은 Redis를 많이 사용한다. Redis란 무엇이고 왜 Redis를 사용하는지 간단하게 살펴보자. Redis는 Remote Dictionary Server의 약자로서 Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다. (NoSql이다.) In-Memory 기반의 데이터 처리 및 저장을 제공하여 속도가 빠르지만 서버가 꺼지면 모든..
[Spring] 이메일 인증 구현 시작하기에 앞서 우리는 어떤 웹 서비스를 이용하기 위해 로그인을 하지 않고 이용하기도 하지만 로그인을 하고 이용해야하는 부분도 존재한다. 그에 따라, 우리는 해당 서비스를 이용하고자 할 때 회원가입을 진행한다. 회원가입을 진행할 때, 우리는 이메일 인증을 마주하곤 한다. 이메일 인증을 하는 방법은 크게 두 가지로 나누어진다. 이메일을 입력하고 해당 이메일에 인증 코드를 보내고 인증 코드를 입력한 뒤 가입하고 이용하는 방식 회원가입을 모두 진행한 뒤, 이메일에 전송된 링크에 접속할 시 로그인 제한이 풀려 이용가능한 방식 이번 포스트에서는 후자의 방법을 구현해보려고 한다. 이번 구현은 이전에 JWT를 구현했던 부분을 이어서 진행한다. 다만, 이전에 했던 부분과 겹치는 내용이 존재하지 않기에 이번 내용만 다뤄..
프로세스(Process), 스레드(Thread) 시작하기에 앞서 우리는 자바 프로그래밍을 진행하다보면 멀티 쓰레딩을 마주치곤 한다. 나에게 프로세스가 무엇인가, 스레드가 무엇인가, 멀티 프로세싱과 멀티 쓰레딩의 차이가 무엇인가에 묻는다면 제대로 대답할 수 있을까에 대한 고민을 한 결과 그렇지 못했다. 그래서 이번 기회로 공부를 해보고자 이 포스트를 작성했다. 프로그램, 프로세스, 스레드 우리가 컴퓨터를 켜고 무슨 일을 하려고 한다면 프로그램을 켜서 작업을 진행한다. 프로그램은 정확히 무엇일까? 작업을 위해 실행할 수 있는 파일 저장 장치에 저장되어 있지만 메모리에 올라와 있지 않은 정적인 상태 그렇다면, 프로세스는 무엇일까? 메모리에 올라와 실행중인 프로그램 운영체제로부터 시스템 자원을 할당받는 작업의 단위 프로그램과 프로세스에 대해 요리로 비유해보자..
[Security] Spring JWT 인증 With REST API(OAuth2.0 추가) (3) 시작하기에 앞서 지금까지 JWT를 활용하여 로그인을 구현해보았다. 하지만, 우리가 다양한 페이지들을 돌아다니다보면 구글 로그인, 네이버 로그인, 카카오 로그인 등 다양한 소셜 로그인이 존재하는 것을 볼 수 있다. 이는 전에 말했던 것처럼 OAuth2.0 방식으로 해당 리소스 서버에 인증을 받아 자원을 꺼내오는 식으로 진행된다. (OAuth 2.0, JWT (tistory.com)) 이를 실제로 구현해보려고 한다. 전체적인 로직을 구성하는데 있어서는 다음과 같이 구상해보았다. 먼저 프론트단에서 소셜 로그인을 진행하는 버튼을 구성하고 사용자는 해당 버튼을 클릭해 로그인을 진행한다. 그렇다면, 사용자는 Authentication Code를 발급받게되고 프론트에서는 이를 헤더에 실어 Server에 요청을 보낸다..
[Security] Spring JWT 인증 With REST API (2) 이전에 이어 이전에는 Spring Security를 이용해 JWT로 인증을 진행하는 방식을 구현해보았다. 이 방식은 다음과 같이 진행된다. 그런데 만약 토큰이 지정한 시간이 되어 만료된다면 어떻게 될까? 이전에 구현한 방식은 위와 같이 진행될 것이다. 기간이 만료된 토큰과 함께 /hello에 요청을 하지만 토큰 기간이 만료되어 요청이 반려될 것이다. 그에 따라, 사용자는 재로그인을 진행한다. 로그인이 성공했다면, 새로운 토큰을 발행하여 반환해주고 해당 토큰을 다시 포함시켜 서비스를 요청할 것이다. 로그인을 계속한다면 사용자에게 너무 불편한 느낌을 줄 수 있다. 이런 부분을 해결하기 위해 우리는 이렇게 생각해볼 수 있을 것이다. "Access Token의 만료 시간 자체를 늘리면 되지 않을까?" 어느 정도..
[Security] Spring JWT 인증 With REST API (1) 시작하기에 앞서 이전에 Spring Security Form Login을 통해 인증 처리를 구현해본바 있다. 이번에는 JWT를 이용해 인증 처리를 진행해보려고 한다. 이번엔 REST API를 활용해 간단한 로그인을 구현해보려고 한다. 요구사항 어떤 사용자는 어떤 페이지에 접근하기 위해서 로그인이 꼭 필요하다. 이를 위해 이전에 회원가입을 진행하고 로그인을 진행한 뒤에 해당 페이지에 접근한다. 로그인이 되어 있지 않을 시, 해당 페이지로의 접근은 불가하다. 개발 환경 Spring Boot : 2.5.6 Spring Security : 5.6.0 Gradle : 7.2 Mysql : 8.0 Entity 이번 요구사항에서는 단순 회원가입 후 로그인을 진행하는 것이기에 엔티티는 회원으로 간단하게 구성하였다. 역..
OAuth 2.0, JWT 시작하기에 앞서 OAuth 2.0(Open Authorization 2.0)은 인증을 위한 개방형 표준 프로토콜이다. 이 프로토콜은 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서사용된다. 우리는 실제로 OAuth 2.0를 자주 사용하고 있다. 구글, 카카오, 네이버, 페이스북, 깃허브 등에서 제공하는 간편 로그인 기능이 하나의 예이며, 우리가 인스타그램을 할 때 페이스북 친구와 연동하여 친구를 추천해주는 것도 OAuth 2.0 중 하나이다. 그렇다면, OAuth 2.0이 어떻게 동작하는지 알아보자. OAuth 2.0 개념 OAuth 2.0에서 사용하는 주요 용어와 개념들에 대해서 살펴보자. OA..