Server, Android, Python, Information Security
Server, Android, Python, Information Security(Sangwoon Park)
정보보안과 개발에 관심이 있는 대학생입니다. 성취감을 위해 매년 대회 수상 한 개씩을 목표로 하고 있고, 아직까지는 성공적입니다. 안드로이드 개발을 주로 하고 있고, 간단한 유틸리티를 개발할 때는 파이썬을 주로 사용합니다. 최근에는 Spring Boot를 주로 활용하여 백엔드 서버 개발도 하고 있습니다. 생활 속에 산재하는 반복작업은 못보는 성격이라 개발자지망생의 명예를 걸고 어떻게든 프로그램으로 해결하려고 아둥바둥하고 있습니다. 수상내역 - 2017 공군 해킹방어대회 전체 순위 3위 우수상 - 2018 공군 창의혁신 아이디어 해커톤 순위 2위 최우수상 - 2019 한이음 공모전 한국정보산업협회장상 - 2020 제7회 소프트웨어 개발보안대회 행정안전부 장관상 보유자격 - 정보처리산업기사(18.06) - 정보보안산업기사(18.06) - 리눅스마스터 2급(15.12)
1월 13일 01시56분 ·  집필활동

자기소개서

자기소개

  • 저는 '어디서든 열심히 한다'는 평을 받기도 하고, 덕분에 '중간을 못한다'라는 평을 받기도 하는 사람입니다. 다들 군대는 적당히 하다 가는 곳이라고 말하지만, 저는 적당히 하지 못했습니다. 호시탐탐 이름을 남길 기회를 노리던 중 한 해커톤 대회에 참가할 기회를 얻게 되었습니다. 그 곳에서 활주로 이물질 청소 작업 개선안에 대해 고안하였습니다. 이 기획안과 함께 시제품을 만들어 시연하였습니다. 장성들과 4차 산업혁명 전문가들로 구성된 심사위원단에게 호평을 받았고, 수상도 하게 되었습니다.

성격의 장단점

  • 제 단점은 겁이 많다는 것입니다. 보안 솔루션을 개발하는 프로젝트에 참여한 적이 있었습니다. 구현과정에 들어갔을 때 여러 문제들을 발견했습니다. 학부 수준의 프로젝트이기에 이를 무시하고 진행해도 됐습니다. 하지만 겁이 많은 저는 팀원들에게 양해를 구하고 프로젝트 중간에 설계를 변경하였습니다. 이로 인해 기한을 맞추려고 밤을 꽤 샜던 기억이 납니다.
  • 제 장점은 철저한 준비성입니다. 앞서 말씀드린 일이 있은 이후, 제가 일하고자 원하는 분야에 있어 어떠한 일이 주어져도 겁을 먹지 않기 위해 여러 경험을 쌓았습니다. 2가지의 자격증을 추가로 취득했고 공모전에도 꾸준히 출전하여 현재까지 4개의 상을 받았습니다.

