IT특성화고출신
IT특성화고출신(이은찬)
한국디지털미디어고등학교 해킹방어과 이수과목 : 컴퓨터프로그래밍(C/C++), 컴퓨터그래픽(Photoshop/illustrator), 자바프로그래밍(Java), 정보통신(TCP/IP, 네트워크 개론), 웹프로그래밍(HTML/CSS/Javascript(jQuery)), 모바일프로그래밍(Android), 3D애니메이션(adobe 3dsmax), 정보보안(개론), DB(DB개론, mySQL, SQL), 방과후 과목 Python 정보처리기능사 취득 네트워크관리사 2급 취득 고려대학교 이수과목 : 컴퓨터언어및실습(C/C++), 전산물리학(C++), 데이터로 표현하는 세상, 데이터학습과지능(머신러닝 개론) 기계공학부 전산유체/소음 연구실 학부연구생 (주제 : OpenGL을 이용한 3D 에어포일 디자인 프로그램 설계/개발)

크롤링 서버 : https://github.com/hd132620/OWLTransferAPI

앱 : https://github.com/hd132620/OWLTransfer2020App

backend : https://github.com/hd132620/OWLTransfer2020_functions

AWS 웹 크롤링 서버와 GCP Serverless backend로 이루어져 있습니다.

AWS 웹 크롤링 서버는 AWS EC2(현재 해외IP 차단으로 인해서 개인 서버 활용)를 이용해 나무위키 페이지를 크롤링하며 typescript/node.js를 기반으로 만들어졌습니다. request 모듈을 통해 크롤링 후 cheerio를 통해 data extracting 과정을 거쳐 json데이터를 cloud firestore로 저장합니다. 이 과정은 15분에 한번씩 반복됩니다. 로깅은 morgan, winston을 통해 daily log로 저장합니다.

기본적으로 GCP Serverless backend는 GCP의 Cloud functions와 Cloud firestore를 이용해 개발되었습니다. Cloud functions에서 API서버를 이용해 사용자 토큰관리, 테스트 알림, DB변경 시 실시간 알림, 이적 json데이터 등을 반환합니다.

모바일 앱은 react-native 기반 android 앱입니다. javascript로 이루어져 있으며 간단한 UI구성 및 API호출 및 사용자 상호작용을 위해 만들어졌습니다.

