목록분류 전체보기 (164)
개발자공부일기
위상정렬이란?필요성위상정렬(Topological Sort)은 “선행 조건(의존성)이 있는 작업들을, 그 조건을 절대 위반하지 않도록 순서를 정렬”하는 알고리즘입니다. 현실의 작업/시스템은 단순 직렬이 아니라 “A를 해야 B 가능”, “B와 C를 끝내야 D 가능”처럼 얽힌 의존성을 가집니다. 이때 임의 순서로 실행하면 다음 문제가 생깁니다. 빌드 실패(의존 모듈이 먼저 준비되지 않음), DB 마이그레이션 오류(FK 제약으로 생성/삭제 순서가 틀림),파이프라인 단계 오류(테스트 전 배포 같은 순서 역전) 위상정렬은 이런 의존성을 “방향 그래프”로 모델링한 뒤, 간선 방향(선행→후행)을 지키는 실행 순서를 자동으로 산출합니다. 위상정렬의 특징방향 그래프에서만 의미가 있습니다.간선 u → v 는 “u가 끝나야 ..
딱히 정리한적도 없기도하고 오랜만에 sql문제를 풀려하니 기억이 바로바로 안나서 재활겸 정리해봤습니다.작성 순서SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT/FETCH 논리적 실행 순서(DB가 처리하는 순서)FROM (JOIN 포함)WHEREGROUP BYHAVINGSELECTORDER BYLIMIT/FETCH 예시 테이블 USERSuser_idnamecountryjoined1MinKR2021-03-102JaeKR2022-10-053AlexUS2022-10-20 PRODUCTSproduct_idproduct_namecategoryunit_price10Tshirttop2000020Sneakersshoes8000030Capacc15000 ONLINE_S..
1. 서론 - Hash와 Map의 개요맵(Map)은 키(Key)와 값(Value) 쌍을 저장하는 연관 컨테이너를 말합니다. 한편 해시 테이블(Hash Table)은 키를 해시 함수로 변환하여 나온 해시값을 이용해 데이터를 배열의 특정 위치(버킷)에 저장하는 자료구조입니다. 사실 Map은 인터페이스 혹은 추상 자료구조이고, Hash Table은 그 구현 방식 중 하나입니다. Map vs Unordered_map이라고 쓰여있긴 하지만, 더 정확하게는 이진 탐색 트리 vs 해시 테이블의 차이라고 볼 수 있습니다.C++ 표준 라이브러리에서는 이러한 구조를 각각 `std::map`과 `std::unordered_map` 클래스로 제공합니다. `std::map`은 이진 탐색 트리(레드-블랙 트리) 기반으..
프로그램은 컴퓨터가 실행할 수 있는 명령어의 집합입니다. 프로세스는 컴퓨터에서 실행 중인 프로그램으로 각각의 프로세스는 독립된 메모리 공간을 OS로부터 할당받습니다. CPU는 명령어를 실행하는 연산장치고메인 메모리는 프로세스가 CPU에서 실행되기 위해 대기하는곳입니다.IO(Input/output) 이름에서 알 수 있듯 네트워크라던가 우리의 마우스나 키보드같은 입출력장치와 데이터를 주고받는 것입니다. 간단히 필요한 용어들을 알아봤고 이제 어떻게 여러 그로그램이 동시에 실행되는지 알아보겠습니다. 단일 프로세스 시스템처음에는 한 번에 하나의 프로그램만 실행 할 수 있었습니다.다른 프로그램을 실행하고 싶다면 지금 프로그램을 종료하고 실행해야했죠.그냥 듣기에도 비효율적입니다. 단일 프로세스에서 프로세스는 cpu..
1. 트랜잭션이란 무엇인가?트랜잭션(Transaction)은논리적으로 한 번에 처리되어야 하는 작업들의 묶음이라고 이해하면 된다.조금 더 풀어서 말하면:하나의 비즈니스 작업(계좌이체, 주문, 게시글 작성 등)을 수행하기 위해여러 개의 SQL이 실행될 때그 전체를 하나의 단위로 묶어서전부 성공하거나, 전부 실패하도록 만든 것을 트랜잭션이라고 부른다.1-1. 계좌이체 예시로 보는 트랜잭션계좌이체를 예로 들면 A가 B에게 10,000원을 송금한다고 했을때 다음과 같은 과정이 논리적으로 한 번에 처리되어야 한다.A 계좌에서 10,000원 출금B 계좌에 10,000원 입금이 두 작업 중 하나만 성공하고 하나는 실패하면 안 된다.출금만 되고 입금이 안 되면? → 돈이 사라짐입금만 되고 출금이 안 되면? → 돈이 생..
흐름제어·혼잡제어·오류제어 네트워크에서 송신자 → 인터넷(라우터들) → 수신자 흐름이 있을 때,흐름제어: 수신자 보호(버퍼 넘침 방지)혼잡제어: 네트워크 보호(라우터 큐 과부하 방지)오류제어: 손상·유실 복구(정확성 보장)실제 전송 가능량은 보통실제 송신 윈도 = min(수신자 광고 윈도 rwnd, 혼잡윈도 cwnd) rwnd (receiver window, 수신자가 광고하는 윈도)수신 측 애플리케이션/커널 버퍼의 남은 여유를 바이트 단위로 광고한 값.송신자는 아직 ACK로 확인되지 않은 데이터 총량이 rwnd를 넘지 않도록 전송량을 제한한다cwnd (congestion window, 혼잡 윈도)송신 측이 네트워크 혼잡을 추정해 스스로 설정하는 전송 한도. 네트워크가 견딜 만한 속도로만 보내려는 자가 규..
네트워크에서 “스위치”라고 부르지만, 실제로는 처리할 수 있는 계층(Layer)에 따라 능력이 크게 달라진다.L2는 단순하고 빠르며, L7은 할 수 있는 게 많지만 복잡하고 비싸다. 핵심은 “무엇을 보고, 어디까지 판단하느냐”L2스위치(데이터링크 계층)무엇을 본다이더넷 헤더의 출발지/목적지 MAC무엇을 한다MAC 학습: 들어오는 프레임의 출발지 MAC과 유입 포트를 MAC 테이블에 저장포워딩: 목적지 MAC이 테이블에 있으면 해당 포트로만 전송, 없으면 플러딩플러딩:스위치에서 특정 목적지 주소에 대한 정보를 찾지 못했을 때, 허브처럼 패킷을 입력 포트를 제외한 모든 포트로 보내는 현상입니다브로드캐스트 도메인 관리: VLAN으로 논리 분리 가능 => 브로드캐스트 범위를 분리하여 불필요한 확산을 줄일 수 있..
HTTP 메서드HTTP 메서드는 클라이언트가 서버에게 “무엇을 어떻게 하길 원하는지”를 표현하는 표준화된 동사다. 같은 URL이라도 메서드에 따라 의미와 서버 동작이 달라진다.메서드 종류GET: 자원 조회. 본문 없이 조회 중심. 안전하고 멱등. 캐싱 우선.POST: 자원 생성·처리. 안전·멱등 아님. 폼 제출, 명령형 작업.PUT: 전체 업데이트(치환). 멱등. 전체 상태를 보내 재설정.PATCH: 부분 업데이트. 멱등 아님(보통 그렇지만 멱등하도록 설계 가능).DELETE: 자원 삭제. 멱등.HEAD: 헤더만 조회(본문 없음). 빠른 존재 확인·사이즈 확인.OPTIONS: 지원 메서드·CORS 프리플라이트 확인.TRACE/CONNECT: 특수 목적. 일반 API에서는 거의 사용 안 함.GET리소스 조..