전체 글 39

[Spring] Spring Security (2) - Spring Security Filter Chain

스프링 시큐리티의 필터 체이닝에 대한 학습. 1. Spring Security Filter Chain 스프링 시큐리티는 서블릿 필터를 기반으로 동작합니다. 스프링 시큐리니는 내부적으로 각 필터가 책임을 갖게 하고, 서비스에 따라 추가/제거 되는 필터 체인을 가지고 있습니다. 네임스페이스 구성을 사용한다면, 내부적으로 FilterChainProxy 객체를 스프링 빈으로 등록하는데, FilterChainProxy는 접근제어, 로그인/로그아웃 등의 보안 관련 서블릿 필터들을 묶어서 실행해주는 기능을 제공합니다. 2. DelegatingFilterProxy 스프링 책을 보다보면 '스프링 시큐리티를 위한 web.xml 설정'이라는 부분에서 DelegatingFilterProxy 라는 부분이 나오는데, 대부분이 넘..

BackEnd/Spring 2022.02.23

[Spring] Spring Security (1)

스프링 시큐리티에 대한 기본 개념 학습 1. Spring Security 란 ? 어플리케이션에 인증과 권한 부여를 제공하는데 중점을 둔 스프링 하위의 프레임워크. 여기서 인증(Authenticate) 와 인가(Authorize) 에 대한 이해가 먼저 필요합니다. 인증(Authenticate)은 간단히 말해서 누구인지 확인하는 것입니다. 어떤 보호된 리소스에 접근할 때 접근하는 대상이 누구인지 확인하는 과정입니다. 인가(Authorize)는 리소스에 대한 접근 권한이 있는지 확인하는 것입니다. 어떤 대상을 인증했을때, 그럼 그 대상은 이 리소스에 접근이 가능한지 확인합니다. 스프링 시큐리티는 인증, 인가의 과정을 Filter 를 통해서 제어를 합니다. Filter 의 위치를 대략적으로 그려보면 위와 같습니..

BackEnd/Spring 2022.01.10

[TDD] TDD 란? (Test Driven Development)

