집요정 도비의 일기
Step 1. 음악 스트리밍 서버(Spring boot), 앱(Android)을 만들어보자. 본문
0. 왜 이걸 하는가.
(1) 버스 타고 가다가 급 듣고 싶은 음악이 있는데 폰에는 없고 pc에만 있다는 것을 깨닫고 화가난 경험이 있으므로.
1. 기능 구상
*서버 :
(1) 지정된 디렉토리와 하위 디렉토리의 .mp3 파일의 리스트를 보여줄 수 있다.
(2) 지정된 디렉토리와 하위 디렉토리의 .mp3 파일의 다운로드 요청을 처리해줄 수 있다.
*안드로이드 (클라이언트) :
(1) 지정된 서버로부터 탐색 가능한 디렉토리와 .mp3 파일을 http 리퀘스트로 받아올 수 있다.
(2) 지정된 서버로부터 해당 파일을 다운로드 받거나, 스트리밍 할 수 있다.
2. 도구 및 필수 사항
*서버 : Spring Boot Application을 통해 간단하게 구현한다. 반드시 Tomcat이 깔려 있어야하고 함. IDE : STS
*클라이언트 : IDE : Android Studio
3. Http 통신 구현
*이번 편에는 간단하게 테스트만 한다. 안드로이드와 서버가 Http 리퀘스트와 리스폰스를 주고 받을 수 있는지 테스트한다.
3-1. 서버
*먼저 서버부터 구현한다. 원숭이도 쓸 수 있게 간편해진 Spring Boot을 사용한다.
Spring Starter Projects 를 만든다.
적절하게 폼을 체워준다.
Web만 골라주면 됨. DB 안쓸 계획.
컨트롤러를 집어널 패키지를 하나 만들어줌. 귀찮으면 안만들어도 됨. 어짜피 하나 이상 쓸 계획 없음.
그 후, 컨트롤러 클래스를 만들어줌. 이름은 RequestController로 함. 컨트롤러에 er이 붙을 때 l이 하난지 두갠지 기억 안나서 두개로 함.
디렉토리 구조는 이렇게 될 것임.
이제 컨트롤러를 구현함. /test 리퀘스트를 받으면 뭐든 잘 받았다고 string을 돌려주는 메소드를 짜봄.
서버 끝.
3-2. 안드로이드
*위의 서버에 리퀘스트를 보내서 받는 기능을 구현함.
*아직 ui는 만들지 않고, 단순 앱이 켜지자마자 위의 /test 리퀘스트를 하여 로그에 응답을 찍어봄.
먼저 안드로이드 매니페스트에 INTERNET 사용 퍼미션을 추가.
Http 통신을 주고 받기 위해 OkHttp 라이브러리를 쓰도록 함.
File - Project Structure - 맨 밑의 app에서 가장 우측 탭의 Dependencies 선택
초록색 + 버튼을 눌러서 Library Dependencies에서 OkHttp 검색 or 밑에 리스트에 찾은 후 추가. ok누르고 잠시 기다리면 알아서 프로젝트에 추가되고 빌드됨.
Http통신을 위한 패키지 밑 추상 클래스인 HttpSender 클래스를 생성.
패키지 만들기는 본인의 취향으로 귀찮으면 안만들어도 무방.
앞으로 모든 http 통신은 이 추상 클래스를 상속 받아서 구현될 것임.
ip는 본인의 ip를 기입하면 됨.
*서버에서 받은 값을 ui에 돌려주려면 Handler 하나를 받아서 넘겨줘야하지만, 단순 로그만 찍고 말 것이므로 아직은 생략함.
*send() 메소드에서 익명으로 AsyncTask를 쓰는 이유는 메인 쓰레드에서 네트워킹을 하면 안되기 때문.
이제 위의 추상 클래스를 상속받아서 /test 리퀘스트를 보낼 클래스를 작성함.
메인 액티비티에서 위의 클래스를 이용하여 리퀘스트를 보내는 소스 작성.
패키지는 대충 이런 느낌으로 되있을 것임.
안드로이드도 끝.
4. 테스트
4-1. (3-1)에서 작성한 스프링 서버를 구동시킴. 프로젝트 우클릭 -> run as -> Spring Boot App
대충 이런 느낌으로 시작됨.
서버가 구동되었으므로 안드로이드도 구동. 위에도 언급되었듯이, 단순한 테스트이므로 안드로이드는 기본ui에 켜지자 마자 이 서버로 리퀘스트를 보냄.
로그캣에 위와 같이 서버에서 보내온 string이 잘 찍히는 것이 확인됨.
서버에서도 request가 잘 받아졌음을 찍음.
테스트 끝
5. To Do..
다음편에선 이번편의 소스를 기반으로 서버에서 특정 디렉토리의 파일 리스트를 받아오도록 만듬.
서버는 컨트롤러에서 메소드 하나만 추가하면 되지만, 안드로이드는 본격적으로 ui에 통신에서 받아온 데이터를 반영해야하므로 핸들러의 추가 등이 있을 것.
'개발 일기' 카테고리의 다른 글
Retrofit 2로 Json파싱 없이 Http통신 구현 시간을 단축해보자. (1) | 2016.11.07 |
---|---|
selector auto creator (0) | 2016.10.18 |
Step 4. 음악 스트리밍 서버(Spring boot), 앱(Android)을 만들어보자. (6) | 2016.03.05 |
Step 3. 음악 스트리밍 서버(Spring boot), 앱(Android)을 만들어보자. (0) | 2016.03.05 |
Step 2. 음악 스트리밍 서버(Spring boot), 앱(Android)을 만들어보자. (1) | 2016.03.03 |