본문 바로가기

Computer Science20

[CS] 저는 HTML 프로그래머입니다. 개발을 처음 배울 때 “HTML은 프로그래밍 언어가 아니다.” 라는 말을 종종 듣곤 한다. 그런데 막상 HTML 파일을 뜯어보면 뭔가 코드 비슷한것을 적고, 브라우저는 그걸 또 해석해서 화면을 출력한다.겉보기엔 프로그래밍 언어처럼 생겼는데…도대체 왜 프로그래밍 언어가 아닐까? 튜링 완전성 관점에서 이 질문을 풀어본다.1. 튜링 완전성(Turing Completeness)이란?튜링 완전하다는 건 한 문장으로 요약하면 아래와 같다.충분한 시간과 메모리가 있다면, 어떤 계산 문제라도 표현할 수 있는 능력. 조건문, 반복문, 상태 변화, 메모리 조작 등을 이용해일반적인 계산 처리를 할 수 있어야 튜링 완전한 언어다. C, Java, Python 등 익숙한 언어들이 여기에 해당된다.즉, 위 언어들은 튜링 완전한 .. 2025. 12. 1.
[대규모 시스템 설계] Ch 01. 사용자 수에 따른 규모 확장성 책 "가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 정리하는 글입니다. 단일 서버동작[사용자] 웹 사이트의 도메인 이름으로 DNS 서버에 질의[DNS] 사용자에게 해당 IP 주소 반환[사용자] 해당 IP 주소로 HTTP 요청 전달[웹서버] HTML 또는 JSON 형태의 응답 반환데이터베이스사용자가 늘어나면 단일 서버로는 트래픽을 감당할 수 없기 때문에 여러 서버를 두어야 한다.하나는 웹/모바일 트래픽 처리 용도, 다른 하나는 데이터베이스용이다.단일 서버 형태에 DB가 웹 서버와 연결된다.데이터베이스 선택관계형 DB (RDBMS)전통적인 DBMySQL, Oracle DB 등자료를 테이블과 열, 칼럼으로 표현한다.Join을 이용해 여러 테이블을 병합한다.비관계형 DB (NoSQL)네 종류Key.. 2025. 10. 12.
[CS] 지연 로딩 / 즉시 로딩 정의데이터베이스에서 데이터를 가져오는 방식데이터베이스에서 데이터를 가져오는 시점과 방법에 따라 성능과 자원 사용이 달라진다. 지연 로딩실제로 데이터가 필요할 때 가져오는 방식필요할 때만 데이터를 가져오기 때문에 메모리 사용량을 줄일 수 있다. (불필요한 데이터 로딩 X)데이터 접근 시 추가적인 데이터베이스 쿼리가 발생하여 성능 저하가 발생할 수 있다.데이터 접근 빈도가 낮고 메모리 사용량을 줄이고 싶을 때 지연 로딩을 사용한다. 즉시 로딩데이터를 요청할 때 모든 관련 데이터를 가져오는 방식데이터를 미리 한번에 가져오기 때문에 데이터 접근 시 추가적인 쿼리가 발생하지 않는다. (모든 데이터를 미리 로딩하기 때문에)불필요할 데이터도 미리 로딩하기 때문에 메모리 사용량이 증가할 수 있다.데이터 접근 빈도가 높.. 2025. 1. 28.
[CS] Persistence Context (영속성 컨텍스트) 정의엔티티 객체를 관리하는 메모리상의 저장소로, 1차 캐시, 쓰기 지연, 변경 감지 등의 기능을 통해 데이터베이스와 애플리케이션 간의 데이터를 효율적으로 관리하고 최적화하는 역할을 수행한다.특성1차 캐시영속성 컨텍스트는 엔티티 객체를 1차 캐시에 저장한다.같은 트랜잭션 내에서는 동일한 엔티티를 재사용하므로, 불필요한 DB 조회를 막을 수 있다. 쓰기 지연엔티티 인스턴스에 대한 쿼리를 바로 DB에 보내지않고 1차 캐시에만 반영한다.쿼리는 쓰기 지연 저장소에 모아둔다.동기화(Flush)할 때 모아두었던 쿼리를 한번에 DB로 전송한다.즉, 쿼리를 모아두었다가 트랜잭션이 커밋될 때 한번에 반영한다. 더티 체킹자동으로 변경을 감지하는 것엔티티가 영속성 컨텍스트에 처음 들어올 때 그 상태를 복사해 저장한다. (스냅.. 2025. 1. 24.
[CS] Authentication / Authorization Authentication (인증)정의사용자의 신원을 검증하는 행위방법ID, PW 입력생체 인증etc…예시웹 페이지 로그인QR코드를 통한 신원 확인Authorization (인가)정의특정 사용자가 무엇을 할 수 있는지, 어떤 자원에 접근할 수 있는지 결정하는 과정방법역할 기반 접근 제어(RBAC)권한 정책 및 설정예시데이터베이스에 대해 관리자는 읽고 쓸 수 있지만, 사용자는 읽기만 가능 2025. 1. 21.
[CS] Singleton Pattern 정의객체를 생성하는 디자인 패턴 중 하나로, 특정 클래스에 대해 오직 하나의 인스턴스만 생성되고, 이를 전역에서 접근할 수 있도록 보장한다.핵심 원칙유일한 인스턴스 보장: 싱글톤 클래스는 애플리케이션 실행 중 단 하나의 인스턴스만 생성된다.지연 초기화: 필요할 때까지 인스턴스를 생성하지 않는다.글로벌 접근성: 생성된 싱글톤 인스턴스는 애플리케이션 어디서든 접근할 수 있다.장점하나의 인스턴스만 사용하기 때문에 메모리와 시스템 자원을 절약한다.애플리케이션 전역에서 공통된 데이터나 설정을 관리할 수 있다.인스턴스 생성과 접근 방식을 제한하여, 일관된 동작을 유지한다.단점여러 클래스에서 싱글톤 인스턴스를 참조하면, 결합도가 높아질 수 있다.전역 상태를 가지기 때문에 테스트가 어렵다. 2025. 1. 21.
[CS] Cookie / Session 쿠키와 세션을 사용하는 이유쿠키와 세션은 HTTP의 아래와 같은 특성 때문에 사용한다.connectionlessHTTP는 클라이언트가 요청을 서버에 보내면, 서버는 클라이언트에 response를 보내고 접속을 끊는다.statelessHTTP는 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며, 상태 정보를 유지하지 않는다.쿠키정의클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 데이터 파일유효기간을 명시할 수 있으며, 유효기간이 남아있다면 브라우저가 종료되어도 인증이 유지된다.브라우저가 요청 시에 Request Header를 넣어서 자동으로 서버에 전송한다.구성 요소이름: 각 쿠키를 구별하는 데 사용값: 쿠키의 이름과 관련된 값유효기간: 쿠키의 유지 시간도메인: 쿠키를 전송할 도메인경로: 쿠키를.. 2025. 1. 21.
[CS] TCP 3-way handshake 정의TCP/IP 네트워크에서 안정적이고 연결 지향적인 통신을 설정하기 위해 사용되는 절차.클라이언트와 서버 간 신뢰할 수 있는 연결을 설정하기 위해 세 개의 세그먼트를 교환하는 과정과정클라이언트가 서버에 연결을 요청하는 SYN 세그먼트를 모낸다. 이 세그먼트에는 Sequence Number와 Window Size 정보가 포함되어 있다.서버는 클라이언트의 요충을 수락하고, SYN과 ACK 플래그가 설정된 세그먼트를 클라이언트에 보낸다. 이 세그먼트는 서버의 초기 순번과 클라이언트의 초기 순번에 대한 응답(ACK = 클라이언트의 초기 순번 + 1)을 포함한다.클라이언트는 서버의 응답을 확인하고, ACK 플래그가 설정된 세그먼트를 서버에 보낸다. 이 세그먼트는 서버의 순번에 대한 응답(ACK = 서버의 초기 .. 2025. 1. 21.
[CS] Synchronous / Asynchronous Synchronous (동기)정의작업을 순차적으로 진행하는 것한 작업이 시작되면, 그 작업이 끝날 때 까지 다른 작업은 대기해야 한다.특징간단하고 직관적인 코드 설계여러 작업이 동시에 실행되어야 할 때, 대기 시간으로 인한 전체 프로세스 성능 저하작업 지연 시, 다른 작업들 또한 지연된다.작업 간 의존성이 높은 경우 사용 Asynchronous (비동기)정의작업이 독립적으로 실행되는 것작업의 완료 여부에 상관 없이, 다른 작업의 실행이 가능하다.특징I/O 작업, 네트워크 요청 등 시간이 오래 걸리는 작업에 사용callBack, Promise, async/await 등의 메커니즘으로 구현동기 vs. 블로킹(Blocking)동기 호출에서는 호출된 함수가 작업을 완료할 때 까지 호출한 함수가 기다린다.⇒ 순차.. 2025. 1. 21.