전체 글 44

Presigned URL을 사용한 파일 업로드 구현

프리사인드 URL이란?프리사인드 URL(Presigned URL)은 클라이언트가 서버를 거치지 않고, 직접 클라우드 저장소(예: AWS S3)에 파일을 업로드할 수 있도록 임시 권한을 제공하는 URL. 이 URL은 일정 시간 동안만 유효하고, 그 시간 안에만 지정된 파일을 업로드할 수 있음.장점:서버 부하 감소: 파일이 서버를 거치지 않고 클라이언트에서 클라우드로 바로 업로드되기 때문에 서버 자원이 절약됨.보안 강화: URL은 제한된 시간 동안만 유효하고, 업로드할 수 있는 파일도 미리 지정되므로 안전함.업로드 속도 향상: 클라이언트가 직접 파일을 올리기 때문에 업로드 속도가 더 빠름.클라이언트 코드: 파일 업로드와 폼 제출1. 파일 선택하고 폼 제출const fileInput = document.get..

WIL/웹 개발 2024.10.15

Session, JWT, OAuth 개념

1. Session 방식Session 방식은 유저가 로그인을 완료하면 서버에서 ID, LoginTime, ExpireTime, SessionID 등을 기록하거나 DB에 저장함.그 후 유저에게 Session ID를 리턴해 주는데, 이를 갖고 판단하는 방식. 장점 : 유저의 GET/POST 요청마다 체크하기 때문에 엄격하게 로그인 상태를 검사할 수 있음.단점 : DB에 무리가 감. -> Redis 같은 DB를 사용해서 부담을 줄이기도 함. 2. Token 방식 (JWT)로그인을 완료하면 유저에게 ID, LoginTime, ExpireTime 등을 암호화해서 입장권 발급함. 그 후 유저가 서버를 사용할 때 Token을 제출해서 이를 확인하는 방식. 장점 : DB 부담이 적음. 유저가 많으면 좋음.단점 : 토큰..

WIL/스터디 2024.09.22

PintOS 메모리 할당 순서

Pintos 운영체제가 부팅될 때, 메모리에 데이터를 로드하는 순서는 특정한 단계를 따릅니다. 이 과정은 하드웨어 초기화, 커널 로드, 초기화 루틴 실행 등을 포함합니다.1. 부트로더 (Bootloader) 실행컴퓨터가 전원을 켜면, CPU는 메모리의 특정 위치(일반적으로 0x7c00)에서 실행을 시작합니다. 이 위치에 있는 것은 BIOS가 로드한 부트로더 코드입니다.부트로더는 하드웨어 초기화 및 운영체제를 로드할 준비를 합니다. Pintos에서는 이 부트로더가 운영체제의 커널 이미지를 메모리에 로드하는 역할을 합니다.2. 커널 로드 (Kernel Load)부트로더는 하드 디스크 또는 플래시 메모리와 같은 저장 장치에서 Pintos 커널 이미지를 메모리로 로드합니다.이 커널 이미지는 일반적으로 메모리의 ..

WIL/스터디 2024.09.10

PintOS의 메모리에 관한 공부

Pintos에서 메모리 할당 전략은 주로 페이지 단위로 이루어지며, 물리 메모리와 가상 메모리 시스템을 효과적으로 관리하기 위한 다양한 기법을 사용합니다.1. 커널 메모리 할당 (Kernel Memory Allocation)Pintos의 커널은 페이지 단위로 메모리를 할당합니다. 이는 운영 체제 자체가 사용하는 메모리나 커널 내에서 필요로 하는 메모리를 할당하는 과정에서 이루어집니다.페이지 할당 (Page Allocation): 커널은 palloc_get_page()와 같은 함수로 물리 메모리에서 페이지를 할당합니다. 이 함수는 물리 메모리에서 사용할 수 있는 페이지를 찾아 반환하며, 페이지는 일반적으로 4KB 크기의 고정된 메모리 블록입니다.프레임 할당 (Frame Allocation): 페이지는 물리..

WIL/스터디 2024.09.10

File System

파일 시스템의 경우 FAT 부분과 파일/디렉토리로 나뉘어져 있습니다. 파일과 디렉토리 내용에 관해서는 이미 우리가 OS를 사용하면서 써왔기 때문에 친숙한 개념이라 생각하여 생략하고, FAT와 Inode 아키텍쳐에 관한 설명과 저희가 어떤 식으로 파일시스템을 구현했는지를 정리했습니다.  기존의 Pintos는 freemap을 사용한 형태로 디스크를 사용하고 있습니다. freemap은 bitmap이라고 이해하시면 됩니다. 그래서 기존의 파일 시스템은 그림과 같이 단편화가 발생해 있으면 Data가 들어갈 수 없습니다. 따라서 우리는 disk를 효율적으로 사용하기 위해 bitmap에서 fat 방식으로 파일시스템을 수정하게 됩니다. FAT란 File Allocate Table의 약자로 빈 Sector를 찾아 데이터..

