[TIL] 260114 cs지식

이세령·2026년 1월 14일

TIL

목록 보기
130/131

동기와 비동기

동기 : 모든 일을 순서대로 처리, 1번 작업이 끝날 때 까지 2번 작업은 무조건 기다려야 한다.
비동기 : 모든 일을 병렬적으로 처리, 1번이 끝나기를 기다리지 않고 바로 2번 작업을 시작

Git Merge와 Rebase

Merge : 히스토리를 남기는 방식, a와 b 브랜치를 합쳤다 라는 기록을 남긴다.

  • main에 합칠 때
  • 브랜치 통합할 때
  • 언제 어떤 기능이 들어왔는지

Rebase :히스토리를 재정렬 하는 방식, a 브랜치를 b 브랜치의 최신 작업 위에 붙여준다.

  • 내 로컬/개인 브랜치 에서만 작업할 때
  • PR 보내기 전 커밋 정리할 때
  • main 최신 반영을 깔끔하게 하고 싶을 때

Web Server 와 WAS의 차이

Web Server : 정적 컨텐츠 담당, 보통 앞단에서 가볍게 받으면서 정적/프록시 담당
WAS : 동적 컨텐츠 담당, db조회/계산 등 작업들을 수행하여 결과를 HTML로 만들어 보여준다.

OSI 7계층

계층별로 역할을 분리하면, 문제가 생겼을 때 원인을 찾기 쉽고, 특정 계층의 장비나 프로토콜만 교체하기 편하다.

  • 7 응용
    크롬같은 브라우저, 서비스, 프로토콜
    브라우저가 GET 요청 보내는 것
    HTTP/HTTPS, DNS, FTP

  • 6 표현
    데이터 형식 변환/인코딩/암호화 등

  • 5 세션
    통신의 세션(대화) 생성/유지/종료 등

  • 4 전송
    TCP 같은 데이터가 빠짐없이 잘 갔는지 확인하는
    프로세스 간 통신
    포트로 앱 구분

  • 3 네트워크
    서로 다른 네트워크 간 라우팅, 주소 지정
    IP, 라우터, ICMP

  • 2 데이터 링크
    프레임 단위 전송
    이더넷, MAC 주소, 스위치

  • 1 물리
    케이블 같이 0과 1을 실제로 보내는 층

DB 정규화

  • 데이터의 중복을 줄이고 무결성을 높이기 위해 테이블을 잘 쪼개는 과정
  • 오류와 유지보수 비용을 줄이기 위해 데이터를 잘 정리해두는 설계 습관
  • 이상현상 방지(갱신이상, 삽입이상, 삭제이상)

컨테이너(도커)와 VM

VM

  • 가상머신
  • 하드웨어까지 가상화하여 OS를 통째로 하나 더 올린다.
  • 강한 격리가 필요할 때나 서로 다른 OS를 섞어야 할 때 사용한다.

무거움

  • 부팅이 필요해서 보통 컨테이너보다 느리다.
  • OS를 매번 포함
  • VM 마다 메모리/디스크가 더 많이 필요
  • 업데이트나 패치도 VM별로 해야한다.

컨테이너

  • 같은 호스트 OS커널을 공유하면서 프로세스를 격리
  • 빠른 배포와 확장, 롤백이 중요할 때 사용한다(마이크로서비스, CI/CD)

가벼움

  • OS 커널 공유
  • 프로세스 실행에 가깝다
  • 패키징이 작고 배포가 쉽다

DFS와 BFS

DFS

  • 깊이 우선 탐색
  • 하나의 목표를 만날 때까지 깊에 파고드는 방식
  • 재귀함수, stack 이용

BFS

  • 가까운 것부터 차례대로 방문하는 방식
  • queue 이용

JWT

어떤 사용자인지 증명해주는 정보를 토큰 형태로 들고 다니는 것

  • 서버는 토큰을 검증하여 요청이 누구 것인지 판단
  • 서버가 사용자 상태를 들고있지 않음(stateless)
  • Header(암호화 방식) + Payload(사용자 정보) + Signature(위변조 방지 서명)
  • 서버를 여러 대로 늘려야 하는 환경이나 여러 서비스(마이크로서비스)에서 공통 인증을 쓰는 환경에서 잘 맞는다

캐시

자주 쓰는 결과를 빠른 곳에 임시로 저장해두고, 거기서 꺼내 사용하는 것

  • 메모리 내 있어 빠르다.
  • 데이터 구조가 단순하다.

기본 동작

  • Cache hit : 캐시에 있으면 바로 반환
  • Cache miss : 캐시에 없으면 DB/API에서 가져옴 -> 캐시에 저장 -> 반환

사용하면 좋은 상황

  • 읽기가 많은 데이터
  • 계산 비용이 큰 결과
  • 외부 API 호출 결과
  • 트래픽 급증을 버텨야 할 때

로드 밸런싱(Load Balancing)

여러 서버에 트래픽을 분산해서 한 서버에 부하가 몰려 느려지거나 다운되는 걸 막는 기술

  • 가용성 : 하나가 죽어도 나머지로 계속 서비스
  • 덜 바빠지면 더 빠르게 동작
  • 스케일 아웃 : 서버 1대 업그레이드 보다 유연하고 빠름

분산방식

  • 라운드 로빈
    • 서버에 순서대로 1개씩
  • 가중 라운드 로빈
    • 성능 좋은 서버에 더 많이 배분
  • 최소 연결
    • 현재 연결 수가 가장 적은 서버
  • 최소 응답 시간
    • 최근 응답이 빠른 서버 위주로 보냄
  • IP 해시 / 일관 해시
    • 특정 키가 항상 비슷한 서버로 가게 함

CORS

웹 브라우저가 보안을 위해 다른 도메인의 리소스 접근을 제한하는 정책

메시지 큐

일을 바로 처리하지 않고 발신자(Producer)가 메시지(작업 지시서)로 만들어 큐에 쌓아뒀다가 수신자(Consumer) 꺼내 쓰는 것

예를 들어, 많은 주문이 들어오면 "주문 처리 작업"을 메시지 큐에 넣고 빠르게 "주문 접수됨"을 응답하고 수신가자 큐에서 꺼내서 결제 요청/배송요청 등 작업을 순서대로 처리하게 해준다.

CI/CD

Continuous Integration, 지속적 통합

자동으로 빌드와 테스트를 실행해서 문제를 빠르게 발견

Continuous Deployment, 지속적 배포

테스트를 통과한 코드를 자동으로 배포

가비지 컬렉션(GC)

사용하지 않는 메모리를 자동으로 찾아서 해제해주는 관리 기법
C나 C++은 개발자가 직접 free()나 delete 해야하는데 Java같은 곳에서는 GC가 관리해준다.
=> 메모리 누수 방지

API Gateway

여러 백엔드 서비스(마이크로서비스) 앞에서 클라이언트 요청을 받아서 적절한 서비스로 라우팅/조합/보안 처리 해준다.

  • 단일 진입점(Single Entry Point) 역할
profile
https://github.com/Hediar?tab=repositories

0개의 댓글