CS 18

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

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

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

[프로그래밍] 절차지향과 객체지향 프로그래밍이란

절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시 하는 프로그래밍 기법이다. 절차지향 프로그래밍(Procedural Programming) 프로그램을 일련의 절차나 순서로 보는 방식 데이터와 그 데이터를 조작하는 함수를 별도로 생각하며 C 언어가 대표적인 절차지향 언어이다. 장점 코드의 흐름을 쉽게 이해할 수 있고, 작성이 간단하다 컴퓨터의 처리구조와 유사해 실행속도가 빠르다. 단점 데이터와 함수가 분리되어 있기 때문에 대규모 프로그램애서 코드 관리가 어려울 수 있다. 객체지향 프로그래밍(Object-Oriented Programming) 실세계의 사물을 객체라는 개념으로 추상화하고, 이러한 객체들이 상호작용하는 것으로 프로그램을 구성하는 방식이다. 객체는 상태(속성)와 행동..

CS 2023.09.29

[프로그래밍] 동기와 비동기 방식의 차이점

동기와 비동기는 작업들이 어떤 순서로 실행되는지를 설명하는 개념이다 동기 동기 방식은 한 작업이 완료된 후에 다음 작업이 시작된다(작업들 사이에 순서가 있다) 특정 데이터 요청 후 해당 데이터가 도착할 때까지 기다린 뒤 이후 작업을 진행하는 방식 장점 코드의 흐름이 직관적이고 이해하기 쉽다(작업이 순차적으로 실행되어 읽기 쉽다) 디버깅이 비교적 간단하다. 코드의 흐름이 단순하기 때문 단점 앞선 작업의 지연 시간 동안 프로그램은 대기 상태에 머무르게 된다. (대기시간 연장) UI가 멈추거나 응답하지 않는 형식을 초래할 수 있다. (동기 작업이 오래 걸릴 경우) 비동기 비동기 방식은 여러가지 작업들이 동시에 실행되며 특정 순서를 따르지 않는다. 특정 데이터 요청 후 바로 다음 로직을 실행한다 장점 앞선 작업..

CS 2023.09.29

[프로그래밍] 블로킹과 논블로킹의 차이

블로킹과 논블로킹의 개념은 주로 I/O 작업에서 중요하게 쓰인다. 블로킹(Blocking): 블록된 상태를 의미한다 블록된 상태란 특정 연산이 종료될 때까지 프로그램 실행이 멈춘 상태를 말합니다. 다른 함수로 제어권을 넘겨주어 제어권이 돌아오기까지 기다립니다. 예시: 파일을 읽어오는 함수가 있을 경우 파일을 모두 읽어와야만 다음 함수를 실행 시킬 수 있음 논블로킹(Non-blocking): 논블록 상태를 의미한다. 어떤 함수가 호출되었을 때 그 결과를 기다리지 않고 바로 반환하는 것을 말합니다. 다른 함수를 호출하지만 제어권은 넘겨주지 않아 계속 진행됩니다. 예시: 위 예시와 다르게 파일 읽기를 요청한 후 즉시 제어권을 반환하여 다른 일을 진행할 수 있다.

CS 2023.09.29

교착상태란?

여러 프로세스나 스레드가 서로의 자원을 기다리며 무한히 대기하는 상태를 말합니다. 교착상태가 되면 교착상태 발생 조건 4가지 상호 배제(Mutual Exclusion) 자원은 동시에 하나의 프로세스만이 사용할 수 있다. 이는 동일한 자원에 대한 동시 접근을 제한하여 데이터 일관성과 안전성을 유지하기 위한 목적으로 사용됩니다. 점유와 대기(Hold and Wait) 적어도 하나의 자원을 점유한 상태에서 다른 자원을 기다리고 있어야한다 이로 인해 다른 프로세스들은 필요한 자원을 사용할 수 없고, 대기하는 프로세스 역시 다른 자원을 기다리며 무한히 대기하게 됩니다. 비선점(No Preemption) 다른 프로세스나 스레드에 의한 점유된 자원을 강제로 빼앗을 수 없어야한다 자원은 점유한 프로세스가 명시적으로 해..

CS 2023.07.12