CS 24

인증(Authentication) 기본 개념 (Spring boot / Flask

Flask와 Spring boot 프로젝트를 진행하면서 회원가입/로그인 및 인증부분은 프로젝트 완성도 면에서 중요하다고 생각되어 이번기회에 이부분에 대해서 실제 서비스에서 사용되는 로직과 가깝게 구현할 수 있도록 공부를 진행중이다.  인증(Authentication) 기본 개념인증이란?👉 “이 사용자가 누구인지 증명하는 과정”(예: 로그인 → 사용자 정보를 확인하고 ‘누군지’ 알아내는 것) Authentication로그인처럼 "이 사람이 누군가?" 증명Authorization권한 검사 (예: 관리자인가 ??)Session서버에 저장하는 로그인 정보JWT (Token)클라이언트에 저장하는 로그인 정보 (stateless)OAuth2소셜 로그인 방식 (카카오, 네이버, 구글 등)HttpOnly 쿠키보안 강..

CS/필수지식 2025.04.10

Compiled language vs Interpreted language

오늘 회사에서 팀장님이 OJT 를 해주시는데, C, C++, Java. / Python, Javascript 의 차이에 대해서 물어보셨다. 다 아는 언어들인데, 막상 두가지 차이에 대해 답하려니까 쉽지가 않았다. 뭔가 strict한 언어와 유연한 언어로 나뉜거 같기도 하고, 또 C가 묶여있는 것을 보니 객체지향 절차지향으로 나뉜거 같지는 않고,,, 결국 답을 못했고, 이 둘의 차이는 컴파일언어와 인터프리트 언어이다. 컴파일 언어란, 소스코드 전체를 기계어로 번역한 후(컴파일) 이 기계어를 cpu를 통해 실행하는 방식으로 동작한다. 반대로 인터프리트 언어는, 소스 코드를 컴파일 하지 않고, 인터프리터를 통해 한줄 씨 번역하며 실행하는 방식으로 동작한다. 컴파일 언어의 경우, 실행 시에는 실행만 하면 되므로..

CS/필수지식 2022.06.21

공주 구하기 (덱, 큐 )

큐 관련해서 쉬운 문제인데, 분명 유명한 테이블 문제인데 이름이 생각이 안난다... 무슨... 용어가 있는데 이름이 생각이 안나서 너무 괴로운 문제였다. 여튼 문제 풀이는 간단하다. 명수만큼 덱에 넣어준 뒤, while 문을 덱 안에 마지막 한 사람만이 남을 때 까지 돌려준다. 그리고 경우를 cnt로 추적하며, 이 cnt가 K의 배수가 될 때는 이를 리스트에서 삭제시키고, (popleft()) 그 외 나머지 경우네는 popleft()를 해서 그대로 다시 오른쪽에 append 시키고, 이 반복문을 계속하다보면 최후의 왕자가 남게된다. import sysfrom collections import deque#sys.stdin=open("input.txt", 'rt')N, K = map(int, input()...

가장 큰 수 (스택)

먼저 처음 포인트는 이 숫자들을 리스트에 받아줘야하는데, 띄워쓰기로 구분되어있지 않기 때문에 항상 받아왔던 방식인 map(int, input().split()) 방식으로 받을 수가 없다. 그래서 str로 받아서 이것들을 list에 넣는뒤, 다시 int형으로 변환시켜준다.  b_num, delete = map(int, input().split())nums = []for i in range(len(str(b_num))):    nums.append(str(b_num)[i])nums = list(map(int, nums)) 그 후, 새로운 리스트를 만들어 nums에 있는 수들을 끄집어 내며 하나씩 비교해보고, 새로운 리스트에 들어있는 수보다 nums[0]에 들어있는 수가 크다면 이를 빼주고, 삭제할 수 있는 ..

역수열 (그리디 알고리즘)

원래 수열을 [0] * N 으로 초기화 시킨 뒤, 정렬이 되어있다 생각하고 1부터 경우를 생각하며, 원래 수열의 0을 역수열의 원소만큼 카운팅 하면 간단한 문제이다. 이중반복문을 돌리면서 i -> 역수열의 인덱스번호  j-> 원수열의 0을 카운팅하기 위한 인덱스 번호라 생각하고 cnt로 0을 카운팅하면서 어차피 오름차순으로 정렬되어 있기에, 앞에 더 작은 숫자가 나와있는건 신경쓰않고 오로지 0만 카운팅 해서, cnt 와 역수열의 원소값이 같아지면 그때의 i+1 값을 원수열에 넣어주고 다음 반복문을 통해 다음값을 카운팅 해주면 된다. import sys#sys.stdin=open("input.txt", 'rt')N = int(input())rev = list(map(int, input().split()))..

결정 알고리즘 (랜선 자르기)

결정 알고리즘을 이용할 때는 이분탐색을 이용하고, 문제에서 보통 답의 범위를 알 수 있다.  알고리즘은 다음과 같다. 주어진 수들 중에서 max를 찾는다. 그럼 범위는 1 ~ MAX의 수가 될 것이고, 이분탐색으로 중간값을 찾아 답이 되는지 찾아본다. 답이 되는지 찾아보기 위해, Count 함수를 만든다. 이 함수는 주어진 숫자들을 파라미터로 받은 값들로 모두 나누었을 때 그 합을 반환한다. 반환한 값과 K 값을 비교하여, 반환 값이 더 작으면 답이 될 수 없으므로 중간값 기준 더 작은 값, 즉 왼쪽을 탐색해야한다. 반환값이 K값보다 크거나 같을 때는 오른쪽을 탐색한다. 그렇게 while문을 반복하며 lt  이분탐색 기반의 가장 기본적인 알고리즘이며, 기본인 만큼 많이 쓰이고 중요한 알고리즘이니, 확실하..

탐색 & 시뮬레이션 [수토쿠 검사] (죽음의 4중 포문...)

코테 연습을 위해 알고리즘 복습을 하며 탐색의 기본격이라 할 수 있는 수토쿠 검사  알고리즘을 풀어보았다. 구간 검사를 위해 4중 포문을 돌려야하는 번거로움이 있지만, 알고리즘 자체는 그리 어렵지 않다.      3가지에 대한 검사를 해야한다.  1) 가로행에 1 ~ 9 가 다 있는지,2) 세로행에 1 ~ 9 가 다 있는지,3) 3*3 총 9개의 구간에 1 ~ 9 가 다 있는지, 먼저 9*9 총 81개의 숫자를 리스트(sudo) 에 담아준다.  sudo = [list(map(int, input().split())) for _ in range(9)] 그 뒤 check 라는 검사 함수를 만들어준다.  check 함수 안에는 1) 2) 3)을 차례로 검사해주는데 만약 거짓이 있는 순간 바로 False를 ret..

