카테고리 보관물: 개발

개발과 관련된 이야기들~*

phinx db migration tool setting

phinx.yml 에서

host를 localhost로 할 때엔 unix_socket을 정해줘야 한다.

host가 localhost인데 unix_socket이 설정되어 있지 않으면, 다음과 같은 에러를 보게 된다.

[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory

unix_socket을 사용하지 않으려면 host를 127.0.0.1로 하면 된다.

참고자료: https://stackoverflow.com/questions/22188026/sqlstatehy000-2002-no-such-file-or-directory/25782795#25782795

Database migration with alembic or phinx

어떤 언어로 개발하든 데이터베이스를 수정할 일이 생기는 경우가 발생한다. 개발자의 개발 머신과 테스트 서버 그리고 상용 서버에 이르기까지 모두 적용해 주어야 한다. 때로는 어떤 상황으로 되돌아가야 하는 경우도 생긴다. 이와 같은 DB 변경 사항 적용을 마이그레이션이라 부르며, CodeIgniter나 Laravel 그리고 Django에서는 마이그레이션 기능을 내장하고 있다. 프레임워크와 별도로 작동하는 패키지가 있는지 찾아보다가 두 가지를 발견하였다.

alembic은 python용 DB 마이그레이션 패키지이고, phinx는 php용 도구이다.

사용법은 프레임워크에서 제공하는 기능과 별 차이가 없다.

한 가지 눈에 띄는 게 있다면 phinx는 change() 메서드에 특정 메서드를 사용하여 마이그레이션 코드를 작성하면, 리버스 코드를 작성하지 않아도 rollback이 자동으로 된다고 하는 점이 특징으로 보인다.

아직 사용해 보지는 않았지만, 자동으로 create & drop이 된다면 편리할 것 같다. 사용해보고 후기를 이어서 작성해 볼까 한다.

Android build setting

Andriod 앱을 빌드하기 위해서는 당연히 android sdk가 있어야 한다.

예전엔 android sdk를 다운받을 수 있었는데, 지금은 sdk tools를 별도로 제공하고 있다. 사용하려면 명령줄에서 실행해야 한다.

필자는 jenkins를 docker로 띄워 놓은 상태였고 git repository로부터 webhook이 걸리면 gradlew명령어를 사용해서 apk를 자동으로 빌드하려는 상황이었다.

jenkins 컨테이너 내에 jenkins 사용자의 홈디렉토리는 기본으로 /var/jenkins_home에 세팅된 것을 기준으로 정리하였다.

이후에 tools/bin에 있는 sdkmanager를 실행하여 sdk들을 설치하게 되면 관련 sdk들이 tools 디렉토리의 상위 디렉토리에 위치하게 되며 해당 디렉토리를 anroid sdk 디렉토리로 사용하게 된다. 따라서 android sdk 디렉토리를 먼저 생성해 주어야 한다.

mkdir /var/jenkins_home/android-sdk

그리고 android sdk tools의 압축을 풀면 tools 디렉토리에 내용이 담겨있다. android sdk 디렉토리로 복사하였다.

cp -R tools /var/jenkins_home/android-sdk/tools

안드로이드 sdk에는 기본적으로는 platform, build tool 정도만 설치하면 앱을 빌드할 수 있다. 하지만 추가로 외부 라이브러리들을 사용한다면 해당 라이브러리들은 리포지터리에서 찾는 과정을 거치게 된다.

필자가 작업하는 프로젝트는 안드로이드 23버전을 사용하여 제작하고 있다. 그리고 외부 라이브러리들을 사용하고 있었다. 이에 필요한 sdk들을 아래의 명령을 사용하여 설치하였다.

sdkmanager \
  "platform-tools" \
  "platforms;android-23" \
  "build-tools;23.0.3" \
  "extras;android;m2repository" \
  "extras;google;m2repository"

앞의 3가지는 앱 빌드에 필요한 안드로이드 sdk들이고, 뒤의 두 개의 extras는 안드로이드와 구글 리포지터리이다. 외부 라이브러리를 사용하면서 리포지터리를 이렇게 추가해주지 않으면 gradle을 실행했을 때 라이브러리들을 찾을 수 없다고 하며 오류가 발생한다.

안드로이드 스튜디오를 사용하지 않고 빌드를 해야 하는 상황이 되다보니 처음엔 막막했지만, gradle이 오류를 친절히 알려주어서 방향을 빨리 잡을 수 있었다.

이제 sdk를 설치했으니 sdk가 어디에 있는지 알려주어야 한다.

안드로이드 프로젝트의 최상위 디렉토리에 local.properties에 다음과 같이 적어주었다.

sdk.dir=/var/jenkins_home/android-sdk
ANDROID_HOME=/var/jenkins_home/android-sdk

이제 gradlew을 실행하면 빌드에 성공한다.

IntelliJ IDEA Competitive Discount

IntelliJ IDEA 경쟁적 할인 프로그램을 활용하면 구매가의 25%를 할인받을 수 있다.

미리 핵심부터 이야기하자면, 타 개발 도구 구매 내역을 증빙할 수 있는 자료를 제출하면, Jetbrains 담당자가 해당 제품 정가의 25% 할인된 가격으로 주문을 만들어준다. 국산 Software인  Editplus로도 할인 받을 수 있었다. 그 결과 저렴하게 intelliJ IDEA 개인 라이센스를 구매할 수 있었다.

저렴하게 할인 받을 수 있는 기회를 준 Jetbrains에 고맙게 생각하며, 구매과정을 친절하게 안내해준 Jetbrains 직원 Dominica에게 고마움을 표한다.

아래에는 과정과 절차를 기록해 두었다.

계속 읽기