전체 글
고급정렬 - QuickSort (퀵정렬)
2022.04.07정렬 과정 퀵 정렬은 분할 정복(divide and conquer) 방법을 통해 리스트를 정렬한다. 리스트의 길이가 1 이하이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 분할(divide): 임의의 피벗을 지정하여 피벗보다 큰 원소와 작은거나 같은 원소, 두 부분 리스트로 나눈다. 결합(combine): 작은 리스트 - 피벗 - 큰 리스트로 결합한다. 정복(conquer): 두 부분 리스트를 재귀적으로 퀵 정렬을 이용해 정렬한다. 복사(copy): 임시 배열에 저장된 결과를 원래 배열에 복사한다. 재귀 호출이 한번 진행될 때마다 최소한 하나의 원소는 최종적으로 위치가 정해지므로, 이 알고리즘은 반드시 끝난다는 것을 보장할 수 있다. 역시나 분할과 정복 방식이다. 구현 코드 package net...
고급정렬 - MergeSort (합병정렬)
2022.03.31정렬 과정 흔히 쓰이는 하향식 2-way 합병 정렬은 다음과 같이 작동한다. 리스트의 길이가 1 이하이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 분할(divide): 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 정복(conquer): 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 결합(combine): 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 이때 정렬 결과가 임시배열에 저장된다. 복사(copy): 임시 배열에 저장된 결과를 원래 배열에 복사한다. 이 과정에서 재귀 함수를 활용한다. 분할 후 분할된 2개의 조각에 다시 합병정렬을 실행한다. 분할과 정복. 구현 코드 package net.jetalab.excercise.mergesort..
Electron 시작하기 - 03 - 멋지게 포장해 배포하기
2022.03.24어릴 때 새 프로그램을 설치할 때 설치 마법사를 진행하며 신기해하고 설렜던 마음을 아직 기억납니다. 자고로 PC 프로그램의 시작은 설치 프로그램입니다. Electron은 배포 도구를 제공하여 손쉽게 설치 패키지를 만들 수 있게 도와줍니다. electron-builder 설치 Electron 공식 문서에는 3가지 배포 도구가 소개되어 있습니다. 이 예제에서는 그 중 electron-builder를 이용하여 진행합니다. 터미널에 아래 명령어를 입력하여 electron-builder를 설치합니다. npm i --save-dev electron-builder 설치가 완료되면 아래 명령어를 입력하여 실행이 되는지 확인합니다. electron-builder --version package.json 편집 배포와 관련..
Electron 시작하기 - 02 - 백조의 발처럼 통신하기 (ipcMain, ipcRenderer)
2022.03.17Elecron으로 만든 Application은 하나의 웹 사이트가 실행 가능한 프로그램으로 작동한다고 생각해도 좋습니다. 프로그램의 덩치가 커지면 여러 페이지를 제어해야 할 필요가 생깁니다. 우아하게 떠있는 백조가 사실은 가라앉지 않기 위해 발을 구르고 있는 것처럼, 우아한 프로그램을 위해 보이지 않는 곳에서 발을 구르는 법을 알아봅니다. 2개의 창 지난 번에는 하나의 창만 표시했었습니다. 당연한 이야기지만 여러 창을 표시하는 것도 가능합니다. 이번 예제에서는 아래 동영상처럼 서로 다른 창이 통신하는 프로그램을 작성해봅니다. ipcMain, ipcRenderer Electron은 메인 프로세스와 렌더러 프로세스, 쉽게 말해서 Node.js 영역과 웹 페이지 영역이 통신할 수 있는 방법으로 ipcMain과..
Electron 시작하기 - 01 - 천 줄 코드도 Hello, World! 부터.
2022.03.10Electron은 Node.js 개발자에겐 정말 강력한 무기입니다. 웹 사이트를 구성하던 기술 그대로 Desktop Application을 만들 수 있게 해주기 때문이죠. 이미 Electron은 충분히 알려져있기 때문에 공식 사이트에 있는 글로 소개를 갈음합니다. Electron? Electron은 JavaScript와 HTML, CSS를 이용해 Desktop Application을 제작할 수 있는 프레임워크입니다. Chromium과 Node.js를 바이너리에 내장하여, Electron은 하나의 JavaScript 코드로 Windows와 macOS, Linux에서 모두 작동할 수 있는 크로스 플랫폼 App을 만들 수 있도록 도와줍니다. Native app 개발 경험이 필요하지 않죠. Intoroduct..
[Sp-re-ing] 10 - 게시판 구현하기 (6) - 게시물 목록 API
2020.07.02오늘 만들 것 지금까지 게시물을 작성하는 API와 호출, 수정, 삭제하는 API까지 만들었습니다. 마지막으로 게시물 목록을 호출하는 API를 구현합니다. 시작 이번 글은 Lab09의 코드에 기능을 추가하는 방식으로 진행합니다. Lab09는 이전 글에서 확인할 수 있습니다. 별도의 프로젝트에서 진행하고자 하면, Lab09와 동일하게 프로젝트를 생성한 뒤 코드를 복사해서 준비합니다. Lab09의 코드를 그대로 사용한다면 아래 예제 코드의 패키지명에 유의합니다. 아래 예제 코드는 별도의 프로젝트를 생성하는 방식으로 진행합니다. DTO 추가 다음 경로의 파일을 아래와 같이 작성하여 추가합니다: /src/main/java/YOUR/DOMAIN/ARTIFACT/dto/ListDTO.java package net.j..
[Sp-re-ing] 09 - 게시판 구현하기 (5) - 게시물 호출 API 확장
2020.05.19오늘 만들 것 지난 Lab05에서 우리는 게시물 호출 API를 작성했었습니다. 그 때 게시물 호출 API 작성하며 게시물 조회수 카운트는 나중에 구현하기 위해 주석만 남겨두었습니다. 오늘은 그 때 미뤄둔 게시물 조회수 카운트를 구현합니다. 시작 이번 글은 Lab08의 코드에 기능을 추가하는 방식으로 진행합니다. Lab08은 이전 글에서 확인할 수 있습니다. 별도의 프로젝트에서 진행하고자 하면, Lab08과 동일하게 프로젝트를 생성한 뒤 코드를 복사해서 준비합니다. Lab08의 코드를 그대로 사용한다면 아래 예제 코드의 패키지명에 유의합니다. 아래 예제 코드는 별도의 프로젝트를 생성하는 방식으로 진행합니다. DAO 수정 다음 경로의 파일을 아래와 같이 편집합니다: /src/main/java/YOUR/DOM..
[Sp-re-ing] 08 - 게시판 구현하기 (4) - 게시물 삭제 API
2020.05.06오늘 만들 것 이번 글에서는 게시판 구현의 마지막 단계인 게시글 삭제를 구현합니다. 게시글 삭제는 두 가지 방법을 사용할 수 있습니다. 실제로 DB에서 삭제하거나 삭제 표기를 하는 방법입니다. 이번 글에서는 주로 사용되는 방법인 삭제 표기를 진행합니다. 시작 이번 글은 Lab06의 코드에 기능을 추가하는 방식으로 진행합니다. Lab06는 이전 글에서 확인할 수 있습니다. 별도의 프로젝트에서 진행하고자 하면, Lab06과 동일하게 프로젝트를 생성한 뒤 코드를 복사해서 준비합니다. Lab06의 코드를 그대로 사용한다면 아래 예제 코드의 패키지명에 유의합니다. 아래 예제 코드는 별도의 프로젝트를 생성하는 방식으로 진행합니다. SQL Mapper 수정 다음 경로의 파일을 아래와 같이 편집합니다: /src/mai..
[Sp-re-ing] 07 - 동적 SQL
2020.04.21오늘 만들 것 One of the most powerful features of MyBatis has always been its Dynamic SQL capabilities. mybatis - MyBatis | DynamicSQL 오늘은 게시판 API를 만들지 않습니다. MyBatis 홈페이지에도 강조된 핵심 기능 중 하나인 동적 SQL을 둘러봅니다. 아래에 제가 만든 예제도 굳이 따라 만들지 않고 눈으로만 읽어보셔도 충분합니다. 시작하기 전에: MySQL 테이블 생성 기존 예제인 lab03 테이블을 그대로 사용합니다. 데이터 변경이 필요 없기 때문에 복제하지 않습니다. 시작 이번 글은 Lab03의 코드에 기능을 추가하는 방식으로 진행합니다. Lab03는 이전 글에서 확인할 수 있습니다. 별도의 프로젝..
[Oracle] BETWEEN ... AND 사용
2020.03.19특정 범위의 값을 조회할 때 BETWEEN ... AND 구문을 사용하면 조금 더 읽기 쉬운 구문을 작성할 수 있습니다. 기본 사용법 특정 범위의 임금을 받는 직원을 찾기 위해서 아래와 같이 작성할 수 있습니다. SELECT * FROM EMP WHERE SAL BETWEEN 1250 AND 2450 위 SQL문은 아래와 완전하게 동일한 작동을 합니다. SELECT * FROM EMP WHERE SAL >= 1250 AND SAL
[Sp-re-ing] 06 - 게시판 구현하기 (3) - 게시물 수정 API
2020.03.17오늘 만들 것 이번 글에서는 게시글을 수정하는 예제입니다. 게시물 수정은 앞서 연습했던 게시물 호출과 게시물 작성을 모두 활용합니다. 작동 순서를 보면 무슨 뜻인지 이해할 수 있습니다. 1. 게시물 번호와 비밀번호를 이용해 게시물을 불러옵니다. 2. 불러온 게시물이 없다면 오류를 반환합니다. 3. 불러온 게시물이 있다면 사용자가 전달한 글 내용을 불러온 객체에 담습니다. 4. 게시물 객체를 DB로 전달하여 글을 갱신합니다. 5. 완료됨을 반환합니다. 1번이 게시물 호출, 4번이 게시물 작성을 활용하는 것을 알 수 있습니다. 게시물 수정까지 진행하면 게시판 API의 핵심은 모두 진행했다고 봐도 무방합니다! 게시물 수정 API, 지금 시작합니다. 시작 이번 글은 Lab05의 코드에 게시물 호출 API를 추가..
[Sp-re-ing] 05 - 게시판 구현하기 (2) - 게시물 호출 API
2020.03.03오늘 만들 것 이번 글에서는 게시글을 불러오는 예제를 진행합니다. 게시글 작성보다 예제가 훨씬 간단합니다. 이미 지난 글에서 데이터 호출을 한 차례 작성해보았기 때문에 설명을 줄이고, 빠르게 진행합니다. 시작 이번 글은 Lab04의 코드에 게시물 호출 API를 추가하는 예제입니다. Lab04는 이전 글에서 확인할 수 있습니다. 별도의 프로젝트에서 진행하고자 하면, Lab04와 동일하게 프로젝트를 생성한 뒤 코드를 복사해서 준비합니다. Lab04의 코드를 그대로 사용한다면 아래 예제 코드의 패키지명에 유의합니다. 아래 예제 코드는 별도의 프로젝트를 생성하는 방식으로 진행합니다. DAO 수정 다음 경로의 파일을 아래와 같이 편집합니다: /src/main/java/YOUR/DOMAIN/ARTIFACT/dao/..