CS 29

[매일매일 CS] 공유 락 & 배타 락

DBMS에서 트랙잭션을 특별한 제어 없이 병행 수행을 허용하면 데이터의 일관상 & 무결성을 보장하기 어려울 수 있습니다.이때 병행 수행되는 트랜잭션들을 제어하기 위해서 락을 사용할 수 있으며 DBMS에서 락은 크게 공유 락과 배타 락으로 분류할 수 있습니다. 공유 락 ( Shared Lock ): 읽기 락이라고 부르며, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없습니다. 즉 공유 락을 사용하면, 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 점을 보장합니다. SELECT * FROM table_name WHERE id = 1 FOR SHARE; 배타 락 ( Exclusive Lock ): 쓰기 락이라고 부르며, 배타 락이 걸린 ..

CS/필수지식 2025.09.08

[매일매일 CS] 얕은 복사와 깊은 복사에 대해

얕은 복사란 ? (Shallow Copy) : 객체 자체만 복사하고, 내부에 포함된 데이터는 그대로 같은 메모리 주소를 공유한다.에에 따라 원본과 복제본이 같은 하위 객체를 가리킴 (한쪽에서 데이터 수정하면 다른쪽도 영향을 받는다) 자바로 간단하게 예를 들어보면 class Address { String city; Address(String city) { this.city = city; } } class Person implements Cloneable { String name; Address address; Person(String name, Address address) { this.name = name; this.address = ..

CS/필수지식 2025.09.05

Nework Application Layer

Cookie HTTP 프로토콜은 stateless (상태 비저장) 이며, 서버는 클라이언트가 이전에 누구였는지 기억하지 못한다. 그래서 쿠키(cookie) 를 사용해서 사용자 상태를 식별하고, 세션을 유지한다. 쿠키는 서버가 생성하여 클라이언(브라우저)에 저장하는 작은 데이터 조각. Cookie 동작 과정 1. 클라이언트 → 서버 요청사용자가 브라우저로 amazon.com 접속 (HTTP request 보냄)2. 서버 → 클라이언트 응답 (쿠키 발급)서버가 유저를 구분하기 위해 ID를 생성 (예: 1678).HTTP response header에 Set-Cookie: 1678 을 넣어 전달.브라우저는 이 값을 로컬에 저장.3. 이후 요청 시 쿠키 전송클라이언트가 다시 Amazon 서버에 요청할 때,..

CS/Computer Network 2025.08.27

Network 기본

컴퓨터 네트워크는 3부분의 기본 프레임워크로 나뉘어서 설명할 수 있다. 1. Network Edge 구성 요소: Application, Hosts (즉, PC, 스마트폰, 서버 등)역할: 네트워크의 "끝단"에서 실제로 데이터를 생성하고 소비하는 주체client→ user (웹브라우저, 앱)server → 웹서버, 게임 서버, 스트리밍 서버 등즉, 네트워크 엣지는 "네트워크를 이용하는 당사자들"이 위치한 부분 2. Network Core 구성 요소: Routers 역할: 네트워크 엣지에서 온 데이터를 빠르고 효율적으로 목적지로 전달패킷 스위칭(packet switching) 기반경로 선택(routing) 알고리즘 사용네트워크 자체는 데이터를 이해하지 않으며, 단지 최적 경로로 전달하는 역할 (고속도..

CS/Computer Network 2025.08.27

Application Layer

OSI (Open Systems Interconnection): 네트워크 통신을 계층화해서 각 단계별로 역할을 나눠놓은 표준 모델 🔹 1계층 – 물리 계층 (Physical Layer) 0과 1의 비트 스트림을 전기적/광학적으로 전송케이블, 허브 등 물리적 장비장비: 허브, 리피터, 전선, 광케이블 🔹 2계층 – 데이터 링크 계층 (Data Link Layer) MAC 주소(랜카드에 박혀있는 주소) 기반으로 프레임 단위 전송같은 네트워크 내 장비들 간 통신오류 감지, 흐름 제어장비: 스위치, 브리지 🔹 3계층 – 네트워크 계층 (Network Layer) IP 주소 기반으로 라우팅목적지까지의 경로 설정패킷 단위 전송프로토콜: IP, ICMP, IGMP장비: 라우터 🔹 4계층 – 전송 계층 (..

CS/Computer Network 2025.08.04

인증(Authentication) 기본 개념 (Spring boot / Flask

Flask와 Spring boot 프로젝트를 진행하면서 회원가입/로그인 및 인증부분은 프로젝트 완성도 면에서 중요하다고 생각되어 이번기회에 이부분에 대해서 실제 서비스에서 사용되는 로직과 가깝게 구현할 수 있도록 공부를 진행중이다.  인증(Authentication) 기본 개념인증이란?👉 “이 사용자가 누구인지 증명하는 과정”(예: 로그인 → 사용자 정보를 확인하고 ‘누군지’ 알아내는 것) Authentication로그인처럼 "이 사람이 누군가?" 증명Authorization권한 검사 (예: 관리자인가 ??)Session서버에 저장하는 로그인 정보JWT (Token)클라이언트에 저장하는 로그인 정보 (stateless)OAuth2소셜 로그인 방식 (카카오, 네이버, 구글 등)HttpOnly 쿠키보안 강..

CS/필수지식 2025.04.10

Compiled language vs Interpreted language

오늘 회사에서 팀장님이 OJT 를 해주시는데, C, C++, Java. / Python, Javascript 의 차이에 대해서 물어보셨다. 다 아는 언어들인데, 막상 두가지 차이에 대해 답하려니까 쉽지가 않았다. 뭔가 strict한 언어와 유연한 언어로 나뉜거 같기도 하고, 또 C가 묶여있는 것을 보니 객체지향 절차지향으로 나뉜거 같지는 않고,,, 결국 답을 못했고, 이 둘의 차이는 컴파일언어와 인터프리트 언어이다. 컴파일 언어란, 소스코드 전체를 기계어로 번역한 후(컴파일) 이 기계어를 cpu를 통해 실행하는 방식으로 동작한다. 반대로 인터프리트 언어는, 소스 코드를 컴파일 하지 않고, 인터프리터를 통해 한줄 씨 번역하며 실행하는 방식으로 동작한다. 컴파일 언어의 경우, 실행 시에는 실행만 하면 되므로..

CS/필수지식 2022.06.21

공주 구하기 (덱, 큐 )

큐 관련해서 쉬운 문제인데, 분명 유명한 테이블 문제인데 이름이 생각이 안난다... 무슨... 용어가 있는데 이름이 생각이 안나서 너무 괴로운 문제였다. 여튼 문제 풀이는 간단하다. 명수만큼 덱에 넣어준 뒤, while 문을 덱 안에 마지막 한 사람만이 남을 때 까지 돌려준다. 그리고 경우를 cnt로 추적하며, 이 cnt가 K의 배수가 될 때는 이를 리스트에서 삭제시키고, (popleft()) 그 외 나머지 경우네는 popleft()를 해서 그대로 다시 오른쪽에 append 시키고, 이 반복문을 계속하다보면 최후의 왕자가 남게된다. import sysfrom collections import deque#sys.stdin=open("input.txt", 'rt')N, K = map(int, input()...

가장 큰 수 (스택)

먼저 처음 포인트는 이 숫자들을 리스트에 받아줘야하는데, 띄워쓰기로 구분되어있지 않기 때문에 항상 받아왔던 방식인 map(int, input().split()) 방식으로 받을 수가 없다. 그래서 str로 받아서 이것들을 list에 넣는뒤, 다시 int형으로 변환시켜준다.  b_num, delete = map(int, input().split())nums = []for i in range(len(str(b_num))):    nums.append(str(b_num)[i])nums = list(map(int, nums)) 그 후, 새로운 리스트를 만들어 nums에 있는 수들을 끄집어 내며 하나씩 비교해보고, 새로운 리스트에 들어있는 수보다 nums[0]에 들어있는 수가 크다면 이를 빼주고, 삭제할 수 있는 ..

역수열 (그리디 알고리즘)

원래 수열을 [0] * N 으로 초기화 시킨 뒤, 정렬이 되어있다 생각하고 1부터 경우를 생각하며, 원래 수열의 0을 역수열의 원소만큼 카운팅 하면 간단한 문제이다. 이중반복문을 돌리면서 i -> 역수열의 인덱스번호  j-> 원수열의 0을 카운팅하기 위한 인덱스 번호라 생각하고 cnt로 0을 카운팅하면서 어차피 오름차순으로 정렬되어 있기에, 앞에 더 작은 숫자가 나와있는건 신경쓰않고 오로지 0만 카운팅 해서, cnt 와 역수열의 원소값이 같아지면 그때의 i+1 값을 원수열에 넣어주고 다음 반복문을 통해 다음값을 카운팅 해주면 된다. import sys#sys.stdin=open("input.txt", 'rt')N = int(input())rev = list(map(int, input().split()))..