'sync(싱크)'는 '동시에 이뤄지는', '조화를 이루는' 의 뜻을 가진 synchronization 단어의 약자입니다.
한국인 대학생과 외국인 유학생의 네트워킹으로 싱크를 맞출 수 있도록 하고자 서비스명으로 선정했습니다.
싱크는 유형과 관심사에 따라 모임을 자유롭게 개설 및 참여하고, 커뮤니티를 통해 한국 생활 정보를 공유하는 한국인 대학생 - 외국인 유학생 네트워킹 서비스입니다.
분야 | 이름 | 포지션 |
---|---|---|
기획 | 김예은 | 📢 프로젝트 매니징, 서비스 기획 - 서비스 정책 확립, 비즈니스 모델 구축 |
기획 | 김서윤 | 📊서비스 기획 - 유저 리서치, 와이어프레임 작성, UX writing |
기획 | 이장미 | 📋 서비스 기획 - 서비스 정책 확립, 비즈니스 모델 구축 |
디자인 | 이재영 | 🖌 디자인 리드, 디자인 컨셉 선정, GUI 디자인, 아이템포스터 제작 |
디자인 | 김은홍 | 🎨 무드보드 선정, 디자인시스템 구축, GUI 디자인, 아이템 간단 소개 이미지 제작 |
개발 | 양규리 | 🔦 개발 리드, AOS 화면 UI 구현, 서버 연동 |
개발 | 박시윤 | 📱 AOS 화면 UI 구현, 서버 연동 |
개발 | 정유영 | 💻 DB 및 API 구축, 서버 배포 |
개발 | 배현서 | 🖥️ DB 및 API 구축, 서버 배포 |
- 한국인 대학생과 외국인 유학생은 국제 교류 프로그램의 고정된 시간과 활동으로 인해 쉽게 친해지지 못합니다.
또한, 외국인 유학생은 한국 생활에 대한 정보를 얻는데 어려움을 느끼고 있습니다. - 따라서 싱크는 한국인 대학생-외국인 유학생에게 유형과 관심사에 따라 모임을 자유롭게 개설 및 참여하고,
한국 생활 정보를 공유할 수 있는 공간을 제공하고자 합니다.
[외국인 유학생의 증가]
2015년 정부가 ‘유학생 유치 확대 방안’을 발표하며, 외국인 유학생 수가 2015년부터 2022년 사이에 2배 가량 증가했다고 밝혔습니다.
▲ 국내 외국인 유학생 현황에 대한 그래프
[언어장벽에서 시작된 유학생들의 대학 적응의 어려움]
외국인 유학생이 대학 수준의 수업을 수강하고, 커뮤니케이션이 가능하도록 하기 위해서는 한국어 고급 수준에 해당하는 토픽 5급 이상의 등급 필요하지만, 대다수는 5급 이상을 취득하지 못한 채 한국에 오고 있습니다. 이로 인해 한국인 학생들은 한국인 학생들끼리, 유학생은 유학생들끼리 무리를 지어 다니게 되고 외국인 유학생들이 다수의 한국인 학생과 떨어져 뭉치게 되는 '유학생 게토(Ghetto)화 현상이 발생하고 있습니다.
[국제 교류 프로그램의 문제점]
현재 국내의 대학교는 다양한 국제 교류 프로그램을 운영하고 있습니다. 하지만 국제 교류 프로그램은 다음과 같은 3가지 문제점을 가지고 있습니다.
- 프로그램에 참여할 수 있는 인원이 한정되어 있음
- 고정된 스케줄 및 활동으로 인해 참여 활동과 시간을 자율적으로 선택할 수 없음
- 언어 수준만을 고려한 매칭으로 인해 성향 및 관심사가 맞지 않는 사람과 교류하는 경우 발생
이러한 문제점으로 인해 한국인 대학생과 외국인 유학생은 국제 교류 프로그램을 통해 ‘지속적인 네트워킹이 어렵다’ 는 페인포인트를 갖고 있습니다.
한국인 대학생과 외국인 유학생 각각의 페인포인트와 니즈를 파악하기 위해 한국인 대학생을 대상으로 설문조사를, 외국인 유학생을 대상으로 심층 인터뷰를 진행했습니다.
[국제 교류 프로그램에 대해 알고 있고, 실제로 참여하고 있을까?]
약 61.3%의 학생들이 국제 교류 프로그램이 존재한다는 점은 알고 있으나, 세부적인 정보는 인지하지 못하고 있음을 알게 되었습니다. 이에 따라 버디 프로그램이나 튜터링 같은 외국인과의 네트워킹 프로그램을 약 79%가 참여해본 경험이 없다는 답변을 받을 수 있었습니다.
[프로그램에 참여했던 학생들에게 아쉬웠던 점은 없을까?]
국제 교류 프로그램에 참여했던 학생들에게도, 여전히 아쉬운 점은 존재했습니다. 대다수의 학생들이 언어 장벽과 대화 주제 선정의 어려움으로 인해 외국인과 교류할 수 있음에도 친해지기 어렵다고 답했습니다.
“외국인과 교류하는 프로그램인데도 불구하고, 외국인 친구와 친해지기 어려워요” - 51.5%
“외국어로 소통하기 어려워요” - 39.4%
“외국인 친구와 어떤 주제로 대화를 해야 할 지 모르겠어요” - 33.3%
한국에서 교환학생, 대학원생으로 거주하고 있는 프랑스, 아일랜드, 스페인, 중국인 유학생 7명에게 한국 생활 적응에 대한 어려운 점과 국제 교류 프로그램 참여 여부에 대해 질문한 결과, 다음과 같은 페인포인트와 니즈를 도출할 수 있었습니다.
분류 | 페인포인트 | 니즈 |
---|---|---|
정보 관련 | - 한국에서 어떤 곳이 살기에 적당한지, 어디로 여행 가면 좋을지 찾기 어려워요 - 한국에 오자마자 해야 되는 행정 업무를 처리할 때 언어가 통하지 않아 처리하는데 불편해요 |
한국에서 방 구하기, 행정 업무와 같은 정보에 대한 궁금증을 해소하는 것 |
네트워킹 관련 | - 국제 프로그램은 정해진 시간대와 프로그램의 콘텐츠가 이미 정해져 있어 참여하기 부담스러워요 - 프로그램을 하는 동안엔 연락하다가, 사적으로 서로 할 얘기가 없어져서 지금은 끊겼어요 - 이미 한국인 친구들끼리 친해져 있어서 먼저 말 걸기 어려워요 |
유연한 시간대와 콘텐츠로 한국인 친구와 지속적인 네트워킹을 하는 것 |
한국인 대학생은 국제 교류 프로그램에 대해 구체적으로 알지 못하고 참여했더라도 어떤 주제로 대화를 이어나가야 할지 몰라 외국인 친구와 네트워킹하기 어렵다는 점을,
외국인 유학생은 한국 생활에 대한 궁금증을 해소하고 유연한 시간대와 콘텐츠로 한국인 친구와 네트워킹을 하고 싶다는 것을 알게 되었습니다.
에잇취 팀은 정량리서치와 정성리서치에서 도출한 인사이트를 통해 한국인 대학생과 외국인 유학생이 국제 교류 프로그램에 참여하기 어렵고, 참여 후에도 지속적인 네트워킹에 어려움을 겪고 있다는 문제 상황을 발견했습니다.
따라서 관심사 및 성향을 기반으로 한 모임 서비스를 통해 문제 상황을 해결하고자 합니다.
1️⃣ 관심사, 성향, 위치를 고려하여 모임을 맞춤 추천하고 자신이 원하는 모임을 직접 개설하고 참여할 수 있습니다.
2️⃣ 한국 생활에 대한 정보와 질문을 공유할 수 있는 커뮤니티를 통해 빠르게 궁금증을 해결하고 유용한 정보를 얻을 수 있습니다.
서비스명 | 외국인 모임 특화 | 지도 기능 | 채팅방 | 커뮤니티 | 성향에 따른 모임 추천 | 사용자 인증 방식 |
---|---|---|---|---|---|---|
싱크 | O | O | O | O | O | 학교인증 |
당근 | X | X | O | O | X | 동네인증 |
소모임 | X | X | O | X | X | 전화번호 |
요깃 | O | O | O | X | X | 전화번호 |
문토 | X | X | X | O | X | 전화번호 |
트레바리 | X | X | X | X | X | 이메일 |
-
성향/관심사/위치별 모임 맞춤 추천
→ 기존 고정된 스케줄과 활동에 따라 네트워킹하는 것이 아니라, 유저가 원하는 시간과 성향/관심사에 맞는 모임을 선택할 수 있습니다.
-
커뮤니티
- 외국인들이 한국 생활에 대해 질문
- 한국인들이 알고 있는 정보를 외국인 친구들한테 공유
→ 한국 생활에 대한 정보를 자유롭게 공유하며, 편하게 도움을 주고 받을 수 있습니다.
-
유저 신용도 보장
- 온보딩에서 대학 인증
- 모임 유형 중, ‘내친소(=내 친구를 소개합니다)’ : 신뢰 있는 친구 소개
→ 높은 신뢰도를 기반으로 서비스를 안전하게 사용할 수 있습니다.
- TAM : 전국 외국인 유학생 + 한국인 대학생=약 319만 명
- 전국 외국인 유학생 약 19만 명 (약 18만 8,000명)
- 전국 한국인 대학생 약 300만 명
- SAM : 서울권 외국인 유학생 + 한국인 대학생=약 189만 명
- 서울권 외국인 유학생 약 9만 명 (약 9만 3,000명)
- 서울권 한국인 대학생 약 180만 명
- SOM : 네트워킹을 원하는 서울권 외국인 유학생 + 한국인 대학생= 약 135만 명
- (네트워킹을 원하는) 서울권 외국인 유학생 : SAM * 유저리서치 “국제 프로그램에 참여했거나, 참여할 의향이 있나요?” 답변자 100% = 약 9만 명 (약 9만 3,000명)
- (네트워킹을 원하는) 서울권 한국인 대학생 : SAM * 유저리서치 “교내/교외 국제 프로그램에 참여하실 의향이 있나요?” 답변자 약 72% = 약 126만 명
서비스의 타겟층은 아래 2가지로 나뉩니다.
- 한국인 대학생
- 외국인 유학생
지속적인 네트워킹을 하고 싶다는 공통된 니즈가 있는 한국인 대학생과 외국인 유학생을 중심 타겟으로 설정했으며, 타겟층 확장 계획은 다음과 같습니다.
분류 | 1차 타겟 유저 | 2차 타겟 유저 |
---|---|---|
타겟 설정 | - 유연하고 지속적인 네트워킹을 원하는 한국인 대학생 & 외국인 유학생 |
- 전국 한국인 대학생 & 외국인 유학생 |
관련 기능 | 싱크 탐색, 싱크 개설 및 참여 | 싱크 맞춤 추천, 커뮤니티, 채팅 |
‘Sync, 싱크’ 는 한국인 대학생과 외국인 유학생을 연결해 지속적인 네트워킹을 할 수 있는 공간을 제공하고자 합니다.
기능 | 설명 |
---|---|
싱크 탐색 | 1. 온보딩에서 입력한 성향과 관심사를 기반으로 맞춤 싱크를 추천하는 기능 2. 싱크 유형/관심사 별 카테고리를 통해 싱크를 간편히 탐색 가능 - 현재 싱크에 있는 멤버들의 정보를 그래프를 통해 쉽게 파악 가능 - 멤버들의 생생한 싱크 후기를 통해 싱크에 대한 신뢰도 향상 |
싱크 개설 및 참여 | 1. 원하는 싱크를 직접 개설할 수 있는 기능 2. 사용자가 원하는 시간과 콘텐츠를 직접 선택하여 싱크 참여 3. 실시간으로 멤버들과 소통할 수 있는 채팅 기능 |
커뮤니티 | 1. 생활 탭에서 한국 생활에 대한 정보를 게시물로 공유하고 댓글로 소통할 수 있는 기능 2. 질문 탭에서 해외 여행 및 생활에 대한 질문을 작성하고 댓글로 답변할 수 있는 기능 |
-
Android Studio
안드로이드 애플리케이션 개발에 최적화된 통합 개발 환경(IDE) -
Coroutine
네트워크 통신 과정에서 효율적인 비동기 처리를 위해 코루틴 사용 -
Android Jetpack
재사용 가능한 컴포넌트와 공통 아키텍처 가이드라인을 제공하여 안정적이고 일관된 앱 개발 -
Navigation
SAA(Single Acitivity Architecture) 구조에 적합한 화면 전환과 UI 구성 라이브러리 -
ViewModel
UI와 데이터 영역을 분리하고, 화면 전환에 따른 데이터 저장을 담당 -
Flow
Clean Architecture에서 LiveData 사용을 지양함에 따라 Flow로 대체 -
DataBinding
데이터와 UI를 연결하는 작업을 레이아웃(.xml)에서 처리하는 기술 -
OkHttp & Retrofit2
REST API, HTTP 네트워크 통신 및 데이터베이스 접근에 사용되는 라이브러리
-
- 다양한 모듈을 제공하며, 데이터 액세스, 보안, 통합, 마이크로서비스 아키텍처까지 다양한 분야에서 사용할 수 있다.
- 복잡한 설정 작업을 줄이고, 개발자가 핵심 비즈니스 로직을 구현하는데 집중할 수 있다.
-
- 데이터베이스 액세스를 단순화하고, 단순 작업의 SQL 쿼리 작성을 줄여 준다.
- 데이터베이스와의 상호작용을 객체 지향적으로 다룰 수 있다.
-
- JWT는 사용자 인증과 권한 부여를 효과적으로 처리하는 간편한 방법을 제공한다.
- 서비스별로 분리된 분산 환경에서 인가, 인증을 간소화할 수 있다.
- 클라이언트 측에 토큰을 저장할 수 있으므로, 서버 측에서 세션을 관리하는 것보다 더 가볍고 확장 가능한 방식으로 사용자 신원을 관리할 수있다.
-
- URL 및 메서드 수준에서 액세스 제어 규칙을 정의할 수 있으며, 특정 리소스에 대한 접근을 제어할 수 있다.
- CSRF(Cross-Site Request Forgery) 공격을 방어하기 위한 기능을 제공하며, 웹 서비스와의 AJAX 요청에서 보안 토큰을 자동으로 처리한다.
- CSRF 공격 - 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
-
-
웹 소켓(WebSocket)을 기반으로 하며, 실시간 통신을 지원하는 프로토콜이다.
-
이벤트 기반 아키텍처를 쉽게 구현할 수 있으며, 비동기식 이벤트 처리가 가능하다.
-
메시징 프로토콜과 메시징 형식을 개발할 필요가 없다 & • 연결 주소마다 새로운 핸들러를 구현하고 설정해줄 필요가 없다.
→ 형식을 고민하고, 파싱하는 코드를 구현할 필요가 없어져 기능 개발에 좀 더 힘을 쓸 수 있다.
-
-
-
관계형 데이터베이스 모델로 스키마 설정을 통해 회의 통계에 대한 효율적인 데이터 관리를 할 수 있다.
-
빠른 읽기 및 쓰기 성능을 제공하며, 대용량 데이터베이스와 트랜잭션 처리에 효율적이다.
-
다양한 운영 체제에서 동작하며, Windows, Linux, macOS 등 다양한 플랫폼에서 사용할 수 있다.
→ 로컬환경과 배포환경이 달라도 지장이 없다.
-
-
- 스키마가 없는 NoSQL 데이터베이스로, 데이터 모델을 자유롭게 정의할 수 있다.
- 애플리케이션이 필요로 하는 형식으로 데이터가 저장되기 때문에 실시간 통신에서 조회에 대한 이점이 있다.
- 실시간 서비스는 많은 트래픽이 발생하는 서비스이기 때문에 별도의 데이터베이스가 필요하다고 판단.
-
-
Github로 코드 통합 관리를 진행할 경우 연장선으로 쉽게 자동배포까지 사용이 가능하다.
-
다양한 이벤트(예: 푸시, 풀, PR, 이슈 업데이트)를 트리거로 사용할 수 있으므로, 특정 이벤트가 발생했을 때 작업을 실행할 수 있다.
→ Commit message check로 분산된 서버에 자동으로 배포가 가능하다.
-
리눅스, 맥, 윈도우, ARM 및 컨테이너를 쉽게 빌드, 테스트가 가능하다.
-
-
- 거의 무제한의 데이터 저장 공간을 제공한다.
- 클라우드 환경에서 사진 및 파일 데이터를 관리하기 용의하다.
-
- Blue/Green 무중단 아키텍처를 구성하기 위한 Proxy 역할을 합니다.
-
- 프로그램을 실행하는 환경을 캡슐화하여, 개발, 테스트 및 배포 과정을 일관되고 이식성 있는 방식으로 관리할 수 있다.
- 각각의 독립적인 image를 이용해 여러 서비스가 존재할 경우 관리 및 배포가 쉽다.
-
- MySQL 데이터베이스의 관리와 운영 부담을 줄이고, 안정성, 가용성 및 보안을 향상시킬 수 있다.
-
- 서로 분산된 서비스들 간의 동기화 데이터를 관리한다.
- 서비스 교체로 인해 휘발 될 수 있는 데이터를 저장하는데 용의합니다.
- Cache의 용도로 데이터베이스 액세스를 줄이고 애플리케이션 성능을 향상 시킬 수 있다.
-
- 서비스 교체로 인해 휘발 될 수 있는 데이터를 caching하는데 용의합니다.
- Publish/Subscribe 메커니즘을 제공하여 실시간 이벤트 처리 및 메시징 용도로 사용이 가능하다.
기본적으로 Camel Case 규칙을 따른다.
- 폴더명 같은 경우는 Low Case로 작성
- 클래스명은 Pascal Case로 작성
- 이미지명 같은 경우는 Snake Case로 작성
-
Class:
Upper Camel Case
-
Method:
Lower Camel Case
-
Variable
Lower Camel Case
단,Constant
변수는 제외합니다. -
데이터베이스:
Lower Snake Case
-
모든
Class
는 해당하는domain
의 이름을 접미사에 사용합니다.controller: UserController service: UserService repository: UserRepository dto/request: User_____RequestDto dto/response: User_____ResponseDto entity: User config: WebConfig error code: USER_Not_Found
-
Method
의 이름을 선언할 경우Method
가 지닌 역할 및 기능을 생각하고 그것을 의미할 수 있는 이름을 사용해야합니다.예를 들어
ParticipationId
를 이용해 데이터베이스에서 데이터를 가져올 경우Get
이라는 메서드의 행위을 나타내는 동사와 메서드의 목적을 나타내는Participation
과ParticipationId
를 사용하겠다는 의미인 With 전치사를 함께 사용하여 Method를 만듭니다.Participation participation = getParticipationWithParticipationId()
- 형식:
태그: 커밋내용
태그 이름 | 설명 |
---|---|
feat | 새로운 기능 구현 |
fix | 버그, 오류 해결 |
docs | README나 WIKI 등의 문서 수정 |
style | 기능 수정이 없는 스타일 변경 |
refactor | 코드 리팩토링 |
test | 테스트 코드, 리펙토링 테스트 코드 추가 |
chore | 빌드 업무 수정, 패키지 매니저 수정, 간단한 코드 수정, 내부 파일 수정 |
add | 파일 추가 |
[<Prefix>]:<Module_Name> #<Issue_Number> <Description>
의 양식을 준수.
- Prefix
태그 | 제목 |
---|---|
feat | 새로운 기능 구현 ex. [feat]:Main #11 구글 로그인 API 기능 구현 |
fix | 코드 오류 수정 ex. [fix]:Main #10 회원가입 비즈니스 로직 오류 수정 |
del | 쓸모없는 코드 삭제 ex. [del]:Main #12 불필요한 import 제거 |
docs | README나 wiki 등의 문서 개정 ex. [docs]:global #14 리드미 수정 |
refactor | 내부 로직은 변경 하지 않고 기존의 코드를 개선하는 리팩토링 ex. [refactor]:Global #15 코드 로직 개선 |
chore | 의존성 추가, yml 추가와 수정, 패키지 구조 변경, 파일 이동 ex. [chore]:Socket #21 yml 수정 |
test | 테스트 코드 작성, 수정 ex. [test]:Global #20 로그인 API 테스트 코드 작성 |
- Module_Name
<Module_Name>
은 Github Action과 연동되어 특정한 클라우드 환경에 CI/CD가 되도록 설계되었기 때문에 반드시 준수해야합니다.
태그 | 제목 |
---|---|
Main | MainService module에서 작업을 할 경우 사용합니다. |
Socket | Websocket module에서 작업을 할 경우 사용합니다. |
Global | 모든 module에 코드를 수정할 경우 사용합니다. |
브랜치 명 | 설명 |
---|---|
main | 소프트웨어 제품 배포하는 용도로 쓰는 브랜치 |
feat | 단위 기능 개발용 브랜치 |
fix | 단위 기능 개발 수정용 브랜치 |
hotfix | master에 배포 코드가 합쳐진 후 버그 발생 시 긴급 수정하는 브랜치 |
작업 시작 시 선행되어야 할 작업
- issue를 생성합니다.
- feature branch를 생성합니다.
- add → commit → push → pull request 를 진행합니다.
- pull request를 develop branch로 merge 합니다.
- 이전에 merge된 작업이 있을 경우 다른 branch에서 진행하던 작업에 merge된 작업을 pull 받아옵니다.
- 종료된 issue와 pull request의 label을 관리합니다.
- 준수해야 할 규칙
- develop branch에서의 작업은 원칙적으로 금지합니다. 단, README 작성은 develop branch에서 수행합니다.
- commit, push, merge, pull request 등 모든 작업은 오류 없이 정상적으로 실행되는 지 확인 후 수행합니다.