좋아요 0
    댓글 0

    링크 : https://github.com/hd132620/BezierPractice

    제 전공 안에서 프로그래밍을 통해 할 수 있는 일이 무엇일가 생각하다가 관심있던 전산유체 연구실에 들어가서 학부연구생으로서 관련연구를 수행했습니다. 메인 엔진개발은 많은 시간과 노력을 요하는 일이어서 비교적 간단한 관련프로그램을 만들 수 있는지에 대한 테스트를 받게 되었는데 그 때 교수님이 제안해주신 것이 이 프로그램입니다.

    먼저 OpenGL 구조를 익혀야 했습니다. OpenGL에는 VBO라는 곳에 Vertex 데이터를 넣고 렌더링하는 방식으로 이루어집니다. 저는 Bezier 곡선을 기반으로 하는 비행기날개를 모형으로 잡았기 때문에 Bezier곡선을 계산해서 해상도에 맞는 Vertex데이터를 생성하는 클래스를 정의하게 되었습니다. 1차원배열이었기 때문에 C++ STL 라이브러리를 사용해 계산한 데이터를 기반으로 폴리곤과 곡면을 생성했습니다. 데이터계산보단 OpenGL구조와 데이터 Manipulation 측면에서 시간을 많이 투자하게 되었습니다. 그래픽 프로그램이다보니 해상도가 늘어날수록 무리한 알고리즘은 느려지는 것이 눈에 보여서 최적화에 많은 투자를 해야 했습니다. 알고리즘의 중요도에 대해서 알 수 있었습니다.

    좋아요 0
      댓글 0

      팀명 : U-space

      KakaoTalk_20190926_211442365_1569500113.webp

      도전 K-스타트업 2019 학생 창업유망팀 300 선정

      아이템명 : 음식점 여유공간 공유 플랫폼

      아이템 소개 : 대학교 주변의 음식점에 손님이 거의 없는 시간대에 학생들에게 여유 공간을 모임이나 회의에 활용할 수 있도록 연결해주는 공유경제 플랫폼

      맡은 역할 – 기술책임, 공동창업자

      이는 프로젝트보단 창업활동 혹은 아이디어라고 생각해도 될 것 같습니다. 학교에서 과제를 하다 학교 내의 과제공간이 부족한 부분이 생기는 것과 그 시간대에 식당들이 한산한 것을 발견하고 공간이 부족한 학생들에게 식당의 공간을 중개해주는 아이디어를 동기와 함께 생각해내고 이를 창업모델로 구체화했습니다. 저는 공동대표 및 기술책임을 맡아 기술조사를 먼저 시행해보았습니다. 먼저 스타트업 특성상 생산성 있는 개발이 중요하므로 네이티브 앱보다는 안드로이드와 iOS 동시개발을 하는 것이 좋다는 결론을 내렸습니다. 특히 웹 서비스로의 전환도 생각하고 있는 만큼 웹 기반 기술을 쓰는 것이 그 과정에서 유리하다고 보았습니다. React native, Angular, Vue native, flutter, nativescript, Xaramin 등 여러 기술들이 있었는데 비교적 러닝커브가 초보자에게 적절하지 않은 Angular(코딩에 대해 아무것도 모르는 개발자 지원자가 있었습니다), 강력한 기능을 자랑하지만 아직은 특히 native 쪽에서 개발 커뮤니티가 활성화되지 않은 Vue native, Dart언어를 새로 배워야 하고 애니메이션 쪽으로의 퍼포먼스는 기대하지 않는 프로젝트 특성상 필요하지 않은 flutter, 편할 것 같지만 커뮤니티가 거의 없는 nativescript, 거의 쓰지 않고 있는 Xaramin 등을 뒤로 하고, 조금 배워야 하긴 하지만 관련 facebook 커뮤니티가 잘 되어있고 비교적 검증된 React native로 앱을 만들기로 했습니다. 하지만 친구의 대학원 진학과 저의 구직활동이 겹쳐서 다음에 기회를 살려보도록 했습니다. 아이디어로 시작했지만 조사해나가면서 평소 관심을 가지지 않았던 React와 Redux, GraphQL, 웹 기술 전반에 대해서 이해를 할 수 있었습니다.

      좋아요 0
        댓글 0

        ‘전산물리학 및 실습’ 기말연구 발표 프로젝트

        주제 : 강제조화운동의 phase space vector field analytic method

        개발언어 : C++

        사용 라이브러리 : ROOT on linux

        개발기간 : 1일 (분석 3일)

        주소 : https://github.com/hd132620/Forced_damped_oscillator CRK4.cc CRK4.hh Damp3.cc

        좋아요 0
          댓글 0

          개인연구 실험작

          이름 : DVIS( 디미고 투표관리시스템 )

          플랫폼 : 데스크톱(Server, Admin), 모바일(Client)

          개발언어 : Java

          사용 라이브러리 : JavaFX, Android

          개발기간 : 15일

          주소: https://github.com/hd132620/DVIS_Prototype

          https://github.com/hd132620/DVIS_Controller_PT

          좋아요 0
            댓글 0

            학교 단체연구동아리 한국과학창의재단-우리동네 과학클럽 지원

            이름 : STARANISE

            리더 : 이은찬

            팀 : 3체분석 팀(이은찬), 당구게임 팀(박유택)

            인원 : 6명(3체 팀 3명, 당구 팀 3명)

            활동기간 : 2016년 3월~ 9월

            주소 : https://github.com/staraniseatdimigo

            낙하 시뮬레이터 구현 이후 3체운동을 인공지능으로 학습시킬 경우 연구결과와 비슷한 결론이 나올까? 하는 간단한 호기심으로 시작해 저와 같이 할 동료를 모으고 고3시절 동아리로 시작해 한국과학창의재단으로부터 우리동네 과학클럽 지원을 받으며 프로그램을 만들었습니다. 제가 맡은 부분은 프로젝트 총괄 및 서브 엔진 부분이었습니다.

            메인 엔진을 구현하기 전 간이 시뮬레이터를 통해 물리적, 전산학적 문제를 분석해서 더 나은 구조를 제안하는 역할이었습니다. 3체의 무게중심이 이동하는 현상이 변수 overflow를 일어나게 해서 무게중심이 이동하지 않도록 매초에 추가적인 벡터를 더하는 형식을 해결했습니다. 또한 불필요한 계산을 줄인 충돌 알고리즘을 제안해 성능을 높였고 필요한 시뮬레이션 충돌 자료를 기록할 수 있는 최적화된 파일 구조를 설계해 저장공간을 아꼈습니다. 프로젝트 막바지에는 인공지능 분석까지는 효용성이 없다고 판단하고 시뮬레이터에 집중하였으며 AWS 컴퓨팅 담당을 맡아서 실제 데이터까지 추출해냈습니다. 팀 활동을 하면서 팀원들과 토론하고 협업하고 스케줄 관리하는 좋은 경험이 된 것 같습니다.

            좋아요 0
              댓글 0
              2019년 12월 20일 08시22분 ·  낙하 시뮬레이터

              이름 : 대기마찰자유낙하 시뮬레이터

              개발언어 : Python

              사용 라이브러리 : NumPy, maplotlib

              개발기간 : 3개월간 연구 및 보수

              주소 : https://github.com/hd132620/FallingSimulator

              영상주소 : https://www.youtube.com/watch?v=f9IChddzFWc

              Python 강의를 들은 후 당시 관심있던 간단한 전산물리학 시뮬레이터를 구현해보았습니다. 할 수 있었던 C++ 혹은 Java를 생각했었으나 Java에서는 JVM으로 인한 느린 실행속도, C++는 실행속도를 보장할 수 있었지만 규모가 커질 경우 생산성이 좋지 않은 문제점이 있었습니다. 따라서 생산성도 좋고 라이브러리가 많아 바로바로 간단하게 결과를 확인할 수 있는 Python을 채택하고 matplotlib로 만들게 되었습니다. 수업에서만 배우던 Python을 익힐 수 있던 좋은 기회가 되었습니다. 자유낙하, 2차원탄도, 공기저항탄도, 가변공기저항자유낙하 모델을 만들어 분석해서 스카이다이빙 모사 데이터를 만들어냈습니다.

              좋아요 0
                댓글 0
                2019년 12월 20일 08시14분 ·  JAVAFX 흑과 백 게임

                교내 프로그래밍 대회 은상작

                이름 : Black&White ( 더 지니어스 )

                개발언어 : Java

                사용 라이브러리 : JavaFX 0.8

                개발기간 : 일주일

                상세한 프로그램 구조 및 설명은 Github readme를 참조해 주세요

                주소(Client/Server) : https://github.com/hd132620/B-W https://github.com/hd132620/B-W-Server

                영상주소 : https://www.youtube.com/watch?v=wsZrXJgdptk

                프로그래밍을 배운 이래로 공부 목적이 아닌 실제로 만들고 싶은 것을 만든 첫 프로젝트입니다. 고등학교 2학년 Java 수업 때 JavaFX를 배우고 GUI프로그램을 만드는 과제가 있었는데 저는 애니메이션을 이용해 당시 인기있었던 '더 지니 어스'의 게임 룰을 그대로 가져와 구현해 보기로 했습니다. 그 전에 이미 게임 구현을 하고 싶어서 Java 서버 개발을 완료했었던 터라 클라이언트 구현을 목표로 잡았습니다. 미리 설계해둔 절차적 서버흐름이 존재했었기 때문에 클라이언 트도 그 흐름에 맞추어 정보를 보여주고 서버와 통신하도록 설계했습니다. 실제로 프로젝트를 진행하면서 여러가지 문제점을 마주쳤는데 먼저 기초적인 CS지식과 라이브러리 자체에 대한 지식이 부족해서 UI변경은 꼭 Main Thread에서만 해야한다는 것을 몰랐습니다. 에러분석을 끝내고 나서 JavaFX의 Platform.runLater(() -> (메소드));을 이용해서 UI변경 부분은 Main Thread에서 처리하도록 적용했습니다. 또한 서버 IP와 클라이언트IP가 다른 실제 서버통신을 겪어보면서 서버가 내부 사설 네트워크일 경우 서버가 바깥의 클라이언트와 연결하기 위해선 공유기에 포트포워딩을 통해 직접 포트를 알려줘야 한다는 문제점이 있었습니다. 이 문제는 같은 반(네트워크) 안에서 플레이하는 조건으로 해결했습니다. 그리고 임의로 서버에서 포트를 배정하고 데이터 통신을 시작할 때 포트가 시스템에 의해 이미 점거되어있는 경우가 많았습니다. 이는 netstat -an 명령어로 포트 스캐닝을 하고 이를 바탕으로 한 서버 운용 테스트를 통해 경험적 데이터 를 쌓고 해결했습니다.

                추가적으로 여기서 다른 점거되지 않는 포트들도 있었으나 서버-클라이언트 특성상 에러가 나고 바로 프로그램을 종료하기 때문에 active close가 되지 않고 passive close로 인한 time-wait 상태가 되어 포트가 강제 로 닫히기 전까지 다시 포트를 사용할 수 없이 부하가 늘어나는 현상이 있었습니다. 설계상 동시접속자 2명인 서버에는 아무 문제가 없었으나 리테스트에 걸리기까지 시간이 걸렸으며 확장가능성을 고려해 다음 프로젝트에서는 테스트 종료 버튼을 따로 만드는 것을 해결방법으로 생각하고 있습니다. 또한 개발과정에서도 UI변경 부분 혹은 서버와의 통신과정에서도 어떤 과정에서 오류가 생기는지 알 수 없던 문제가 있었습니다. 필수적이지만 잘 알지 못했던 개발수칙과 지식을 잘 알 수 있었습니다.

                프로젝트는 2인1조로 진행했습니다. 저는 서버/클라이언트 통신 및 클라이언트 설계를 담당했고 다른 한 친구는 UI, 그래픽, 애니메이션 등을 담당했습니다. 이 과정에서 클라이언트 설계를 적절히 설명하고 애니메이션에 해당하는 부분은 친구가 구현한 내용을 바탕으로 서버지연이 발생하지 않게 적절한 타임아웃과 슬립을 이용한 흐름제어를 했습니다. 아쉬운 점은 Java로 진행된 프로젝트임에도 불구하고 수업시간에 배운 OOP스러운 설계를 하지 못했던 것이 아쉽습니 다. 숫자타일을 따로 객체를 정의하고 다른 게임 요소는 게임모드라는 클래스를 통해 상속을 했었다면 개발을 더 단순 화시키고 유지보수도 더 적절히 되지 않았나 생각합니다. 그리고 숫자 2개를 받아 승패를 알려주고 매치 후 최종 승패만 알려주는 단순한 서버일 경우 절차적으로 한 매치에 대해 9번 반복하는 것이 아닌 승패를 알려주는 알고리즘의 무한루프로 여러 매치를 동시에 수용할 수 있지 않았을까 생각합니다. (이 과정에서 기본적인 알고리즘/자료구조 지식도 필요했었는데 많이 아쉽습니다)

                좋아요 0
                  댓글 0