모바일 앱 서버 - mobail aeb seobeo

매번 프로젝트를 시작할 때 가장 귀찮고 예상보다 많은 시간을 소비하는 것이 개발환경과 배포환경 설정이다. 일단, 안드로이드 앱에 사용되는 서버를 구축한다고 해보자. 이 서버는 Apache, PHP, MySQL로 구성되어 있고 이를 활용하기 위한 파일들과 환경을 모두 설정하는데에는 상당히 많은 시간과 노력이 투자된다. 아래 링크가 위 3가지를 설치하고 설정하는 과정인데 상당히 긴 과정임을 알 수 있다. 또한, 프로그램은 항상 버전이 업되므로 예상치 못한 어려움을 만나 헤멜 수 도 있다.

이러한 문제를 해결하는 방법은 클라우드 서비스를 사용하는 것이다. 필자는 Azure를 사용할 것인데 현재 시중에 나와있는 AWS, 네이버클라우드, 구글클라우드 모두 이러한 서비스를 제공하니 입맛에 맞게 선택하여 사용하면 좋을것이다.(각 클라우드 서비스 제공자마다 살짝 상이한 부분이 있으니 잘 살펴보고 결정하자!)

이번 프로젝트에서 사용할 앱은 PHP를 이용한 서버이며 DB는 MySQL을 사용한다고 가정하자. 프론트엔드 안드로이드 스튜디오로 만든 앱을 사용할 것 이다. 이번 글에서는 안드로이드 앱에 대한 소개는 하지 않고 PHP서버와 MySQL DB를 클라우드에서 어떻게 생성하고 연결하는지에 대해 설명하겠다.

일단, Azure App Service(PaaS)에 대해 알아보자.

출처: Azure

위 이미지는 Azure App Service의 개요를 설명하는 것으로 “원하는 방식으로 웹앱과 API를 빠르게 빌드, 배포 및 스케일링할 수 있다”는 것이 특징이다. 여기서 주목할 점은 스케일링할 수 있다는 것이다. 레거시 서버는 하드웨어에 한정되어 서버의 사용량이 많아지면 죽어버리는 경우가 발생하는데 클라우드는 스케일링 계획을 설정해 놓으면 서버의 하드웨어 성능을 증가시키거나 다른 서버를 만들어 트래픽을 분산시킬 수 있다.

더욱 더 자세한 설명은 아래 링크를 타고 들어가면 볼 수 있다.

https://azure.microsoft.com/ko-kr/services/app-service/#product-overview

App Service | Microsoft Azure

1.App Service를 만들자(계정과 구독은 모두 준비되어있다고 가정)

https://portal.azure.com/#home

화살표가 가리키는 방향을 클릭

위 링크에 들어가 로그인을 한 다음 리소스 만들기를 클릭하자!

웹 앱을 클릭!

웹 앱을 클릭하면 아래와 같은 화면이 나오는데 처음 해야할 것은 리소스 그룹을 만드는 것이다.

새로 만들기를 클릭!

“새로 만들기” 버튼을 클릭하면 위와 같은 그림이 나오는데 이름을 원하는데로 적어주면 된다. 간단하게 프로젝트명을 설정한다고 생각하면 쉽다.

웹앱 이름을 정하자!

웹앱 이름은 여러분이 배포할 앱의 이름을 정한다고 보면 된다. 저 이름을 기준으로 서버 URL이 만들어지니 알기 쉽게 만들면 좋다.

그 밑에 게시는 여러분이 앱을 코드로 서버에 배포할건지 아니면 Docker를 사용한 컨테이너 이미지로 배포할 것인지 선택하는 것이다.

필자는 코드로 배포하는 방법을 사용했다.

런타임 스택을 설정하자!(필자는 PHP)

배포하게 될 코드가 어떤 런타임을 사용하는지 알맞게 선택하자. 아까 언급했다 시피 PHP 사용한다고 했으니 본인은 PHP를 고르겠다.

운영 체제는 윈도우를 고르는 것이 편한다.

