본문 바로가기

728x90

Computer Science

(14)
[Network] Cookie 옵션 (HttpOnly, Secure, SameSite) - 실습으로 이해하기 개요이전 포스트에서 Cookie 에 sessionId 를 담아 사용자를 식별하는 흐름을 살펴보았다.하지만 Cookie 자체가 안전하게 다뤄지지 않으면, sessionId 를 아무리 잘 만들어도 의미가 없을 것이다. Cookie 에는 어떤 경로로 접근할 수 있는지, 어떤 상황에서 전송되는지를 제한하는 옵션들이 있다.간단한 실습 프로젝트를 활용하여 HttpOnly, Secure, SameSite 세 가지 옵션이왜 필요하고, 실제로 어떻게 동작하는지 하나씩 확인해보고자 한다.실습 환경두 개의 서버를 사용한다.역할주소설명bank.comhttps://localhost:3100로그인, 송금, 게시판 기능이 있는 정상 서비스evil.comhttp://localhost:3101탈취한 Cookie 로 공격을 수행하는 악..
[Network] Cookie 와 Session 개요웹 개발을 하면서 Cookie 와 Session 이라는 개념을 자주 마주했지만,막상 설명하려 하면 명확하게 정리되어 있지 않다는 느낌이 들었다.이 글에서는 두 개념을 복습하고 정리해보고자 한다.HTTP 는 StatelessCookie 와 Session 을 이해하기 전에 먼저 HTTP 의 특성을 알아볼 필요가 있다.RFC 9110 에서는 HTTP 를 다음과 같이 정의한다.RFC (Request for Comments): 인터넷 표준을 정의하는 공식 문서"The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information system..
[Algorithm] 깊이 우선 탐색 (Depth First Search) 15723번 - n단 논법1. 문제모든 중앙대 컴퓨터공학부(소프트웨어학부) 학생들은 미인이다.지무근은 중앙대 컴퓨터공학부 학생이다.그러므로 지무근은 미인이다.위 연역 논증은 대표적인 삼단논법의 예시이다. 삼단논법이란 전제 두 개와 결론 하나로 이루어진 연역 논증이다. 이것을 응용하면, $n$ 개의 전제가 있을 때 $m$ 개의 결론을 도출할 수 있을 것이다. 이때의 $n$과 $m$은 모든 의미에서 적절한 수라고 가정하자. 자세한 것은 입출력 예시를 확인하자.Input첫째 줄에 정수 $n(2 \le n \le 26)$ 이 주어진다.둘째 줄부터 $n$개의 줄에 걸쳐 각 줄에 전제가 하나씩 주어진다. 전제는 모두 a is b의 형식으로 주어지며 a와 b는 서로 다른 임의의 알파벳 소문자이다. 특별한 명시는 없지..
[Algorithm] 너비 우선 탐색 (Breadth First Search) 1. 개요너비 우선 탐색 (Breadth-First Search) 은 비선형 자료를 특정 노드에서 시작하여 하위 노드보다 인접 노드를 먼저 방문하며 탐색하는 방식을 의미한다.2. 의의너비 우선 탐색 은 다음의 경우에 유용하게 사용될 수 있다.너비 우선 탐색의 의의최단 경로 탐색층별 탐색최소 신장 트리 판단3. 조건너비 우선 탐색의 조건비선형 자료 (그래프, 트리) 의 탐색추가 메모리 공간 (자료 구조 Queue 사용)탐색 시작 지점 정의방문 여부 확인4. 구현너비 우선 탐색 은 반복문과 Queue 를 이용하여 구현할 수 있다.탐색 시작 노드를 설정하고 Queue 에 삽입한다.Queue 를 dequeue 하여 얻은 노드를 탐색한다.탐색을 완료한 노드를 기록한다.현재 탐색 노드의 인접 노드들을 Queue 에..
[Algorithm] 색인 순차 탐색 (Indexed Sequential Search) 1. 개요색인 순차 탐색 은 순차 탐색 의 발전 형태로, 색인 배열 (Indexed Array) 의 형태의 구조로 저장된 자료에 대해 탐색하는 방식을 의미한다. 해당 방식은 완전 탐색이 이루어지지 않으므로 브루트 포스 의 범주에서 벗어난다.2. 의의순차 탐색 을 개선한 방식으로 더 효율적인 탐색이 가능하다는 의의가 있다.3. 조건색인 순차 탐색의 조건정렬된 배열추가 메모리 공간 (색인 배열)4. 구현색인 순차 탐색 알고리즘은 반드시 배열이 정렬되어 있어야 하며, 색인 배열을 활용할 추가적인 메모리 공간이 있어야 한다.구현 절차는 다음을 따른다.색인 순차 탐색의 절차색인 배열 크기 설정색인 배열 값 설정색인 배열에서 확인된 범위에 따른 배열 일부 탐색먼저 다음을 정의한다.배열: $A$색인 배열: $I$배열..
[Algorithm] 순차 탐색 (Sequential Search) 1. 개요순차 탐색 (Sequential Search) 은 선형 탐색 (Linear Search) 그 자체이며, 배열과 같은 선형 구조에 대해 탐색하는 방식을 의미한다.자료 구조 전체에 대한 탐색이 이루어지므로 완전 탐색 (Brute Force) 의 한 종류라고 할 수 있다.2. 의의순차 탐색 알고리즘은 구현이 용이하다. 항상 효율적이라고는 할 수 없지만, 쉽게 구현할 수 있다는 점에서 의의가 있다. 또한, 선형 구조의 정렬 여부와 관계 없이 사용 가능하다는 장점이 있다.3. 조건순차 탐색 역시 완전 탐색 이므로 완전 탐색의 조건을 따른다.4. 구현순차 탐색 알고리즘은 선형 자료 구조를 그 길이 만큼 모두 탐색하기 때문에 보통 반복문을 사용하여 구현된다.다음의 예시를 보자.5. 예시) 배열에서 값의 위치..
[Algorithm] 탐색 (Search) 1. 개요탐색 (Search) 알고리즘은 한 개 이상의 자료들 사이에서 특정 자료를 색출하는데 사용하는 방식을 의미한다. 자료가 저장된 형식에 따라 쓰이는 탐색 알고리즘 은 달라진다. 이 포스팅에서는 탐색 알고리즘 의 종류와, 각각의 알고리즘이 어떠한 상황에서 사용되는지에 대해 살펴보고자 한다.2. 종류다음 모두 탐색 알고리즘 이라고 할 수 있다. 위 탐색 알고리즘을 선택하여 해당 포스팅으로 이동할 수 있다.
[Problem] 배낭 문제의 그리디 알고리즘적 접근 (Knapsack, Greedy) 해당 포스팅은 [Problem] 배낭 문제 (Knapsack Problem) 의 하위 문서입니다. 그리디 배낭 (GreedyKnapsack) 클래스 구현 class GreedyKnapsack(Knapsack): def get_algorithm(self): return 'Greedy' def fractional_solve(self): # TODO: 분할 배낭 문제를 그리디로 구현 3.3.1. 0-1 배낭 문제 접근 0-1 배낭 문제를 그리디 알고리즘적으로 접근할 수 있을까? DP에서 사용한 단위 무게당 가치의 개념을 다시 사용해보자. 물체를 단위 무게당 가치 내림차순으로 정렬한 다음 배낭에 넣을 수 있는 만큼 차례로 넣는다면 반드시 최고 가치를 가질 수 있을까? 그렇지 않다. 안타깝게도 단위..

728x90