전공 관련 경험

  • 철없던 중학생 시절, 게임 핵을 직접 만들어 게임에 활용하는 것은 제 소소한 즐거움이었습니다. 게임 핵 보안 솔루션을 무력화시키겠다며 델파이와 C를 공부하고, 주변 다른 핵 개발자들과 정보를 공유하며 처음 프로그래밍을 접하게 되었습니다.
  • 정보보호학과에 입학한 이래로 전공에 대한 전문성을 쌓기 위해 최선을 다했습니다. 단 한 번도 장학금을 놓치지 않을 정도로 전공과목을 열심히 공부하여 기본 소양을 쌓았습니다. 그 결과 과 수석, 과 차석을 차지하였습니다. 신입생 때부터 친구들과 스터디 그룹을 만들어 Linux와 Network에 대해 공부하였습니다. 그 결과로 리눅스 자격증을 취득하였습니다.
  • 군복무 시간 또한 허투로 보내지 않기 위해 공군 “전문화 관리 정보체계병”을 지원하였고, 특기 교육기간 동안 DB, Network, Linux에 대해 교육을 받을 수 있었습니다. 자유시간동안 공부하고, 야간에 화장실에 가서 공부하는 등 최선을 다했고 종합성적 9위, A등급으로 수료하여, 정보보호병으로 근무하였습니다.
  • 그 곳에서 NAC, WAF, Firewall, IPS, UTM 등 각종 보안 솔루션을 관리하였습니다. 모두가 일을 손에서 놓는 병장 시절, 모의 바이러스를 개발(ASP Classic, HTML, JS, CSS)하여 해킹대비훈련을 기획했습니다. 또한 이 기간동안 정보처리산업기사, 정보보안산업기사를 한 번에 취득하여 전문성을 갖췄습니다.
  • 전역 후 잠시 쉬는 동안 생활코딩을 통해 HTML, CSS, NodeJS와 Express, Firebase에 대해 공부하였습니다. NodeJS를 활용하여 SQLite와 연동된 기본적인 CRUD를 제공하는 게시판을 제작해보았습니다.
  • 네이버 카페에 사진을 백업하는 단체에서 활동한 적이 있습니다. 상당히 번거로운 작업이었는데, Python과 Selenium을 공부하여 네이버 카페, 블로그 사진 자동 크롤링 도구와 자동 등록 도구를 개발하여 활용하였습니다.
  • 군 복학 후 1년간 안드로이드 앱개발을 공부하였습니다. 주로 Kotlin을 사용하였고 RxAndroid를 사용하여 MVVM 패턴을 활용해보고자 노력하였고, 팀원간의 소통을 위해 Figma라는 프로토타이핑 도구를 활용하였고 프로토타입 개발 프로세스를 지키고자 하였습니다. 안드로이드에서 기본적으로 제공되는 Viwe Component들을 대부분 활용해보았고, 이를 넘어 Custom View를 제작하는 경험도 하였습니다. 녹음된 소리의 파형을 Realtime으로 나타내는 View를 Custom View로 제작하였고, 제작하는 과정에서 PCM Data의 포맷형태에 대해 공부하였습니다. 또 실시간 적용을 위해 보다 가벼운 코루틴 기반으로 ASync 로직을 공부하였습니다.
  • Ahnlab EMS개발팀 PatchLab 파트에서 인턴으로 근무하였습니다. 벤더에서 제공하는 소프트웨어 업데이트를 수집하고 관리 콘솔에 등록하는 도구를 개발, 유지보수(Python)하였고, PMS 솔루션 테스팅을 담당하였습니다. 벤더사에서 제공하는 솔루션에 대한 연구및 발표업무(Microsoft winget 등)를 진행하였습니다.
  • 2020년 연초부터 Java Servlet, JSP, Spring, Grade, Maven 등 자바 스프링 프레임워크 기반의 앱을 만들기 위해 필요한 지식들을 공부하였습니다. 네이버 부스트 코스를 수강하며 자습하였고, 배운 지식들을 활용하기 위해 제7회 소프트웨어 개발보안 경진대회에 출전하였습니다. 졸음운전 방지 및 데이터 분석 솔루션을 기획하여 서버 개발자로 구현에 참여하였고, Spring boot, Spring Data JPA, Spring Security 등을 활용하여 보안성도 높은 솔루션을 구현하고자 노력했습니다. 그 결과 행정안전부 장관상을 수상하였습니다.

보유자격

  • 정보처리산업기사(18.06)
  • 정보보안산업기사(18.06)
  • 리눅스마스터 2급(15.12)

수상내역

  • 2017 공군 해킹방어대회 전체 순위 3위 우수상
  • 2018 공군 창의혁신 아이디어 해커톤 순위 2위 최우수상
  • 2019 한이음 공모전 한국정보산업협회장상
  • 2020 제7회 소프트웨어 개발보안대회 행정안전부 장관상

