ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서울대 컴퓨터공학과 조별과제, "창의적통합설계" 수강 후기
    카테고리 없음 2020. 12. 28. 03:24

    서울대 컴퓨터공학과에는 졸업필수이자 기말, 중간대체인 조별과제 프로젝트가 두개가 있습니다.

    웹개발 서비스를 통으로 만드는 '소프트웨어 개발의 원리와 실제(이하 소개원실)'와, 기업과 연계하여 기업이 원하는 산출물을 개발하는 '창의적 통합 설계1, 2(이하 창통설)'입니다. 둘다 고학번이 듣는 조별과제인 점, 수업 후 다들 정신적으로 타격을 받아서 세평이 바닥을 치는 점이 비슷합니다.

    3년 전 산업기능요원을 하기 전 마지막 학기에 소개원실을 들었습니다만, 조별과제가 심각한 수준으로 진행되지 않아서 썩 좋은 인상을 갖지는 못했습니다. 아무튼 졸업을 하긴 해야하기에 이번학기에 창통설을 수강했습니다.

    보통 소개원실과 창통설은 악명이 높아서 수강 전에 미리 팀빌딩을 하고 진입하는 경우가 대부분입니다. 저는 성격이 좀 괴팍한 관계로 동기들이랑 교류를 전혀 하지 않았으므로, 따로 팀빌딩을 하지 않은 상태로 수강하게 되었습니다.

    회사와 팀메이트의 선정

    3인 1조로 나누어져, 3달이라는 짧은 시간에 완수해야 하는 다양한 과업이 제시되었습니다. 20여개의 회사들이 주제를 제시했습니다. 그 중에서 개인별, 혹은 조별로 지망하는 과업을 지원하고, 랜덤 배정하는 식으로 매칭이 진행되었습니다. 대부분의 주제들은 아래와 같은 느낌과 거의 비슷합니다.

     

    • 이미지에 개인 정보를 제거하는 딥러닝 기술 개발
    • 텍스트에서 정보를 읽어내는 딥러닝 기술 개발
    • 특수 디바이스용 뉴럴 네트워크 프레임워크 개발
    딥러닝 연구에 치중된 과업들을 보면서, 또 학교 다니면서 딥러닝을 배워본 적 없는 입장에서 이런 사견이 들었습니다.

     

    1. 창의적통합설계는 권장 이수 학년이 3학년인 과목입니다. 과연 3학년에게 산학연계로 딥러닝을 요구하는 것이 정당한지 의문이 들었습니다.

     

    2학년, 3학년 전공 과목들은 기초적인 자바와 C++의 초보적인 응용에서 벗어나지 않습니다. 다른 전공 탐색을 거치지 않은 상태에서, 회사에 가서 딥러닝을 알아서 학습하여 성과까지 내오는 요구가 불합리하다고 생각했습니다. 실제로 저는 딥러닝에 대한 이론적, 실무적 역랑이 전혀 없는 상태입니다. 또한, 딥러닝 연구 대신 서버 개발이나 클라이언트 개발 같은, 일반적인 진로를 선택한 학생에게 그다지 도움이 되지 않는다고 생각했습니다.
    2. 창의적통합설계 개발 지도가 없는 과목입니다. 서버 자원 하나 내주는 곳 없어서 학생 사비로 개발을 해야하는데, 고난도의 업무 연구 과제를 던져주는 것이 적절한지 의문이 들었습니다.
    텐서플로우 좀 이번 기회에 써 보자는 수준이 아니라, 대부분의 과제는 진짜 회사에 적용해볼 만한 프로덕트를 개발하는 수준이었습니다. 조금 대놓고 말하자면, 무급으로 비싼 딥러닝 연구를 학생들에게 떠넘겨 버리려는 저의로 의심되는 것들이 일부 있었습니다.

    애초에 딥러닝에 그다지 흥미가 없었을 뿐만 아니라, 회사 설명을 들으면서 딥러닝 과업의 의도가 그렇게 좋게 비치지는 않았으므로, 거의 없는 비딥러닝 개발과제 중 하나로 배정을 신청했습니다.

    저의 장기인 어플리케이션 개발이 관련된 과제가 있었으면 최선이겠지만, 아쉽게도 존재하지 않았습니다. 그 대신 유니티로 디지털 트윈을 개발하는 과제를 선택해 들어갔습니다.

    개발하게 된 프로젝트의 초창기 진행

    미리 팀빌딩하지 않았기에 배정된 후 연락처를 주고받았고, 팀이 대략 아래와 같이 구성되게 되었습니다.

    나 - 15학번. 병역특례로 앱 개발을 하다가 들어왔습니다. 유니티에 대해서는 사실상 아는 바가 전혀 없습니다.
    A형님 - 11학번. 병역특례로 게임 개발을 하다가 졸업을 위해서 복학했습니다. 유니티에 대해서는 제일 잘 알지만, 최근에는 기획일만 했습니다.
    B동생님 - 18학번. 개발경험은 저학번답게 그렇게 많지는 않은 편입니다.

    회사 담당자와 컨택도 해 보았는데, 주제는 "디지털 트윈을 이용해 자유롭게 개발해 내되, AR 혹은 VR 연구도 해 보았으면 좋겠다" 정도로 전달을 받았습니다. 저희가 매칭된 기업이 대기업이여서 그런지는 몰라도, 저희의 프로젝트를 실무에 적용하기 위해서 마이크로매니징하기 보다는, 자유롭게 학생다운 소규모 연구를 해보라는 정도의 톤을 제시했습니다. 그대로 학생들이 만든 것을 꿀꺽해서 실무에 적용하려는 술수가 보이는 다른 기업에 비해서, 기업운이 상당히 좋다고 느껴졌습니다.

    사실상 주제가 "디지털 트윈"을 만드는 어떤 소규모의 프로젝트라도 상관없었으므로, 이야기를 비교적 빠르게 한 뒤에 정리하여 주제를 "편의점 매대의 디지털 트윈 구현 및 AR 연구"로 정했습니다. 편의점 매대는 비교적 쉽게 모방할 수 있다는 생각이 들었기 때문입니다.

    프로포절 피피티 발표의 데드라인이 상당히 빡빡한 편이었기 떄문에, 바로 프로포절 피피티 준비를 했습니다.

    aws 서버 구축

    3년 전에 소개원실을 할 당시에는 조원이 서버 개발 및 배포를 거의 맡아주다싶이 해 주었기 때문에, aws 를 써본 경험이 없었습니다. 하지만 이번 팀의 구성상, A형님이 클라이언트 주개발을 하고 제가 서버 개발 및 배포를 하는 게 효율적으로 느껴졌습니다. 따라서 이 과제는 제가 서버 개발과 배포를 온전히 진행하게 되었습니다.

     

    AWS가 상당한 돈이 나가는 서비스다 보니까, 자체 서비스는 디지털오션에 배포해서 서비스했으므로 거의 처음으로 ec2 인스턴스를 배포하게 되었습니다. 서버로 많이 쓰이는 것은 스프링이나 노드, 루비 따위일 텐데, 저는 노드에 그나마 익숙하므로 노드로 소규모 api 서버를 짜면서 개발하게 되었습니다.

     

    사실상 3개월어치 동시접속수자 5명 이하인 팀프로젝트에 대단한 서버 공수나 기술이 들어갈 여지도 필요도 없었습니다. 개발 자체는 단순했으나, 제가 어려움을 겪었던 점은 다른 포인트였습니다. 사실상 구체적인 개발 과업이 없는 상태에서, 모호한 개발 과업을 어떻게 api의 묶음으로 구체화해 표현할까에 대해서 생각해봐야 하기 때문이었습니다.

     

    제 경력은 서버 개발자가 이쁘게 마크다운으로 정리한 api와, 디자이너가 이쁘게 화면 단위로 정의해 둔 제플린을 보고 사실상 설계서가 주어진 채로 만들어내는 클라이언트 작업이 연속되었기 때문에, 창조라고 보기에도 부끄러운 이런 기초적인 걸음마 작업도 어려웠던 것 같습니다.

    유니티 클라이언트 개발

    중간발표 전에 A형님이 클라이언트 개발을 진행했는데, 3D 같은 작업은 제가 전혀 아는 바가 없어서 개발에 도움이 되진 않았습니다. 일단 api 클라이언트 네트워크 연결 같은 유니티 도메인에 별로 관련이 없는 개발을 먼저 시작했고, 중간발표의 완성도만 살짝 올리기 위해서 유아이 작업을 조금 작업하게 되었습니다.

    안드로이드나 아이폰 같은 경우에는, xml이든 오토 레이아웃이든 나름 코딩으로 명확히 구현되서 레이아웃을 설계할 수 있습니다. 반면 유니티 유아이는 코딩으로 작업하기보다는, 흡사 피피티에다가 버튼을 끌어서 만드는 작업과 비슷하다고 느껴졌습니다.

    중간발표

    아무튼 적당히 개발된 과업을 모아서 중간발표를 진행했습니다. 저는 프레젠테이션이나 보고서, 발표의 센스가 괴멸하게 부족했기 때문에, 조원 B동생님이 많은 고생과 기여를 해 주었습니다.

    중간발표에 다른 많은 조들의 발표를 구경했는데, 다 딥러닝 과제 발표고 도메인을 전혀 모르는 지라 어디 조 발표가 나은지 우열조차도 저는 분간하기 어려웠습니다. 아무튼 어떻게든 딥러닝을 개발해내는 집념이 존경스럽다고 생각합니다.

    ARCore 연동

    시뮬레이션은 중간발표즈음에서 대부분 연동했고, 약간 버기하고 완성도 낮은 시뮬레이션 하나가 완성되었습니다.

    그 이후로 요구사항인 "AR 연구"를 위해서 Google ARCore 를 연동했습니다. ARCore에서 친절하게 유니티 연동 요령에 이어서, 기초적인 구현을 한 샘플 프로젝트까지 여럿 제공하고 있었습니다. 그냥 이번 프로젝트에서는 ARCore를 코어하게 연구하지는 않았고, 샘플 코드를 취합해서 적당히 시연할만한 응용을 개발하는 데 목표를 둔 것 같습니다.

    ARCore Elements - Apps on Google Play

     

    ARCore Elements - Google Play 앱

    Are you a developer or designer creating your first augmented reality (AR) experience? Learn techniques for building better and more dynamic apps with ARCore Elements. ARCore Elements makes high-quality AR production accessible and fun. It shows you how to

    play.google.com

    위 링크는 구글에서 제공하는 샘플 어플리케이션입니다. 코드는 제공하지 않지만, 상당히 많은 인터렉티브를 지원하기에 처음에 인사이트를 잡아볼 수 있었습니다.

    도큐먼트를 대략적으로 살펴본 결과, 구글 ARCore를 활용해볼 수 있는 기능을 대충 파악하게 되었습니다.

    ARCore를 이용하면 실제 카메라를 조작하여, 가상의 평면을 감지하여 생성할 수 있습니다. 개발자는 여기에 3D 모델을 올려놓아서 조작하는 응용을 개발하기 편리합니다. 유니티는 3D 개발에 도움이 되는 편리한 API와 인터페이스를 상당히 많이 개발하면, 꽤나 완성도가 높은 AR 어플리케이션을 출시해낼 수 있어 보입니다. 예를 들어, 가상의 평면에 사전 정의된 3D 모델을 배치하고 디스플레이하는 것은 상당히 손쉽게 해낼 수 있습니다.

    다만, 가상의 평면을 감지하는 것 이상의 고차원적인 기능을 기대하기는 어렵다고 느껴진 것이 단점입니다. 예를들어, 평면에 있는 3D 입체 물체를 인식해서 AR 환경에 응용한다든지 하는 것은 무리입니다. 어디까지나 평평한 평면을 감지하는 것 이상을 기대하기는 어렵다는 직감을 받았습니다. 따라서 이미 있는 훌륭한 3D 어플리케이션에 약간 가미하는 수준이면 모르되, ARCore 자체만으로 무언가를 개발하는 데에는 한계가 있다고 생각이 듭니다.

    아무튼 저희의 프로젝트의 경우, 감지된 가상평면 위에 매대의 아이템을 올려두고 조작하는 선에서 연동을 마쳤습니다.

    팀원이 세명에서 두명으로

    중간발표 이후로 A형님이 연락이 잘 안되어 영 상황이 이상하게 흘러간다고 생각되었습니다. 그래서 따로 B동생님께 이야기를 해서, 개발 분량를 3인 개발에서 2인 개발로 좁히는 방향으로 하자고 말을 했습니다.

    스코프를 미리 줄였으므로 개발은 어느정도 충분한 진척을 이루어서 2인치고는 그럭저럭인 완성도, 3인치고는 뒤떨어지는 완성도를 구현하는 데까지는 성공했습니다.

     

     

    이왕 이렇게 된 김에 A형님께 이를 빌미 삼아서 밥이라도 한번 얻어 먹으려고 연락을 시도했습니다만, 끝내 어떤 방법으로도 실패하여 발표나 보고서 작성은 둘이 분배해서 하게 되었습니다. 개발은 뭐 꾸역꾸역 해냅니다만, 보고서와 발표를 작성하는 데 제가 상당히 힘들어했습니다. B동생님의 적극적인 기여 때문에 무난히 역경을 헤쳐나갈 수 있었습니다.

    A형님은 마지막 발표에 출석하지 않으셨습니다. 이 강의는 발표때 불출석자에게 F를 부여하므로, 그 말인 즉슨 졸업을 위해서 다음 학기에 이 강의를 다시 들어야 한다는 뜻입니다. 프리라이딩을 위해서라면 당연히 마지막 발표를 출석하는 것이 합리적이므로, 무언가 연락이 지속적으로 안 된 것에는 그만한 개인사가 있지 않았을까 하는 추측만 할 뿐입니다.

    최종 산출자료

    2인~3인 정도 규모의 산출자료로, 타 조의 딥러닝의 챌린징한 도전에 비하면 상당히 부진하고 그것을 교수님께서도 지적하셨습니다만,

    유니티에 대해서 스터디하면서 진행한 점과, 그래도 소규모의 완성도 있는 어플리케이션을 제작한 점이 참작되어 평가되었습니다.

    대략적인 어플리케이션은 매대를 모방한 시뮬레이션 파트와, AR기능을 연동한 파트 두 개를 가능한 완성도를 높인 채로 제출하게 되었습니다.

     

    발표자료와 산출물 구동 동영상, 전체 코드를 공유합니다.

    (서버 ) github.com/seemarket/seemarket-server

     

    seemarket/seemarket-server

    마켓 매대 연동 서버 코드. Contribute to seemarket/seemarket-server development by creating an account on GitHub.

    github.com

    (클라이언트 ) github.com/seemarket/seemarket-client

     

    seemarket/seemarket-client

    마켓 매대 시뮬레이션 서비스 유니티 클라이언트. Contribute to seemarket/seemarket-client development by creating an account on GitHub.

    github.com

    docs.google.com/presentation/d/1f62GF-RB7rdO_gpaFXn7lKFp90LvuxRXtosEc_UM1Rc/edit?usp=sharing

     

    Seemarket 기말발표

    1 SeeMarket Project 창의적 통합설계 1 - 디지털 트윈 및 AR 기말 발표

    docs.google.com

    youtu.be/Ojks8PPftas

     

    여담이지만, 다른 조 발표자료들은

    기말발표도 역시 다른 조의 발표를 이해하려 노력했습니다만, 대부분 딥러닝 연구 부분이라서 뭐가 우수한 성과를 냈고 뭐가 빈약한 성과를 냈는지 당최 알아들을 수 없었습니다. 다들 어디서 딥러닝 같은건 배워서 조별과제에 써먹는지 잘 모르겠습니다. 제가 좀 사교적이여서 과에 인연을 만들어뒀으면 도움이 됬을 텐데요. 아무튼 제가 딥러닝 프로젝트에 강제배정되었으면 아마 수강취소를 하고 졸업학기로 미루지 않았을까 싶네요.

    그 와중에 발표를 깔끔하게 잘 한 타 팀 주제중에서, 자연어 문단을 주면 그 문단에서 문제를 추출해내는 프로젝트가 있었기에 링크를 첨부합니다. 딥러닝 발표 중에는 유일하게 코드를 공개하시기도 했고, 인풋-아웃풋이 명료해서 과업은 모르겠지만 결과는 알아들을 수 있는 내용이기도 했고요.

    https://github.com/sharkmir1/integrated_creative_design

     

    sharkmir1/integrated_creative_design

    Contribute to sharkmir1/integrated_creative_design development by creating an account on GitHub.

    github.com

    결론

    개발하면서 상당히 어려움을 겪은 전도다난한 과목이었고, 마음고생을 많이 한 과목입니다. 그래도 악명높은 졸업필수 조별과제 하나를 무난한 평가로 치웠다는 점에서 매우 후련한 심정입니다.

Designed by Tistory.