1. 동작 원리Spring Security 의존성이 없는 경우 'HTTP 요청 → WAS → 필터 → 서블릿 → 컨트롤러' 순으로 작동한다. 그림으로 표현하면 다음과 같다.반면에, Spring Security 의존성을 추가하면 필터를 하나 추가하여 중간에 요청을 가로챈다. 가로채진 요청은 Spring Security 로직을 마친 후 다음 필터로 복귀한다.DelegatingFilterProxy: Bean Filter를 찾아 해당 필터로 요청을 넘긴다. (FilterChainProxy가 없다면 Bean Filter들을 DelegatingFilterProxy에 하나하나 등록해야 한다.)FilterChainProxy: Spring Security가 제공하는 특별한 Bean Filter다. 우리는 이 Filter..
전체 글
1. 의존성 프로젝트에 사용한 의존성은 다음과 같다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-mustache' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connect..
1. DFS 구현DFS는 stack으로 구현되며 재귀 함수를 통해 구현할 수 있다.import sysinput = sys.stdin.readlinedef dfs(now, graph, visited): visited[now] = True print(now, end=' ') for next in graph[now]: if not visited[next]: dfs(next, graph, visited)n, m, start_node = map(int, input().rstrip().split()) graph = [[] for _ in range(n+1)] ..
1. 풀이from collections import dequedef solution(edges): answer = [] max_num = 0 graph = [[] for _ in range(1000001)] # 만들어진 노드는 들어오는 edge가 없다. 이를 체크하기 위한 노드다. not_end_list = [True for _ in range(1000001)] # graph를 생성한다. for edge in edges: start, end = edge graph[start].append(end) not_end_list[end] = False max_num = max(max_num, start, end)..
1. JWT의 의미와 구성JWT란 Json Web Token의 약자로 사용자 인증에 사용되는 토큰이다. JWT의 구조는 다음과 같이 Header, Payload, Signature로 이루어진다.1.1. Header첫 번째로 Header는 typ과 alg 두 가지 정보로 구성된다. typ은 토큰의 타입을 말한다. 우리는 JWT를 사용하므로 현재 typ은 JWT가 된다. alg는 Signature를 해싱하기 위한 알고리즘을 말한다. RSA, SHA 256 등이 있다. 즉, 아래와 같이 작성된다.{ "alg": "HS256", "typ": "JWT"}1.2. Payload두 번째로 Payload는 토큰의 정보가 들어있다. 이때 이 정보들 하나하나 각각을 Claim이라고 부른다. (Key-Value ..
1. 문제 정의큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더해 가장 큰수를 만드는 법칙이다. 이때 특정 인덱스에 해당하는 수가 K번 연속해서 더해줄 수 없다. 입력: 첫째 줄에 N(2이상 1000이하), M(1이상 10000이하), K(1이상 10000이하)가 주어진다. 둘째 줄에는 N개의 자연수(1이상 10000이하)가 주어진다. 이때 입력으로 주어지는 K는 항상 M 이하다.출력: 큰 수의 법칙에 따라 더해진 답을 출력한다.2. 풀이# 입력n, m, k = map(int, input().split())num_list = list(map(int, input().split()))# 첫 번째로 큰 수와 두 번째로 큰 수 뽑아냄max_num = max(num_list)num_li..
1. 풀이풀이는 다음과 같이 Brute Force로 풀었다. 다른 사람들 풀이도 비슷하게 Brute Force로 풀었기에 다른 풀이는 따로 포스팅하지 않았다.# friends: 친구들의 이름을 담은 1차원 문자열 배열# gifts: 이번 달까지 주고받은 선물 기록을 담은 1차원 문자열 배열def solution(friends, gifts): ''' friends_dict: gifts_count_list에 활용하기 위해 각 이름을 key로, 인덱스를 value로 가지는 dictionary gifts_index: 선물 지수를 담는 1차원 리스트 gifts_result: 다음 달 받을 선물의 개수를 담는 1차원 리스트 gifts_count_list: 선물을 준 사람은 행, 선물을 받..
문제 및 해답BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요.SELECT BOOK_ID, SUBSTRING(PUBLISHED_DATE, 1, 10) AS PUBLISHED_DATEFROM BOOKWHERE CATEGORY = '인문'AND PUBLISHED_DATE like '2021%'ORDER BY PUBLISHED_DATE;문제에서 PUBLISHED_DATE는 2021-01-18 00:00:00과 같이 구성되었다. 이때 2021년에 출판되었는지 찾아내기 위해 like문을 활용했다.정렬은 기본값이 오름차순이므로 AS..