본문 바로가기
생각정리

2021 회고

by 동기 2022. 3. 4.
반응형

나는 2020년 국비 학원 수료 및 취업 준비를 하다가, 10월 부터 신입 개발자로 첫 입사를 하였다.

2021년 신축년은, 개발자로서의 온전한 1년을 보낸 해였다.

조금 늦었지만, 2021년 회고를 해본다.


 

🧑‍💻 무엇을 했는가?

 

대화형 서비스

1. AoG

 

입사 후엔 JAVASpring Boot 환경에서 AOG(Actions On Google) 이용하여 대화형 서비스 앱(이하 Actions)을 개발했다.

(주로 TOD(task oriented dialog - 뚜렷한 목적이 있는 태스크 지향 다이얼로그) 서비스 )

 

AOGGoogle Assistant(구글 음성 비서) 생태계에 배포되는 앱 개발을 위한 개발자용 플랫폼인데, 여기서 제공해주는 Actions Console을 통해 Actions를 관리(프로젝트 생성, 테스트,배포 등) 을 할 수 있다. 

 

사용자는 Actions를 통해 터치, 텍스트입력, 음성입력(발화) 등으로 질문을 하고 답변을 받는 형태의 서비스를 경험할 수 있다.

 

대화형 서비스 이기 때문에, 자연어 처리 부분을 담당할 플랫폼도 필요한데, Dialogflow(대화형 사용자 인터페이스를 설계하고대화형 음성 응답 시스템 및 관련 용도에 통합하는 데 사용되는 자연어 이해 플랫폼)를 구글에서 제공해 주어 함께 이용하였다.

 

이 DialogFlow를 사용하여 룰베이스로 설계를 하면, 사용자 질의에 대해 의도(Intent - 인텐트 )및 핵심 키워드(Entity-엔티티) 를 분류, 추출을 해주기 때문에 어렵고 복잡한 자연어처리 개발,튜닝을 직접 하지 않아도 됐다.

 

고객센터 개발을 예로 들면 Dialogflow 에서 agent( 사전 학습이 된 AI 요원 - 자연어 이해 모듈 ) 를 생성하고, 해당 업체의 FAQ등을 활용하여 여러 문의 시나리오에 대해 인텐트(ex.요금관련, 가입관련, 탈퇴관련), 엔티티( ex.요금 및 유사어 :금액,요금제,비용) 를 정의하여 agent 에 등록을 하고, 각 인텐트에 맞는 학습문장 입력을 하면, agent가 학습하게 된다.

( 인텐트에는 Context 를 설정해 대화를 제어할 수 있으며, 이를 이용해 문맥을 이어나가면서 탁구치듯이 대화 할 수 있다. 사내에서는 주로 핑퐁 친다고 한다. ) 

 

이렇게 학습을 한 agent는 사용자가 요금과 관련된 질문을 하면 요금 인텐트로 감지하고, 질문 내의 특정 단어가 미리 정의해 놓은 엔티티에 포함된다면 추출해 준다. 

출처 : https://cloud.google.com/dialogflow/es/docs/basics

 

 

이 인텐트와 엔티티 정보로 답변을 해주면 되는데 Dialogflow console 환경에서는 다양한 답변을 주기에 한계가 있다.(예약 시간 같은 동적 답변, 시스템 답변이 필요한 경우)

 

이에 Dialogflow에서는 외부 서버와 통신이 가능하도록 Webhook 연결을 지원한다.(외부 서버를 fulfillment server라 칭하고 있다.)

fulfillment server 에서는 Dialogflow를 통해 건너온 정보를 파싱한 후 내부 비즈니스 로직을 통해 답변을 도출 후 응답을 주게 된다.

구글에서 fulfillment server 개발을 위한 sdk를 지원하고 있어 이를 이용해 개발후 webhook연결을 하여 서비스를 할 수 있다.

 

일반적으로 AoG 응답은 simple Response, rich Response 두 가지로 줄 수 있으며

simple response는 TTS (Text To Speech - 음성 메세지 ), 및 displayText로 구성되어있고,

rich response는 Basic Card, CardList, Carousel, Table , Suggestion Chips 등의 템플릿으로 구성되어 있다.

 

