현재 나는 유저가 검색하는 phrase를 기반으로 운동을 추천해주는 서비스를 구현하고 있다. 여기서 tokenizer로 KoNLPy를 쓴 이유는, 유저가 검색하는 phrase에서 단어들을 잘 뽑아냈기 때문이다.
Tokenizer의 역할을 예를 들어서, 내 웹사이트에서는 유저가 "복근에 좋은 운동"이라고 검색하면 검색어 키워드들로서 ["복근", "좋다", "운동]을 뽑아낸다. Twitter(Okt) 형태소 분석기나 MeCab 형태소 분석기가 내 웹사이트에서 사용자들의 검색어를 제일 잘 분해했다.
pip install konlpy
하하하. pip으로 설치하는 것은 그저 시작일 뿐이다. KoNLPy는 기본 설정이 어렵다. 대표적인 삽질 세 가지는,
1) KoNLPy는 자바와 파이썬 둘 다 요구한다. 따라서 자바를 설치하고 JDK, JRE를 설치해야 한다. 설치하는 것도 어려운데, 경로 설정은 더더욱 어렵다.
2) Mecab 모듈이 제일 가볍고, 형태소 분해를 잘 한다. 그런데 MeCab은 KoNLPy를 설치한 이후 별도로 설치를 해야 한다.
3) KoNLPy 기능 중 몇몇은 Windows 지원을 하지 않는다.
내 Django 프로젝트에 KoNLPy를 쓰려면, Java를 설치해야 한다.
그런데 Java 설정이 참 어렵다. 이건 마치 물건 하나를 생산하기 위해서는 공장부터 지어야 한다는 불편함이다.
이 때문에 배포가 어려웠다. 배포는 AWS 서버실에 어딘가에 있는 컴퓨터에다가 내 웹사이트를 다운로드하고 설정하는 과정이다. 내 local computer에다가 Java를 설정하는 것은 그나마 나은데, 남의 컴퓨터에다가는 어떻게 설치해야 하는지 막막했다.
따라서 Docker을 이용하기로 했다. 내가 바라본 Docker의 장점은 단 한 가지였다.
어느 기계에서도 같은 개발 환경을 구현해서 프로그램을 돌릴 수 있다.
당시에는 Docker의 장점을 저거 하나 밖에 몰랐다. Docker을 사용한 경험이 없었기 때문이다. 글을 작성하는 오늘도 Docker을 배우기 시작한지 일주일이 안 됐다 ㅋㅋㅋㅋㅋ
그러나 개발자에게는 얼마나 빨리 배우고, 얼마나 빨리 써먹는지가 중요하다. 때문에 학습 경력을 시간으로 따지는 건 의미가 없다고 생각한다.
우리의 최종 목표는 다음과 같은 탑을 쌓는 것이다. 위의 사진과 같은 개발환경을 코드로 하나하나씩 쌓아 올려보자.
# basing on ubuntu OS
FROM ubuntu:latest
LABEL maintainer="Ahn Young Jin <snoop2head@gmail.com>"
# apt init
ENV LANG=C.UTF-8
ENV TZ=Asia/Seoul
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends tzdata g++ git curl
# installing java jdk and java jre
RUN apt-get install -y default-jdk default-jre
# installing python3 and pip3
RUN apt-get install -y python3-pip python3-dev
# install postgres module
RUN apt-get install -y python-psycopg2
RUN cd /usr/local/bin && \
ln -s /usr/bin/python3 python && \
ln -s /usr/bin/pip3 pip && \
pip3 install --upgrade pip
# apt cleanse
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
# timezone
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# make workspace
RUN mkdir -p /workspace
WORKDIR /workspace
# install konlpy dependencies: jpype, konlpy, with mecab module
RUN pip install jpype1-py3 konlpy
RUN cd /workspace && \
curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh | bash -s
# getting environment variable on console
ENV PYTHONNUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
# WSGIPath settings and DJANGO_SETTINGS_MODULE for deployment
ENV WSGIPath config/wsgi.py
ENV DJANGO_SETTINGS_MODULE config.settings
# copying local file into container's /code/ directory
COPY ./requirements.txt /code/requirements.txt
# python & Django configuration
RUN apt-get install -y python3-pip
RUN pip install --upgrade pip
RUN pip install -r /code/requirements.txt
# copying the rest of the files into container's /code/ directory
# container's working directory is /code/
COPY . /code/
WORKDIR /code/
#Exposing port to 8000
EXPOSE 8000
# CMD multiple commands using start.sh file
ADD start.sh /
RUN chmod +x /start.sh
CMD ["/start.sh"]
#!/bin/bash
python ./manage.py migrate
python ./manage.py runserver 0.0.0.0:8000