728x90

분류 전체보기 68

[CS] DeadLock과 은행원 알고리즘

먼저 Dead Lock (교착 상태)이 무엇인지 알아보자. Dead Lock 이란 두 개 이상의 프로세스가 서로 상대방의 작업이 끝나기만을 기다리면서 결과적으로 아무도 완료되지 못하는 상태를 의미한다. 교착 상태가 발생하려면 4가지 조건이 필요하다. 조건은 아래와 같다. 상호 배제 (Mutual Exclusion) 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다. 점유 대기 (Hold and Wait) 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다려야 한다. 비선점 (No preemption) 프로세스에게 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다. 환형 대기 (Circular Wait) 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있..

💻CS 2022.07.10

[PostgreSQL] LAG, LEAD 사용하기

LAG와 LEAD는 어떤 함수일까? 🤔 조회 결과 또는 결과 내 특정 집합 안에서 특정 컬럼의 이전 행의 값(LAG) 또는 다음 행의 값(LEAD)을 구하는 함수이다. 이전 또는 다음 행의 값을 구한다는 것은 알겠는데 어떤 경우에 사용되나요? 🙋‍♂️ 아주 자주 쓰이는 함수는 아니지만, 이전 행의 값과 현재 값을 비교하거나 계산할 때 복잡하게 만들어야 하는 쿼리를 LAG, LEAD 함수를 쓰면 한 줄로 간단하게 끝낼 수 있다. 아래의 예시를 보자. 위와 같은 데이터가 있고, 총무팀의 3일 전 비용과 현재 비용을 비교하여 값이 오른 행만을 추출하려 한다면 어떻게 해야 할까? 복잡하게 보이지만 LAG 함수를 사용하면 3일 전 비용을 가져오는 컬럼을 만들 수 있다. select *, lag(cost, 3) o..

💾DB 2022.07.08

[PostgreSQL] Extract 함수 (날짜 시간 추출)

