1. 시간복잡도와 공간 복잡도란? 시간 복잡도 - 시간 복잡도란 주어진 문제를 해결하기 위한 연산횟수를 말한다. 공간복잡도 - 알고리즘이나 프로그램이 실행되는 동안 사용하는 메모리의 공간의 크기를 의미한다. 2. 시간 복잡도 표기법 시간 복잡도는 아래와 같이 3가지의 표기법이 존재하지만 주로 사용되는 표기법은 빅-오(BigO-notation)표기법을 사용하여 표현한다. 왜냐면 수행 시간을 계산할 때 worst case를 기준으로 만족하는 수행 시간을 계산하기 위해서이다. 빅-오메가(best case) : 최선일 때의 연산 횟수를 나타낸 표기법 빅-세타(average case) : 보통일 때의 연산 횟수를 나타낸 표기법 빅-오 (worst case) : 최악일 때의 연산 횟수를 나타낸 표기법 알고리즘의 최..
1. WITH문의 필요성 이미 작성된 Mapper에 Query를 살펴보다보면 subquery를 남발하여 작성된 쿼리를 볼 수 있다. subquery를 조건식에 한두번씩 사용하는 것이 아니라, 남발하게되면 가독성이 떨어지고 재사용이 불가능하여 같은 쿼리임에도 불구하고 재사용할 수가 없어 동일한 쿼리를 또 작성해놓은 어지러운 쿼리가 탄생하게 된다. 이를 해결할 수 있는 좋은 방법으로 WITH문이 존재한다. WITH문은 SQL에서 임시 결과 집합, 보통 이를 공통 테이블식(CTE: Common table Expression)이라 부르는 것을 생성하여 다른 쿼리에서 사용 할 수 있게해주는 아주 유용한 녀석이다. 게다가 ANSI SQL 표준을 만족하는 문법이므로 거의 모든 DBMS에서 사용가능하다. 2. WITH..
1. 원하는 node.js 버전을 다운받는다. nodeJS에서는 모든 nodeJS의 버전을 node.js packages: http://nodejs.org/dist/ 에서 관리하고있다. 현재 자신의 OS의 아키텍처에 맞는 버전을 다운받는다. 필자는 24년 1월 기준으로 LTS버전인 20.11.0 버전을 다운로드 하였다. $ wget https://nodejs.org/dist/v20.11.0/node-v20.11.0-linux-x64.tar.gz 2. 압축풀기 $ tar -xvf node-v7.9.0-linux-x64.tar.gz 3. 압축해제한 폴더를 /usr/local로 이동시킨다. 다운로드 받아 압축을 해제한 디렉토리를 뒤져보면 bin 쪽에 node를 바로 실행시킬 수 있으나 보통 ubuntu에서 어..
리눅스 서버에 Tomcat을 통해 운영 중인 프로젝트에서 사용하고 있는 데이터베이스(DB)를 Docker에 설치된 새로운 DB로 교체하고자 하는 경우, 다음과 같이 설정할 수 있다. ubunutu를 기준으로 작성하였는데 만약 다른 리눅스 버전을 사용중이라면 https://docs.docker.com/engine/install을 참고하여 Docker를 설치하면 된다. 1. Docker 설치 및 설정 Docker 설치 (leatest version) # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl..
Content-Disposition 헤더는 브라우저에게 어떻게 특정 콘텐츠를 처리할지 지시한다. 만약 파일을 다운로드로 처리하려면, 이 헤더를 attachment로 설정한다. 1. Attachment 기능: 브라우저가 콘텐츠를 직접 표시하는 대신 사용자에게 파일을 다운로드하도록 지시한다. 사용 예시: Content-Disposition: attachment; filename="example.pdf" 2. Inline 기능: 콘텐츠가 브라우저에 직접 표시되어야 함을 나타낸다. 예를 들어, 이미지나 PDF 같은 파일을 브라우저에서 바로 볼 수 있다. 사용 예시: Content-Disposition: inline 3. Filename 매개변수 attachment 또는 inline 디렉티브와 함께 사용되어, 특..
WebMvcConfigurer는 Spring MVc를 사용하는 웹 APP에서 웹 MVC 구성을 사용자에 맞게 정의하는데 사용하는 인터페이스이다. 해당 인터페이스를 구현하여 Spring의 Web MVC 기능을 세밀하게 조정할 수 있다. 1. 정적 리소스 핸들링 /** * @Explain : Spring Boot에서 항상 index.html(React 앱의 엔트리 포인트)을 제공하도록 설정하여 * React Router가 클라이언트 사이드에서 적절하게 컴포넌트를 렌더링 할 수 있도록한다. */ @Configuration public class WebConfig implements WebMvcConfigurer { @Value("${cors.allowed.origin}") private String allow..
# JavaScript의 비동기 내장함수 종류 자바스크립트는 단일 스레드(Single-threaded)언어임에도 불구하고, 시간이 오래 걸리는 작업들을 효율적으로 처리하기 위해서 다양한 비동기 처리를 지원하는 내장함수를 가지고 있다. 1. Callback 함수 : setTimeout(callback, delay), setInterval(callback, interval) function delay(callback) { setTimeout(function() { console.log('2초 후 실행'); callback(); }, 2000); } console.log('시작'); delay(function() { console.log('종료'); }); console.log("1초지남"); Callback..
이번에 투입된 프로젝트에서 사용중인 템플릿엔진인 FreeMarker 처음으로 접하게 되었다. JSP나 thymeleaf를 사용한 경험이 있어서 FreeMarker로 작성된 코드들도 그렇게 어렵게 느껴지진 않았다. 어차피 각 템플릿 엔진마다 약간의 문법차이만 있을뿐 사용하고자 하는 기능은 비슷비슷하기 때문에 그때 그때 필요한 문법은 구글링을 통해서 이해하고 넘어갔다. 그런데 라는 태그는 별도로 좀 기억해두는 것이 좋을 것 같아서 이렇게 정리한다. 를 사용하면 해당 태그안에 작성된 내용들은 프리마커에 의해서 처리되지 않는다. JSP처럼 FreeMarker는 또는 ${...}로 둘러싸인 코드를 템플릿 언어로 인식하고 처리한다. 이때 발생할 수 있는 문제로 프리마커에 작성한 javascript의 ${...}(표..