전체 글 95

대역폭과 지연 시간의 차이에 대해 알아보자

대역폭과 지연 시간의 차이에 대해 알아보자대역폭기존에 알고 있던 대역폭은 헤르츠 단위의 대역폭으로, FM, AM과 같은 개념이 떠오른다.네트워크에서 다루는 대역폭은 비트율 단위의 대역폭으로, 채널이나 링크에서 통과하는 초당 비트 수를 말한다. 지연 시간송신지에서 수신지로 전달되는 데 걸리는 시간이다.구체적으로 전파 시간, 전송 시간, 큐 시간, 처리 시간을 합친 값이다. 전파 시간: 송신지에서 수신지까지 이동하는데 소요되는 시간; 거리 / 전파 속도전송 시간: 첫 비트가 출발하고 마지막 비트가 출발할 때까지의 시간; 데이터의 크기(한 묶음의 비트들) / 대역폭큐 시간: 라우터와 같은 중간 장치에서 메세지를 큐에 저장하고 있는 시간처리 시간: 각 노드에서 데이터의 처리에 필요한 시간 위 내용을 가지고 다시..

컴퓨터과학 2024.04.18

[Spring Security] 스프링 시큐리티가 사용자를 이해하는 방법

스프링 시큐리티가 사용자를 이해하는 방법 목표 Spring Security가 사용자를 이해하기 위한 인터페이스, UserDetails를 이해한다. 사용자를 찾고 관리하는 UserDetailsService을 이해한다. 최소한의 정보를 가진 User Entity를 사용하여 엔드포인트에 접근하는 방법을 배운다. 시작하기에 앞서, 스프링 시큐리티의 전체 인증 프로세스를 보자. 오늘은 아래 프로세스 중에, 사용자를 식별하는 User details service에 대한 내용을 정리할 것이다. UserDetails 스프링 시큐리티가 사용자의 인증/인가에 필요한 정보를 정의한 인터페이스이다. 다르게 표현하면, 시큐리티가 바라보는 사용자를 정의한 것이다. 코드는 아래와 같다. package org.springframew..

스프링 2024.03.26

[Spring Security] HTTP Basic Authentication를 사용한 간단한 인증 처리

HTTP Basic Authentication를 사용한 간단한 인증 처리 목표 spring security를 사용하여 간단한 인증 프로세스를 구현하고 구성 요소를 재정의해보자. Basic Authentication이란? 사용자를 식별하는 방법 중에 가장 단순한 방법이다. http 헤더에 username과 password를 넣어 인증하는 방식이다. Authorization 헤더에 "Basic"과 "username:password"의 base64 인코딩 값을 넣어준다. (인증과 인가에 대해 알고 있다면, basic authentication인데 왜 Authorization에 넣을까?하는 의문이 들 수 있지만, 관례에 따른 것이므로 넘어가자) spring security 의존을 추가한 후 아무런 설정을 하지 ..

스프링 2024.03.26

[알고리즘] 투 포인터

투 포인터 간단 정리 두 개의 포인터를 사용하여 풀이한다. 하나의 배열에서 풀이하는 문제와 두 개의 배열에서 풀이하는 문제가 있다. 핵심은 포인터를 어떤 조건에서 움직일 것인가를 명확히 하는 것이다. 두 개의 포인터와 조건을 다 따로 보려고 하면 분기점이 많아지므로 오른쪽 포인터를 고정시키는 테크닉과 오른쪽으로만 이동할 수 있는 설계가 필요하다. 예제 겹치는 건 싫어 https://www.acmicpc.net/problem/20922 20922번: 겹치는 건 싫어 홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열 www.acmicpc.net import sys de..

알고리즘 2024.03.22

[알고리즘] BFS DFS

BFS DFS 간단 정리 DFS 스택으로 구현 스택에 추가되는 경우: 현재 노드에서 방문하지 않은 노드 중에 다음 방문예정인 노드 스택에서 빠지는 경우: 주변 노드들이 다 방문된 경우 한 노드에서 깊이 탐색이 종료된 시점에 저장해야할 값이 있다면, 인접 노드에서 재귀를 마치고 올라올 때 반환하는 값을 사용하면 된다. 재귀를 마치고 올라온다는 뜻은 주변 노드들이 다 방문된 경우이므로 스택에서 빠질 때, 즉 함수가 끝나는 시점에서 반환한다. BFS 큐로 구현 큐에 추가되는 경우: 현재 노드에서 방문하지 않은 노드 전부 큐에서 빠지는 경우: 방문하면서 빠진다 큐를 이용하기 때문에, 시작 노드로부터 떨어진 거리가 오름차순으로 정렬됨을 보장한다. 따라서 시작 노드로부터 조건을 만족하는 최소 거리 노드를 구할 수 ..