Copy on Write (CoW)

Project 3의 Extra 과제인 Copy on Write에 관해 알아보겠습니다. 먼저, Git book에서는 copy on write에 대해 다음과 같이 정의하고 있습니다.  그래서 fork를 할 때에는 새로운 물리 페이지를 할당하지 않고 부모와 같은 물리 페이지를 매핑만 해주었다가 추후에 write를 시도할 때에만 새로운 물리 페이지를 할당해 주면 되는 것입니다. 우리는 filebacked Page의 경우에 이미 같은 물리 메모리를 공유하도록 구현했기 때문에 여기서 힌트를 얻을 수 있었습니다. 기존에 우리 프로그램은 이 페이지가 작성가능한지만을 검사하고 있었습니다. 그런데 이 페이지가 원래 부모 프로세스가 만들어 놓은 Anonymous Page이고 fork된 프로세스에서 write 하려고 한다면 ..

System Call

User Program 주의 주 개념인 System Call을 핀토스에서 어떻게 처리하는 지에 대해 간략하게 알아보았습니다.  먼저 System Call이 어떻게 동작하는지 대략적으로 그려보았습니다. 유저 모드에서 동작을 하고 있던 프로세스가 read나 write같은 함수에서 system call을 호출 시 syscall entry shell을 통해 현재 CPU의 동작하던 내용을 user stack에 저장한 후 커널로 넘어가게 됩니다. 그 후 syscall_handler에서 system call 함수를 실행하고, ret를 통해 다시 유저 모드로 돌아와 작업을 재개합니다.  유저 함수에서 어떠한 동작을 하다가 system call을 호출하는 경우가 발생할 수 있습니다. Pintos에서는 저희가 유저 함수를..

Multi-Level Feedback Queue Scheduler

핀토스 1주차 Option 과제인 Advanced Scheduler를 구현해봤습니다. 기존의 Priority Scheduler의 경우에는 우선 순위가 낮은 스레드가 오랫동안 CPU를 점유하지 못하는 문제가 발생할 수 있습니다. 이로 인해 스레드의 평균 반응 시간이 너무 길어지는 문제가 발생합니다. 이를 해결 하기 위한 방법으로 multi-level feedback queue scheduler가 제시되었습니다. MLFQS는 Priority에 따라 여러 개의 Ready Queue가 존재하고, Priority에 영향을 주는 변수가 있어서 Feedback으로 Priority를 조절할 수 있습니다. 이 때, multi level까지는 구현하기 힘들 것 같아서 Feedback만 구성을 해봤습니다. 사실 상 feed..

OS 지식

OS의 일반적인 작동 원리운영 체제는 컴퓨터 하드웨어와 소프트웨어 간의 중재자 역할을 하며, 시스템 자원을 효율적으로 관리하고 사용자와 애플리케이션이 이를 쉽게 사용할 수 있도록 도와줍니다.운영 체제의 주요 기능은 다음과 같습니다:프로세스 관리: 운영 체제는 여러 프로그램이 동시에 실행될 수 있도록 CPU 시간을 할당하고, 각 프로세스 간의 자원 충돌을 방지하며, 문맥 전환을 통해 효율적으로 멀티태스킹을 지원합니다.메모리 관리: 운영 체제는 각 프로세스에 필요한 메모리를 할당하고, 가상 메모리 기법을 통해 물리적 메모리를 효율적으로 사용합니다. 이를 통해 메모리 부족 시에도 프로그램이 원활히 실행될 수 있도록 합니다.파일 시스템 관리: 운영 체제는 데이터를 파일 단위로 저장하고, 이를 디렉터리 구조로 관..

WIL/스터디 2024.08.27

인터넷 지식

인터넷의 작동 원리먼저, 인터넷에 연결된 각 장치는 고유한 IP 주소를 가지고 있으며, 사용자가 웹사이트에 접근할 때는 도메인 이름을 통해 IP 주소를 찾아냅니다. 이 과정은 DNS 서버를 통해 이루어집니다.데이터는 작은 패킷으로 나뉘어 전송되며, 각 패킷은 라우터를 통해 목적지까지 전달됩니다. 이때 TCP/IP 프로토콜이 데이터를 신뢰성 있게 전달하는 역할을 합니다.사용자가 웹사이트를 요청하면, 클라이언트는 서버에 HTTP 또는 HTTPS 요청을 보내고, 서버는 요청에 따라 웹 페이지나 데이터를 응답합니다. 이러한 모든 과정은 ISP를 통해 이루어집니다. HTTP란?HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버 간에 데이터를 주고받기 위한 표준 프로토콜입니다. ..

WIL/스터디 2024.08.27