분류 전체보기 88

[OS] 2. 프로세스, 프로세스의 상태, PCB, Context Switching (feat. 혼자 공부하는 컴퓨터구조 + 운영체제)

프로세스  프로세스란?'보조기억장치'에 저장되어 있는 프로그램이, '메모리'에 적재되어 실행되면 이를 프로세스라 한다사용자가 볼 수 있는 공간에서 실행되는 '포그라운드 프로세스(foreground process)'와, 사용자가 볼 수 없는 뒤편에서 실행되는  '백그라운드 프로세스(background process)'가 있다백그라운드 프로세스 중에서 사용자와 상호작용하지 않고 정해진 일만을 수행하는 프로세스를 데몬(daemon, unix) 혹은 서비스(service, window) 라고 부른다    프로세스의 상태(Process Status)프로세스는 '준비 상태', '실행 상태', '대기 상태', '보류 대기&준비 상태' 를 가질 수 있다이는 프로세스가 실행되고, I/O Interrupt 등에 의해 대기..

Operating System 2024.12.01

[백준/Python] 부등호 2529

'''- 부등호를 만족하는 최대, 최소를 출력- 사용되는 숫자는 유니크해야함- 백트래킹으로하자'''def compare(before, cur, sign): return beforecurdef dfs(depth, s): global max_v, min_v, visited # 제일 처음 depth가 k+1이 되었을 때 -> 0부터 오름차순이므로 min이 됨 # 제일 마지막으로 depth가 k+1이 되었을 때 -> max가 됨 if depth == k+1: if len(min_v) == 0: min_v = s else: max_v = s return # 0부터 오름차순으로 탐색 for i in r..

[OS] 1. 커널(kernel) (feat. 혼자 공부하는 컴퓨터구조 + 운영체제)

커널(Kernel)  운영체제는 우리 컴퓨터에서 아주 많은 기능을 담당한다. 그중에서도 '자원에 접근하고 조작하는 기능', '프로그램이 올바르고 안전하게 실행되게 하는 기능' 등, 가장 핵심적인 서비스들을 담당하는 부분을 커널(kernel)이라고 한다.(* 사용자 인터페이스인 GUI와 CLI는 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다)      커널의 핵심 역할  이중 모드와 시스템 호출: 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 응용 프로그램이 CPU, 메모리, HDD 등에 마음대로 접근하고 조작할 수 있다면 자원이 무질서하게 관리될 것이고, 응용 프로그램이 조금만 실수하더라도 컴퓨터 전체에 큰 영향을 끼칠 수 있..

Operating System 2024.11.13

[Github] Issue와 Pull Requests 연동하기

팀 프로젝트를 진행하다 보면 PR (Pull Requests)는 필수적으로 사용하게 된다. 그리고 PR은 코드 리뷰어를 위해 최소한의 단위로 만들게 되는데, 이렇게 되면 하나의 전체적인 기능을 위해 여러 가지 PR이 생기게 된다.(ex. 회원가입에 필요한 기능: 이메일 중복확인 API, 인증 이메일 전송 API, 인증번호 확인 API, 닉네임 중복확인 API ... 수많은 기능이 필요하다 )  문제는 개발을 진행하다보면 PR들이 섞이면서 이 PR이 어떤 도메인, 어떤 기능을 위한 PR인지 한눈에 알아보기가 힘들어진다따라서 오늘은 이런 문제를 해결하기 위해 하나의 전체적인 기능을 Issue로 등록하고, 거기에 작은 기능의 PR들을 연결시켜 서로 연관된 PR을 모아서 관리할 수 있도록 해보겠다.       ..

[Annotation] 유효성 검사 어노테이션 여러 개를 합칠 수 있을까? (feat. Custom Annotation, Validation)

Untitled 개발 이후, 회사의 다른 서비스를 만들면서 하나의 계정으로 회사의 모든 서비스들을 이용할 수 있으면 유저들이 편할 것 같다는 생각을 했다. 그래서 대표님게 SSO(Single Sign On)을 건의했고, 그렇게 통합 인증 서버를 만들게 되었다. 통합 인증 서버는 앞으로 회사의 모든 서비스들에서 트래픽이 몰릴 것이므로 좀 더 단단하게 만들고 싶었고, 이전에는 사용하지 않았던 Validation을 적용해보기로 했다.     Validation    먼저 Spring Validation은 @RequestBody, @RequestParam, @PathVariable에 대해 유효성 검증을 수행하고, 유효하지 않는 데이터인 경우 Exception을 발생시키는 라이브러리이다 내가 제일 먼저 적용한 A..