학부 수강 내역

  • 총점: 4.33/4.5
  • 백분위: 98.1
  • 이수 과목
    • 정보보호개론
    • 컴퓨터 프로그래밍(C언어)
    • 수학1,2(미적분학)
    • 물리학
    • 선형대수학
    • 프로그래밍 언어 및 실습(C언어 심화)
    • 암호수학
    • 이산구조론
    • 웹개발입문(HTML, CSS, JS)
    • 객체지향프로그래밍(Java)
    • 정보수학(이산구조론+)
    • 현대암호론
    • 컴퓨터네트워크
    • 모바일프로그래밍
    • 시스템프로그래밍
    • C++
    • 운영체제론
    • 컴퓨터구조
    • 알고리즘
    • 웹기반응용과 보안
    • 빅데이터 입문
    • 데이터베이스
    • 소프트웨어 설계
    • 고급자바프로그래밍
    • 리눅스 응용
좋아요 0
    댓글 0

    개요

    구분

    팀프로젝트 (2020 제7회 소프트웨어개발보안경진대회)

    개발인원

    3명 (졸음 감지센서 개발 1, 수집 서버 및 API서버(백앤드) 개발 1, 프론트 개발 1)

    프로젝트 개발 기간

    20.8(2일)

    소스

    성과

    2020 제7회 소프트웨어개발보안경진대회 행정안전부장관상(우수상)

    시연 영상 링크 및 설명

    • https://youtu.be/5onWKiN6sK4

    • 첫번째로 IOT 센서 시연입니다. 졸음 감지와 방지 경보 발생, 데이터 전송 기능을 보여드리겠습니다. 먼저 HTTPS 통신을 통해 디바이스를 인증하여 토큰을 발급받습니다. 그리고 가속도 센서와 머신러닝으로 졸음을 감지하여 데이터를 전송합니다.

    • 두번째로 API 서버 시연입니다. 신뢰성있는 데이터를 유지하기 위해 센서에 인증 토큰을 발급합니다. 데이터 수집입니다. JWT 토큰의 유효성을 확인하고 DB에 기록합니다. 좌표를 주소 문자열로 변환하기 위해 네이버 지오코딩 API를 사용했습니다. 이 과정들은 HTTPS로 암호화 됩니다. 웹사이트를 통해 DB에 반영된 모습을 보고 계십니다.

    • 세번째로 시각화 웹사이트와 OPEN API 시연입니다. 여기는 대시보드입니다. 졸음 운전 누적순위 졸음 운전 레벨, 졸음운전 전국 현황 지도를 볼 수 있습니다. 여기는 상세페이지 입니다. 연도, 월별, 시간대별, 지역별로 데이터를 조회하여 시각화합니다. 그래프와 표로 시각화하고 있습니다. OPEN API 문서화 페이지 입니다. 이를 통해 요청 데이터와 응답데이터 형식을 확인하고 테스트할수 있습니다.

    서비스 요약

    • 안전에 관련된 서비스를 기획하는 동시에 보안성도 충족하도록 설계하였음.
    • 제7회 소프트웨어 개발보안 경진대회에 출전하여 행정안전부 장관상을 받음.

    기능

    • 졸음운전을 감지하여 사용자를 깨우고 데이터를 수집
    • 졸음운전 데이터를 실시간으로 수집하여 통계자료로 가공하고 제공하는 서비스
    • 지역별 졸음 빈도, 시간별 졸음 빈도, 졸음 발생 시간과 위치 데이터 제공
    • 실시간 졸음 빈도를 졸음 레벨로 계산하여 시각화
    • OPEN API 형태로 데이터를 제공하고 API문서를 제공.

    사용 기술

    • 졸음감지 센서의 하드웨어는 NVDIA Jatson Nano(하드웨어) + GPS센서 + 카메라모듈 + 가속도센서.
    • 졸음감지 센서의 로직은 파이썬으로 pynmea2, GPIO, urlib, ssl, smbus, OpenCV 사용.
    • 졸음감지 센서와 수집 서버의 통신은 센서의 인증 문제를 해결하기 위해 JWT 토큰을 사용.
    • 종단간 암호화를 위해 HTTPS 적용.
    • 수집 및 통계 API서버는 AWS EC2 컨테이너에 스프링 부트를 기반으로 개발된 자바 어플리케이션.
    • JWT 토큰과 HTTPS 통신 등을 위해 Spring Security 모듈을 적극활용하였고 Spring Data JPA(ORM)을 사용하여 DB를 제어.
    • Swagger를 사용하여 REST API에 대한 문서를 제공
    • 프론트는 지도 시각화를 위해 Kakao Map API를 사용.

    기여

    역활

    • 팀장
      • 서비스 기획과 시스템 설계를 주도하였음.
      • 서비스에 대한 PT를 담당하였음.
    • 더미 데이터 수집 및 가공
      • 공공데이터포털에 있는 교통 데이터를 가공하는 스크립트를 작성
      • 이를 통해 300여건의 데이터를 얻음.
    • 수집 서버 및 API서버(백앤드) 개발자
      • 데이터베이스 설계 및 ORM 라이브러리를 사용하여 구현
      • 수집 서버 및 API서버 설계 및 구현
      • 수집 서버와 센서간 통신 인증 구현
      • Swagger를 활용한 API 문서 제작
    • 프론트 개발 지원
      • REST API 요청 후 응답 JSON 데이터 사용 가이드라인 제공
      • 응답 JSON 데이터를 Kakao MAP API에 적용

    내가 사용한 기술

    • 개발환경
      • Windows 10 1909 x64
      • IntelliJ Professional 2020.2
      • Amazon Linux1(AWS EC2)
    • 기술
      • JDK8
      • Spring Boot 2
      • MariaDB
      • H2
      • Spring data JPA
      • Gradle
      • Git, Github
      • JUnit
      • Retrofit
      • Naver Reverse Geocoding API

    개발 과정

    1) 수집, 통계 데이터 가공, 웹서버

    • REST API 서버와 웹서버는 JAVA8 환경의 SpringBoot2를 기반으로 개발. WAS는 톰캣.
    • Spring Security 모듈을 적용하여 JWT 토큰을 사용하였음. 토큰은 센서와 수집서버간의 통신 중 인증문제를 해결하기 위해 사용함. 네트워크 상 토큰 이동 중 노출을 막기위해 SSL 통신을 적용하였음.

    2) 데이터 수집 데이터베이스

    • DB에는 테스트와 제출을 위해 2가지를 사용할 것인데 H2와 MariaDB를 사용.
    • H2는 메모리 DB이므로 개발 중 빠른 테스트를 위해 사용하고, MariaDB는 AWS 환경에서 서버를 돌릴 때 사용.
    • 기본적인 라이브쿼리 취약점을 피하기 위해 Spring Data JPA 모듈을 사용하였음. SQL 매핑으로 직접 DB를 다루지 않고 ORM을 통해 DB를 다뤘음. DB 설계또한 Relation 기반이 아닌 ORM에 맞는 도메인 주도 개발을 적용하려 노력하였음.

    3) 개발환경과 배포 환경

    • 개발 중에는 Windows 10 1909 x64 환경에서 IntelliJ Professional 2020.2를 사용하였음.
    • 빌드도구로는 Gradle을 사용했음.
    • GitHub를 통해 AWS EC2 인스턴스에 배포하였음.

    4) 좌표로 주소 문자열 변환

    • GPS 좌표를 주소로 변환하기 위해 Naver Reverse Geocoding API를 사용하였음.
    좋아요 0
      댓글 0
      1월 12일 07시59분 ·  집필활동

      중소기업을 위한 정보보호 솔루션 (Hybrid IDS) 연구 (KIPS_C2020B0230)

      - 논문 ID : KIPS_C2020B0230 

      - 논문 제목: 중소기업을 위한 정보보호 솔루션 (Hybrid IDS) 연구 

      - 저자: 모건웅, 박상운, 박명범, 최현규, 김우찬

       2020년, AI의 발전으로 고도화된 해킹툴로 인하여 지능화된 공격이 늘어남에 따라, 상대적으로 보안이 취약한 중소기업을 타겟으로 한 공격이 늘어나며, 피해 역시 심각한 수준을 보인다. 하지만 정보보호 제품 혹은 소프트웨어를 도입하기엔 기존의 솔루션은 중소기업이 도입하기에 과도한 기능들이 제공되거나 그에 걸맞는 비싼 도입비용이 요구되고, 솔루션을 도입한다 하더라도 전문인력이 없으면 사용하기 어려워 효용성이 떨어지니, 중소기업에 맞는 정보보안 솔루션이 필요하다. 이에 중소기업에 특화된 정보보안 솔루션의 요구사항을 정리하고 이를 충족한 Hybrid IDS 솔루션을 제안하여 중소기업의 사이버 공격 대응수준을 높이고자 하는 것이 목적이다.

      https://www.manuscriptlink.com/conferences/2020fall/download/28810/

      좋아요 0
        댓글 0
        2019년 11월 21일 12시55분 ·  Cryptonite

        Cryptonite(엔드포인트 데이터 보안 솔루션)

        “Cryptonite”의 목표는 각 문서에 대한 기밀성 유지뿐만 아니라, 인증된 사용자가 보호 중인 문서를 필요할 때 언제든 사용할 수 있는 가용성 기능까지 갖춘 솔루션을 만들어 내는 것이었습니다. 각 문서들을 AES 암호화 기술을 통해 암호화하였고, 공격자가 불순한 의도로 보호 중인 문서를 손상시켰을 때, 다시금 복구할 수 있도록 서버에 백업하는 클라우드 기능을 갖추도록 계획하였습니다. 암호 알고리즘의 구현에 대한 정보가 많이 부족했지만, 도서관에서 관련 서적을 모조리 찾아 공부하여 개발하였습니다.

        개요

        구분

        팀프로젝트 (2016년도 2학년 1학기 수원대 정보보호학과 OOP 수업 프로젝트)

        개발인원

        4명 (개발자 2, 디자이너 2)

        프로젝트 개발 기간

        16.5 ~ 16.6 (2달)

        성과

        해당 강의 프로젝트 성적 1위

        프로젝트 사용 스택

        • JAVA
        • Cryptography(PBKDF2, AES256, SHA256)
        • TCP 통신

        기능

        • 파일 자동 암호화
          • 사용자의 보호폴더의 변화 확인시 실시간 폴더감지 모듈에서 감지.
          • 암호화 알고리즘 AES-256을 사용하여 대상파일을 암호화.
          • 암호화 키는 PBKDF2로 해싱된 패스워드.
        • 파일 자동 백업
          • 파일이 암호화되면 실시간 폴더감지 모듈에서 즉시 감지하고 서버로 백업.
        • 파일 복원
        • 유저간의 파일 전송수신
          • 1:1 파일 공유로써 보내고자하는 사람이 전송하고자 하는 파일을 선택하면 OTP가 발급.
          • 그 OTP를 파일을 받는 사람이 입력하면 파일을 받을 수 있음.
          • 한번 받은 파일은 서버에서 삭제되며 서버에서의 최대 보관기한은 48시간.
        • 위치 추적 기능
          • whois api를 활용하여 ISP 단위 위치 확인. 도난을 방지.

        견본

        Github

        https://github.com/nbiosupr/cryptonite

        참여

        역활

        • 팀장
        • 암호화 모듈 개발
        • 복호화 모듈 개발
        • 클라이언트단 통신 모듈 개발
        • Swing을 활용한 UI 개발
        • 복원 모듈 개발
        • 복원 UI 개발
        • 윈도우 콘텍스트 메뉴 추가

          문제 해결법

        • 키관리 문제
          • 대칭키 암호화의 가장 큰 문제는 키관리.
          • PBKDF2를 활용해 사용자의 패스워드를 암호화 키로 사용할 수 있음을 알게됨
          • 이를 적용하여 암호화키를 서버에 백업하지 않게 됨.
        • 서버와의 통신
          • 당시 프로토콜의 개념이 미비하였음.
          • 시리얼 통신과 같이 네트워크 통신을 하려다 보니, 각 패킷의 구분이 불명확.
          • 별도의 프로토콜이 필요함을 알게 됨.
          • 파일 전송을 위한 프로토콜을 개발.
        • 복호화 프로그램 단일 프로세스화와 윈도우 콘텍스트
          • 파일을 오른쪽 클릭했을 때 바로 복호화 프로그램으로 연결하고 싶었음.
          • 윈도우 콘텍스트라는 키워드를 모르던 상태
          • 교수님께 자문을 구했고, 보안 솔루션을 개발하는 NSHC 소속의 개발자를 소개 시켜주심.
          • 학교는 화성이었지만, 열심히 의왕까지가서 그 것이 윈도우콘텍스트라 불림을 알게됨.
          • 또한 뮤텍스를 활용해, 단일 프로세스화가 가능함을 배움.
        좋아요 0
          댓글 0

          스마트 FOD CAR 통제시스템 콘솔(시연용)

          공군에 제안한 작전 개선안을 시연하기 위해 만든 프로그램입니다. 관리 콘솔과 가상차량 프로그램으로 구성되어 있고, TCP를 기반으로 설계한 애플리케이션 계층 프로토콜을 통해 통신합니다. 실시간으로 이벤트와 트랩을 주고 받기 위해 P2P방식으로 통신되게 구현하였고, 콘솔과 차량을 위한 통신 프로토콜과, 차량 간의 통신을 위한 프로토콜이 별도로 존재합니다.

          개요

          구분

          팀프로젝트 (2018 공군 창의 혁신 아이디어 공모 해커톤)

          개발인원

          1명 (시연 통제시스템 콘솔 개발 1) ( 그 외 시연 차량 엔지니어 1, 프로젝트 타이틀과 맞지 않아 제외)

          프로젝트 개발 기간

          18.7(2일)

          성과

          2018 창의 혁신 아이디어 공모 해커톤 최우수상 수상

          프로젝트 사용 스택

          Python

          기능

          • 관리 차량 프로그램 전체 상태 간략 확인
          • 관리 차량 프로그램 상태 세부 확인
          • 관리 차량 프로그램 제어
          • 관리 차량 프로그램 위치 값 확인
          • 관리 차량 프로그램 위치 값 제어
          • 관리 콘솔과 관리 차량 프로그램 간 통신
          • 관리 차량 프로그램 간 통신

          견본

          시연 영상 링크

          사진

          image.png

          개발 배경

          • “FOD”란 활주로 위에 있는 볼트와 같은 이물질로 인해 생기는 항공기 결함.
          • "FOD 제거 작전"은 이를 줄이기 위해 주기적으로 부대 내 모든 장병이 활주로로 나가 대열을 이뤄 활주로 바닥의 이물질을 수거하는 작업
          • 공군 비행단에선 정기적으로 “FOD제거 작전”을 실시
          • 이 작업은 시간 소모, 인력 소모가 매우 큼
          • 이를 개선하고자 공군 TDD-LTE 망을 활용해 상호 통신하고 딥러닝 기술로 만들어진 모델로 이물질을 판단하며 플래투닝 자율 주행을 하는 스마트 FOD 차량 솔루션을 기획.
          • 이를 위한 시연품 개발이 필요

          개발 과정

          • 군 복무 중이었으므로 장비 활용이 자유롭지 못함. 특히 통신 기능을 갖춘 모듈은 사용할 수 없었음.
          • 기존에는 아두이노와 그외 키트를 활용하여 시연 차량 3대를 만들고, 관리 콘솔을 만들어 통신할 계획이었으나 무산.
          • 차량의 통신기능을 빼고 별도로 제작하고, 콘솔을 위해 가상차량 프로그램을 만들어 시연하기로 계획.
          • 가상 차량 프로그램은 기존 차량과 같은 상태를 가진 통신 프로그램.
          • 콘솔을 이 가상 프로그램과 통신 시켜 시연.
          좋아요 0
            댓글 0
            2019년 11월 21일 11시51분 ·  AMPU
            좋아요 0
              댓글 0
              2019년 11월 21일 11시30분 ·  Loopang

              루팡 (스마트폰 루프스테이션 어플리케이션)

              구분

              팀프로젝트 (2019 한이음)

              개발인원

              4명 (개발자 4, 그중 2명 UI 디자인 겸업)

              프로젝트 개발 기간

              19.7 ~ 19.11(5개월)

              성과

              2019 한이음공모전 한국정보산업연합회장 상

              깃헙 주소

              https://github.com/injae/Loopang

              프로젝트 사용 스택

              • Kotlin(안드로이드, 클라이언트)
              • RxAndroid(클라이언트,UI)
              • Kotlin coroutine library(클라이언트, UI, 비지니스로직)
              • Figma (클라이언트, UI, 프로토타입제작)
              • Retrofit(클라이언트, 통신)
              • okHttp API(클라이언트, 통신)
              • Docker(서버)
              • Python(서버)
              • Flask(서버)
              • JWT(서버, 세션관리),
              • PostgreSQL, SQLAlchemy(DB, ORM)
              • GitHub, GitLab(버전관리)

              기능

              • 모바일 디바이스 만으로 루프스테이션을 활용한 음악 창작 방식을 그대로 재현하여 즉흥적으로 반주를 창작할 수 있습니다.
              • 기존 녹음된 소리 위에 새로운 소리를 녹음하여 반주를 만들 수 있습니다.
              • 점점 쌓이며 녹음되는 음원소스들을 레이어라고 부르는데, 이펙터라는 특수한 효과 모듈을 사용하여 레이어의 톤을 조정할 수 있습니다.
              • 창작된 반주를 바탕으로, 반주를 조작하거나 보컬을 추가하여 하나의 곡을 만들 수 있습니다.
              • 녹음 시 화이트노이즈를 제거하여 음질을 개선할 수 있습니다.
              • 녹음 시 메트로놈 기능을 지원합니다.
              • 제스처 기반 UI, UX를 제공합니다.
              • 자신의 음원소스를 타인과 공유할 수 있습니다.
              • Feed에서 최신소스, Like top 5 리스트를 볼 수 있습니다

                견본 이미지

                image.png

                시연 영상 링크

              • https://www.youtube.com/watch?v=Tu0eyBPZUZg

                참여

                역활

              • 클라이언트개발
                • 루프스테이션 로직 개발 및 리팩토링 (
                • 최종믹싱 UI와 비즈니스 로직 연결 부분 개발 (이펙터 연결, 볼륨조절, 바이트 길이 시간 변환 등)
              • UI개발
                • 로그인 및 회원가입
                • 루프스테이션 UI ( 제스처 구현, 녹음, 메트로놈, Realtime Sound Visualizer, Sound Visualizer 등)
                • 프로젝트 매니저 UI ( 메인 View, 사운드 프리뷰, 그 외 다이얼로그 등)
                • 최종 믹서 UI ( 메인 View, 애니메이션을 이용한 뷰 크기 지속 변환 등)
                  • 그 외 유틸리티 ( 증폭 값 배열 변환 로직, 프로젝트 중복체크 로직 등)
              • UI 디자인
                • 스플래시, 로그인 및 회원가입 UI
                • 루프 스테이션 메인 UI
                • 프로젝트 매니저 UI
                • 최종 믹싱 UI

              내가 사용한 기술

              • Kotlin(안드로이드, 클라이언트)
              • Kotlin coroutine library(클라이언트, UI, 비지니스로직)
              • Figma (클라이언트, UI, 프로토타입제작)
              • PCM Data에 관한 기본 지식(SampleRate, BitRate 등)

              문제 해결 과정

              1. 프로젝트 관리 측면
              • 초기, 각 구성원의 코드를 하나로 취합하기 어려움을 느낌
              • Github를 사용하여 협업하는 방법을 익혀 해결
              • 각자 맡은 파트의 진행상황을 상시 파악할 수 있게 되었고, 빠르게 코드 리뷰를 할 수 있게 되었음.
              1. UI 프로토타입
              • 프로젝트 초기에 UI의 프로토타입을 종이나 칠판에 그려서 개발하였음.
              • 깔끔하게 그리는데 시간이 오래 걸렸고, 미술능력을 부모님께 상속받지 못해 알아볼 수 가없었음.
              • Figma 라는 프로토타입 솔루션을 알게되어, 기본적인 사용방법과 추출, 트리거 기능에 대해 공부함
              • UI/UX 설계 사항을 더 자세히 전달할 수 있게 됨.
              1. 녹음 상황 실시간 Visualizing
              • Android에서 제공하는 Waveform은 기본 제공 녹음 라이브러리에 특화되어 있어 프로젝트에 적용하기 무리가 있음.
              • 직접 만든 모듈에 적용하기 위해 OpenSource API를 확인하였지만, 모두 목적에 부합하지 않음
              • Custom View 제작 필요성을 느낌.
              • 적용한 해결방안1 : 팀원들의 코드를 모두 분석 및 음원소스가 어떤 형태로 저장되는지 파악
              • 적용한 해결방안2 : 증폭값을 View에 맞게 계산해내는 알고리즘 작성 및 언제나 View에 녹음된 데이터 시각화
              • 적용한 해결방안3 : Custom View에 대한 별도의 공부로 원하는 스타일의 파형을 그려 Realtime Visualizing 문제 해결
              1. 작업파일 로딩 문제
              • 각자 다른 영역에 있는 프로젝트뷰어와 프로젝트 창 간에 데이터 송수신 문제 발생

              • 적용한 해결방안 : 송수신 작업을 추상화 하여 인터페이스를 두어 액티비티 전달

              1. 리스트 뷰 어댑터의 뷰 재활용 문제
              • 리스트뷰는 아이템의 개수에 맞춰 모든 뷰를 생산하지 않고 몇개의 아이템 뷰를 만들어 재활용하는 방식
              • 적용한 해결방안 : 리스트뷰에 ViewHolder 패턴을 도입하여 문제 해결
              1. 일정한 속도로 크기가 변화하는 뷰
              • 별도의 스레드를 사용하여 레이아웃파라미터를 변경하는 것은 관리가 몹시 어려움.
              • UI Thread 동작 방식으로 인해 변경에 대한 결과 반영이 즉시 되지 않는다는 문제점을 가짐.
              • 변화 값을 단순 정수로 관리하기엔 값들이 소스 등지에 산재하게 되어 관리가 어려움
              • 각 시간 단위마다 비례식을 계산하여 변환하기 위한 함수의 필요성이 느껴짐
              • 적용된 해결 방안 1: 시간 대비 픽셀 크기를 나타내는 클래스를 별도 제작하고 메소드로 변환식을 구현.
              • 적용된 해결방안 2: 애니메이션에 대해 공부하여, 무한 반복되는 애니메이션을 적용
              1. 지속적으로 크기가 변환되는 뷰를 아이템으로 가지는 리스트뷰 문제
              • 리스트뷰는 아이템의 개수에 맞춰 모든 뷰를 생산하지 않고 몇개의 아이템 뷰를 만들어 재활용하는 방식.
              • 아이템이 되는 뷰의 크기가 계속하여 업데이트 되는 중 교체되므로 널 포인터 문제가 발생함.
              • 갱신될 때 마다 뷰를 새로 만들게 되면 오버헤드가 증가
              • 적용된 해결 방안 : 리스트뷰를 리니어뷰로 교체, 리스트뷰와 같은 기능을 갖도록 별도의 함수를 추가 제작하여 문제 해결.
              좋아요 0
                댓글 0