패러다임의 시대 현대를 살아가는 우리는 다양한 패러다임의 홍수 속에 살고 있다. 그러나 20세기 중반을 살아가던 대부분의 사람들에게 패러다임은 낯설고 생소한 단어였다. 심지어 그 당시에 패러다임이라는 단어를 알고 있었던 사람들조차 지금 우리가 사용하는 것과는 전혀 다른 의미로 사용하고 있었다. 패러다임 (Paradigm) 이란? '모델 (model)', '패턴 (Pattern)', '예시 (Example)' 를 의미하는 그리스어인 '파라데이그마 (paradeigma)' 에서 유래됐다. 과거에는 표준적인 모델을 따르거나 모방하는 상황을 가리키는 매주 제한적인 상황에서만 사용했다. 예를 들어, 라틴어를 배울 때 '사랑하다'라는 동사의 활용으로 '나는 사랑한다', '너는 사랑한다', '그는/그녀는/그것은 사랑..

Proxy 클라이언트가 프록시 서버를 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템 또는 응용 프로그램 프록시 (Proxy) : 서버와 클라이언트 사이에서 대리로 통신을 수행하는 것 프록시 서버 (Proxy Server) : 중계 기능을 수행하는 서버 1. Forward Proxy 클라이언트가 인터넷에 접근하는 것이 아니라 프록시 서버가 요청을 받고 인터넷에 연결하여 결과를 클라이언트에 전달 (Forward) 해준다. 장점 보안 : 프록시 서버에서 In / Out Bound 패킷에 대한 보안 정책 (Content Filtering 등) 을 적용할 수 있다. 성능 : 프록시 서버 내부에 캐시를 유지하며 한 번 통신한 외부 서버의 이미지, 파일 등을 저장할 수 있다. 캐시에 ..

count(*) VS count(1) 차이가 없다. count(*) VS count(컬럼) count(*) : null을 포함하여 모든 Row 수를 카운트한다. count(컬럼명) : null을 제외한 Row 수를 카운트한다. Reference https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:1156159920245

Spring MVC? Model / View / Controller로 역할을 나누는 패턴이다. MVC 패턴의 목적은 Business Logic과 Presentation Logic을 분리하는 것이다. Business Logic : 어떤 특정한 값을 얻기 위해 데이터 처리를 수행하는 응용프로그램의 일부 (즉, 원하는 값을 얻기 위해 백엔드에서 일어나는 각종 처리) Presentation Logic : 화면상의 디자인 구성을 위한 처리 (즉, 화면을 보여주기 위한 처리) 역할 별로 코드를 분리하여 하나의 파일에 코드가 모이는 것을 방지하기 때문에, 가독성과 코드 재사용이 증가한다. 단점으로 View와 Model 사이의 높은 의존성 때문에 애플리케이션이 커질수록 복잡해지고 유지보수가 어렵다. Model Cont..

HomeBrew 설치 M1 칩 있는 맥북 /bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/nrubin29/bea5aa83e8dfa91370fe83b62dad6dfa/raw/48f48f7fef21abb308e129a80b3214c2538fc611/homebrew_m1.sh)" M1 칩 없는 맥북 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 그런데 만약 M1 칩 있는 맥북에서 M1 칩 없는 맥북 설치 방법으로 한다면 아래와 같이 인식을 못한다. zsh: command not found: brew 그러면 아래 명령어를 입력..

팩토리 메서드 패턴? 객체 생성 코드를 별도의 클래스 또는 메서드로 분리하여 객체 생성 변화에 효과적으로 대응할 수 있는 디자인 패턴 등장 배경 여러 대의 엘리베이터가 있다고 생각해보자. 사용자가 버튼 (FloorButton) 을 눌렀을 때, 여러 대의 엘리베이터 중 하나를 선택하여 이동시켜야 한다. 여기서 주어진 요청 (목적지 층과 방향) 을 받았을 때, 여러 대의 엘리베이터 중 하나를 선택하는 것을 '스케줄링' 이라고 한다. 스케줄링은 여러 가지 전략이 있을 수 있다. ex) 목적지 층과 가까우면서 목적지 층의 방향으로 이동 중인 엘리베이터 선택 ElevatorManager 클래스 : 이동 요청을 처리하는 클래스 (ThroughputScheduler 객체, ElevatorController 객체 복수..

데코레이터 패턴? 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우, 필요한 기능들만을 골라 조합하여 설계하는 디자인 패턴 ex) 기본 도로 표시 기능 (+ 차선 표시, 교통량 표시, 교차로 표시, 단속 카메라 표시) 4가지 추가 기능이 있을 때, 이 들의 조합은 총 15가지가 된다. 데코레이터 패턴을 사용하면 이를 4가지 Decorator 클래스만 구현하여 객체 형태로 조합하여 추가 기능의 조합을 구현할 수 있다. 등장 배경 네비게이션에 아래와 같은 기능이 있다고 해보자. 그리고 이를 클래스 다이어그램과 코드로 표현하면 다음과 같다. 기본 기능 : 도로를 간단한 선으로 표시 추가 기능 : 도로의 차선을 표시하는 기능 // 기본 도로 표시 클래스 public class RoadDisplay { pub..
정렬 기법 비교 Stable : 동일한 값에 대해 순서가 뒤바뀌지 않고 정렬 (먼저 등장한 동일한 값이 정렬 후에도 먼저 등장) In-Place : 새로운 배열을 만들 필요 없이 입력 배열 내부에서 정렬 Comparison : 배열 내 요소값들을 서로 비교하여 정렬 Bucket 정렬의 경우, 각 Bucket에 대해 어떤 정렬 알고리즘을 사용하느냐에 따라 Comparison 유무가 달라질 수 있다. Algorithm Stable In-Place Comparison 최선 (Best) 평균 (Average) 최악 (Worst) Bubble O O O $O(N^2)$ $O(N^2)$ $O(N^2)$ Selection O O O $O(N^2)$ $O(N^2)$ $O(N^2)$ Insertion O O O $O(N..