[Spring Cache] 좋아요 기능 설계 & 성능 개선 (feat. Redis)

현재 Untitled의 유저 쇼츠 테이블을 보면, 특정 쇼츠를 조회를 위해 '쇼츠 좋아요 수'가 필요하기 때문에 매번 count 쿼리를 날려야 한다. 또한 단순 쇼츠 조회뿐만 아니라 인기순으로 정렬을 할 때도 '쇼츠 좋아요 수' 가 필요했는데, 이 기능은 '쇼츠 좋아요 수'를 count 하여 정렬하고 page size만큼 shorts를 가져오는 로직이다.  따라서 이러한 구조는 유저가 늘어나면 분명히 성능에 악영향을 끼치리라 판단하여 리팩토링을 시작하게 됐다         Count Query   먼저 가장 큰 영향을 주는 건 count 쿼리라고 생각해서, 이 부분을 없애기로 했다. 그래서 구조 자체를 수정해야 했고, 테이블에 '좋아요 수'를 컬럼으로 저장하기로 했다. 이런 구조에서는 곧바로 '좋아요 수..

[CS지식을 Spring에 접목해보자] JWT는 어디에 저장해야할까? (feat. Cookie, Local Storage)

Spring에서 JWT를 사용한 인증/인가를 진행할 때, Server에서 Client로 AccessToken과 RefreshToken을 발행해줄 것이다. 이때 Cookie에 저장하는 방법과 로컬 스토리지에 저장하는 방법이 있는데, 이번 시간에는 두 방법의 장/단점을 알아보고 어떻게 사용하면 좋을지 고민해보자      Web Browser에 토큰을 저장할 때의 취약점   우리는 성능 향상과 확장성을 위해 세션 대신 JWT를 사용한다. 성능 향상은 메모리 사용량과 DB Connection을 줄일 수 있어서 그렇다 치지만, 확장성은 어떻게 보장해줄까? 그건 바로 서버에서 보내주는 토큰을 브라우저에 저장함으로써 서버에서 사용자의 인증 정보를 기억하지 않아도 되기 때문이다. 그러나 이러한 확장성 때문에 브라우저에..

[Network] Cookie

쿠키(cookie)는 서버가 사용자의 웹 브라우저에 'Key:Value' 형태로 전송하는 작은 데이터 조각으로, 브라우저는 이런 문자열 데이터 조각들을 저장해두었다가 동일한 서버로의 request마다 쿠키 데이터를 전송한다. 따라서 HTTP 서버는 기본적으로 무상태(stateless)이기 때문에 상태를 보존할 수 없지만, 쿠키를 통해서 기존의 정보를 그대로 이용할 수 있다는 뜻이다.      Cookie의 목적   HTTP 서버는 무상태를 통해 서버 설계를 간편하게 하고 동시에 수천 개의 TCP 연결을 다룰 수 있는 고성능의 웹 서버를 개발할 수 있다. 그런데 우리는 종종 웹 사이트가 사용자를 확인하는 것이 바람직할 때가 존재하기 때문에 쿠키를 사용해야만 할 때가 있다. 그중 가장 많이 사용하는 목적은 ..

Network 2024.10.07

[SSE] java.io.IOException : Broken pipe

이번에는 Spring에서 SSE를 사용하여 데이터를 전송할 때 발생하는 'java.io.IOException:Broken pipe'를 대응법을 알아보겠다.왜 해결법이 아니라 대응법이라 적었냐면... 진짜 말 그대로 'Broken pipe'가 발생하지 않게끔 해결하는 것이 아니라, 발생했을 때 대응하는 방법을 설명할 것이기 때문이다.       java.io.IOException:Broken pipe   이 Exception은 다음과 같은 상황에서 발생한다데이터 송수신 중 연결이 끊어진 경우: 클라이언트와 서버에서 유지 중인 connection이 끊어졌을 때, 이를 통해 데이터를 전송하려 하면 발생네트워크가 서버 CPU 문제로 송신받은 데이터를 처리하지 못한 경우: 송신받은 데이터를 적절하게 처리하지 못하..