MVC 패턴이란? Layered Architecture 에 기안한 디자인 패턴이다. user interface 에서 business layer 와 presentation layer 를 분할하여 비즈니스 로직은 재사용 가능하게 하고 interface 도 쉽게 수정하게 하는 것이 목적이다. MVC 패턴의 구성요소는 뷰, 모델, 컨트롤러가 있다. View 컨트롤러가 반환한 데이터를 이용해 사용자에게 출력할 화면이나 인터페이스를 그린다. 여기서는 Todo list 의 화면을 그리는 부분이다. Model 컨트롤러가 요청한 비즈니스 로직을 처리한다. 비즈니스 로직은 데이터를 처리하는 주요 업무를 말한다. 즉, DB에 접속해 데이터를 입출력하고, 용도에 맞게 가공하거나 하는 로직을 수행한다. 만약 데이터에 상태 변화..
언어 설정 관련 게시물 정말 많았는데... 다 실패하고 성공한 👉 44BITS 님의 게시물을 참고했다. 도커 컨테이너 한글 입력 설정 도커 컨테이너 배쉬에서 한글을 입력하면 입력이 안된다. 컨테이너의 로케일 설정 때문이다. 컨테이너의 로케일 설정값과 사용할 수 있는 로케일은 아래처럼 확인할 수 있다. #현재 로케일 설정 root@8c66d4754f83:/# locale ... LC_ALL= #사용 가능한 로케일 확인 root@8c66d4754f83:/# locale -a C C.UTF-8 POSIX 한글은 C.UTF-8 이나 ko_KR.UTF-8 을 이용해야 한다. 현재 사용 가능한 로케일은 C.UTF-8 이니 이 값을 컨테이너 실행 시 옵션으로 설정해주면 된다. $ docker exec -e LC_AL..
Image pull 먼저 만들고 싶은 환경의 이미지를 가져온다. 여기서는 mariaDB 환경을 만들어볼 것이다. mariaDB 이미지를 👉 Docker Hub 에서 검색한다. 그럼 Official Image 라는 태그가 달린 도커에서 기본적으로 제공해주는 이미지가 뜨는데, 해당 이미지에 들어가면 Pull 명령어가 있다. pull 명령어를 복사해 터미널에 입력해준다. 뒤에 :latest 옵션을 붙이면 최신 버전으로 다운받는데, 이 옵션은 default 이니 안 붙여줘도 된다. 잘 다운되었는지 docker images 명령어로 확인해본다. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mariadb latest e2278f24ac88 2 weeks ago 41..
개발환경 보통 개발자들은 자신의 로컬 컴퓨터에서 개발을 하고, 그 결과물을 서버에서 실행시켜 배포한다. 이렇게 되려면 개발자의 로컬 개발 환경과 서버의 개발 환경이 같아야 한다. 개발환경이 다르면 여러 귀찮은 문제들이 발생한다. 게다가 만약 새로운 서비스를 만드려는데 이 서비스가 다른 환경에서 개발되었다면 또 설정을 새로해줘야한다. 개발환경 구축은 생각보다 귀찮은 작업이다. 이전 환경을 구축해야하는데 메뉴얼도 없고 전임자도 없다면? 다 개발해놨더니 서버의 환경이 달라서 다시 맞춰야 한다면? 엄청 골치아파진다... 게다가, 요즘 MSA(Micro Service Architecture) 가 핫하다. 서비스를 작은 모듈별로 나누어 관리하는 아키텍처인데, 모듈들은 각각 다른 환경을 가질 수 있다. 이 모듈들을 ..
온 프레미스 환경과 가상화 온 프레미스(On-premise) 환경이란 서버를 클라우드 등의 원격 환경이 아닌 자체적으로 보유한 전산 서버에 직접 설치해 운영하는 방식이다. 이 반대인 클라우드 환경의 서버는 오프 프레미스(Off-premise) 방식이라고 한다. 최근에는 이 온 프레미스 환경에서 가상화 기술을 도입해 서버를 운영하고 있다. 클라우드 환경의 핵심 기술이기도 하다. 내가 많이 들어본 가상 기술 중에는 도커, Virtual Machine 등등이 있는데... 이 가상화 기술이 무엇인지 정확하게 알고 사용하지 않아서 나름대로 공부해보았다. 가상화란? 가상화란 컴퓨터의 물리 리소스(서버, 네트워크, 저장소 등)을 추상화하여 사용자들이 물리 리소스의 내부를 잘 모르더라도 쉽게 사용할 수 있도록 하는 기..
시간복잡도란? 알고리즘의 성능을 측정하는 방법이다. 실제로 걸리는 시간이 아니라, 이 알고리즘이 입력되는 데이터의 양에 따라 얼마나 많은 단계를 거쳐야 하는지의 비율을 말한다. 빅오(Big-O) 란? 시간 복잡도를 표기하는 방법 중 대표적으로 쓰이는 표기법이다. 입력되는 데이터의 개수를 n이라고 하면 O(n) 같이 표기한다. 참고로, 10개, 100개 데이터에 따른 성능 차이는 미미하다. 하지만, 100000개, 100000000개의 경우를 보면 성능 차이가 눈에 띄게 난다. 그러니 적은 양의 데이터의 경우는 고려하지 않는다. 또 빅오는 대충 이런 비율로 증가할 것이다~ 라는 의미에서 사용되므로 일정하게 증가하는 상수항은 의미가 없어 표기하지 않는다.(n*n-1 이나 n*n 이나 의미는 같으니...) 또..
트라이 트라이는 문자열 검색을 빠르게 해주는 트리다. 문자열을 노드 하나에 넣게 되면 숫자 데이터나 한 글자 데이터 검색과 달리 한글자 한글자 비교를 해야 하므로 시간이 더 걸린다. 트라이는 문자열의 단어 하나하나를 트리로 구성한 형태다. car 를 찾고 싶다면 c->a->r 순으로 찾아가고 r 쪽에 도달하면 해당 car 문자열을 알아낼 수 있다.
힙(binary heap)이란? 최대값이나 최소값을 빠르게 찾아내기 위해 고안된 완전 이진 트리(마지막 레벨을 제외하고 모두 채워져 있으며, 마지막 레벨은 왼쪽부터 채워져 있는 트리)다. 작은 값을 부모에 놓는 최소힙과 큰 값을 부모에 놓는 최대힙이 있다. 둘은 원리가 같기 때문에 하나만 알아둬도 다른 건 똑같이 사용할 수 있다. 최소힙 연산 최소힙은 노드를 추가하거나 삭제할 때마다 부모 노드가 자식노드보다 작은 값을 가지고 있어야 하고, 완전이진트리의 형태를 유지하는 작업(Heapify)이 필요하다. 노드 삽입하기 완전 이진 트리의 형태를 유지하기 위해 맨 마지막 레벨의 왼쪽부터 채워나가며, 추가된 노드는 정렬되어있지 않으므로 부모 노드와 비교해 자리를 바꿔가며 정렬시켜줘야 한다. 정렬되어 있는 이진 ..