운영 체제는 본인이 원하는 것을 고르면 되는데 윈도우를 선택하는 것이 더 많은 기능을 사용할 수 있다. 물론, 요금은 윈도우를 사용하므로 더 증가한다. 지역 또한 원하는 지역을 선택하면 되는데 한국 중부를 선택하겠다.

중요한 건 SKU 및 크기!

Sku 및 크기 부분이 서버의 성능을 결정한느 부분이다. 이 글에서는 테스트용으로 만드는 것이므로 무료 버전을 사용하겠지만 실사용때는 그에 맞는 사양을 선택하면 된다. 서버는 지역마다 제공하는 부분이 다르므로 염두하자!

선택된 하드웨어가 제공하는 성능을 알 수 있다.

무료버전을 선택한 후 다음을 누르면 아래와 같은 화면이 뜨는데 입맛에 맞게 선택하면 된다. 사용하려면 새로 만들기를 클릭후 만들면 된다.

아래 링크를 통해 자세히 알아볼 수 있다.

https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/app-insights-overview

Azure Application Insights란? — Azure Monitor

아래 경고문은 필자가 전에 사용하던 것을 클릭해서 뜨는 것

위와 같이 설정은 다 끝났고 검토+만들기 버튼을 클릭해 생성해준다. 일정 시간이 지난 후 상단의 알림 버튼에 서버 배포가 완료되었다는 문구를 확인하면 서버 설정이 끝난것이다. 완료됐으면 제공된 URL로 접속을 해보자. 아래 그림과 같은 화면이 나오면 성공적으로 배포된 것이다.

배포가 완료된 모습제공된 URL을 클릭하면 아래와 같은 화면이 뜬다.

2.GitHub를 통해 소스를 배포하자.(깃허브 계정과 소스는 본인이 모두 준비되어있다고 가정)

여기서 이제 자신이 만든 코드를 배포하면되는데 이번에 소개할 방법은 GitHub를 통해서 배포하는 방법 소개하려고한다. 혹시 자신이 클라우드에 배포하고 싶은 코드가 없는 경우 예제를 사용하면 되는데 예제는 아래링크에 타고 들어가면 쉽게 구할 수 있다.

https://docs.microsoft.com/ko-kr/azure/app-service/

Azure App Service 설명서 — Azure App Service

배포 센터를 클릭코드를 배포하는 방법을 원하는대로 고르면 된다.

GitHub를 클릭시 계정을 연결한다음 App Service에서 제공하는 Kudu엔진을 사용한다. 그 다음 원하는 레포지토리를 설정하고 다음 다음을 눌러 배포하면 된다.

맨 좌측이 Kudu이다.배포가 성공적으로 완료되면 위 그림과 같이 “성공”이라고 메세지가 뜬다.

여기까지 따라왔으면 서버는 성공적으로 완성한 것이다. 그러면 서버의 어느부분에 코드가 배포되는지 궁금한 사람들이 있을텐데 이를 확인하는 방법이 있다. 아래 그림처럼 “고급 도구”를 클릭하고 이동을 누른다.

개발 도구 항목에 존재한다.

누르면 Kudu서비스로 이동하게 되는데 이것에 대해 자세히 알고싶으면 아래 링크를 통해 확인하자.

https://github.com/projectkudu/kudu/wiki

projectkudu/kudu

웹 페이지에서 상단의 Debug탭을 눌러 CMD를 클릭하자! 여기서 site->wwwroot를 클릭하면 윈도우 탐색기처럼 폴더로 들어갈 수 있다.

그곳에가면 자신이 배포한 코드가 보이게 될 것이다.

누르면 위와 같은 화면이 나온다.

여기까지가 서버를 구축하는 과정이었다. 이제 남은일은 사용자마다 상이하겠지만 DB를 구축하고 서버에 연결해주는 작업을 할 것이다.

그것에 대해서는 다음에 설명하겠다. 클라우드는 자신이 사용한만큼 지불하는 종량제 형식을 사용하므로 (물론 년단위 계약을 하는 요금제도 있다.) 현재까지 한 과정으로는 많은 요금이 청구되지는 않는다.