Extract 함수는 PostgreSQL에서 날짜의 특정 부분을 추출하는 함수이다. 년도(year), 월(month), 일(day) 등을 추출할 수 있고, 사용 방법과 어떤 부분을 추출할 수 있는지는 아래에서 알아보자. 먼저 Extract는 아래와 같이 사용할 수 있다. EXTRACT(field from source) field는 year, month, day 등의 날짜 또는 시간의 데이터 요소를 뜻하고, source는 실제 timestamp값을 의미한다. 먼저 field로 사용할 수 있는 인자에 대해 알아보자. 여러 인자가 있지만, 실제 업무에서 많이 사용하는 것들 위주로 한번 정리해보았다. Field 설명 YEAR 년도 MONTH 월 ( 1 ~ 12 ) DAY 일 ( 1 ~ 31 ) DOW 요일 ( ..

💾DB 2022.07.06

[CS] DB 트랜잭션 격리 수준 (Transaction Isolation Levels)

트랜잭션 격리 수준이랑 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 고립되어 있는지를 나타내는 것이다. READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 크게 네 가지로 나뉘고 순서대로 뒤로 갈수록 트랜잭션 간 고립 정도가 높아진다. 고립 정도가 높아지면, 성능이 떨어지는 것이 일반적이다. 보통의 경우 READ COMMITTED(oracle), REPEATABLE READ(mysql) 중 하나를 사용한다. READ UNCOMMITTED READ UNCOMMITTED의 경우 라나의 트랜잭션 변경이 commit, rollback에 상관없이 다른 트랜잭션에 영향을 미친다. 위의 사진과 같이 Transaction1이 INSERT 후 co..

💻CS 2022.07.05

[CS] DB Index

인덱스란 RDBMS에서 검색 속도를 높이기 위한 기술로 테이블의 컬럼을 따로 파일로 저장하여 색인화한다. 해당 테이블에서 데이터를 찾을 때, 레코드들을 full scan하지 않고 색인화된 index file로 검색하여 검색 속도를 향상시킨다. 위의 그림을 예시로 들면, Table의 company_id에 인덱스를 걸면 company_id(특정컬럼)를 기준으로 정렬하고, DB가 쉽게 찾아갈 수 있도록 pointer를 같이 넣어 인덱스를 구성한다. pointer는 데이터를 INSERT 할 때 DB 내부에서 자동으로 생성하는 값으로, 해당 row의 고유한 주소 값을 가리킨다. 다른 컬럼까지 모두 인덱스에 넣어 구성하면 원본 테이블과 내용이 똑같아져 공간이 낭비되기 때문에 pointer만 넣어준다. 인덱스를 생성..

💻CS 2022.07.03

[Spring] Spring MVC

MVC 패턴이란 무엇일까? 🤔 MVC 패턴이랑 소프트웨어 디자인 패턴 중 하나로 Model, View, Controller 세 가지 요소로 이루어진 패턴이다. - Model : 애플리케이션의 정보나 데이터, DB 등 - View : 사용자에게 보여지는 화면 - Controller : View와 Model이 직접적인 상호 소통을 하지 않도록 관리, 데이터와 비즈니스 로직 사이의 상호 동작을 관리 MVC1 MVC1의 경우 View와 Controller를 모두 JSP에서 담당하여, JSP 하나로 유저의 요청을 받고 응답을 처리한다. JSP 하나로 MVC가 모두 이루어지니 재사용성도 떨어지고, 읽기도 힘들어진다. 유지보수에 있어 문제가 발생한다. MVC2 MVC2의 경우 MVC1과 다르게 Controller와 ..

🌱Java | Spring 2022.06.30

[CS] Pub/Sub 모델과 MQTT(Mosquitto)

Pub-Sub 모델은 비동기 메시징 패러다임으로, Pub-Sub 모델에서 Publisher의 메시지는 특별한 수신자가 정해져 있지 않다. publish 된 메시지는 정해진 범주에 따라, 각 범주에 대한 Subscribe를 신청한 Subscriber에게 전달된다. Subscriber는 Publisher에 대한 정보 없이도 원하는 메시지만 수신할 수 있다. MQTT는 아래와 같이 동작한다. 위의 그림을 보면 MQTT Broker가 존재하고 Publish와 Subscribe가 존재한다. Publisher가 Hi! 라는 메시지를 보내면 Subscriber가 Broker를 통해 메시지를 받는 구조로 " /hello/world/ " 토픽을 구독하지 않은 Subscriber는 메시지를 받을 수 없다. MQTT의 특징..

💻CS 2022.06.26

[CS] CORS?

CORS란 Cross Origin Resource Sharing의 줄임말로, 서로 다른 도메인 간에 자원을 공유하는 것을 의미하며, 기본적으로 차단되어 있다. Origin이란 무엇일까? 🤔 서버의 위치를 의미하는 https://google.com과 과 같은 URL은 마치 하나의 문자열 같아 보여도 사실 여러개의 구성 요소로 이루어져 있다. 이때 Origin이란 protocol과 host 그리고 위의 사진에는 나와있지 않지만 :80, :443과 같은 포트 번호까지 모두 합친 것을 의미하며, Origin이 같으면 CORS에러는 발생하지 않는다. Origin을 비교하는 로직은 서버에 구현된 스펙이 아니라 브라우저에 구현되어 있는 스펙이다. 만약 CORS 정책을 위반하는 리소스 요청을 하더라도 해당 서버가 동일..

💻CS 2022.06.25

[CS] Session vs Cookie

HTTP 프로토콜의 특징은 비연결과 무상태성이다. 비연결과 무상태성이란 무엇일까?🤔 비연결이란 클라이언트가 서버로 요청을 보내고 서버가 적절한 응답을 클라이언트에게 보내면 바로 연결이 끊어지는 특징이고, 무상태성이란 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 공유하지 않는다는 것이다. 위와 같은 특징으로 HTTP 프로토콜에서는 모든 요청 간의 의존관계가 없고, 현재 접속자가 이전에 접속했던 사용자와 같은 사용자인지 알 수 있는 방법이 없다. 계속해서 연결을 유지하지 않기 때문에 리소스의 낭비가 줄어드는 것은 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는 단점이 있다. 😒 따라서 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위..

💻CS 2022.06.22

[CS] 토큰 기반 인증과 JWT

토큰 기반 인증은 토큰을 이용하여 인증하고, 세션과 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. 기본적인 토큰 기반 인증의 과정은 다음과 같다. 1. 사용자가 로그인하면 서버에서 계정 정보를 검증 후 Access Token과 Refresh Token을 발급 2. 사용자는 Access Token을 저장 후 서버에 요청할 때 http 헤더에 Access Token을 함께 전송 3. 서버에서는 토큰을 검증하고 요청에 응답한다. 4. Access Token의 유효기간이 만료되면 Refresh Token을 통해 Access Token을 재발급 요청 중 토큰이 탈취될 경우를 대비하여 Access Token의 유효기간을 짧게 설정하고, Ref..

💻CS 2022.06.19

[CS] HTTP 상태코드

모든 HTTP의 상태 코드는 5개의 분류도 구성된다. 상태 코드는 3자리의 숫자로 만들어져 있으며, 첫번째 자리는 1에서 5까지 5개로 구분된다. 분류는 아래와 같다. ▶ 1xx (정보) : 요청을 받았으며 프로세스를 계속 진행 ▶ 2xx (성공)😀 : 요청을 성공적으로 받음 ▶ 3xx (리다이렉션) : 요청 완료를 위해 추가 작업 필요 ▶ 4xx (클라이언트 오류)🤬 : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음 ▶ 5xx (서버 오류)🤬 : 서버가 요청을 처리하지 못함 위의 상태 코드들 중에 자주 만나게 되는 2xx, 4xx, 5xx 상태 코드에 대해 좀 더 자세히 알아보자 2xx(성공) - 200(성공) : 서버가 요청을 제대로 처리함. 요청한 페이지는 제공하였음의 의미로 쓰임 - 201(작..

💻CS 2022.06.16
728x90