Namu | 나무 개발자 블로그입니다


개발 경험 정리 by namu

projects image
image by qimono



  1. [실무] 삼성전자서비스 챗봇 “써비” (2019-2021)
  2. [개인] 뉴스마인 (2020-2021)


들어가며

실무의 프로젝트는 보안 이슈로 인해 상세 업무 단위로 기록하지 않고, 사용 기술 중심으로 기록한다. 하지만 개인 프로젝트는 상관 없이 전 과정을 기록한다.


삼성전자서비스 챗봇 “써비”

2020년부터 서비스를 시작한 삼성전자서비스의 챗봇 “써비” 구축 프로젝트에 참여한 경험이다. 구축 기간은 2019년 중순부터 2020년 초까지이며, 완료 이후 나를 포함한 소수의 인원만 챗봇 운영업무로 전환되고 다른 사람들은 철수하였다.

써비는 삼성전자의 연구개발부서 인력들이 코어 엔진을 개발하였으며, 내가 속한 회사를 비롯한 여러 협력업체들은 챗봇 데이터 통신, 화면 디자인 및 개발, 컨텐츠 및 모니터링 서버 개발 등의 업무를 진행하였다.

요약

내가 개발자로써 참여한 첫 프로젝트이다. 신입이었기 때문에 처음에는 매우 작은 부분의 역할이 주어졌지만, 점점 인정을 받아 큰 단위의 업무를 맡게될 수 있었던 뜻깊은 프로젝트이다. 특히, 프로젝트 구축 이후 운영업무로 전환되면서 소스 버전관리 및 배포와 운영 아키텍처 관리의 업무가 주어지며 개인적으로 많은 성장이 있었다.

나는 원래 자바 스프링 프레임워크로 만든 개인 포트폴리오 신입 구직을 했었다. 하지만 지금 회사 신입 면접시에는 삼성전자서비스에 투입될 것이며 파이썬을 다룰 것이라고 해서 적잖은 고민을 했었다. 애초에 사회조사 분석 결과를 통계적으로 분석해 웹 화면에 구현해보고 싶었던 처음의 막연한 생각이 있었기 때문에 데이터 분석과 연관성이 깊은 파이썬을 새로 공부해도 괜찮겠다는 생각을 했다. 결국 2019년 4월 입사하기로 결정했고, 파이썬과 Flask 프레임워크를 새로 공부하여 두달 뒤 프로젝트에 투입되었다.

다음은 기술적 관점에서 지금까지 프로젝트를 통해 얻은 지식을 요약한다.

기술 관점 요약

A. 서버

A-1. Python

■ 인터페이스와 추상 클래스의 차이점 (다형성, 상속)

인터페이스와 추상 클래스는 기능 측면에서 그것을 구현하거나 상속받는 하위 클래스에 대해 특정 추상 메서드의 구현을 강제한다는 공통점을 가진다.

하지만 용도 측면에서 둘은 전혀 다른데, 인터페이스는 자동차의 핸들, 바퀴와 같이 하나의 완성된 객체의 부품으로써의 한정된 메서드들을 강제한다면, 추상 클래스는 Car 클래스를 상속받는 Sonata 클래스와 같이 특정 객체의 확장 개념이다. 다시 말해, 자동차로써의 기본 기능들을 만족하도록 강제된 소나타, 그랜저 등의 하위 클래스를 의미한다.

따라서 용도 측면에서 봤을 때 하나의 완성된 객체 클래스를 만들기 위해 여러 개의 부품 인터페이스를 동시에 구현하는 것은 당연한 일이고, 반대로 오직 하나의 추상 클래스로부터만 상속되는 것 또한 당연한 일이다. Car, Motorcycle 의 두 추상 클래스를 동시에 상속받는 것은 말이 안되지 않는가? 각각은 move 라는 똑같은 추상 메서드를 가지고 있을텐데, 어느 쪽의 move 를 구현해야 하는가?

자바는 객체지향 관점에서 만들어졌기 때문에 별도의 인터페이스 기능이 있다. 그래서 명확한 구분이 가능하다. 반면에 파이썬은 꼭 그렇지만은 않아 abc 모듈을 적절히 활용하여 인터페이스와 추상 클래스의 기능을 만들어야 한다.

A-2. Flask

A-3. WSGI Middleware

A-4. Nginx

B. 데이터베이스

B-1. RDBMS, NoSQL

B-2. Types of NoSQL

B-3. MongoDB

C. 프론트엔드

d. Infra

e. Git, Github

f. 소스 버저닝 및 배포


뉴스마인