알고리즘 2024.03.20

[알고리즘] union-find, disjoint set

union-find, disjoint set 간단 정리 서로소 집합을 표현할 수 있다. 트리 구조를 사용하며, 한 집합은 하나의 트리구조로 표현된다. 무방향 그래프의 사이클을 검사할 수 있다. 시간 복잡도는 대략 (find 연산의 수) x (log_2 노드의 개수) 이다. union 두 원소를 같은 집합으로 합치는 연산 원소 a, b와 둘의 루트 노드 A, B가 있을 때, A를 B의 자식으로 (혹은 반대로) 연결한다. def union(x, y): x = find_parent(x) y = find_parent(y) parents[x] = y find 원소의 부모를 찾는 연산 자식에서 부모 쪽으로 거슬러 올라간다. 노드의 부모가 자기 자신이 될 때까지(루트 노드) 반복한다. 경로 압축을 통해 최적화를 할 ..

알고리즘 2024.03.20

[알고리즘] 문제 풀이

목표 코드를 치기 전에, 조건을 정확히 이해하고 주제를 정한 뒤 시간복잡도를 계산한다. 각 로직의 세부사항(분기 조건, 반복 조건, 함수 시그니처)를 이해하고 손으로 작성한 뒤에 코드를 작성한다. 도넛과 막대 그래프 https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import sys sys.setrecursionlimit(1_000_000) N = 1_000_001 edge_in = [0] * N edge_out = [[] for _ in r..

알고리즘 2024.03.18

[운영체제] 페이징 (2)

페이징페이지 테이블 관리 페이지 테이블은 메모리 관리자가 자주 사용하는 자료구조이므로 빨리 접근할 수 있어야 한다.따라서 페이지테이블을 물리 메모리 영역 중 운영체제 영역의 일부분에 모아놓는다. 프로세스마다 페이지 테이블이 하나씩 있기 때문에프로세스의 수가 많아질수록 페이지 테이블의 크기가 커지고 프로세스가 사용할 수 있는 영역의 크기가 줄어든다.예시를 통해 페이지 테이블의 크기를 계산해보자. 페이지 테이블의 크기 예시32bit cpu와 512바이트 페이징 시스템이 있다고 가정하자.각 프로세스마다 최대 메모리 크기는 약 4GB를 할당이고 512B 페이지로 나눈 페이지 테이블의 실제 크기는 약 24.11MB 라고 한다.실행 중인 프로세스가 40개라면 무려 1GB를 페이지 테이블에 할당해야 한다. 한편, 페..

컴퓨터과학 2024.03.17

[운영체제] 페이징 (1)

페이징페이징이란, 프로세스와 메모리를 일정한 크기로 잘라서 페이지와 프레임으로 사용하는 방식이다.운영체제는 재배치 레지스터와 페이지 테이블을 통해 나눠진 프로세스를 마치 연속된 메모리 공간에 있는 것처럼 동작하게 한다. 논리 주소에서 물리 주소로 변화하는 과정 논리 주소는 페이지 테이블에 의해 물리 주소로 변환된다.논리 주소는 이진수의 비트 단위로 표현되고 하위 비트에 오프셋, 상위 비트에 페이지 번호값을 가진다. 보다 쉽게 정리하면 다음과 같다.논리 주소는 1바이트이고 페이지는 여러 논리 주소를 포함한다.따라서 논리 주소를 표현하기 위해서는1. 어떤 페이지 안에 2. 페이지 안에 있는 주소 중 몇 번째 를 찾아야 한다.위 오프셋은 몇 번째를 의미하고 페이지 번호 값이 어떤 페이지를 가리키는지 알려준다...

컴퓨터과학 2024.03.16

[운영체제] 물리 메모리 관리

물리 메모리 관리메모리 관리 폰노이만 구조에서 메모리는 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행할 수 있다. 메모리는 1바이트 크기로 나뉜다. 1바이트마다 주소가 주어지며 0번지부터 시작한다.메모리에 있는 데이터가 cpu로 오기까지 과정은 다음과 같다.접근하려는 메모리 주소를 메모리 주소 레지스터에 저장한다.주소가 버스를 통해 메모리에 전달되면 해당 주소의 값을 버스를 통해 메모리 버퍼 레지스터로 보낸다. 운영체제를 포함하여 여러 작업을 동시에 처리할 때, 메모리를 관리하는 시스템을 메모리 관리 시스템(MMS)라고 한다. 소스코드의 번역과 실행 컴퓨터에서 작동하는 응용 프로그램은 프로그래밍 언어로 만들며, 실행 가능한 코드로 변경한다.언어 번역 프로그램은 고급언어로 작성한 소스코드를 ..

컴퓨터과학 2024.03.16