분류 전체보기 80

[네트워크] 웹 동작 방식

웹 동작 순서 사용자가 웹 브라우저를 통해 찾고 싶은 웹 페이지의 URL 주소를 입력한다 사용자가 입력한 URL 주소 중에서 도메인 네임 부분을 DNS 서버에서 검색을 함 DNS 서버에서 해당 도메인 네임에 하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달 웹 URL 정보와 DNS로부터 받은 IP주소를 HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성 생성된 HTTP 요청 메시지를 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소 컴퓨터로 전송 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 URL정보로 변환됨 웹 서버는 도착한 웹페이지 URL 정보에 해당하는 데이터를 검색 검색된 웹 페이지 데이터는 또 다시 HTPP 프로토콜을 사용하여 HTTP응답 메시..

CS 2023.10.02

[자료구조] Mutex와 Spinlock의 차이점

개념 뮤텍스(Mutex) Mutual Exclusion의 줄임말로, 동시서 제어를 위한 프로그래밍 개념 중 하나다. 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 보장하는 도구이다. 두 개 이상의 스레드가 동일한 작업을 하지 못하도록 뮤텍스를 사용하여 해당 자원에 접근을 직렬화한다. 예시로 열쇠로 잠겨있는 1인 화장실을 생각하면 된다. 화장실을 가려면 열쇠가 필수로 필요하다. 열쇠가 없다면 누군가 화장실을 사용 중이다. 열쇠가 생길 때까지 기다린다. 열쇠가 있다면 화장실엔 아무도 없는 거다 화장실을 이용한 본인만 열쇠를 제자리에 갖다 놓을 수 있다. 뮤텍스 작동 순서 Look: 스레드가 공유 자원에 접근하기 전에 뮤텍스로 잠근다.(이미 잠겼다면 하제까지 기다린다.) Access: 뮤텍스가 잠겨..

CS 2023.10.02

[자료구조] Tread와 Process의 차이 (쓰레싱)

프로세스와 스레드는 운영체제에서 프로그램을 실행하기 위한 구조다 1. 프로세스 운영 체제에서 독립적으로 실행되는 프로그램의 인스턴스 작업들이 동시에 일어나야 하고 서로 정보를 주고받아야 할 때 스레딩을 사용합니다. 예시로는 웹 브라우저나 워드 카카오톡 등 하나의 프로세스라고 하며 여러 작업을 동시에 처리할 경우 유용합니다. (예시: 화면 출력, 버튼 클릭, 알림) 2. 스레드 프로세스 내에서 실행되는 하나의 실행 흐름이다. 작업들이 서로 영향을 미치지 않고 따로 실행되어야 할 때 멀티프로세싱이 유용합니다. 예시로는 웹 브라우저 안에 여러개의 탭을 열면 각 탭 하나를 스레드라 부르며 3. 쓰싱 주로 메모리 부족으로 인한 과도한 페이지 교체 작업 때문에 발생한다 가상 메모리를 사용하면 디스크 일부를 RAM처..

CS 2023.10.01

[자료구조] 해시테이블(Hash Table)이란?

해시 테이블은 (Key, Value)로 한 짝을 이루어 데이터를 저장하는 자료구조 중 하나이며, 빠른 검색이 필요할 때 유리한 자료구조입니다. 해시테이블의 특징 빠른 검색 속도: 해시 테이블은 데이터셋의 크기와 관계없이 항상 일정한 시간 안에 원하는 값을 찾을 수 있다. 키-값 저장: 각 항목은 '키'와 '값' 쌍으로 저장된다. 사용자는 특정 '키'를 이용하여 해당하는 '값'을 빠르게 검색할 수 있다. 해시 충돌: 두 개 이상의 키가 동일한 해시값, 즉 동일한 인덱스로 변환되는 경우, 이를 '해시 충돌'이라고 한다. 충돌 처리 방법 중 체이닝으로 같은 인덱스에 해당하는 요소들을 연결리스트 등으로 관리하는 방법이 있다. 동적 확장 및 ..

CS 2023.09.30

[자료구조]Array와 Linked List의 차이

