2020년 9월이 마무리되어가던 날, 국내 젯브레인(JetBrains) 제품을 총괄 담당하는 단군소프트로부터 11월에 진행되는 온라인 행사 JetBrains Productivity Day에서 패널 참석 제안 메일을 받았습니다. 제안이 들어온 이유는 국내에서 처음으로 젯브레인의 인텔리제이 IDEA(IntelliJ IDEA)에 대한 도서를 출간한 저자로써 초대되었습니다. 행사는 4개의 세션으로 구성되어 아래와 같은 순서로 진행되었습니다. Intro - 환영사 Session 1 - JetBrains 신제품 Space 및 Code With Me로 생산적인 개발자 되기 Session 2 - Inside JetBrains Session 3 - 코로나보드(coronaboard.kr) 제작 배경 Session 4 - ..
애플(Apple)의 인 앱 결제(In-App Purchase)를 통해 구입한 상품 데이터를 스프링(Spring) 프로젝트로 구현한 서버(Server)에서 검증을 하고 데이터베이스에 저장하여 구입이 완료된 상품을 관리할 수 있도록 프로세스를 확인해보도록 하겠습니다. 상품 구매에 대한 인 앱 결제 프로세스를 확인해보도록 하겠습니다. 1. App은 Server에서 상품 목록 API를 호출합니다. - Server는 관리자가 실제로 App Store Connect에서 등록한 상품을 DB에서 관리하며, 목록을 App에게 제공합니다. 2. App은 선택한 상품의 구매 가능 여부를 Server에 요청합니다. - Server는 유저가 선택한 상품이 구매한 적이 있는 상품인지 확인하여 App에게 제공합니다. (상품 구매가..
[1] 스프링 프로젝트에 애플 로그인 API 연동을 위한 Apple Developer 설정 [2] 스프링 프로젝트에 애플 로그인 API 연동하기 - (현재 글) 이전 포스트에서 "Sign in wtih Apple" 연동을 위한 Apple Developer 3가지 설정을 진행하였습니다. 설정을 통해서 필요한 데이터 준비가 끝났으므로 프로젝트에 설정하여 확인해보도록 하겠습니다. 먼저, 깃허브에 가서 코드를 다운로드하도록 합니다. (깃허브에서 코드를 다운로드하는 자세한 설명을 생략하도록 하겠습니다.) 깃허브 URL ‣ github.com/WHITEPAEK/demo-sign-in-with-apple macOS Catalina 버전 10.15.6 운영체제에서 IntelliJ IDEA Ultimate 환경에서 Sp..
[1] 스프링 프로젝트에 애플 로그인 API 연동을 위한 Apple Developer 설정 - (현재 글) [2] 스프링 프로젝트에 애플 로그인 API 연동하기 Spring API Server에서 Apple Login API를 연동하여 앱(App)에 제공하기 위한 개발을 해봤습니다. 애플에게 사용자 인증 토큰을 발급받는 로직뿐 아니라 Android와 ios 12 이하 버전에서는 로그인 페이지를 앱에게 제공해주어야 합니다. (ios 13 버전 이상에서는 SDK가 제공되는 걸로 알고 있습니다.) 나이스 한 코드를 작성할 실력은 부족하지만 Apple Developer Documentation을 보면서 프로세스를 이해하고 글을 작성해볼 기회를 가졌다는 것에 의미를 두도록 하겠습니다. 애플 로그인 API(Sign..
IntelliJ IDEA 프로젝트에 활용하기 온라인 서점 링크 ‣ 예스 24 ‣ 교보문고 ‣ 알라딘 ‣ 인터파크 ‣ 반디앤루니스 ‣ 영풍문고 ‣ 11번가 안녕하세요. WHITEPAEK입니다. 좋은 기회가 찾아오게 되어 인텔리제이(IntelliJ IDEA)에 대한 도서를 출간하게 되었습니다. 저의 이야기와 생각을 공유하고자 합니다. [1] 인텔리제이를 어떻게 사용하게 되었는가? 제가 처음 인텔리제이를 사용하게 된 계기는 컴퓨터공학을 전공하던 학부 시절에 맥북을 구매하며 시작되었습니다. 대학생 입장에서 가격이 상당히 비싼 맥북을 구매하고 개발을 진행하기 위한 프로그램을 설치할 때 아무거나 깔기 싫어서 맥스러운(?) 툴을 알아보고 관심을 가지게 되었습니다. 그중에서 Java 개발을 하기 위한 IDE 중 Int..
Step by step! ∙Step 01 ‣ 스프링 프로젝트 생성 ∙Step 02 ‣ (현재 글) 스프링 프로젝트 구성 설정 스프링 프로젝트 생성 글에서 메이븐(Maven) 빌드 도구와 스프링 MVC(Spring MVC) 프레임워크를 이용해서 스프링 프로젝트를 생성하는 방법에 대해 알아봤습니다. 프로젝트를 만들기만 하였기 때문에 메이븐 관련 파일 pom.xml과 스프링 MVC 프레임워크에 관련된 web.xml, dispatcher-servlet.xml, applicationContext.xml 파일만 생성된 상태에서 추가적인 작업 없이 글을 끝냈습니다. 이번 글에서는 스프링 프로젝트 구성에 대해 파악하고 설정해보도록 하겠습니다. 제가 작성하는 스프링에 관련된 글은 실습을 기반으로 설명하고 있으며, 이론 ..
Step by step! ∙Step 01 ‣ (현재 글) 스프링 프로젝트 생성 ∙Step 02 ‣ 스프링 프로젝트 구성 설정 인텔리제이(IntelliJ IDEA)에서 스프링 프레임워크(Spring Framework) 프로젝트를 생성해보도록 하겠습니다. 스프링 프로젝트를 생성하는 방법을 찾아보면 설정 방식이 여러 개가 검색됩니다. 스프링에 대한 이해도가 높고 익숙하신 개발자에게는 어떤 방식을 검색하던 자신에게 필요한 부분을 쉽게 캐치해서 사용할 수 있습니다. 하지만 초급 개발자는 익숙하지 않기 때문에 필요한 부분을 캐치해서 적용하기란 쉽지 않습니다. 또한, 실무에서 이미 갖춰진 환경에서 개발을 진행하다 보면 직접 스프링을 설정할 기회가 거의 없을 수도 있기 때문에 많은 개발자분들이 필요할 때마다 검색해서 ..
프로젝트를 진행하면 단일 프로젝트로 구성되는 경우보다는 기능 별로 프로젝트가 나뉘어 있는 경우가 더 많습니다. 팀원 간 프로젝트를 협업하다 보면 깃(Git)을 이용해서 프로젝트를 내려받아야 합니다. 하지만 프로젝트가 여러 개의 경우 이클립스(Eclipse)와 다르게 인텔리제이(IntelliJ)에서 구성 방식과 설정에 대해 약간의 헷갈림이 있습니다. (물론, 저처럼 개발 초보자는 인텔리제이에 익숙하지 않거나 처음 해보시는 분들은 도큐먼트(Document)를 봐도 이해하기 힘듭니다.) 현업 실습을 경험하면서 깨우친(?) 깃에 있는 여러 개의 프로젝트를 인텔리제이에 구성하고 체크아웃(Checkout) 할 수 있도록 설정하는 방법을 설명드리도록 하겠습니다. (자신의 PC 디렉토리 구조와 터미널에서 기본적인 깃 ..
# macOS Catalina clean install(2) 클린 설치를 위한 USB를 만들었습니다. 이제 USB를 이용해서 맥OS(macOS)를 클린 설치해보도록 하겠습니다. 맥OS를 카탈리나로 업데이트하기 전 자신이 사용하는 프로그램(앱)이 32비트인지 확인해보세요. 카탈리나(Catalina)부터는 32비트 앱은 지원을 중단하고 64비트 앱만 지원하기 때문에 기존의 32비트 앱은 카탈리나에서 사용할 수 없으므로 참고하여 업데이트하시기 바랍니다. 카탈리나를 업데이트로 진행할 경우 사용하지 못하는 32비트 프로그램이 남아있기 때문에 이 부분이 찝찝하신 분에게는 클린 설치를 추천드립니다. 다음 설명과 같은 설정은 클린 설치에 문제 되는 부분이 아니므로 본 글에 내용이 포함되어 있지 않더라도 안심하고 진행하..
# macOS Catalina clean install(1) 맥OS(macOS) 카탈리나(Catalina)가 정식 배포되었습니다. 이번 카탈리나 버전에서 가장 기대되는 부분은 사이드카(Sidecar) 기능으로 아이패드(iPad)를 확장 모니터로 사용할 수 있는 부분입니다. 많은 애플 유저분들이 업데이트를 어떤 방식으로 할지 고민할 텐데요. 맥OS를 업데이트하는 방법은 두 가지가 있습니다. 첫 번째는 시스템 환경설정에서 소프트웨어 업데이트를 하는 방법과 두 번째는 윈도우의 포맷과 동일한 개념의 클린 설치가 있습니다. 저는 두 번째 방법인 클린 설치를 이용한 업데이트 방법을 알려드리도록 하겠습니다. 클린 설치는 이전 모하비(Mojave)에서 설명드린 방법과 대부분 동일합니다. 그래도 혹시라도 헷갈리시는 분들..
인텔리제이(IntelliJ)에서 이클립스(Eclipse)처럼 워크스페이스(Workspace)에 여러 개의 프로젝트를 생성하는 방법을 알아보도록 하겠습니다. 우선 설명에 앞서 인텔리제이와 이클립스에서의 용어와 개념 차이에 대해 먼저 이해해야 하기 때문에 설명드리도록 하겠습니다. 다음 표는 인텔리제이와 이클립스에서의 용어 차이입니다. 인텔리제이에서 프로젝트는 이클립스의 워크스페이스라고 생각하시면 되는데 용어적인 차이점일 뿐 주의하셔야 합니다. 이클립스의 워크스페이스 같은 경우 하나의 디렉토리라고 생각할 수 있지만 인텔리제이의 프로젝트는 하나의 프로젝트 개념으로 생각해야 합니다. 즉, 이클립스의 프로젝트처럼 코드를 작성하고 컴파일할 수 있는 하나의 프로젝트입니다. IntelliJ IDEA Eclipse Pro..
시작하기에 앞서.. 해당 포스트에서는 스프링에 대한 이론적인 설명은 작성하지 않았습니다. 이론적인 부분은 훌륭한 참고 서적이 많기 때문에 해당 서적을 구입하여 반복적으로 학습하는 것을 추천해 드립니다. 저와 마찬가지로 많은 초보자가 스프링 설정에서 많은 어려움을 겪는다고 생각하여 제가 공부하고 설정한 방식을 최대한 자세하게 작성하는 데 집중하였습니다. 개인적으로 이론은 한 번에 익히지 못할뿐더러 직접 코드를 작성해가면서 이해하는 것이 가장 효과적이라고 생각합니다. 하지만, 소스 코드를 작성하기도 전에 설정 부분에서 막혀버리면 생각보다 큰 좌절감이 다가옵니다. 코드 한 줄이라도 작성해볼 수 있도록 프로젝트 생성과 설정 방법에 관해 설명하였습니다. [포스트에서 사용된 환경] - 운영체제: macOS Moja..
macOS에서 오라클 데이터베이스(oracle database)를 사용하기 위해서는.. 맥 OS에서 오라클 데이터베이스를 사용하기 위해서는 도커(docker)를 이용해야 합니다. MySQL처럼 바로 설치하여 사용할 수 있으면 좋겠지만 macOS에서는 지원을 하지 않기 때문에 도커를 이용해서 Oracle Database 환경을 설정해야 합니다. 도커와 오라클 데이터베이스에 대한 자세한 내용은 추후에 포스팅을 통해 설명드리도록 하겠습니다. 이번 글에서는 macOS에서 오라클 데이터베이스를 이용해야 하는 초보자를 위한 글이기 때문에 도커를 이용해서 설정 방법에 대해 자세하게 설명하도록 하겠습니다. 오라클 데이터베이스를 설치하기에 앞서 도커(Docker)를 실행시켜주세요. 도커 설치가 안되신 분은 macOS 도..
도커를 사용하게 된 이유는..? 먼저 도커에 대해 간단하게 설명하자면 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 도커 컨테이너는 서버에 설치되는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 설치하여 실행 환경에 상관없이 동일한 환경을 제공해줍니다. 개념에 대한 자세한 내용은 다른 참고 자료를 통해 공부하시는 것을 추천해 드립니다. 제가 도커를 처음 쓰게 된 이유는 macOS 환경에서 Oracle Database를 사용해야 되는 상황이 생겨 Docker를 이용하게 되었습니다. MySQL처럼 macOS에 직접 설치하여 사용할 수 있으면 좋았겠지만 정보를 찾아보니깐 Oracle DB의 경우 macOS에서 직접 설치는 할 수 없고 도커를 이용한 방법밖에 없었습니다. 열심히 공부해서 수준이 높아진다면 ..
macOS Java 환경변수(PATH) 설정하기!Homebrew를 이용해서 Java를 최신 버전을 설치하여 사용했습니다.하지만 공부를 하다 보니깐 JDK 1.8 버전을 설치하여 사용할 필요성이 생겼습니다.macOS 환경에서 JDK 기본 버전을 1.8로 설정하고 환경 변수 path를 잡아줘서 어떤 디렉터리 위치에서도 사용할 수 있도록 설정해보겠습니다.(꼭, JDK 버전이 1.8이 아니더라도 자신에게 필요한 다른 버전도 전부 동일한 방식으로 설정해주시면 됩니다.)Java 개발 툴(IDE)를 이용하여 공부하시는 분은 꼭 환경 변수를 설정하지 않아도 큰 문제가 없습니다.필요하신 분은 아래 글을 따라서 설정하도록 하세요! - 설명하기에 앞서 "macOS Mojave 버전 10.14" 운영체제에서 설정하였습니다. ..
IntelliJ "servlet-api.jar" 파일 추가 방법! IntelliJ에서 JSP 스크립트 요소를 공부하는 도중에 소스코드에서 에러가 발생했습니다.저는 공부 중이던 예제 소스코드에서 스크립트릿, 표현식에서 request 기본 객체를 사용하는 도중에 빨간색 구문이 생기면서 에러가 발생하였습니다.해당 문제를 해결해보도록 하겠습니다. - 설명하기에 앞서 "macOS Mojave 버전 10.14.2" 운영체제에서 "IntelliJ ULTIMATE 2018.03", "Tomcat 9" 버전을 사용하였습니다. 에러가 발생한 부분의 메시지를 확인해보니 "Cannot resolve method 'setCharacterEncoding(java.lang.String)'"라고 출력됩니다.해당 문제는 톰캣에서 "s..
버블 정렬 (Bubble Sort)✐ 개념인접한 2개의 레코드를 비교하여 순서가 맞지 않으면 서로 교환하는 비교-교환 과정을리스트의 왼쪽 끝에서 시작하여 오른쪽 끝까지 진행하는 방식으로 정렬하는 방법 (제자리 정렬, 안정적 정렬) ✐ 시간 복잡도 : T(n) = (n-1) + (n-2) + ... + 1 = n(n-1)/2 = O(n^2) ✐ Java 코드12345678910111213public static void bubbleSort(int[] data) { int temp; for(int i = data.length-1; i > 0; i--) { for(int j = 0; j data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; }..
선택 정렬 (Selection Sort)✐ 개념최솟값을 찾아서 앞에 위치한 값과 교체하는 방법1. 주어진 데이터에서 최솟값을 탐색한다.2. 탐색한 최솟값을 인덱스 첫 번째 위치한 값과 교체한다.3. 첫 번째 위치한 값을 제외하고 나머지 데이터에서 최솟값을 다시 탐색 후 두 번째 위치한 값과 교체한다.4. 마지막 데이터가 정렬될 때까지 위의 방법을 반복한다. ✐ 시간 복잡도: T(n) = (n-1) + (n-2) + ... + 1 = n(n-1)/2 = O(n^2) ✐ Java 코드1234567891011121314151617public static void selectionSort(int[] data) { int minData, temp; for(int i = 0; i data[1]) 결과 값이 (2 <..
이진 탐색 (Binary Search) ✐ 개념정렬된 데이터에서 특정한 값을 찾아내는 방법1. 정렬된 데이터의 중간에 위치한 값(Y)을 선택 후, 찾고자 하는 값(X)과 비교2. 찾고자 하는 값(X)이 선택한 값(Y)보다 작을 경우, 선택한 값(Y)의 좌측 데이터를 탐색3. 찾고자 하는 값(X)이 선택한 값(Y)보다 클 경우, 선택한 값(Y)의 우측 데이터를 탐색4. 찾고자 하는 값(X)을 찾기까지 2, 3번의 과정을 계속해서 반복한다. ✐ 시간 복잡도 : T(n) = O(logn) ✐ Java 코드 123456789101112131415public static int binarySearch(int[] data, int target, int low, int high) { if(low > high) ret..
순차 탐색 (Liner Search)✐ 개념데이터를 순차적으로 하나씩 검색하여 찾는 방법 (선형 탐색) ✐ 시간 복잡도 : T(n) = O(n) ✐ Java 코드 12345678910public static int linerSearch(int[] data, int n, int target) { if(n