분류 전체보기 161

[시큐리티] OAuth2 - 승인 코드 그랜트 유형 깃허브로 연습

전제 조건 권한 부여 서버와 리소스 서버로 깃허브를 사용한다 클라이언트는 내가 작성한 스프링 백엔드 코드다 사용자는 깃허브를 사용하면서 내가 작성한 스프링 백엔드 코드에 접근한 사람이다 1. 권한 부여 서버에게 클라이언트를 알리기 깃허브에서 클라이언트의 이름, 홈페이지, 깃허브가 클라이언트를 다시 호출할 링크를 지정하기 양식 입력 후 클라이언트 ID와 클라이언트 비밀을 얻을 수 있다 2. 클라이언트에 인증 방식으로 OAuth2를 사용할 것이라고 선언하기 build.gradle 혹은 pom.xml에 OAuth2 의존성을 주입해야 한다 dependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' } conf..

Spring/security 2023.03.31

[알고리즘] 정렬 - 병합 정렬

1. 개념 하나의 배열을 크기가 같은 2개의 배열로 분할한다. 분할은 분할 대상의 배열 길이가 2이상이면 계속 반복하다 분할 대상 배열 길이가 1이하가 되면 반복을 멈춘다. 분할된 배열을 병합하는데, 정렬을 하면서 병합을 진행한다. 병합을 진행할 때는 병합 대상이 되는 2개의 배열 각각에 포인터를 두고, 포인터가 가리키는 원소 중 더 작은 것을 병합 결과 배열에 놓고, 병합 결과 배열에 놓인 원소의 포인터는 증가시킨다. 2. 특징 분할 정복 방법이 적용된다. 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 각각을 해결할 때는 재귀적으로 함수 호출을 진행하여 해결한다. 만약 배열로 데이터를 다루면 제자리 정렬이 아니다. 병합된 내용을 담을 추가 메모..

알고리즘 2023.03.30

[시큐리티] OAuth 2

1. 개념 권한 부여 프레임워크. 내가 만든 서비스에서 구글이나 네이버 같은 다른 플랫폼의 사용자 정보에 접근하기 위한 권한을 위임 받을 수 있도록 해주는 것. 2. 구성 요소 1) 리소스 서버 내가 만든 서비스에서 다른 플랫폼의 사용자 정보에 접근하려고 할 때, 다른 플랫폼의 사용자 정보를 리소스라고 한다. 그리고 이러한 리소스를 제공해주는 서버가 리소스 서버이다. 즉, 구글이나 네이버 같은 플랫폼의 서버가 리소스 서버라고 할 수 있다. 2) 사용자(리소스 소유자) 내가 만든 서비스를 사용하는 사용자이면서, 구글이나 네이버 같은 다른 플랫폼을 사용하여 그 플랫폼의 리소스를 소유하고 있는 사람 3) 클라이언트 사용자를 대신해 리소스 서버에 접근하는 주체로, 보통 내가 만든 서비스를 의미한다. 4) 권한 ..

Spring/security 2023.03.30

[알고리즘] 정렬 - 퀵소트

1. 개념 배열에서 피봇을 하나 정한다. 맨 왼쪽에서 시작해서 배열을 살피는 화살표가 하나 있고, 맨 오른쪽에서 시작해서 배열을 살피는 화살표가 하나 있다. 왼쪽 시작 화살표를 옮겨가며 피봇보다 크거나 같은 원소를 찾는다. 오른쪽 시작 화살표를 옮겨가며 피봇보다 작은 원소를 찾는다. - a 만약 왼쪽 시작 화살표가 원소를 하나 찾고, 오른쪽 시작 화살표가 원소를 하나 찾으면 둘을 교환한다. 교환 후 왼쪽 시작 화살표는 아까 찾은 거 이후 부터 다시 피봇보다 크거나 같은 원소를 찾고, 오른쪽 시작 화살표는 아까 찾은 거 이후 부터 다시 피봇보다 작은 원소를 찾는다. - b-1 만약 왼쪽 시작 화살표와 오른쪽 시작 화살표가 만나면 만난 위치에 있는 원소와 피봇을 교환한다. 교환된 피봇은 확정된다. - b-2..

알고리즘 2023.03.29

[시큐리티] 토큰