Process와 Thread의 개념 및 차이

프로세스와 스레드가 뭐에요? 라고 말하면 답하는건 어렵지만 않지만 이둘의 차이점은 어떤것이 있는지, 깊게 파고들면 정확하게 대답하기가 쉽지않다. 우선 프로세스란 OS로부터 자원을 할당받은 작업의 단위다. 스레드란, 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위다. 즉 스레드는, 한 프로세스 내에서 나뉘어진 실행 단위인 셈이다. 가령 프로세스 두개가 동시에 실행하기 위해선, 프로세스1이 cpu에 적재되었다가, 준비상태로 내려가고 프로세스2가 적재되고, 이를 반복한다. 이것이 문맥교환이며, 이것이 반복되면 복잡하고 오버헤드가 발생하기 쉽다. 그래서 스레드는 프로세스의 메모리 구조에서, 코드 데이터 힙 영역을 공유한다. 스택 부분만 스레드마다 따로 가지고 있는 것이다. 공유되는 자원이 있기에, 문맥교환..

CS/필수지식 2022.02.11

Deadlock Resolution 1 (기본개념 및 분류)

데드락의 개념: Blocked / Asleep state => 프로세스가 특정한 이벤트, 자원을 기다리는 상태 Deadlock state => 프로세스가 발생 가능성이 없는 이벤트를 기다리는 상태 그렇다면 Deadlock과 starvation의 차이는??? 데드락은 asleep 상태에서 일어날 가능성이 zero를 기다리는 것이고, starvation은 ready상태에서, cpu를 기다리는 것 이다. 자원을 분류할 때 일반적으로 HW / SW 로 분류할 수 있으며, 이외 다른 분류법은, 선점 가능여부 할당 단위에 따른 분류 동시 사용가능 여부 재사용 가능 여부 4가지가 있으며, 각각의 특징은 아래와 같다. 선점 가능 여부에 따른 분류 => cpu는 선점 당해도 돌아와서 다시 일을 할 수 있다(Context..

CS/OS 2022.02.11

Process Synchronization (동기화)

다중 프로그래밍이란, 여러 개의 프로세스들이 존재할때(보통의 경우에 해당) 프로세스들은 서로 독립적으로 동작하고, 공유자원 or 데이터가 있을 때 문제가 발생한다. 이때 동기화가 필요하며, 동기화란 프로세스들이 서로 정보를 공유하며 동작을 맞추는 것이다. 비동기적 => 프로세스들이 서로에 대해 모름 병행적 => 여러 개의 프로세스들이 동시에 시스템에 존재 병행 수행중인 비동기적 프로세스들이 공유 자원을 동시 접근할 때, 문제가 발생할 수 있다. 그러므로 동기화가 필요하다! Shared data(공유 데이터) => 여러 프로세스들이 공유하는 데이터 Critical section(임계 영역) => 공유 데이터를 접근하는 코드영역 Mutual exclusion(상호배제) => 둘 이상의 프로세스가 동시에 cr..

CS/OS 2022.02.07