FEST mini?
연 1회 진행되던 CAMPUS FEST를 학생분들과 더 자주 소통할 수 있도록 올해부터 연 2회로 진행됩니다.
여름에 진행되는 FEST mini는 자유주제 없이 지정주제로 진행됩니다.
참가안내 및 주요일정
대상
오픈소스 SW개발에 관심이 있는 대학(원)생 * 전공&학년 무관/휴학생 참여가능, 기졸업자 불가
3명 이하로 이루어진 팀 단위(1인 참여가능)
주제
1. 타임라인 만들기 상세보기 내 근황을 작성하고 원하는 친구 소식을 받아보기
[필수 구현 사항]
- 로그인, 친구 맺기, 내 소식 저장, 친구 소식 리스트 뷰(타임라인)
[구현 시 우대 사항]
- 친구 목록이나 친구 소식을 빠르게 가져오는데 유리한 데이터 구조
- 성능이나 안전성에 대한 고려
[심사 기준]
- 기능 동작의 완성
- 유지 보수가 쉬운 코드
- 친구가 많아졌을 때 타임라인 로딩 속도나 새 소식 전달 속도
[참고 자료]
- 피드 : 페이스북 모바일 첫 페이지 (내소식 작성 및 친구 소식 리스트 뷰, 좋아요/덧글 등 소식 이외의 기능은 제외)
- 친구 : 인스타 친구 검색 탭 (친구 찾기, 친구 추천)
[필요 기술]
- Java, Spring, dbms(or nosql)
2. Distribute in-memory key-value store 만들기 상세보기 Distributed System을 구성하는데 필요한 지식들을 습득하고 각각의 trade-off를 비교하며 시스템을 설계해보기
[필수 구현 사항]
- standalone in-memory kv store의 OOD
- kv store의 최소한의 프로토콜 정의 (get, set, delete...), CLI로 시작해도 좋으나 networking을 지원
[구현 시 우대 사항]
- value type이 collection인 entry 지원(list, hashmap 등) 많을수록 좋음 (easy)
- entry에 TTL 지원 (medium)
- primitive key-value entry에 대해 concurrent operation 지원 (test and set) (medium)
- persistent 지원 (medium)
- multithreaded 모델로 변경 시도 (redis는 싱글 스레드), 같은 키에 대해서는 serializability 지원 (medium~hard)
- distributed로 확장, fail-over 고려 (hard)
[심사 기준]
- 각 클래스가 객체지향 원칙에 따라서 잘 설계되어있는가?
- 필수 사항을 만족하는가?
- 우대 사항을 만족하는가? (각각 난이도에 따른 점수 부여, 설계에 따른 점수 부여)
- trade-off를 고려하는 과정에 대한 문서
- 완성된 시스템의 performance test 문서 (테스트 전에 용량 산정도 하면 추가 점수, cpu, mem, network io, r/w ops에 대해서)
[참고 자료]
- https://redis.io
3. JavaScript Utility Library 개발 상세보기 lodash, underscore와 같은 Vanilla JS에서 지원하지 않는 유용한 기능들을 제공하는 library 개발
[필수 구현 사항]
- 기존 lodash, underscore에서 제공하는 function은 금지(단 input, output을 변형하여 기능은 개선한 것은 가능)
- docs를 제공하는 최소 10개 이상의 function을 제공할 것
- webpack, parcel 등의 bundler를 활용해 임의의 function만 bundle로 만들 수 있는 기능 제공
- GIT 필수 사용
[구현 시 우대 사항]
- REST API or GUI로 필요로 하는 function 선택 후 dynamic 하게 bundle 생성 기능 제공
- test case 작성
[심사 기준]
- bundle size, code quality & performance
- 구현한 기능들이 얼마나 유용한지?
- bundler 접근 방법
- Document 가 얼마나 개발자 친화적인가?
[참고 자료]
- https://lodash.com/
4. React Native 기반의 여행 일지 상세보기 react native를 활용해 여행 일지 기록용 앱을 개발해보기
[필수 구현 사항]
- image meta data(생성일, 위도 경도) 활용
- naver maps API or google maps API를 활용하여 방문지 경로 제공
- 오픈된 관광지 데이터를 DB에 저장, 위경도 기반의 관광지 정보 제공
- GIT 필수 사용
[구현 시 우대 사항]
- open api를 사용해 네아로(네이버 아이디로 로그인) 연동
- networking 기능 제공
- custom UI component 개발
[심사 기준]
- code quality
- DB 설계&활용 능력
- idea를 구상하고 실제로 설계 & 개발해가는 과정
- (2인 이상인 경우) Teamwork
[참고 자료]
- https://facebook.github.io/react-native/
5. 게임 미니맵 리플레이(replay) 모듈 상세보기 게임사로부터 제공받은 다양한 형태의 게임 api를 일정한 포맷으로 컨버팅만 하고 submit을 해주면, Replay가 가능한 미니맵을 내려주는 web application 구현
이 모듈을 사용하는 사용자는, 데이터를 정해진 형태로 컨버팅해서 제출하는 부분만 구현하면 됨 FAQ 보기
[필수 구현 사항]
- springboot(or node), 프런트는 원하는 템플릿 엔진이나 프레임워크로 (react, vue 등등)
- 2d 또는 3d webgl library
- 모듈 만든 것으로 LoL이나 배틀그라운드 등의 esports를 replay 하는 simulation 기능
- 배경 설정, 플레이어(오브젝트들)의 이동, 오브젝트상 플레이어 표시(챔피언 이미지, 선수 아이디 등등)
[구현 시 우대 사항]
- 모듈 사용 설명서(swagger 등)
- Additional UI 기능, bgm 기능.
- (2인 이상인 경우) 작업자들 간 git commit 내용과 업무 분리
[심사 기준]
- 구현 필수 사항을 구현했는지
- 사용자와 모듈 간 기본적인 Http 프로토콜(에러시 응답 코드, 요청 등등)
- 사용자가 잘못된 데이터 제출했을 때 Error 로깅으로 빠르게 알 수 있도록.
- 게임의 미니맵을 리플레이로 보는 느낌을 맞춰 구현했는지
- 기본적인 code quality (네이밍, 분리, 통합 등등)
[필수 구현 사항]
- 컨텐츠는 RSS를 사용하여 데이터 모델링 (RSS 는 어떤 것을 구독하여도 무방. 단, 이미지, 텍스트, 영상이 포함된 RSS 활용 권장)
- 컨텐츠 노출을 위한 Slide View 및 Live Animation 구현
- 구독한 RSS는 슬라이더로 구성되며, RSS 구독 개수에 따라 피드 형태로 제공
- 슬라이더 자동 재생
- 텍스트 검색으로 슬라이드/피드 재구성
[구현 시 우대 사항]
- 검색 기능 확장 : 이미지, 영상 내의 객체/위치 등의 정보를 추출하여 검색 결과 반영
- 필터 적용
- 슬라이드 엔드 화면 구성
- 리치한 애니메이션 구현 및 최적화
[심사 기준]
- 구현 필수사항 기능 완성도
- 코드 품질
- 성능 최적화 (속도, 메모리 등)
- 우대사항에 대한 구현 수준
- 프로젝트 관리
[참고 자료]
- 구글 뉴스 앱 헤드라인
7. 시네마그래프 콘텐츠를 만들 수 있는 iOS 앱 만들기 상세보기 사진 전문가가 아니더라도 손쉽게 시네마 그래프 콘텐츠를 만들 수 있는 앱 제작해보기
[필수 구현 사항]
- 사용자가 시네마 그래프(사진, 혹은 영상)을 촬영하고, 생성한 미디어 파일을 볼 수 있는 기능이 포함되어야 함
- 시네마 그래프 콘텐츠 촬영 기능
- 촬영된 시네마 그래프에서 움직이는 영역을 선택할 수 있는 가능
- 생성된 시네마 그래프 콘텐츠를 볼 수 있는 기능
[구현 시 우대 사항]
- 높은 해상도, 높은 FPS 지원하는 결과물 : 생성된 시네마 그래프 결과물이 높은 해상도, 높은 FPS를 지원 할수록 좋습니다. 단, 메모리 사용량은 일반적인 앱의 허용치를 넘지 않아야 합니다.
- 생성된 시네마 그래프 미디어 파일을 export 하는 기능 : 어떠한 미디어 파일 포으로든 만들어진 결과물을 앱 외부로 공유(사진 앱 저장, 공유 기능 등) 하는 기능이 포함되어 있으면 좋습니다.
- 시네마 그래프 촬영 시 손떨림 방지 기능 : 시네마 그래프 촬영 시 소프트웨어적인 손떨림 방지 기능이 포함되면 좋습니다.
- 별도 라이브러리 배포 : 하나의 앱에만 특화된 기능을 만드는 것보다, 시네마 그래프 촬영 기능을 사용하는 다른 앱에서도 쉽게 사용할 수 있는 라이브러리 형태로 제작하면 좋습니다.
- distributed로 확장, fail-over 고려 (hard)
[심사 기준]
- 구현 필수사항 기능 완성도
- 코드 품질
- 성능 최적화 (속도, 메모리 등)
- 우대사항에 대한 구현 수준
- 프로젝트 관리
[참고 자료]
- 앱 스토어(cinemagraph pro)
- Cinema Graph(wiki)
8. 키보드 입력을 통해 List UI 이동 컴포넌트 제작 상세보기 빅스크린(예. 스마트TV)에서 키보드 입력을 통해 List UI를 선택적으로 동작되는 인터렉션 컴포넌트 구현
다양한 요구 사항에 맞춰 하나의 컴포넌트로 제공
[심사 기준]
- 위 필수 사항의 두 가지 type (A/B) 동작 여부
- A/B type의 초기화 기준
- 유동적인 브라우저 사이즈 대응
- 컴포넌트의 인터페이스를 함께 고려했는지 여부
- 컨텐츠 이동 또는 선택영역 이동 시 환경에 따른 GPU 가속 이용 여부
[참고 자료]
- 스마트 TV 유튜브 / 넷플릭스
9. 초대형 모니터에 적합한 기사 배열 만들기 상세보기 기사 컨텐츠의 배열을 최적화하여 아름답고, 편하게 기사를 소비할 수 있는 웹 서비스를 개발
다양한 요구 사항에 맞춰 하나의 컴포넌트로 제공
[필수 구현 사항]
- 화면에 보여줄 컨텐츠를 매일 특정 웹 영역을 통해 수집 저장
- 웹서버 환경에서 기사를 볼 수 있도록 구현
- HD, FHD, QHD, UHD 등 해상도에 제한 없이 컨텐츠가 배열되어야 함
- 기사 제목, 언론사, 시간, 이미지, 본문 내용 표시
- 기사의 우선순위에 따라 제목 크기, 기사의 배치 알고리즘에 고려
- 가능하면 한 화면의 범위에서 모든 컨텐츠를 표시해야 하지만, 해상도가 작아 기사 하나도 표시하기 힘든 기기의 경우는 스크롤 표현 가능
[구현 시 우대 사항]
- Pad, Mobile에서 화면 회전에 따라 Layout이 반응형으로 재배열
- 자연스러운 넘김 효과 개발
- 대량 사용자의 사용을 고려하여 서버 구현
- 광고가 들어갈 수 있는 영역을 고려하며 개발
- 기사의 우선순위에 따라 제목 크기, 기사의 배치 고려
- Javascript를 다른 프로젝트에서 사용할 수 있는 Library 형태로 구현
[심사 기준]
- 필수 사항을 만족하는가?
- 가독성 있는 형태로 기사 배열이 되었는가?
- 사용성(페이지 넘김, 반응 속도 등)에 불편함이 없는가?
- 다양한 기기, 브라우저에서 호환성을 고려했는가?
- 우대 사항을 구현에 따른 점수 추가 부여.
- 과제 결과물의 문서화 ( 설계, 코드 활용 방법, 주석 등 )는 충실한가?