PostgreSQL은 다른 RDBMS와는 다르게 Vacuum이라는 개념이 존재한다.간단히 말하자면 더 이상 사용되지 않는 데이터들을 정리하는 명령이다.DB에 데이터는 물리적으로 디스크에 저장되게 된다. 그러나, 이 데이터를 UPDATE or DELETE 시에 디스크에
Mutex와 Semaphore에 대한 이론을 간략히 요약하고자 한다.공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section(임계구역) 문제가 발생할 수 있다.이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는
Process Scheduling에 대해 스터디하던 중 Thread Scheduling 질문에 대한 답을 하지 못해 이번 기회에 정리하려고 한다! 우선 Thread Scheduling에 대해 이해하려면 다음 두개의 차이점을 알아야 한다. User Level Threa
프로세스 주소 공간에 대해 심화 스터디를 하며 기본적인 점들과, 궁금했던 점들에 대한 해답을 정리하는 시간을 가져보도록 하겠다!프로세스가 메모리를 할당 받으면, 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리한다. 이를 프로세스 주소 공간이라고 함.함수의 호출과
Test Driven Development할 일 목록$5 + 10CHF = $10Money 반올림?hashCode()Equal nullEqual objectDollar/Franc 중복공용 times통화?testFrancMultiplication 제거할 일 목록에서 어떤
Test Driven Development테스트 작성컴파일되게 하기실패하는지 확인하기 위해 실행실행하게 만듦중복 제거각 단계에는 서로 다른 목적이 있다. 다른 스타일의 해법, 다른 미적 시각을 필요로 한다. 첫 네 단계는 빨리 진행해야 한다. 그러면 새 기능이 포함되더
Django 프레임워크에서 테스트 코드를 짜기 위한 환경을 구성하는 경험을 하게 되었다.많은 오류들을 만나 해결해 나아가는 과정이었고, 추후에 더 고칠 예정이지만 나중에 정리하기에는 너무 많은 내용이 될 것 같아 1탄을 정리하기로 하였다.우선 Django에서 제공하는
회사에서 TDD 스터디를 하게 되어 클린 아키텍처는 잠시 접어두기로 하였다.TDD 스터디를 하며, 사내 코드의 테스트 코드를 짜며 테스트 코드 짜는 전반적인 느낌을 익힌 뒤간단한 예제들을 학습하며 TDD를 배워볼 생각이다.Code Coverage를 적용한 평가를 통해
저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴입니다.하나의 클래스에서 저수준 인터페이스들의 동작을 제어하기 위해서는 저수준 인터페이스들을 일일히 호출해야 합니다.이러한 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어 한 번의 호출로 동작을 제어할
소프트웨어 아키텍트라면 코드에서 탈피하여 고수준의 문제에 집중해야 한다는 거짓말에 절대로 속으면 안 된다. 소프트웨어 아키텍트는 코드와 동떨어져서는 안 된다.소프트웨어 아키텍트는 최고의 프로그래머이며, 앞으로도 계속 프로그래밍 작업을 뭍을 뿐만 아니라 동시에 나머지 팀
SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해준다 컴포넌트 컴포넌트는 배포 단위다. 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다. 자바의 경우 jar 파일이 컴포넌트이다. 인터
SOLID에 대해 많은 내용을 접했지만, SRP를 읽던 중 퍼사드 패턴에 대해서 이야기 하길래 다시 한번 읽어야 겠다고 생각했다. (다다익읽) SRP : 단일 책임 원칙
구조적 프로그래밍, 객체지향 프로그래밍에 관해서는 생략하겠다.함수형 프로그래밍이 무엇인지 궁금했는데 감을 조금은 잡은 느낌이다!함수형 프로그래밍이라는 개념은 프로그래밍 그 자체보다 앞서 등장했다.이 패더라임에서 핵심이 되는 기반은 람다(lambda) 계산이다.리스프에서
"가장 일반적이면서 중요한 인덱스 방법은 B-Tree다. 모든 애플리케이션을 만족시킬 수 있는 최적의 메모리 구조란 존재하지 않지만, 그래도 하나를 선택해야 한다면 B-Tree를 선택할 것이라는 뜻이다." -Christopher J. Date 데이터베이스 시스템 6판인
SQL의 대부분은 SELECT 구문이라고 할 수 있다. 반면 UPDATE, DELETE라는 갱신을 위한 기능은 상세하게 다뤄볼 기회가 거의 없다. 그 결과 갱신과 관련된 SQL 구문은 검색 SQL 구문 이상으로 비효율적으로 성능이 좋지 않은 방향으로 작성된다. 이번 장
레크드에 순번을 붙이는 방법은 앞에서 많이 정리해서 생략하고 응용부터 가도록 하겠다.양쪽 끝에서 숫자 세기오름차순, 내림차순한 뒤 같은 속도로 움직인다.그때 lo와 hi가 똑같은 시점이 중앙값이다.그런데 왜 lo+1, lo-1 도 있을까? -> 짝수일 경우 2개의 평균
서브쿼리란 SQL 내부에서 작성되는 일시적인 테이블이다. 테이블과 서브쿼리는 기능적인 관점에서 차이가 없기 때문에 SQL은 두 가지를 모두 같은 것으로 취급한다. 테이블 : 영속적인 데이터를 저장 뷰 : 영속적이지만 데이터는 저장하지 않음. (접근할 때마다 SELECT
CROSS Join, INNER JOIN, OUTER JOIN에 대한 내용은 생략하겠다.옵티마이저가 선택 가능한 결합 알고리즘의 종류Nested LoopsHashSort Merge알고리즘을 선택하는 기준은 데이터의 크기, 결합 키의 분산이다.가장 기본적으로 사용하는 것
SQL은 일부러 반복문을 언어 설계에서 제외했다.일반적으로 SQL에서 반복문이 지원되지 않아, 다음과 같은 방식으로 프로그래밍을 하는 경우가 많다.레코드에 하나씩 접근하는 SELECT 구문을 반복해서 사용한다.호스트 언어에서 반복문을 처리한 뒤 테이블에 갱신한다.그렇지