본문 바로가기

[JWT] JSON Web Token - AssessToken과 Refresh 토큰 JWT는 기본적으로 두 가지 토큰을 사용합니다. ※ Access Token API 요청을 허가하는데 사용합니다. 리소스에 직접 접근할 수 있도록 해주는 정보만을 가지고 잇습니다. 즉 클라이언트는 Access Token이 있어야 서버 자원에 접근할 수있습니다. 짧은 수명을 가지며 만료기간을 갖습니다. ※ Refresh Token 새로운 Access Token을 발급받기 위한 정보를 갖습니다. 즉 클라이언트가 Access Token이 없거나 만료되었다면 Refresh Token을 통해 Auth Server에 요청해서 발급받을 수 있습니다. 만료기한이 있지만 깁니다. Refresh Token은 중요하기 때문에 외부에 노출되지 않도록 엄격하게 관리해야 하므로 주로 데이터베이스에 저장합니다. ※ JWT 토큰 재발.. 더보기
[JWT] JSON Web Token - 서버기반/토큰기반 인증의 차이와 JWT의 장단점 ※ 서버 기반 인증 기존의 인증 시스템에서는 서버측에서 유저들의 정보를 세션에 기억하고 있어야 합니다. 이 세션을 유지하기 위해서는 여러가지 방법이 사용되는데 메모리/디스크/데이터베이스 시스템에 이를 담곤 합니다. 서버 기반 인증 시스템의 흐름은 다음과 같습니다. 서버 기반 인증의 문제점 - 세션 : 유저가 인증을 할 때 이 기록을 서버에 저장해야 하는데 이를 세션이라 합니다. 보통은 메모리에 이를 저장하는데, 로그인 중인 유저의 수가 늘어난다면 서버의 램에 과부화가 될 수 있습니다. 데이터베이스에 저장하는 방식도 있지만 이 또한 유저의 수가 많으면 데이터베이스의 성능에 무리를 줄 수 있습니다. - 확장성 : 세션을 사용하면 서버 확장이 어렵습니다. (단순 서버 사양 업그레이드 뿐 아니라 더 많은 트래픽.. 더보기
[JWT] JSON Web Token JWT Process ※ JWT 프로세스 1.사용자가 id /password를 입력하여 로그인을 시도합니다. 2.서버는 요청을 확인하고 secret key를 통해 Access Token을 발급합니다. 3.JWT 토큰을 클라이언트에 전달합니다. 4.이후 JWT가 요구되는 API를 요청할 때는 클라이언트가 Authorization Header에 Access Token을 담아 보냅니다. 5.서버는 JWT signature를 체크하고 Payload로부터 user정보를 확인해 데이터를 리턴합니다 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공합니다. 인증이 필요한 경로에 접근할 때 서버 측은 Authorization Header에 유효한 JWT가 존재하는지 확인합니다. JWT에는 필요한 모.. 더보기
[JWT] JSON Web Token 소개 및 구조 ※ JWT 정의 JSON Web Token(JWT) 은 웹표준(RFC7519) 으로서 두 개체에서 JSON객체를 사용하여 가볍고 자가수용적인(self-contained)방식으로 정보를 안정성 있게 전달해줍니다. ※ JWT 구조 Header, Payload, Signature ● Header typ : 토큰 타입 지정 alg : 해싱 알고리즘 지정, 보통 "HMAC SHA25t6" 혹은 "RSA" 방식이 사용되며, 이 알고리즘은 토큰을 검증 할 때 Signature 부분에서 사용됩니다. { "typ" : "JWT" "alg" : "HS256" } ● Payload 토큰에 담을 정보가 들어있습니다. 여기에 담는 정보의 한 '조각'을 클레임(claim) 이라고 부르고 이는 name/value의 한 쌍으로 이루.. 더보기
[자바] 자바 리플렉션 (Java Reflection) ※ 정의 - 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API ※ 어떻게 가능할까? - 자바 클래스 파일은 바이트 코드로 컴파일되어 Static 영역에 위치하게 된다. 그렇기 때문에 클래스의 이름만 알고 있으면 이 영역을 뒤져서 클래스에 대한 정보를 가져올 수 있다. 가저올 수 있는 정보 목록 ClassName Class Modifiers(public, private, synchronized 등) Package Info SuperClass Implemented Interface Constructors MethodsFields Annotations ※ 리플렉션 사용 예1 (클래스에서 메서드 찾기) public class Main { public.. 더보기
[SPRING] DI 란...? ※ DI (Dependency Injection) 란? 의존성 주입이란 말로도 쓰이며 스프링 IOC 컨테이너 핵심 개념 중 하나이며 이미 다양한 프레임워크에 적용되어 있다. 객체 간의 의존 관계를 외부의 조립기가 관리 불필요한 의존 관계를 없애거나 줄일 수 있다. 단위테스트 수행이 수월하다. 설정파일과 어노테이션을 이용하여 객체간의 의존 관계를 설정 각 객체를 빈(bean)으로 관리 ※ 그림으로 보는 DI 관계 - 의존성 주입 즉 객체를 생성하는게 아니라 객체를 외부에서 생성해서 주입시켜주는 방식 기존 객체생성법 - 특정 객체에서 A라는 객체와 B라는 객체를 직접 생성하고 있다 방법2) DI 방식의 객체생성법 - 외부에서 생성된 객체를 setter()나 생성자를 통해 사용하는 방법이다. ※ DI방법의 장.. 더보기
[자바] 네트워킹 (Networking) ※ 네트워킹이란? 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것. 컴퓨터들을 서로 연결하여 데이터를 손쉽게 주고받거나 또는 자원(프린터와 같은 주변기기)을 함께 공유하고자 하는 노력에서 시작됨. 자바에서 제공하는 java.net 패키지를 사용하면 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있으며, 간단한 네트워크 어플리케이션은 단 몇 줄의 자바코드 만으로도 작성이 가능. ※ 클라이언트/서버 (client/server) 클라이언트 : 서비스를 사용하는 컴퓨터 서버 : 서비스를 제공하는 컴퓨터 ※ 서비스 서버가 클라이언트로부터 요청받은 작업을 처리하여 그 결과를 제공하는 것. ex) 파일 서버, 메일 서버, 어플리케이션 서버 등등 ※ 서버기반 모델 / p2p 모델 서버기반 .. 더보기
[자바] 쓰레드(thread) ※ 프로세스와 쓰레드 프로세스(process) - 실행 중인 프로그램 (프로세스는 데이터, 메모리 등의 자원과 쓰레드로 구성되어있음) 쓰레드(thread) - 프로세스의 실제 작업을 수행하는 것 프로세스가 가질 수 있는 쓰레드의 양은 정해져 있지 않으나 쓰레드가 작업을 수행하는데 개별적인 메모리공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리의 한계에 따라 생성할 수 있는 쓰레드가 결정된다. ※ 멀티쓰레드 멀티쓰레딩은 한개의 프로세스 안에서 여러개의 쓰레드가 동시에 작업을 수행하는 것이 가능하다. 실제로 CPU는 한가지 작업밖에 하지 못하지만 아주 짧은 시간 동안에 여러 작업을 번갈아 수행하가며 동시에 여러 작업이 수행되는 것처럼 보이게 하는 것이다. 그렇기 때문에 쓰레드가 많다고 프로세스가 빨라지.. 더보기
[자바] 인터페이스와 상속의 비교 및 정리 ※ extends와 implements의 차이 - extends 상속을 뜻한다. 사전적 의미로는 확장,확대의 뜻을 가지고 있다. 코딩으로 치면 조상의 멤버(메서드, 변수 등)를 자식에서 그대로 물려받아 추가적으로 자식의 멤버를 추가, 즉 조상의 멤버를 물려받고 자식에서 거기에 추가로 확장하여 사용하는 의미로 보면 적당할 것 같다. 따라서 자식으로 내려갈 수록 조상보다 멤버의 범위가 더 넓다. 클래스끼리는 하나의 클래스만 상속만 된다. public class Ambulance extends Car{} 인터페이스끼리는 다중 상속이 가능하다. 이렇게 여러개의 인터페이스를 상속받은 인터페이스를 클래스에 적용할 땐 모든 메서드를 구현해 줘야한다. interface InterfaceTest1 { public fin.. 더보기
[자바] 예외처리 (Exception) ※ 에러의 종류 - 컴파일 에러 : 컴파일 도중에 생기는 에러 (소스코드에 대한 오타, 잘못된 구문, 자료형 체크 등등) - 런타임 에러 : 실행 도중 생기는 에러 (컴파일 완료 후 시스템 실행시 생기는 에러) ※ 자바에서 예외처리 자바에서는 실행 시 발생할 수 있는 오류를 에러와 예외 두가지로 구분한다. 에러 - 메모리부족, 스택오버플로우등 발생하면 복구할 수 없는 심각한 오류 예외 - 발생하더라도 수습이 될 수 있는 비교적 덜 심각한 것 에러가 발생하면 프로그램의 비정상적인 종료를 막을 순 없지만 예외가 발생하면 프로그래머가 적잘한 코드를 미리 작성해 놓으면 프로그램의 비정상적인 종료를 막을 수 있다. ※ 예외처리의 정의와 목적 정의 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 .. 더보기
[자바] 인터페이스 (Interface) ※ 인터페이스란? 일종의 추상클래스로써 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 인터페이스에는 오직 추상메서드와 상수만을 가진다. 추상클래스 : 부분적으로만 미완성이 되어있는 설계도 인터페이스 : 구현은 아무것도 되어있지 않고 밑그림만 그려져 있는 설계도 ※ 인터페이스 작성 interface InterfaceTest { public static final int a =0; public void method1(); } 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다. 모든 메서드는 public abstract 이어야 하며 이를 생략할 수 있다.. 더보기
[자바] 추상클래스 (Abstract Class) ※ 추상클래스란? 추상 메서드를 포함하고 있는 클래스. 추상 클래스는 미완의 추상 메서드가 있는 클래스로써 추상클래스는 상속을 통해서 자손 클래스에서 구현이된다. ex) abstract class Car { //추상클래스 public void drive(){ System.out.println("출발합니다. 부릉부릉"); } public void stop(){ System.out.println("멈춥니다. 끼이익"); } public abstract void abstractTest(); //추상메서드 } public class FireEngin extends Car{ //추상클래스인 Car를 상속받음 public void water(){ System.out.println("물을뿌립니다. 쉬이이이익"); }.. 더보기