[사진 : https://wooaoe.tistory.com/33] 우아한테크캠프 Pro 과정에서 배웠던 TDD 를 복습하고자 합니다. ✹ TDD란? Test Driven Development. 즉, 테스트가 주도하는 개발. 기존에 방식 : 설계 → 개발 → 테스트 TDD의 방식 : 설계 → (테스트 - 개발) 위와 같이 3가지의 cycle 을 돌며 개발을 진행하다 테스트를 통하여 설계의 오류를 잡을 수 있음. 🔄 TDD 개발 사이클 설계 → 실패하는 테스트 케이스 작성(작은 단위) → 테스트 통과하도록 작성 → 리팩토링 TDD 에서 코드는 크게 두가지로 나눕니다. 실제 구현 코드인 '프로덕션 코드' 와 테스트를 담당하는 '테스트 코드' TDD 로 개발을 진행하는 경우에는 TDD의 cycle에 맞게 프로덕..

[Spring] JWT + 2 Factor(SMS 인증)

JWT 를 사용하며 2 Factor (sms 인증) 을 하는 방법에 대해서 생각하며 프로젝트를 간단히 만들었습니다. 업무 중, 보안ㅇ 관련하여 2 Factor 인증과 동시접속을 제한해달라는 지시를 받았는데, 이 두 문제를 같이 고려하였습니다. ( 전체 소스 : https://github.com/KyungSik9870/JwtAuthentication ) ✹ JWT (Json Web Token) 사용 JWT 란? JSON 객체를 사용해서 토큰에 정보를 저장하는 Web Token. Header, Payload, Signature 로 이루어져 있습니다. 헤더에 담겨질때, Authorization : 의 형태를 띄고 type 에 대해서는 JWT 에 특정되는 표준은 없고, OAuth2 에 사용되는 Bearer 를 ..

BackEnd/Spring 2021.12.20

[Java] JVM이란?

JVM이란 JVM(Java Virtual Machine)은 자바를 싱행하기 위한 가상 머신이다. 자바로 작성된 어플리케이션은 모두 JVM에서 실행되며, 일반 어플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는 반면, 자바 어플리케이션은 JVM을 한번 더 거치게 된다. 이때문에 자바 어플리케이션은 OS와 하드웨어에 독립적이다. 단, JVM은 OS에 종속적이므로 OS에 따라 실행가능한 JVM이 필요하다. JVM의 메모리 구조 JVM의 3가지 주요 영역에 대해서 써보려고 한다. 1. Method Area 프로그램 실행 중 어떤 클래스가 사용되면, JVM읜 해당 클래스의 클래스파일을 읽어서 분석하고, 클래스에 대한 정보를 이곳에 저장한다. 해당 클래스의 클래스변수 또한 이 영역에 함께 생성된다. 2. Hea..

언어/Java 2019.09.25

[Java] wrapper class

Wrapper Class 래퍼(wrapper) 클래스란 자바의 기본형 변수를 객체로 다뤄야 할 때 사용된다. (기본형 8개는 객체로 다루지 않는다) 래퍼 클래스들은 객체생성 시에 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있고, 이에 관련된 여러 메서드가 정의되어있다. 기본형 래퍼클래스 생성자 예시 boolean Boolean Boolean(boolean value) Boolean(String s) char Character Character(char value) Character c = new Character('a'); byte Byte Byte(byte value) Byte(String s) Byte 는 실제 사용 시 byte형의 범위 내에 있는 값을 넣어도 정수의 기본 자..

언어/Java 2019.09.17

[Java] 변수 - 형변환(Casting)

형변환 형변환이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다. 형변환의 방법은 간단하다. 형변환하고자 하는 변수나 *리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주면된다. 서로 다른 타입간의 대입 또는 연산을 할 떄, 편의상의 이유로 형변환을 생략할 수 있다. 이를 '자동 형변환'이라고 한다. 자동형변환은 기존의 값을 최대한 보존할 수 있는 타입으로 변환한다. 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중 표현범위가 더 넓은 쪽으로 형변환이 이루어진다. boolean을 제외한 기본형 7개의 자동형변환은 그림과 같이 왼쪽에서 부터 오른쪽으로 자동형변환 되며, 오른쪽에서 왼쪽으로의 변환은 명시적으로 형변환연산자를 써줘야 한다. * 기본형..

언어/Java 2019.09.05

[Java] 변수 - 타입

자료형은 값이 저장될 공간의 크기와 저장형식을 정의한 것이다. 자료형은 크게 기본형과 참조형으로 나눌 수 있는데, 기본형 변수는 값을 저장하고, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖는다. (메모리에는 1byte단위로 일련번호가 있는데, 이를 메모리 주소라고 한다. 위에서 말한 주소는 변수, 객체가 저장된 메모리 주소를 뜻한다.) * 기본형 변수 분류 타입 논리형 boolean (1 byte) true 와 false 중 하나를 값으로 갖고, 조건식과 논리적 계산에 사용. 문자형 char (2 byte) 문자를 저장하는데 사용, 변수에 하나의 문자만 저장 가능. 정수형 byte (1 byte) short (2 byte) int (4 byte) long (8 byte) 정수를 저장하는데 사..

언어/Java 2019.09.04

[Java] 변수 - 선언과 초기화

변수 변수란 값을 저장할 수 있는 메모리 공간. 하나의 값을 저장할 수 있으므로, 새로운 값을 저장하면 기존의 값은 사라진다. 변수의 선언 변수의 선언은 '변수의 타입 변수이름' 과 같은 형식으로 적어준다. ex) int a; int는 변수의 타입, a는 변수의 이름이다. 변수의 이름은 값을 저장하는 메모리 공간에 이름을 붙여준 것. 변수를 선언하면, 메모리의 빈 공간에 '변수타입'에 알맞은 크기의 저장공간이 확보되고, 이 저장공간은 '변수이름'으로 접근하여 사용할 수 있게 된다. 변수의 초기화 변수는 초기화를 해주어야 한다. 그 이유는 메모리는 자바프로그램 하나만 사용하는 자원이 아닌 여러 프로그램이 공유하는 자원이다. 메모리에 알 수 없는 '쓰레기값'이 남아있을 수 있기 때문에 초기화를 해주어야 한다..

언어/Java 2019.09.04