1. 1분 자기소개
안녕하세요, 함께 일하고 싶은 개발자가 되고 싶은 박현준입니다. 체계적이며 신중한 판단으로 목표로 다가가는 열정을 가지고 있습니다.
프로그래밍에 대한 지식을 배우기 위해 부트캠프를 통해 파이썬과 장고를 배웠습니다.
그 교육 단계에서 팀 프로젝트로 고연령자를 위한 키오스크 웹 서비스를 만드는 과정에서 기획부터 개발, 배포까지 단계를 직접 만들어 봄으로 하나의 웹 어플리케이션을 만들어 보았습니다.
프로젝트완성을 위해 팀장으로써 목표를 달성하기 위해 매일 팀원과 회의하여 개발 단계를 공유하고 새로운 것들을 간단하게 5분씩 기록하여 팀원이 함께 개발을 할 수 있도록 하였으며 개발의 진행 단계를 명확하게 할 수 있었습니다.
이러한 경험이 저에게 좋은 영향을 가지게 했으며, 함께하는 자리에 도움이 되는 개발자로 기여하고 싶습니다.
감사합니다.
2. 내가 프로젝트에서 적극적으로 맡은 부분
저는 프로젝트에서 서버를 통한 배포 기능, 클라이언트와 서버의 데이터 전송, AI 응답에 대한 프롬프트 작성을 적극적으로 담당하였고, 팀에서 팀장으로 매일 진행상황을 기록하고 공유하는 것을 중요시 하였습니다.
3. 팀의 협력을 위해서 내가 한 일이 무엇인가?
협력을 위해서 제가 제일 신경 썼던 부분은 공유였습니다. 각자의 부분을 잘 만드는 것도 중요하지만 하나의 프로젝트가 원활하게 동작하기 위해서는 각자의 파트가 잘 맞물려야 한다고 생각을 했기 때문에 저는 매일 프로젝트를 시작할 때와 끝낼 때에 팀원이 모여서 회의를 했으며, 아침에는 각자의 진행계획에 대해서 간단하게 이야기를 하고 하루를 끝내기 전에 아침에 이야기했던 부분을 얼마큼 진행을 했으며, 동작을 위해서 어떻게 구동이 되는지 설명을 하고, 어려웠던 점이나 문제가 있었던 점을 기록 노트에 적어가며 다음계획에 맞추어 갈 수 있도록 하였습니다.
4. 프로젝트를 하면서 어려웠던 점과 극복해 낸 과정
최종 프로젝트의 목표가 서버를 통한 배포로 웹 애플리케이션을 동작하기 위해 부트캠프 교육과정에서 자세하게 배우지 못했던 프런트 엔드와 서버 배포에 대해서 직접 찾아가면서 만들어야 했던 부분이 어려움이 있었습니다. 이 난관을 극복하기 위해서 먼저 모르는 부분은 구글링을 통해 초기에 구축이 필요한 부분을 찾아서 만들어 보았으며 제작 과정에 생기는 오류를 만났을 때에 이 부분에 도움을 줄 수 있는 튜터님에게 찾아가 해결방안에 대해서 질문을 하여 문제를 해결해 나갔습니다.
5. 개발자로서 본인의 가장 큰 강점이 무엇이라고 생각하시나요?
남들과 다르다고 생각하는 부분으로는 질문하는 습관인거 같습니다. 프로젝트를 만들면서도 새로운 아이디어가 있어 추가하고 싶은 사항이 생겼을 때에 부조껀적으로 반영하는 것이 아닌 해당 부분으로 인하여 생길 수 있는 문제가 있는지 질문하고 신중하게 판단하여 결정하는 것과 의문이 생기는 부분 또는 모르는 부분에 대해서 거리낌 없이 질문하려고 하는 부분에서 빠르게 문제를 해결해 나갔던 부분이 남들과 다른 부분이었다고 생각합니다.
6. 지금것 해온 직장대신 개발자를 선택한 이유
전 직장에서 품질 보증 부서에서 직장생활을 했지만 업무의 특성상 회사에서 생산되어 나온 물건에 책임을 지고 검증하고 문제가 생기면 대신 나가서 하는 부분에서 회의감이 오게 되어 내가 직접 만드는 일을 해보고 싶다는 생각이 들어 방법을 찾던 중에 대학시절 로봇을 만들면서 가볍게 사용했던 프로그래밍을 통해 내가 원하는 것을 직접 구현해 냈던 좋은 기억이 있어 개발에 대해서 자세히 배워보고 싶어졌으며, 개발 지식을 넓히기 위해서 부트캠프를 참여하였습니다. 코딩에 대한 긍정적인 느낌이 들어 개발자로 일해보고 싶다는 생각이 들어 이 분야에 지원하게 되었습니다.
7. 프로젝트를 개발하면서 javascript를 이용한 서버와 데이터 통신을 한 이유?
처음 개발 단계에서는 Django의 forms를 이용한 프론트 엔드와의 데이터 송수신을 하였지만, 키오스크의 특성상 화면이 새로고침이 되는 것 보다 데이터가 입력이 되었을 때에 변화가 있는 부분만 변경이 되도록 하는 것이 유저 사용 친화적이 될 것이라고 예상하여 javascript의 ajax를 이용한 JSON 형식의 데이터를 주고 받으며 실시간으로 프론트엔드의 데이터를 변화 시킬수 있도록 하였습니다.
8. 데이터베이스의 redis를 사용한 이유
키오스크에서 선택된 메뉴를 담아둔 메뉴목록을 표기하는 장바구니의 데이터에서 음성으로 장바구니의 메뉴를 수정 삭제를 하기 위해서 데이터 베이스를 조회해야하는데 반복된 조회의 시간 단축및 결제이후에 필요없는 데이터를 단발성으로 저장하기 좋은 redis를 사용하는것이 적합하다 판단하여 적용하였습니다.
9. postgreSQL을 사용한 이유
기존 Django에 포함되어 있는 SQLite는 배포를 위해 사용되기에 부족한 부분이 있어 외부 SQL를 필요하였으며,
Django프레임워크에서는 PostgreSQL을 지원하고 있는 것을 알았습니다. 그로 인해 장고의 ORM을 통해서 쿼리를 자동으로 변환하여 작성을 해주는 부분에서 쉽게 프로젝트를 만들 수 있다고 판단하여 DB를 채택하게 되었습니다.
10. Django 프레임워크를 사용한 이유
Django는 기본적으로 프레임워크에서 지원하는 ORM부터 보안, MTV방식의 연관성으로 인하여 개발을 신속하게 할 수 있으며, 지원하는 라이브러리가 많아 다양한 기능을 추가하여 적용할 수 있다는 장점이 프로젝트를 개발하기에 유용하다 판단하여 Django를 사용하게 되었습니다.
11. 얼굴 인식과 AI 메뉴 추천 같은 AI 기능을 ‘실버 라이닝’ 프로젝트에 통합하는 과정과 도전 과제에 대해 설명해 주실 수 있나요?
우선 얼굴인식과 AI추천 기능을 추가한 이유로는 기계를 잘 다루지 못하는 고연령자에게 최대한 기계 조작 부분을 줄여 컨트롤 할 수 있도록 하는 것이 목표였으며, 얼굴인식을 통하여 나이를 구별하고 고연령으로 판단시 AI도우미가 음성안내를 하여 목소리로 메뉴를 추천받고 주문을 넣어줄 수 있도록 구성하였습니다.
12. 웹 서비스 배포를 위해 AWS를 사용하셨는데, 어떤 AWS 서비스를 사용했고, 그 선택의 이유는 무엇인가요?
가장 먼저 서버 생성 및 관리를 위해 EC2을 이용하여 인스턴스를 생성 하였습니다.
그리고 http를 https로 자동 주소이동을 위한 로드밸런싱을 설정하였으며, Route 53을 통해 도메인주소로 등록을 하였으며, SSL인증을 받기위해 ACM을 이용해 인증서를 받았습니다.
13. 특히 얼굴 인식 같은 민감한 데이터를 다룰 때, 데이터 프라이버시와 보안을 어떻게 처리하셨나요?
프로젝트 개시 후 해당 피드백을 받은 적이 있어 얼굴인식에 대한 부정적인 인식을 방지하기위해 얼굴인식 없이 바로 키오스크화면을 선택하여 넘어갈 수 있도록 수정을 하였으며, 얼굴사진을 찍고 나이 결과 값을 받은 후 사진을 자동적으로 삭제하는 코드를 추가하여 데이터를 남기지 않도록 하였습니다.
14. 얼굴 나이 추정을 위해 deepface 라이브러리에서 GPT-4o로 변경하신 이유는 무엇이며, 어떻게 정확도를 개선할 수 있었나요?
우선 얼굴나이를 추정하기 위해서는 이미지 파일을 필요로 하며 테스트를 통해 이미지 인식에는 기존 10살 차이의 GPT 3.5 turbo에 디해 GPT-4o가 오차 3살 가까운 결과 값을 나타내는 것으로 확인하여 GPT-4o를 채택하였습니다.
15. 브라우저 기능을 활용한 STT (음성 인식) 및 TTS (텍스트 음성 변환) 기능을 구현하셨다고 했는데, 이러한 기능을 통합하는 데 있어 주요 과제는 무엇이었으며, 어떻게 해결하셨나요?
저희가 개발하는 배경이 로컬에 기기가 있는 것이 아닌 웹 어플리케이션으로 동작하는 프로그램이였기 때문에 파이썬 상에서 카메라를 동작시키는 것에서 마이크 인식이 되지 않는 문제가 발생하여 브라우저의 마이크인식 기능을 이용하여 음성데이터를 문자로 변환하여 데이터를 보내는 것으로 변경하게 되었습니다.
16. ‘실버 라이닝’ 프로젝트의 팀 리더로서, 팀원이 프로젝트를 떠났을 때 작업 할당을 어떻게 관리하셨나요?
실제로 프로젝트를 계획하는 단계에서 개발에 부담을 느껴 팀원 한분이 빠지게 되었지만 한명에 빈자리를 맞추어 넣기 위해 프로젝트파트에서 팀원에게 자신있는 부분을 물어보고 프로젝트를 배분하였으며, 혼자서 해결하기 힘든 부분은 패어프로그래밍으로 두명씩 팀을 만들어 같이 협동하여 작업을 하여 서로 도움을 줄 수 있게 프로젝트를 진행하였습니다.
17. 프로젝트 진행 중 팀을 일정에 맞춰 유지하기 위해 매일 보고서 작성과 계획을 사용하는 방법에 대해 설명해 주실 수 있나요?
개발을 시작하는 아침에 다같이 모여 오늘 진행 예정인 부분을 간단하게 공유를 하고 매일 저녁에 30분 정도 모여 다같이 예정 했던 부분을 얼만큼 진행을 했으며, 자신이 만든 것을 설명하며 어떻게 동작이 되는 지 팀원이 서로 알수 있도록 공유 하였으며, 개발 도중에 생긴 버그등을 기록하여 다음에 재발생이 되었을 때에 빠르게 대처 할 수 있도록 하였습니다.
18. 프로젝트 중 팀 내에서 발생한 갈등이나 의견 충돌이 있었다면, 이를 어떻게 해결하셨나요?
팀프로젝트의 큰 갈등이 생긴적이 없도록 저희는 매일 팀회의에서 진행방향이 목표에 잘 맞추어 가고 있는지 확인하고 각자의 의견을 의논해서 추가하거나 빼는것을 논의하여 갈등을 최소화 했었습니다.
19. 프로젝트 개발 중 발생한 기술적 문제를 해결하는 접근 방식은 무엇이었나요?
우선 오류가 발생하여 동작이 되지 않는 문제가 생겼을 때에는 문제의 원인이 되는 부분의 코드를 하나씩 분석해 가면서 문제의 원인을 찾아보고 디버깅 모드나 장고의 test.py기능을 이용해서 문제의 원인을 해결했었습니다. 또 기술적으로 마이크 인식이 불가능했을 때에 마이크인식을 다른 방향으로 인식 시키기 위해서 브라우저의 기능으로 변경하여 사용하였습니다.
20. 현재 공부하고 있는 새로운 기술이나 도구가 있나요? 이들을 향후 프로젝트에 어떻게 적용할 계획이신가요?
최근에 배우고 있는 부분은 cs부분을 많이 배우고 있으며, 추가적으로 파이썬 외에 c node.js같이 다른언어들의 특성을 유튜브를 통해 배우고 있습니다. 아직은 파이썬 밖에 응용을 하지 못하지만 다양한 언어를 응용할 수 있도록 노력 하고 있습니다.
21. 새로운 아이디어를 구현하기 전에 잠재적인 문제점을 신중히 고려한다고 하셨는데, 이러한 접근 방식이 프로젝트를 어떤 문제로부터 구해준 사례가 있나요?
저희 프로젝트를 개발하다 보니 키오스크를 위해서 필요한 탬플릿으로 메뉴 등록, 점주의 주문 확인 페이지, 회원가입 페이지를 프론트엔드 및 백엔드로 만들어야 했는데. 해당 부분까지 반영하여 개발하기에는 부족한 시간으로 인하여 주 기능인 키오스크를 제외한 부분은 장고에서 기본적으로 지원하는 admin page를 이용하여 페이지를 만드는 시간들 단축 제출기한에 맞출 수 있었습니다.
22. 처음에는 프로젝트에 구현하고 싶었지만, 나중에 포기한 기능이나 기능이 있나요? 그 결정을 내린 이유는 무엇이었나요?
현재 음성입력으로 조절할 수 있는 부분은 메뉴 추천, 메뉴 선택, 장바구니 내용물 수정, 결제 진행이지만, 해당기능을 한번에 연결해서 사용하는 부분에는 아직까지 역량이 부족하여 실현하지 못하여 따로 동작을 할 수 있게 하였습니다. 나중에 역량을 높혀 발전할 수 있게 하고 싶습니다.
23. 프로젝트 요구 사항을 충족하기 위해 새로운 기술이나 도구를 빠르게 배워야 했던 경험이 있다면, 어떻게 학습 곡선을 관리하셨나요?
우선 개발에서 필요한 부분이 발생한다면 구글링을 통해 해당 기능을 구현할 수 있는 라이브러리나 API가 있는지 알아보고 해당 기능이 어떻게 동작을 하며 입력값과 결과 값이 우리의 코드에 적용을 시킬 수 있는지 파악한 다음 반영하여 테스트 해보는 순서로 진행이 되었습니다.