728x90
SOLID는 여전히 중요하다소프트웨어 설계의 다섯 가지 핵심 원칙인 SOLID는 명명된 지 20여 년이 지나가고 있지만, 여전히 개발자들에게 중요한 기준으로 자리잡고 있다. 최근 카카오뱅크의 안드로이드 개발자도 이를 언급하여, SOLID 원칙이 소프트웨어 설계에서 어떤 시사점을 제공하는지 강조한 바 있다. 모든 개발자가 알아야 할 SOLID의 진실 혹은 거짓기술 면접 자리에서 SOLID 5대 원칙에 대한 질문을 받아보신 분이라면 주목! 이 글에서는 SOLID 원칙의 역사와 장점, 그리고 각각의 원칙에서 중요한 점을 면접 상황 예시를 통해 가볍게 풀어보았습tech.kakaobank.com 다만 SOLID가 설계 품질을 높이기 위한 지침일 뿐, 모든 프로젝트에서 반드시 지켜야할 필수 요건이라거나 법이란 건..
Thread, Process, Core는 많을수록 좋을까보통 이러한 질문은 느낌상 '아니니까 묻는 것 같은데' 라는 직감을 준다.만약 누군가 이 각각이 많을수록 어떠한 영향을 줍니까?라고 물어보면 단순히 생각했을 때 Core는 뇌의 역할이니까 뇌가 많을수록 처리량이 많을 것 같고, 한 프로그램 내에 Process가 여러개로 있다면 병렬처리할 기회가 많이 생길 것 같아서 괜찮을 것 같고, Thread가 여러 개라면 이 또한 병렬처리에 유리할 것 같다. 그러한 생각이 틀렸는가를 판단하기 위해서 각각을 살펴본다. Thread가 많으면 어떨까Thread는 크게 하드웨어 입장과 소프트웨어 입장에서 생각할 수 있다. 여기선 소프트웨어 입장으로서 Process 내의 Thread라고 해해보자. 우리는 Thread가 ..
인덱스저번에 말한 바와 동일하게 이런 특징이 있다B-Tree 등의 자료구조 기반의 효율적인 탐색이 가능하다특정 열(Column)에 대해 정렬된 형태로 저장하여 검색 속도를 높인다데이터가 많아질수록 index의 유무가 쿼리 성능에 큰 영향을 미친다그리고 이제 이 인덱스는 그 특징에 따라 분류할 수 있다. 클러스터/비클러스터(Cluster/NonCluster) 인덱스 잘 알려진 지식으로 테이블의 PK는 보통 인덱스 설정이 되어있음을 우린 알고 있다. 이와 관련하여 클러스터/비클러스터 유형이 있는데, 이 PK가 '클러스터 인덱스' 유형에 속한다. ✔️ 클러스터 인덱스간단히 그렸다. 그림을 보면- 인덱스 페이지 내에서 Root 노드는 PK(id)를 Key로, Page에 위치에 대한 포인터를 갖고 있다.-..
Dart의 const와 finalFlutter를 시작하려면 Dart 언어를 알아야하는데, 기본적인 자료형 외에도 필수로 적할 키워드가 있다.바로 const와 final인데 이 두 키워드는 불변성을 나타내고 있지만 사용목적은 다르다. Java나 JavaScript를 이미 해 본 사람이라면 이 키워드 자체는 익숙한데 또 그것과 다른 점도 있다. ✔️ final의 특징런타임을 포함해 한 번만 할당 가능하다final로 선언된 변수는 한 번만 값을 할당할 수 있다. 할당 시점은 런타임을 포함해 언제든 가능하지만 그 이후 다시 변경할 수 없다.final name = 'Flutter'; name = 'Dart'; // Error: name is final and cannot be reassigned.위는 선언 시 할..
Page페이지(Page)는 데이터베이스에서 데이터를 저장하고 관리하는 가장 작은 물리적 단위다.디스크와 메모리 간 데이터 이동에서 주요 역할을 하는데 이런 특징이 있다. 첫 째, 일반적으로 고정 크기를 갖는다. 가령 PostgreSQL에선 8KB고, MySQL에서는 16KB로 DBMS에 따른 차이가 있다.둘 째, Page는 여러 행을 갖고 있다. 하나의 페이지에는 많~은 데이터 행을 포함하고 있는 것이다.셋 째, 데이터베이스가 Disk에서 데이터를 읽거나 쓸 때 이 페이지 단위로 작업을 한다. 그러니 얘 때문에 Disk I/O 성능이 데이터베이스 쿼리 성능에도 직접적인 영향을 미치고 있다. 예를 들어 다음과 같은 과정이 있을 수 있다.1. 데이터가 10000개가 있다.2. 각 페이지는 5개의 데이터를 저..
SpringEvent와 MessageQueue기존에 MessageQueue로서 RabbitMQ, Kafka를 고려할 때 이와 비슷한 역할을 하는 SpringEvent도 후보에 있었다.SpringEvent도 이벤트 기반의 비동기 프로그래밍을 지원하는 아이인데 추가적인 외부 도구 설정은 필요없다. 내부에서 비동기 작업이나 트리거 처리를 간소화할 수 있고, Application 내에서 처리가 되니 디버깅이나 로깅도 편하다. 간편한데 안 쓴 이유분산환경에는 얘가 알맞지 않다. 그야 SpringEvent는 이벤트의 발생과 Listener 호출이 동일한 JVM내에서 처리하다보니, A애플리케이션에서 발생한 Publish 호출을 B 애플리케이션의 Listener가 알 리가 없다. 클러스터 환경에선 다른 서버 노드로이벤..