본문 바로가기

분류 전체보기

(147)
스프링 시큐리티에서 Redis로 jwt 액세스 토큰, 리프레쉬 토큰 구현 액세스 토큰과 리프레쉬 토큰이란? 액세스(Access) 토큰과 리프레쉬(Refresh) 토큰 모두 jwt 토큰이며 사용자 UX와 보안적인 부분을 위해서 고안된 방법이다. 귀찮게 왜 한가지만쓰면 되지 토큰을 분리 했을까? 만약 토큰을 분리하지 않았다면 두가지 경우를 직면하게 된다. 첫째로 토큰의 유효기간이 너무 길어서 토큰이 탈취당했을때 위험성이 높아진다. 탈취된 토큰으로 단지 헤더에 Bearer 토큰을 추가함으로써 오랫동안 사용자 행세를 할수 있기 때문이다. 두번째로 토큰의 유효기간을 짧게 한다면 탈취당해도 재사용 가능성이 줄어들겠지만 사용자가 자주 로그인을 해야함으로 불편함을 겪게된다. 그래서 자주 사용하는 액세스 토큰은 유효기간을 짧게 하고 상대적으로 보안이 약한 localStorage에 저장하고 그..
스프링 시큐리티에서 뷰(View)에 대한 접근 설정 스프링 시큐리티 뷰(View)에 대한 접근 설정방법 이번 멋쟁이사자처럼 최종 프로젝트를 하면서 jwt 토큰을 이용해서 스프링 시큐리티 설정의 통해 REST Api 접근을 통제하는것이 가능했다. 일단 뷰는 모든 사용자가 접근하고 그후에 어떤 Get 요청이라든지 Post 요청이라든지는 아래와 같이 시큐리티의 requestMatchers를 설정하여 권한 설정이 가능했다. requestMatchers(HttpMethod.GET, "/something").hasRole("ADMIN") 이렇게 모든것이 잘풀린다고 생각했던 찰나 그럼 뷰는 어떻게 막는지에 대한 의문이 생겼다. 왜 이런 의문이 생겼나면 어드민만의 뷰가 존재했기 때문이다. 즉 다른 사용자는 사용할수 없는 페이지가 있는데 이곳은 어드민만 보이는 버튼을 통..
JPA 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 엔티티를 영구 저장하는 환경이라는뜻 EntityManager를 통해 영속성 컨텍스트에 접근 가능 디비와 애플리케이션의 중간에서 중개함 영속성 컨텍스트의 장점 1차 캐시(1차캐시에 저장돼서 같은 쿼리가 여러번 나가지 않음) 동일성 보장(1차캐시에서 꺼내오기때문에 동일) 트랜잭션을 지원하는 쓰기 지연(쓰기 지연 SQL에 모아두고 트랙잭션 단위에 쿼리를 한꺼번에 날림) 변경 감지(Dirty Checking: 1차 캐시에 저장할때 스냅샷을 찍어놓고 트랜잭션 커밋 시점(내부에서 flush 호출)에 만약 스냅샷과 엔티티가 다르다면 쓰기 지연 SQL에 업데이트 쿼리를 추가함) 지연 로딩(연관관계의 객체들은 필요할때 가져오도록함, 처음엔 프록시 객체로 끼워넣음) 변..
유니온 파인드 알고리즘 Find 연산 대표노드를 찾는 연산 O(logN)의 시간복잡도를 갖는다 맨 처음에는 자기 자신으로 초기화 되어있다. 재귀적으로 구현할때 반드시 리턴값으로 업데이트 해줘서 경로 압축을 해줘야한다 Union 연산 두 집합을 합치는 연산 합칠때는 각각의 대표노드를 찾아서 한쪽의 대표노트로 값을 바꿔주면 된다(편의상 작은쪽으로) 선택된 노드끼리 연결하는게 아니라 대표노드끼리 연결해야함 활용 용도(발상법) 1. 네트워크 연결성 검사 네트워크 내의 노드들이 서로 연결되어 있는지, 또는 두 노드가 같은 네트워크 내에 있는지를 판별할 때 예를 들어, 컴퓨터 네트워크나 소셜 네트워크에서 두 사용자가 서로 연결되어 있는지 확인할때 2. 최소 신장 트리 알고리즘 최소 신장 트리(Minimum Spanning Tree, MS..
Querydsl JPQL의 단점 JPQL은 문자열을 사용해 개발자가 직접 쿼리를 작성 컴파일시에 오류를 잡아내기 어려움 동적쿼리 작성 어려움 Querydsl Querydsl은 데이터를 조회하는 여러 맥락에 대하여 같은 Java 코드로 데이터를 조회하는것을 목표로 함 자바 코드기 때문에 컴파일시 오류 검출 가능 조건으로 따로 추출하여 동적쿼리 작성이 유리 JPAQueryFactory JPQL을 빌더처럼 작성할수 있게 해주는 객체 JPA를 사용하기 때문에 EntityManager를 의존함 Spring Data JPA를 사용한다면 Bean 객체로 등록돼 있음 자세한 사용법 https://github.com/joshiaLee/Querydsl
OAuth2 소셜 로그인 서비스의 회원가입 과정을 진행할 필요 없이, 제 3의 서비스에 등록된 회원정보를 활용하여 서비스에 로그인하는 기능 다른 서비스의 사용자 정보를 안전하게 위임받기 위한 표준 로그인을 대신 해주는 기술이 아님 어떤 서비스에 직접 인증 정보를 주지 않아도 나의 정보를 조회할수 있도록 권한을 위임하는 기술 정보를 조회할수 있는것이지 로그인은 상관없음, 즉 회원가입 처리나 로그인 처리는 비지니스 로직에 맡김 OAuth2 과정 사용자가 로그인 필요한 서비스 요청 사용자가 소셜 로그인 선택하면 Redirect 됨 (ex. 네이버, 카카오톡) 소셜 로그인 (ex. 네이버 로그인) 소셜 서비스 제공 화면(ex. 이 애플리케이션에게 정보를 제공하시겠습니까?) 인증 정보 제공을 선택하면 Access Token ..
JWT JWT - JSON Web Token JSON으로 표현된 정보를 안전하게 주고받기 위한 Token의 일종 사용자 확인을 위한 인증 정보 위변조 확인이 용어(위변조가 어려움, 읽는거는 쉽다) 토큰 기반 인증 시스템에서 많이 활용(사실상 표준) header.payload.signature header: JWT의 부수적 정보 payload: JWT로 전달하고자 하는 정보가 담긴 부분 signature: JWT의 위변조 판단을 위한 부분 Token Based Authentication - 세션을 저장하지 않고 토큰의 소유를 통해 인증 판단 상태를 저장하지 않기 때문에 서버의 세션관리 필요 없음 토큰 소요가 곧 인증 -> 여러 서버에 걸쳐서 인증 가능 쿠키는 요청을 보낸 브라우저에 종속되지만(이동시킬수 없음), ..
리눅스 명령어 정리 심볼릭 링크 지정ln -s  작업 중단ctrl + N 작업 일시중지(쓰지마)ctrl + Z 모든 프로세서 출력ps -ef 또는 ps aux 8080 포트로 실행중인 프로세스 찾기lsof -i :8080 프로세서 종료kill 프로세서 강제 종료kill -9  윈도우의 작업관리자 같은 출력top 또는 htop > : stdout redirection (기존 파일이 있으면 덮어씀)ping google.com > ping_google.txt출력결과를 ping_google.txt 파일에 쓰도록 출력 스트림을 리다이렉션(스트림 리다이렉션) 2> : stderr redirection>> : 기존 파일 있으면 이어씀sort  패턴 검색grep [옵션] [패턴]..