728x90
반응형
🔥 CS 개념 복습
✅ 자료구조
Call by value, Call by reference 차이점? |
Call by Value - 함수에 값을 전달할 때 값을 복사하여 전달하는 방식 - 원본 데이터를 보호할 수 있는 장점 - 큰 데이터를 복사하는 경우 성능 저하 - 깊은 복사(deep copy)를 통해 불변성을 유지 -> 객체의 중첩된 속성까지 모두 복사해 새로운 객체 생성 - 불변성(Immutable)을 지향 -> 완벽한 불변성은 아님 - 객체의 경우: 자바스크립트와 같은 언어에서는 객체를 Call By Value로 전달하지만, 실제로는 객체의 참조 값(메모리 주소)이 복사됩니다. 따라서 함수 내부에서 객체의 속성을 변경하면 원본 객체에도 영향을 미칩니다. - 원시 값의 경우: 숫자, 문자열, 불리언 등의 원시 값은 Call By Value로 전달되어 함수 내부에서 변경해도 원본 값은 변하지 않습니다. Call by Reference - 함수에 값을 전달할 때 메모리 주소를 전달하는 방식 - 큰 데이터를 효율적으로 처리할 수 있는 장점 - 원본 데이터가 변경될 위험이 있음 |
✅ OS
프로세스와 쓰레드 란? | 프로세스(Process) - 메모리에 로드되어 실행되고 있는 프로그램의 독립적인 개체 - 기본적으로 최소 1개의 쓰레드를 가짐 - 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받음 - 스케줄링의 대상이 되는 작업(task) -> 실제로는 쓰레드 단위로 스케줄링 쓰레드(Thread) - 프로세스 내에서 실행되는 흐름의 단위 - 각각 Stack만 따로 할당, Code, Data, Heap영역은 공유 |
동시성과 병렬성 이란? | 동시성(Concurrency) - 하나의 코어가 타임 슬라이스를 통해 동시에 실행되는 것처럼 보이게 하는 기술 - 여러 작업(쓰레드)의 문맥을 빠르게 전환해 동시에 처리하듯 보이게 하는 것 - I/O 작업이 많은 웹서버 / 데이터베이스 서버 등 병렬성(Parallelism) - 두개 이상의 코어가 여러 작업을 동시에 실행하는 것 - 이미지 처리, 대규모 데이터 분석 등 |
📝 싱글 프로세스에서 멀티스레드는 동시성인가 병렬성인가? 정답 : 동시성 이유 : 하나의 프로세스는 한 번의 하나의 쓰레드만 처리할 수 있기 때문에 동시성을 통해 효율적으로 처리 |
|
Race Condition 이란? | Race Condition(경쟁 상태) - 두 개 이상의 프로세스가 공유 자원에 동시 접근할 때 실행 순서에 따라 결과 값이 달라질 수 있는 현상 |
Race Condition 해결책? | 세마포어(Semaphore) - 멀티 프로그래밍에서 공유된 자원에 대한 접근을 제한하는 방법 - 사용하고 있는 쓰레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제 달성(카운터) 뮤텍스(Mutex) - 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘 - 한 프로세스에 의해 소유될 수 있는 Key를 기반으로한 상호배제 기법 - Key를 가진 쓰레드/프로세스만이 공유자원에 접근 가능 뮤텍스와 세마포어의 차이점 - 동기화 대상의 개수 : Mutex(1개) / Semaphore(1개 이상) ->세마포어는 뮤텍스가 될 수 있음(Binary Semaphore) - Mutex는 소유하고 있는 쓰레드만이 해제 가능 ->세마포어는 세마포어 소유하지 않는 쓰레드가 세마포어 해제 가능 [출처] https://worthpreading.tistory.com/90 |
데드락(Deadlock) 이란? |
데드락(Deadlock) - 둘 이상의 프로세스들이 각각 자원을 점유한 상태(Lock을 소유한 상태)에서, 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 서로의 작업이 끝나기만을 기다리는 상황 - 하나의 프로세스가 락을 소유한 채로 해제하지 않거나, 둘 이상의 프로세스가 락을 소유하기 위해 경쟁할 때 조건 - 상호배제(Mutual exclusion) : 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 - 비선점(No preemption) : 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 - 보유 & 대기(Hold and Wait) : 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유자원을 놓지 않고 지님 - 순환대기(Circular wait) : 자원을 기다리는 프로세스 간의 사이클이 형성 |
✅ 네트워크 & HTTP
RESTful API 란? | ✅ REST(Representational State Transfer)란? - 자원에 고유한 주소를 부여해 그 주소를 통해 정보를 주고 받는 것 - HTTP URI(Uniform Resource Identifier, 자원을 식별하는 고유한 주소)를 통해 자원을 명시 - HTTP Method(GET, POST, PUT, DELETE, PATCH 등)를 통해 - GET : 자원 조회 - POST : 새로운 자원 생성 - PUT : 기존 자원 전체 수정 - PATCH : 기존 자원 일부 수정 - DELETE : 자원 삭제 - HEAD : header 정보 조회 - 해당 자원(URI)에 대한 CRUD 작업을 적용하는 것 ✅ RESTful API - URI 설계시 동사보다는 명사(/getuser -> /user) - HTTP 메소드는 멱등성(idempotence)과 안전성(safety) 고려해 사용 - 멱등성 : 여러 번 요청해도 결과가 동일한 속성 - 안전성 : 서버의 자원 상태를 변경하지 않는 속성 |
HTTP Method 란? | - GET : 자원 조회 - POST : 새로운 자원 생성 - PUT : 기존 자원 전체 수정 - PATCH : 기존 자원 일부 수정 - DELETE : 자원 삭제 - HEAD : header 정보 조회 - HTTP 헤더 : 클라이언트와 서버가 요청 또는 응답시 부가적인 정보를 전송 - General Header : 요청과 응답 모두 사용되는 헤더 필드 - Request Header : 요청 클라이언트에 대한 부가적인 정보로 사용되는 헤더 필드 - Response Header : 응답 서버에 대한 부가적인 정보로 사용되는 헤더 필드 - Representation Header : 메시지 본문(body)에 포함된 데이터 형식, 인코딩, 언어 등을 설명 [참조] https://aday7.tistory.com/entry/Web-HTTP-Header-%EA%B5%AC%EC%A1%B0-Request-headerResponse-header |
TCP, UDP 란? |
TCP 프로토콜 - 연결 기반으로 데이터를 전송 - 데이터가 완전히 도착하도록 보장(패킷의 순서가 변경/손실되면 재전송) - 송신자와 수신자 사이에 연결을 설정(3-handshake 방식 /) - 데이터의 연결설정과 재전송으로 인해 속도가 느림 - 파일 전송, 이메일 전송 등 UDP 프로토콜 - 비연결 방식으로 두 당사자 간에 사전 연결을 설정하지 않음 - 데이터가 손실될 가능성이 있음(패킷이 누락되도 전체 전송이 중단되지 않음) - 발신자 측에서 손실 여부를 확인 불가 - 데이터의 안정성이 떨어지지만 더 빠름 - 스트리밍, 게임 등 [출처] https://nordvpn.com/ko/blog/tcp-udp-comparison/ |
728x90
반응형