본문 바로가기

CS

함수형 프로그래밍의 컨셉과 순수 함수 예시 함수형 프로그래밍의 컨셉 변경 가능한 상태를 불변상태(immutable)로 만들어 side effect를 없애자 모든 것은 객체이다 코드를 간결하게 하고 가독성을 높여 구현할 로직에 집중시키자 동시성 작업을 보다 쉽게 안전하게 구현 하자 변경 가능한 상태를 불변 상태로 만들어 side effect를 없애자 어떤 input parameter가 주어지느냐에 따라 output (return value) 이 정해지는 구조로 한다. 그 외에 어떤 외부 상태도 함수의 return 값에 영향을 줄 수 없다. 모든 것은 객체이다 함수형 언어에서는 모든 것이 객체. → 클래스 외에 함수 또한 객체 함수를 값으로 할당할 수 있다. 함수를 parameter로 전달할 수 있다. 함수를 return 값으로 반환할 수 있다. 사..
[운영체제] 우선순위 역전 Priority Inversion 우선순위 역전 Priority Inversion 간단히 말하면, 어쩌다 보니 우선순위 가장 높은 프로세스가 가장 늦게 완료되는 상황을 말한다. 임계구역 / 공유자원에 대한 접근을 제어하다가 이러한 문제가 발생할 수 있다. 예시) 우선순위 역전이 일어나는 상황 task3이 공유 자원 접근 위해 바이너리 세마포어 (binary semaphore) 획득 스케줄러에 의해 task1이 수행됨 task1은 task3이 갖고 있는 세마포어를 획득하기 위해 기다림 (waiting) 스케줄러에 의해 task3이 다시 실행됨 이 때 세마포어와 관련 없는 task2가 task3보다 우선순위가 높아 스케줄러에 의해 실행됨. 그러면서 task3의 완료가 뒤로 밀리며, 우선순위가 가장 높은 task1이 결국 가장 늦게 수행됨 (..
Array (배열) VS Linked List (연결 리스트) VS Dynamic Array (동적 배열) 배열 Array int arr[3] = { 0, 1, 2 }; 같은 타입의 데이터 여러개를 하나의 이름으로 groupping하여 관리할 수 있게 하는 자료구조 장점 논리적 저장 순서 = 물리적 저장 순서 인덱스에 해당하는 원소에 O(1)만에 접근 가능 다른 말로, 'Random Access가 가능하다'고 표현 심플한 자료구조. 단점 삽입/삭제가 어렵다. O(N)만큼 소요된다. 중간에 원소를 빼거나 끼워넣으려면 한칸씩 밀고 당기는 걸 해주는데, 이 때 O(N)만큼 걸린다. 초기에 배열 크기를 지정해야한다. 추후에 동적할당으로 수정할 수 있긴 하다. 연결 리스트 Linked List 어떤 노드가 데이터와 다음 노드에 대한 주소 정보(포인터)를 갖고, 노드들끼리 순차적으로 연결되어 있는 방식의 자료구조 장점 ..
MSA / 마이크로 서비스 / 마이크로 아키텍처 기존 : 모노리스(monolith) 아키텍처 쉽게 말하면 기존에는 하나의 코드 베이스에 모두가 달라붙어 기능을 모두 구현하는(...) 구조가 주로 사용되었다. 이러한 아키텍처의 문제는, 점점 커질수록 뭐 하나 마음대로 수정하기가 조심스럽다. (merge하다 conflict도... 문제..) 코드 몇줄 변경에도 전체 서비스를 다시 빌드하고 다시 배포해야 하므로 위험성이 너무 커지는 방법이다. 그러다 보니 어느 곳에서는 새로운 기능의 release가 아예 느려진다고 한다. 그래서 등장한게 마이크로 서비스! 기존 서비스 → 마이크로 서비스 하지만 기존에 이미 있는 서비스를 통째로 마이크로 서비스로 바꾸는 것은 참 난감하다. 특히 인증 절차의 구성이 쉽지 않은데, 이러다보니 결국 1개의 모노리스가 n개의 모노리..
[데이터베이스] 트랜잭션 ACID Atomic 원자성 All or Nothing 트랜잭션 작업 단위를 일부분만 실행하진 않는다. 전부 실행하거나 하나도 실행하지 않는다. 수행하고 있는 트랜잭션에 의해 변경된 내역은 테이블에 유지하면서, 이전에 commit된 상태 또한 임시 영역에 저장함. 만약 현재 수행중인 트랜잭션에서 오류가 발생하면 임시 영역에 저장했던 상태로 rollback rollback segment : 이전 데이터들이 임시로 저장되는 영역 save point를 지정해서, 확실하게 오류가 발생하지 않는 부분을 표시할 수 있음 중간에 오류가 나서 트랜잭션을 다시 수행할 때 이 지점으로 되돌아가면 됨 Consistency 일관성 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것 일관성이란 domain이나 primary ..
[데이터베이스] 인덱스 Index Index란? RDBMS에서 대용량의 데이터(레코드)가 있을 때, 특정 데이터를 검색하기 위해서 테이블의 레코드를 full scan하는 것이 아니라, 인덱스가 적용된 컬럼의 테이블(컬럼, 인덱스주소)을 따로 파일로 저장해놓고 그것을 검색해서 검색 효율을 높이는 방법 사실 여기까지만 알고 그다지 깊게 알지 못했는데, 면접 때 구체적인 걸 물어보셔서 대답하지 못했던 부분이다. 좀 더 자세히 살펴보도록 하자. 범위 스캔 Range Scan 인덱스는 key column순으로 정렬되어 있기 때문에, 특정 값을 찾다가 해당 범위를 벗어나는 값을 만나면 멈춘다. (그러면 그 이전 값과 벗어났던 값 사이에 있다는 의미이므로) 인덱스 테이블 파일은 B-tree로 주로 표현한다 B-tree란? root block, bra..
[데이터베이스] 격리성 관련 문제와 격리성 수준 (Isolation Level) 격리성 관련 문제점 1. Dirty Read 한 트랜잭션(T1)이 데이터에 접근하여 값을 'A'에서 'B'로 변경했고 아직 커밋을 하지 않았을때, 다른 트랜잭션(T2)이 해당 데이터를 Read 하면? T2가 읽은 데이터는 B가 될 것이다. 하지만 T1이 최종 커밋을 하지 않고 종료된다면, T2가 가진 데이터는 꼬이게 된다. 트랜잭션이 rollback했는데, 다른 트랜잭션이 rollback 이전에 수정되었던 데이터를 갖고 있어서 문제가 되는 경우 2. Non-Repeatable Read 한 트랜잭션(T1)이 데이터를 Read 하고 있다. 이때 다른 트랜잭션(T2)가 데이터에 접근하여 값을 변경 또는, 데이터를 삭제하고 커밋을 때려버리면? 그 후 T1이 다시 해당 데이터를 Read하고자 하면 변경된 데이타 ..