Layover는 5초에서 60초의 짧은 영상을 위치기반으로 기록하고 공유하는 플랫폼입니다.
유저들은 지구를 여행하는 여행자가 되어 자신의 여정을 간편하고 직관적인 방식으로 기록하고,
다양한 장소들의 대한 영상을 다른 유저들과 공유하고, 감상할 수 있습니다.
어디서든 간편하게 Layover를 통해 방문의 순간, 기억을 지도에 기록하고, 다양한 경험을 나눌 수 있습니다.
당신의 여정을 Layover에 쌓아가보세요!
그라운드 룰 | 기획/디자인 | 템플릿 | 회의록 | 개발일지 |
---|---|---|---|---|
⛳️ 그라운드 룰 | 🎨 디자인 | 🔭 템플릿 | 📝 회의록 | 🛠️ DevLog |
🍎 김인환 | 🍎 안유경 | 🍎 황지웅 | 🌐 박지환 | 🌐 백종인 |
---|---|---|---|---|
@loinsir | @anyukyung | @chopmozzi | @hw-ani | @whipbaek |
환1에요,,ㅎ | 콩이에요,,ㅎ | 웅이에요,,ㅎ | 환2에요,,,,,,ㅎ | 몰?루 |
Write Reasonable Code! 이유 있는 코드를 작성하기 |
🏊♂️ DEEP DIVE 함께 성장하기 재밌게 하기 꼼꼼한 코드리뷰 |
🐢 기본에 충실한 서드 파티에 의존하지 않기 Swift를 이용한 기술 도전 많이 하기 |
과정을 즐기기 열린 자세로 학습 |
영향을 주는 사람 되기 🎱 |
홈에서 랜덤한 영상을 탐색하고, 원하는 영상을 골라 재생할 수 있습니다.
![](https://private-user-images.githubusercontent.com/46420281/290047628-2b69de8c-a6b6-45fe-94db-5c0f0da3795d.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc2MjgtMmI2OWRlOGMtYTZiNi00NWZlLTk0ZGItNWMwZjBkYTM3OTVkLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMxOGE4N2RkMmQyNjRjMGU3NWJkM2MzYzJjNjE4NDY0YTdjNzRlOGQzZTk2ZDdkNmQ4ZjA5NjJlOTllNTUwMTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yDjLjCAAb9d8EiTIm5d0XPKJwoPEPt1Ztn3Z9Kljd3Q)
![](https://private-user-images.githubusercontent.com/46420281/290047652-ff21462b-6cc3-4d0d-be8d-e776167ca3f3.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc2NTItZmYyMTQ2MmItNmNjMy00ZDBkLWJlOGQtZTc3NjE2N2NhM2YzLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAyNjNmZWFjZWUyNTE2ZDE0NTZmZTgyZjAyZWY0ZWE5NzU0NjdiNWZjMjgyYjZjNjhjYWU3ZmQwNjg3OTJhMTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.oOvvJQrWhrMLKunhMakEPUmCcHdPNxqAycHXFX9_ky0)
지도에서 원하는 지역의 영상을 탐색하고, 원하는 영상을 골라 재생할 수 있습니다.
![](https://private-user-images.githubusercontent.com/46420281/290047698-38d6ef0e-2d45-4a6d-9c20-90dd2811c1ee.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc2OTgtMzhkNmVmMGUtMmQ0NS00YTZkLTljMjAtOTBkZDI4MTFjMWVlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRmOWIwZjVkNGIxZGE0OTVhMzRiYTI5N2VmNDM1MDc1M2Q3MjBiMDU0N2ZjMTE4MjdkYWE2Y2QzNDA2NjcxZDkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.kODt8lJzCHJmxgSKFuxT8P4wEY7h5uhHHNcvkYs0UhM)
현재 위치를 기반으로, 간단한 편집 기능과 함께 영상을 업로드 할 수 있습니다.
![](https://private-user-images.githubusercontent.com/46420281/290047935-ab1913b8-9eae-4f14-a52e-e6b587eb0d6f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc5MzUtYWIxOTEzYjgtOWVhZS00ZjE0LWE1MmUtZTZiNTg3ZWIwZDZmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE3ZjQ0NjlkOWEyNDdiNmQzMTRkMjA5NzllNmRiMTcwODUyMzY5NTI5NmJmZGVjMWFlOWU3YTY0YjBhNGJiZGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4rI0tLM_vT-T-Vok2EdK7btKl0qKPVtV1Oj5AO0WoRc)
![](https://private-user-images.githubusercontent.com/46420281/290047962-cb7fbd48-3009-4a24-bc1f-a47a22b3dcfd.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc5NjItY2I3ZmJkNDgtMzAwOS00YTI0LWJjMWYtYTQ3YTIyYjNkY2ZkLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE5Y2I5NTQwYjE4M2RlMjZjNjExNzJkNGZiOTNkOTkxNGExMzJmM2E5OGIzZWZkZmE3NzhmZjMxNjNiNGY0ZjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4pNdIiIq0xmI6C3DakgdaHrcT1rFBgb3fHOh0Y2_eb4)
프로필에서 내가 업로드한 영상의 목록을 확인하고 재생할 수 있습니다.
![](https://private-user-images.githubusercontent.com/46420281/290047781-712f2e27-2ed2-4599-b303-cf1b834c6190.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTAwNDc3ODEtNzEyZjJlMjctMmVkMi00NTk5LWIzMDMtY2YxYjgzNGM2MTkwLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkyZDBkODkxZTk4ZDRmZDQ2YWRhNTkyOGQ4Mzk3N2QxNDMxZjMxZmMyYTg4YjAwMzQ4OWFkZmE3YTAzZmIyZTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.MJ1Uf1DJG8S9doLja98W5uyeEDYijaC3QM1vDGQSc10)
- ABR(Adaptive Bitrate Streaming)를 통해 네트워크, CPU Capacity 상태에 따라 동적으로 화질을 변경하여 최적의 영상 품질을 제공합니다.
- iOS에서 지원하는 유일한 스트리밍 프로토콜 입니다.
서버 부하 감소
: Client -> Storage 직접 업로드, 서버의 부하 감소 및 업로드 속도 향상구현 단순화
: 단순히 URL을 통하여 업로드 함으로써 iOS, 서버 양쪽의 구현 단순화
- ABR 스트리밍을 위하여 다양한 화질로 인코딩 (SD/HD/FHD) 및 스트리밍
- Serverless 서비스 Cloud Function 을 통한 인코딩 자동화 및 콜백 업데이트
- JSON Web Token 으로 사용자 인증 진행
- Redis로 각 토큰의 whitelist/blacklist를 운영하여 JWT 보안 허점 보완
- 서버에서 로그 저장 및
Cloud Log Analytics
서비스를 활용한 로그 수집 - Discord Bot 을 적극적으로 활용한 빠른 에러대처
cadvisor + prometheus + grfana
을 활용한 서버 모니터링
![image](https://private-user-images.githubusercontent.com/46420281/290564532-5c0b181f-4e4f-4bc0-9ebc-c49e959a4538.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwODA3NzMsIm5iZiI6MTc0MDA4MDQ3MywicGF0aCI6Ii80NjQyMDI4MS8yOTA1NjQ1MzItNWMwYjE4MWYtNGU0Zi00YmMwLTllYmMtYzQ5ZTk1OWE0NTM4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDE5NDExM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEwOWU0OTMwMDA5Yjg3ZjQxODNmMTE2YWIzZDdmNzI4NDJkOWE0YTNhNTVmNGE5NzkxMmI1NDc1YWRjYjI0NDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Zy5KmL53Zvv4iBwRVbB-gz-ppsSaqHng-WJYXzYz-GY)
제목 | Topic |
---|---|
CleanSwift에 대하여 | 아키텍처 |
코드폭격기 팀에서 적용한 iOS CI | CI/CD |
앱에서 영상을 재생하기까지의 과정 | AVFoundation |
디자인 시스템 만들면서 기록하기 | UI |
AVPlayerLayer를 이용해 영상을 재생할 수 있는 PlayerView 구성 | AVFoundation |
네트워크 통신없이 테스트하기 - URLProtocol | URLSession |
영상 업로드 화면을 만들어보쟈 | AVFoundation |
제목은 좌충우돌 테스트코드 작성기로 하겠습니다. 그런데 Test Double을 곁들인… | XCTest |
MapView의 annotation selection 이슈 | MapKit |
테플 올리는거 그냥 과정 정리해보기 | TestFlight |
영상을 재생시키면서 생긴 문제 | AVFoundation |
UICollectionView로 무한 스크롤 만들기 | UIKit |
제목 | Topic |
---|---|
Tech Stack 선정 및 이유 | 아키텍처 |
카카오/애플 OAuth | OAuth |
HTTPS 설정 | HTTPS |
Custom Response 와 ts-jenum | Response |
NestJS + Jest 테스트코드 작성 | Test |
게시물 Pagination | Pagination |
HTTP Request Header에 대한 Pipe 구현하기 | @Pipe |
VOD Station이란? 설정방법 | Video |
클라이언트 업로드를 위한 presigned-URL 발급 | Video |
Serverless 서비스 Cloud Function을 활용한 자동화 | Video |
Jenkins Pipeline 을 활용한 CI/CD 대작전 | CI/CD |
NestJS Circular Dependency 문제.. | NestJS |
🎈DB에 이모지를 저장할 줄 몰랐지.. | DB |
log 남기기 대작전 | log |
더 많은 내용은?? -> Team 코드폭격기 Wiki