분류 전체보기

    Oauth 2.0 & JWT 의 두 가지 흐름, 그리고 OIDC

    아래 그림들은 카카오 소셜 로그인의 흐름을 정리한 그림이다. 인터넷에 나와있는 각종 그림들을 보고 내 식대로 정리한 것이다. 또한 이런 흐름은 하나만 정답이 아니다. 나는 다음 게시글에서 많은 참고를 했다. https://ttl-blog.tistory.com/1434#%F0%9F%A7%90%20OAuth%202.0%20%ED%94%8C%EB%A1%9C%EC%9A%B0%20%EC%A0%95%EB%A6%AC-1 [Spring] 확장에 유연한 OAuth2.0 로그인 구현(카카오, 네이버, 구글 등) (Security 사용 X) (전 순정 백엔드 개발자기 때문에 React는 못합니다. React 코드는 Chat GPT 시켜서 구현하였고, 대신 백엔드에 온 진심을 담하서 구현하였으니, 프론트 코드는 정말 그냥 테..

    JWT 총정리 (1) - JWT의 원리와 흐름

    JWT의 탄생 이전의 인증 체계 JWT 탄생 이전의 인증 체계는 Session & Cookie 방식을 사용했다. 이 방식에서의 여러 단점이 있었지만 가장 큰 단점은 세션 저장소였다. 사용자의 세션 ID를 모아놓은 세션 저장소를 관리해야 했다. 그리고 매 요청마다 세션 저장소에 접근해야 하는 비용이 컸다. 또한 Monolith 방식의 구조에서 프론트엔드와 백엔드의 분리가 일어나고, 더 나아가 백엔드가 여러 서버로 갈라지는 Microservice 구조가 나타났다. 이 과정에서 세션 방식은 너무 큰 비용을 발생시켰다. 서버가 따로 세션을 관리해서 HTTP의 무상태성을 위배시키는 방식이 아니라 새로운 인증 체계가 필요했다. 이것이 JWT이다. 새로운 인증 체계 - 토큰 그럼 이렇게 하기 위해서 어떤 흐름을 가져..

    [Programmers] 최댓값과 최솟값 (C++) with 문자열 파싱 (토큰 분리)

    https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 걸린 시간 : 8분 29초 문자열 파싱을 위한 split 함수를 공부하기 위해 푼 문제이다. C++은 Python이나 Java와 같이 다른 언어와 달리 토큰분리를 간단하게 할 수 있는 라이브러리 함수를 제공하지 않아 스스로 만들어서 쓰면 좋다. 알고리즘 #include 을 해준 후, 문자열에서 stringstream을 생성해 getline 함수로 토큰분리를 한다. 밑의 함수를 통째로 외우는 것도 ..

    [BOJ] 1520 : 내리막 길 (C++) with Top Down DP

    https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 걸린 시간 : 32분 21초 알고리즘 처음엔 간단한 DFS로 접근했다가 시간초과가 났다. 그제서야 시간복잡도를 체크해보니 최대 4^(500*500) 번의 실행이 일어날 수 있었다. 따라서 다른 방법을 찾아야 했다. 바로 떠올린 것이 DP였다. 예제를 다시 따라해보니 같은 실행을 너무 과도하게 반복한다는 생각이 들었다. DP에서 제일 중요한 것은 일반항이다. 잘 적용할 수 있는 일반항을 생각해보았다. p..

    [Programmers] 2021 KAKAO BLIND RECRUITMENT : 합승 택시 요금 (C++) with 플로이드

    https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 걸린 시간 : 31분 02초 프로그래머스에서 레벨2의 문제도 상당히 애를 먹은 게 많아 레벨3를 도전하기 어려웠다. 레벨3를 처음 도전해본 문제인데, 레벨2보다 쉬운데...? 싶은 느낌이다. 이거 레벨 누가 매기는 거지... 보고 문제를 해석하자마자 플로이드 알고리즘부터 생각났다. 하지만 플로이드 관련 문제를 푼지 오래된 것 같아 확실하게 공부해보고자 다른 문제를 풀고 넘어왔다. https://m..

    [BOJ] 11404 : 플로이드 (C++) with 플로이드

    https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 걸린 시간 : 12분 50초 (이에 해당하는 강의를 본 직후 풀어서 시간은 의미 없음) 플로이드 와샬 알고리즘의 가장 기본이 되는 문제이다. 플로이드 알고리즘은 임의의 점부터 임의의 점까지의 모든 최단거리를 알고 싶을 때 사용하는 O(N^3) 알고리즘이다. N이 몇백 수준일 때 사용하면 된다. 1000이 넘어가는 시점부터는 다익스트라 등 다른 알고리즘을 사용할 수 있는지 확인하자. 알고리즘 플로이..

    [BOJ] 14501 : 퇴사 (C++) with DP

    https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 걸린 시간 : 21분 33초 알고리즘 다이나믹 프로그래밍이다. 예시로 나온 걸 차례대로 다 해보고, 거기서 일반항을 도출하면 끝이다. 모든 요소들을 돌면서 cost라는 dp 배열에 다음과 같이 실행한다. cost의 초기 상태는 모두 0이다. i번째 요소는 현재 그 값이거나, 아니면 이전에 현재 값보다 더 큰 값이 올 수 있었다면 그 값이다. 따라서 최댓값을 하나 변수에 저장해두고 탐색할 때마다 i번째 요소를 최신화한다. 만약 이 상담을 진행하면 N+1 째날에 퇴사할 수 없을 경우, 즉 인덱스를 벗어날 경우 고려하지 않는다. 이번 상담..

    [BOJ] 20056: 마법사 상어와 파이어볼 (C++)

    https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 걸린 시간 : 1시간 46분 45초 너무너무... 오래 걸려서 자신감을 떨어트린 문제.... 파이어볼을 저장하는 자료구조를 처음에 multimap으로 접근했다가 말도 안되는 생각이란 걸 알았다. 그 후, 3차원 배열과 벡터를 번갈아가며 쓰는 것으로 결정했고, 다들 그렇게 많이 한 것 같다. 두 번째는, 좌표가 0~(N-1)이 아니라 1~N 이기 때문에, 좌표..

    [BOJ] 17828 : 문자열 화폐 (C++)

    https://www.acmicpc.net/problem/17828 17828번: 문자열 화폐 첫 번째 줄에 문자열의 길이 N(1 ≤ N ≤ 5,000,000)과, 문자열의 가치를 나타내는 정수 X(1 ≤ X ≤ 500,000,000)가 공백으로 구분되어 주어진다. www.acmicpc.net 걸린 시간 : 24분 6초 오류 코드 맨 처음, A와 Z를 하나하나 문자열에 더해가면서 했다. 뭔가 비효율적이라고 생각이 들었고, 역시나 시간초과였다. #include using namespace std; int N, X; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> N >> X; if (N > X || N * 26 < X) { cout 0) { if..

    [Programmers] 2020 KAKAO BLIND RECRUITMENT : 문자열 압축 (C++)

    https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 걸린 시간 : 46분 43초 차근차근 해나가면 어렵지 않은 문자열 문제다. 단, 해줘야 할 예외처리가 꽤 많은 편이다. 알고리즘 for 문으로 1부터 문자열 길이의 절반까지 모두 단위로 생각해 문자열을 압축해본다. 문자열 길이의 절반이 넘을 경우 압축이 될 수가 없으므로 압축해볼 필요가 없다. 여기서, 문자열의 길이가 1일 경우 예외처리를 해야 한다. 마지막에 테스트해보다가 알게 되었다. 테스트케..