교육용 앱에 한해서 Interactive Canvas 라는 프레임워크를 이용해 두가지 응답 대신에 CSS,JS를 이용하여 웹 화면으로 뿌려줄 수 있다.(교육용이 아니라면 배포 승인이 나지 않는다.)

 

이러한 과정들을 통해 Actions를 개발하고 배포, 승인 과정을 거쳐 Google Assistant에 등록이 되면, 사용자는 Google Assistant를 활성화한 상태에서 별도의 다운로드 없이 앱의 이름(Display Name)으로 앱을 호출하여 음성 대화 서비스를 경험 할 수 있다.

 

 

2. Web Based VoiceBot

 

앞서 설명한 AoG 프로젝트 들은 몇 가지 한계가 있다.

1. 생태계 귀속 (Google Assistant 생태계에만 올라갈 수 있음) -> 국내 Google Assistant 이용자가 많지 않음

2. UI 커스텀 불가 ( 답변 템플릿의 디자인이 수정이 불가. Interactive Canvas를 이용하여 JS, CSS로 웹 화면을 줄 수 있지만 교육 플랫폼에 한정됨 )

 

 

이러한 한계점을 벗어나고자 음성대화Agent Build는 구글을 이용하되, WAS를 독립적으로 구축해 웹으로 음성서비스를 할 수 있게 만들어 도메인별로 만들자는 의견이 나왔었고, 기술 검토 및 여러 그 과정들을 통해 Google Assistant 환경을 벗어나게 되었다.

좌) google template,      우) 웹으로 만든 화면 

이를 통해 원하는 화면의 음성 서비스를 만들수 있게됐고, 비단 음성보이스봇 뿐만 아니라 홍보용 음성대화 서비스도 개발하였다.

 

* 다른 업무들도 많았지만, 코어한 서비스만 적었다.

 

😀  그 외 좋았던점

 

외부 sdk 이용하여 개발 경험

GCP, gRPC, Protobuf(Protocol Buffer) 적용 경험

Spring, jpa, postreSQL 통합 개발 경험

타회사와의 협업 경험

Back Office service 개발 경험

대화형 UX ( 음성챗봇 디자인 패턴 )

linux 관련 ( tmux , permission, scp, ssh )

Tomcat 설치, server.xml 설정, log확인 war / jar 배포

타 언어기반 개발 경험( JS, node.js, express.js - pm2 , python, conda -pip )

고려대, 카이스트 - 학장님,교수님들과의 기술교류 참석(AI 분야 간접 경험)

국민연금,스카이라이프,SKB등 대기업들과 협업 및 납품 프로젝트를 경험한 것

유료 통합 개발 환경 지원

CUDA Tesla T4 GPU 서버 지원

.

.

 

 

😭  아쉬웠던 점 ( + 긍정적인 방안 )

 

코드리뷰 부재 ( 곧 시작할 웹프로젝트에서 제안 해보기 )

프론트 개발자 부재 ( 오히려 좋아 - 프론트 경험 )

동일 패턴 서비스 반복 개발 ( 리팩토링 으로 코드 발전 시켜보자 )

페이퍼웍, 회의 등의 비중이 생각보다 훨씬 많았던 것 ( 중소기업 업무 프로세스 전반에 대한 경험 )

실제 서비스 대규모 트래픽 경험 부재 ( 어떻게 경험해보지..? )

AWS 경험 안해본 것 ( 개인 프로젝트로 해보자 )

.

.

 

 

📍올해 목표

 

공부 : 자바 - 람다, 스트림, 옵셔널 (강의,책 : 자바의 정석 ) → 스프링 부트(강의 : 인프런 김영한님) → JPA (강의 : 인프런 김영한님 )

개인프로젝트 : chatbot ( 회사에서 내가 개발할 때 썼던 코드 개선하면서 개발 )

자격증 : 정보처리기사

문제 : 프로그래머스 , 자료구조, 알고리즘

글쓰기 : 티스토리 ( 공부, 용어, 에러해결, 팁 )

책 : 이펙티브 자바, 리팩터링(1판) , 클린코드 , 자바 웹프로그래밍 넥스트 step, 토비의 스프링 , ORM표준 JPA프로그래밍

 

반응형

'생각정리' 카테고리의 다른 글

퇴사  (3) 2023.05.18

댓글