1. 개념 클라이언트가 애플리케이션의 자원에 접근할 수 있도록 해 주는 일종의 출입카드. 이것이 있어야 원하는 자원(엔드포인트)에 접근해서 자원을 얻을 수 있다. 서버가 클라이언트의 인증을 확인하는 방법 중 하나. 2. 작동 클라이언트가 본인의 아이디와 비밀번호를 서버에게 보내면서 나는 올바른 회원이니 토큰(출입카드)를 달라고 요청한다. 서버는 이 요청을 보고 저 회원이 올바른 회원인지 확인한 후, 올바른 회원이면 토큰을 주고 올바르지 않은 회원이면 토큰을 주지 않는다. 이때, 토큰을 준다면 건네준 토큰을 서버는 어딘가에 저장해 놓는다. 나중에 클라이언트가 토큰을 보냈을 때 올바른 토큰인지 검사가 필요하기 때문에. 클라이언트는 아까 받은 토큰을 가지고 있다가, 엔드포인트를 호출할 때(api를 호출해서 자..

Spring/security 2023.03.29

[시큐리티] CORS

1. 개념 CORS는 cross origin resource sharing의 줄임말이다. 여기서 origin은 프로토콜(http), 도메인(naver.com), 포트번호(8080)을 합친 것을 의미한다. 즉 CORS는 서로 다른 여러 origin끼리 자원을 공유할 수 있도록 해주는 정책이다. 이는 원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 것이다. SOP란 same origin policy의 줄임말로, 다른 origin으로 요청을 보내는 것을 금지하는 정책이다. 요즘 다른 origin으로 요청을 보내야 할 필요성이 커지자 CORS가 나타나게 된 것. 예를 들어, 백엔드에서 글을 작성할 수 있는 /post/write api를 만들었다고 하자. 만약 CORS가 적용되어 있지 않는다면, SOP에 의..

Spring/security 2023.03.28

[시큐리티] CSRF

1. 개념 사용자 A, A가 사용하는 서비스 B, 공격자 C가 있다고 하자. A는 B에 로그인을 한다. 로그인 된 상태로 A는 C가 보낸 이상한 링크를 통해 어떤 사이트에 접속한다. 이 사이트에는 B에 광고성으로 글을 올릴 수 있는 위조된 코드가 들어있다. A가 B에 로그인을 한 상태로 위조된 코드가 있는 사이트에 들어갔는데 만약 B가 요청이면 무조건 승낙을 하는 보안 정책을 가지고 있다면 B에는 위조된 요청에 의해 A의 계정으로 광고성 글이 작성된다. 이처럼 위조된 요청으로 서버에 어떤 작업을 시킬 수 있는 것이 CSRF이다. 2. 보호 방법 1) csrf 토큰 get요청이 들어왔을 때 서버가 고유한 csrf 토큰을 생성해서 클라이언트에게 보내고, 클라이언트는 이후 post, put, delete 등의..

Spring/security 2023.03.27

[알고리즘] 정렬 - 버블정렬

1. 개념 맨 앞부터 시작. 첫 번째 원소와 그 다음 원소를 비교. 만약 다음 원소가 더 작으면 교환하고 그렇지 않으면 그대로 둠. 그리고 두 번째 원소, 세 번째 원소로 가서 앞에서 진행했던 거를 반복. 이걸 한 싸이클 진행하면 맨 뒤에 가장 큰 수가 남게 되고 그 수는 고정이 된다. 위와 같은 과정을 반복하면 버블정렬이 완료됨 2. 특징 1) 장점 안정 정렬이 가능함(같은 원소가 있어도 같은 원소의 상대적인 위치, 즉 누가 앞에 있던 거고 누가 뒤에 있던 건지가 바뀌지 않음) 구현이 쉬움 추가 메모리가 거의 필요하지 않음 2) 단점 교환 과정이 많음 시간 복잡도가 O(n2) 3. 시간복잡도 1) 비교 횟수 항목의 개수가 n이면 (n-1) + (n-2) + (n-3)... + 1 만큼 비교를 한다. 이..

알고리즘 2023.03.27

[알고리즘] 정렬 - 삽입정렬

1. 개념 배열의 원소를 하나씩 살피면서, 살피는 원소와 살피는 원소 앞에 있는 원소를 비교해서 만약 앞에 있는 원소보다 작다면 살피는 원소를 앞으로 보낸다. 더 이상 앞으로 보낼 수 없을 때까지 반복한다.(오름차순 기준) 2. 특징 1) 장점 안정한 정렬 방법(정렬하면서 같은 원소가 있어도 위치가 변하지 않는다) 레코드의 수가 적을 경우 알고리즘 자체가 매우 간단하므로 다른 복잡한 정렬 방법보다 유리할 수 있다. 대부분위 레코드가 이미 정렬되어 있는 경우에 매우 효율적일 수 있다. 2) 단점 비교적 많은 레코드들의 이동을 포함한다. 레코드 수가 많고 레코드 크기가 클 경우에 적합하지 않다. 3. 시간복잡도 1) 최선(다 정렬되어 들어올 경우) 비교횟수 target이 target 바로 전 것과 비교되고 ..

알고리즘 2023.03.26

[자료구조] 우선순위 큐(Priority Queue)

1. 개념 일반적인 큐의 구조를 가짐. 하지만 먼저 들어온 것이 먼저 나가는 구조가 아님. 들어올 때 우선순위에 맞게 정렬이 되어 들어오고, 들어온 것들 중 정해놓은 우선순위가 가장 높은 것이 먼저 나가는 구조. 나가고 나서 우선순위에 맞게 다시 정렬이 됨. 2. 특징 값을 비교해야 하므로 null을 허용하지 않음 값을 비교해야 하므로 우선순위 큐에 삽입될 객체들은 Comparable Interface에 있는 compareTo 메서드가 구현되어 있는 객체여야 함. 내부 구조는 이진트리 힙으로 되어 있음 값이 들어올 때 마다 일단 이진트리 맨 마지막에 값을 넣음 그리고 부모 노드와 비교해가며 우선순위에 맞게 정렬을 진행함 값이 나갈 때는 트리의 루트를 이진트리 맨 마지막 노드와 바꿈 맨 마지막을 나가게 하..

자료구조 2023.03.26