CS34 [소프트웨어 아키텍처 101] 챕터 3. 모듈성 모듈성 모듈성은 사실 제대로 정의하기가 쉽지 않은 개념이다. 우리가 아키텍처를 분석해야 할 (메트릭, 피트니스 함수, 시각화 등) 많은 도구가 바로 이 모듈성에 기반하기 때문이다. 모듈성은 일종의 구성 원리이다. 모듈성을 잘 유지하는 건 우리가 암묵적 아키텍처 특성이라고 정의한 것의 좋은 예가 됩니다. 즉, 아키텍처를 논하기에 앞서 모듈성을 잘 유지하도록 프로젝트 구조를 잡아 나가야 한다. 정의 모듈성은 일종의 구성 원리(organizing principle)이다. 물리학에 비유하자면, 소프트웨어 시스템은 엔트로피(무질서)가 증가하는 방향으로 움직이는 복잡한 시스템을 모델링한다. 아키텍트는 끊임 없이 에너지를 소비해서 시스템을 구조적으로 탄탄하게 유지해야 한다. 모듈성을 잘 유지하는 건 우리가 암묵적(i.. CS/기타 2024. 1. 17. [소프트웨어 아키텍처 101] 챕터 2. 아키텍처 사고 아키텍처 사고 아키텍트는 개발자와 사뭇 다른 관점에서 주변을 바라본다. 기상학자와 아티스트가 구름을 바라보는 관점이 다른 것과 같은 이치이다. 이것을 **아키텍처 사고(architectural thinking)**라고 한다. 그러나 안타깝게도 아키텍처 사고를 그냥 아키텍처를 생각하는 것정도로 단순하게 여기는 아키텍트가 참으로 많다. 아키텍트의 사고 방식은 크게 네 가지로 나뉜다. 아키텍처와 설계의 차이를 이해하고 아키텍처 작업을 진행하려면 개발팀과 어떻게 협력해야 할지 아는 것 어느 정도 기술 깊이를 유지하면서 폭넓은 기술 지식을 확보하는 것 다양한 솔루션과 기술 간의 트레이드오프를 이해하고, 분석하고, 조율하는 것 비지니스 동인(business driver)의 중요성을 이해하고 그것을 아키텍처 관심사로.. CS/기타 2024. 1. 12. [소프트웨어 아키텍처 101] 챕터 1. 서론 1.1 소프트웨어 아키텍처란? 소프트웨어 아키텍처는 아키텍처 특성, 아키텍처 결정, 설계 원칙, 시스템의 구조로 구성된다. 시스템의 구조란 시스템이 구현된 (마이크로서비스, 레이어드, 마이크로커널 같은) 아키텍처 스타일들의 종류를 말한다. 시스템의 아키텍처를 완전히 이해하려면 아키텍처 특성, 아키텍처 결정, 설계 원칙도 알아야 한다. 아키텍처 특성은 소프트웨어 아키텍처를 다른 관점에서 바라본 것으로, 일반적으로 시스템의 기능과 직교하는 시스팀템의 성공 기준을 결정한다. 아래와 같은 특성이 시스템 기능에 관한 지식을 필요로 하는 것은 아니지만, 시스템이 올바르게 동작하기 위해서는 반드시 필요하다. 가용성 신뢰성 시험성 확장성 보안 민첩성 내고장성 탄력성 복구성 성능 배포성 학습성 아키텍처 결정은 시스템 구.. CS/기타 2024. 1. 12. [자료구조] 헷갈리는 트리 종류 정리 이진 트리 (Binary Tree) 이진트리는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료구조입니다. 이진트리에는 여러 종류가 있습니다. 정이진트리(Full binary tree), 포화이진트리(Perfect binary tree), 완전이진트리(Complete binary tree), 균형이진트리(Balanced binary tree), 이진 탐색 트리 (Binary Search Tree), 균형 이진 트리, AVL Tree 등이 있습니다. 이 중에서도 이진 탐색 트리, 균형 이진 트리, 균형 이진 탐색 트리, AVL Tree에 관해 알아보도록 하겠습니다. 이진 탐색 트리 (Binary Search Tree) 이진 트리 기반의 탐색을 위한 자료구조입니다. 특성으로는 모든 원소의 키는 유일.. CS/자료구조 2023. 10. 30. [OS] 동기와 비동기, 블록과 논블럭의 차이 오늘은 동기, 비동기 그리고 블록과 논블록의 차이점에 대해서 알아보도록 하겠습니다. 동기와 비동기의 차이 동기 (synchronous) 정의 요청에 대해 결과값을 기다렸다 처리하는 것을 말합니다. 여기서 요청이란 API, 함수에 대한 호출을 말합니다. 장점 설계가 매우 간단하고 직관적이다. 단점 결과가 주어질 때까지 기다려야 하므로, 여러 요청들을 빠르게 처리할 수 없다. 비동기 (asynchronous) 정의 요청의 결과값을 기다리지 않고 처리하는 것을 말합니다. 장점 요청을 보낸 직후, 바로 다른 작업을 수행할 수 있습니다. 단점 동기식보다 설계가 복잡합니다. 블록과 논블록의 차이 블록 (block) 특징 동기에서 파생된 개념입니다. 정의 동기로 처리될 때, 응답을 대기해야 합니다. 이 때, 쓰레드에.. CS/OS 2023. 10. 16. [GIT] .gitignore가 작동하지 않을 때 대처 방법 .gitignore에 제외하고 싶은 파일을 추가했음에도 반영되지 않는 경우가 있습니다. 그럴 땐 .git에 남아있는 캐시 때문인데요, 캐시를 제거해주기 위해선 아래와 같이 입력해주면 됩니다. git rm -rf --cached . 캐시를 제거하면 기존에 staging 영역에 있던 파일들이 unstaged 되므로, git add . 를 해줍니다. 이상으로 글을 마치겠습니다. CS/기타 2023. 6. 23. [Architecture] (2) 시스템 요구사항의 종류 서론 이번 글에서는 시스템 요구사항 중 6가지 (성능, 확장성, 신뢰성, 보안, 배포, 기술 스택)에 대해 자세히 알아보겠습니다. Performance 먼저, Performance (성능)에 대해서 알아보겠습니다. 성능은 하드웨어 스펙과 작업량이 주어졌을 때, latency (대기 시간)을 최소화하고 throughput (처리량)을 최대화하는 것을 말합니다. 퍼포먼스 이슈의 원인은 요청이 쌓여서 응답이 느려지는 것이며, 이는 네트워크, db io, os run queue 등 다양한 요소에서 발생할 수 있습니다. 성능 측정 방법과 원칙 성능 측정 방법은 스펙과 작업량을 고정하는 것입니다. 성능을 향상시키기 위해서는 1) 효율성과 2) 동시성, 3) 성능, 4) 확장성의 원칙을 고려해야 합니다. 효율성은 리.. CS 2023. 6. 8. [Architecture] (1) 소프트웨어 아키텍처를 알아야 하는 이유 서론 오늘은 소프트웨어 아치텍처에 관해서 알아보도록 하겠습니다. 소프트웨어 아키텍처, 왜 배워야 할까? 여러분은 개발자와 소프트웨어 엔지니어의 차이를 아시나요? 저는 이 차이가 소프트웨어를 단순히, 개발하는 능력에만 국한되는 것이 아니라, 시스템 요구사항을 분석하고 개발할 수 있는 능력에서 온다고 생각합니다. 일반적으로 소프트웨어를 만들기 위해서는 기획 요구사항과 디자인에 대해 분석하고 개발합니다. 웹 프로그램을 만든다고 하면, 화면 설계에 맞게 UI와 페이지 디자인을 구현하고 DB ERD를 설계하고 백엔드 로직을 작성합니다. 개발은 이렇게 끝날 수 있습니다. 그렇지만 이렇게 한다고해서 시스템 요구사항을 만족시키느냐? 그렇지 않습니다. 대체, 시스템 요구사항이 뭔데? 시스템 요구사항이란 다음 6가지 기준.. CS 2023. 6. 8. [CS] 프로그램, 프로세스, 쓰레드 서론 오늘은 프로그램, 프로세스, 쓰레드의 차이점에 대해서 알아보도록 하겠습니다. 본론 프로그램과 프로세스의 차이 프로그램이란 저장장치에 저장되어 있어 언제든지 실행 가능한 파일을 말합니다. 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행될 수 있는데, 프로그램은 아직 메모리에 올라가 있지는 않은 상태입니다. 반면, 프로세스란 컴퓨터에서 실행되고 있는 컴퓨터 프로그램을 말합니다. 이는 프로그램과는 다르게, 메모리에 올라와 있는 상태입니다. 즉, 프로세스란 메모리에 올라와 있는 프로그램을 말합니다. 프로세스와 쓰레드의 차이 과거에는 프로그램을 실행할 때 실행 시작부터 실행 끝까지 프로세스 하나만을 사용해서 진행했다고 합니다. 그러나 프로그램이 더이상 하나의 작업 만을 수행하지 않게 .. CS 2022. 6. 18. [DataStructure] 자바스크립트로 구현하는 '트리' 자료구조 (1) 이진트리 트리 자료구조의 필요성 - 트리 자료구조는 결리스트의 검색 시, 노드의 처음부터 찾아가야하는 단점을 보완했음. 이진탐색의 장점을 활용함. 트리 자료구조 실생활 예시 - 회사나 정부의 조직도 - 나라, 지방, 시•군별, 계층적인 데이터의 저장 - 인덱스 - DOM Tree 이진트리의 조건 - 모든 노드는 왼쪽 가지에 포함되는 어떤 숫자보다도 큰 숫자가 된다. - 모든 노드는 그 노드의 오른쪽 가지에 포함되는 어떤 숫자보다 작은 숫자가 된다. 용어 - 노드 - 루트노드 : 가장 꼭대기 노드. - 노드 : 트리 구조에서의 기본 데이터 저장 단위. - 리프 노드 : 차수가 0인 노드, 즉 맨 끝에 달린 노드를 말함. - 관련 용어 - 차수 : 선택한 노드의 부속 트리의 개수를 말함. - 트리의 차수 : 전체 트.. CS/알고리즘 2020. 12. 2. [DataStructure] 자바스크립트로 구현하는 '연결리스트(Linkedlist)' 자료구조 리스트의 정의 특정한 순서로 배치된 일련의 항목 배열리스트의 장/단점 바로 바로 해당 요소에 접근할 수 있음. 요소의 삽입/삭제를 위해 상당한 수의 연산이 요구됨. 다시 인덱싱하기 위해, 메모리 상에서 위치를 재조정해줘야 함. 배열리스트보다 링크드리스트로 구현하면 좋은 상황 배열과 리스트로 본다면 삽입과 수정이 자주 이뤄지는 경우 (전화번호부, 성적 등등) 필요한 메소드 add ( ) remove ( ) search ( ) find ( ) 필요한 객체 Node 객체 next data Linkedlist 객체 head tail length index 코드 console.log("좋은 건 한번 더"); // 링크드리스트가 관리해야 할 정보는 this.head, this.tail, this.count func.. CS/알고리즘 2020. 11. 24. [DataStructure] 자바스크립트로 구현하는 '스택(Stack)' 자료구조 스택 자료구조로 구현된 것들 웹 브라우저의 방문기록 : 가장 나중에 열린 페이지부터 보여준다. 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다. 실행 취소 : 가장 나중에 실행된 것부터 실행을 취소한다. 이처럼 평소에 우리가 자주 쓰는 기능들 중 스택 자료구조를 이용하는 것들이 꽤나 많다. 그래서 오늘은 스택 자료구조를 직접 구현해볼 것이다. 상태 표시 top ( ) : 스택의 마지막 요소가 나타내준다. empty ( ) : 스택이 비었다면 1을 반환하고 그렇지 않다면 0을 반환한다. 필요한 메소드 pop ( ) : 스택 가장 마지막 요소를 뺀다. push ( ) : 가장 마지막에 요소를 추가한다. 배열 기반으로 구현하기 console.log("손쉬운 방법으로 스택 자료구조를 구현해봅시다.".. CS/알고리즘 2020. 11. 23. 이전 1 2 3 다음 반응형