Array 연속적인 공간에 요소를 저장한다(인덱스로 한 번에 접근 가능) 배열 크기가 고정되어 있다. 특정 인덱스에 접근하는데 상수시간이 걸린다. 원소를 중간에 삽입, 삭제하면 비용이 많이 든다(인덱스에 맞게 원소들을 이동시켜야 하기 때문) 일열로 메모리에 저장되어 검색에 유리하다 Linked List 각 요소가 메모리 임의의 위치에 배치될 수 있으며, 각 요소는 다음 요소를 가리키는 링크로 연결이 된다. 배열 크기를 동적으로 조정할 수 있다. 특정 인덱스를 찾으려면 처음부터 순차적으로 탐색해야 한다. (길이가 길수록 오래 걸림) 원소 중간에 삽입, 삭제 비용이 적다 (데이터를 넣고 앞뒤 링크만 연결하면 된다. 단 특정 인덱스를 찾을 때 시간이 소요된다.) 다음 요소의 메모리 주소를 통해 리스트를 만든다.

CS 2023.09.30

[자료구조] 자료구조와 알고리즘의 개념

자료구조 데이터를 효율적으로 저장하고 처리할 수 있는 구조 자료구조는 데이터의 특성, 관계, 연산 등을 고려하여 설계된다. 대표적으로 배열, 스택, 큐, 링크드 리스트, 트리, 그래프 등이 있다. 프로그램의 성능 향상을 위해 가장 적합한 자료구조를 선택하여야 한다. 알고리즘 주어진 문제를 해결하기 위한 절차나 방법을 정의한 것 어떤 문제를 해결하기 위해 명확하게 정의된 일련의 절차 알고리즘은 입력을 받아서 출력을 생성하는 함수와 같다. 적절한 자료구조를 선택함으로써 알고리즘의 성능을 크게 향상할 수 있다.

CS 2023.09.30

[프로그래밍] 메모리 구조의 네 가지 영역 설명

프로그램이 실행되면 메모리는 4가지 영역으로 나뉜다 코드 영역 (Code Area)-> 실행할 프로그램의 코드 CPU가 직접 실행하는 기계어 코드가 포함된다. 데이터 영역 (Data Area) -> 정적 변수(전역 변수, Static선언된 변수) 데이터 영역에 있는 변수들은 프로그램의 시작부터 종료까지 계속 유지된다. 힙 영역 (Heap Area) -> 동적으로 할당되는 객체, 동적 배열, 구조체, 클래스, 인스턴스, 자료구조 동적 할당을 위해서사용되며, 프로그래머가 직접 관리하고 필요에 따라 메모리를 할당하고 해제할 수 있다. 가비지 컬렉터 기능이 있는 언어는 힙 영역의 메모리를 자동 해제합니다. 스택 영역 (Stack Area) -> 지역 변수, 함수 호출 정보(반환 주소, 매개변수 등) 함수 호출이..

CS 2023.09.30

[프로그래밍] MAS란? 마이크로서비스 아키텍처

마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 작은, 독립적인 서비스들로 분할하는 방법론이다. 각각 서비스는 자체적으로 실행 가능하며, 다른 서비스와 네트워크를 통해 통신한다 기존 Monolithic Architecture의 한계점을 극복하기 위해 사용한 방식이다 쉽게 이해하자면 개별 컴포넌트 또는 기능의 독립적인 배포가 어렵다는거다(하나의 수정으로 모든 빌드 배포를 실행해야 한다) 배포 복잡성 증가: 작은 변화에도 전체 시스템을 재배치해야 하므로 배포 과정이 복잡해진다. 장애 영향도 증가: 한 부분에 문제가 생겼을 때, 그 영향이 전체 시스템으로 확산될 가능성이 있다. 확장성 제한: 특정 기능에 대한 요청이 증가하더라도, 해당 기능만 독립적으로 확장하기 어렵다. 마이크로서비스 아키텍처 위와 같은 문..

CS 2023.09.30

[프로그래밍] DDD란? (Domain-Driver Design)

도메인 주도 설계는 복잡한 비즈니스 로직을 처리하는 소프트웨어 개발 방법론 중 하나이다. 이 방법론은 실세계의 비즈니스 문제를 해결하는 데 중점을 두며, 그 문제를 이해하고 모델링하는 것에서 시작된다. 은행 시스템을 만드려면 계좌, 이체, 예금 등의 개념과 그들 간의 관계를 이해해야 합니다. 이런 개념들은 도메인 이라고 부르며 도메인 주도 설계에서는 이 도메인을 중심으로 소프트웨어를 개발함 DDD의 주요 개념 Ubiquitous Language(공통 언어): 프로젝트에 참여하는 모든 사람이 사용하는 공통언어 프로젝트 참여자들이 동일한 용어를 사용하여 의사소통의 혼란을 줄이고, 모호성을 방지하는 것을 목표로 함 계좌라는 단어를 보고 어떤 사람은 고객의 계좌를 생각하고 어떤 사람은 데이터베이스에 저장된 레코..

CS 2023.09.29