게시된 내용은 작성자가 공부한 내용을 정리하여 기록하였습니다. 일부 빠지거나 부족한 부분이 있을 수 있습니다. 최대한 편집 없이 기록하였습니다.

출처 블로그

사용 도구 : STS 4 (Spring Tools Suite)


모바일 앱 서버 - mobail aeb seobeo
모바일 앱 서버 - mobail aeb seobeo

옵션을 선택합니다. 저는 Gradle, Java 8을 선택하고 이름을 바꿔주었습니다.

모바일 앱 서버 - mobail aeb seobeo

라이브러리는 Spring WebLombok을 선택합니다. Lombok에 대한 설명은 이분의 블로그에서 보시면 좋을 것 같습니다.

모바일 앱 서버 - mobail aeb seobeo

2. 생성한 프로젝트 테스트

@SpringBootApplication이라고 붙은 파일에서 run을 눌러 실행시켜 봅니다.

모바일 앱 서버 - mobail aeb seobeo

포트 8080이 이미 사용중이라고 합니다. 바꾸겠습니다.

모바일 앱 서버 - mobail aeb seobeo

application.properties에서 포트 번호를 바꿀 수 있습니다. yml 형식으로 바꿀 수도 있습니다. 저는 yml으로 배워서 yml으로 바꾸겠습니다.

모바일 앱 서버 - mobail aeb seobeo

그리고 포트 번호를 3232로 바꾸었습니다.

모바일 앱 서버 - mobail aeb seobeo

아래와 같은 화면이 나오면 성공입니다. 아무것도 없어서 저렇게 뜨는 겁니다.

모바일 앱 서버 - mobail aeb seobeo

3. 테스트용 Controller 생성

컨트롤러라는 것이 있습니다. 아래 이미지는 일반적인 애플리케이션의 구조입니다. 간단하게 말하면, 컨트롤러는 외부 요청을 받고, 서비스에서 비즈니스 로직을 만들고, 리포지토리에서 데이터 저장을 합니다. 

모바일 앱 서버 - mobail aeb seobeo

컨트롤러를 만들어서 테스트 해보겠습니다. 컨트롤러 패키지를 만들고, TestController 파일을 생성하고 아래 코드를 입력합니다.

모바일 앱 서버 - mobail aeb seobeo
모바일 앱 서버 - mobail aeb seobeo

1

2

3

4

5

6

7

8

9

10

11

12

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class TestController {

@RequestMapping("/")

public String index() {

return "Hello!";

}

}

cs

그리고 실행하면 웹 브라우저에 Hello!가 뜰 것입니다.

모바일 앱 서버 - mobail aeb seobeo

4. Member 객체 모델 생성

객체 모델을 생성하겠습니다. Member 클래스를 생성해주세요.

모바일 앱 서버 - mobail aeb seobeo

@Data

@AllArgsConstructor

public class Member {

private long id;

private String name;

private int age;

private Date birth;

}

cs

이제 Member 컨트롤러을 만들겠습니다.

모바일 앱 서버 - mobail aeb seobeo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@RequestMapping("/member")

@RestController

public class MemberController {

@GetMapping("/test")

public ArrayList<Member> memberTest2(){

return new ArrayList(Arrays.asList(

new Member(1L, "김정환"23new Date()),

new Member(2L, "황재식"40new Date()),

new Member(3L, "조창우"22new Date()),

new Member(4L, "정태섭"32new Date()),

new Member(5L, "이슬기"17new Date())

));

}

}

cs

실행을 시키고 웹 브라우저에 localhost:3232/member/test를 입력하면 아래와 같이 JSON형태로 데이터가 나타납니다. 

모바일 앱 서버 - mobail aeb seobeo

프로젝트를 생성해서 로컬에서 테스트를 해보았습니다. 다음에는 AWS EC2에 인스턴스를 만들고 DB를 설치하겠습니다.