안경잡이개발자

728x90
반응형

  AWS EC2 인스턴스를 생성한 뒤에, 거기에 접속해서 MySQL, Apache, PHP를 설치하여 연동하는 방법에 대해서 소개하겠습니다.

 

AWS EC2 인스턴스 생성

 

1. AWS EC2 관리 페이지로 이동합니다.

 

  EC2 관리 페이지: https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home

 


2. [인스턴스 시작] 버튼을 눌러 [Ubuntu Server 18.04 LTS (HVM), SSD Volume Type]로 인스턴스를 생성합니다.

 


3. 무료 유형인 [t2.micro] 인스턴스 유형을 선택한 뒤 [검토 및 시작] 버튼을 누릅니다. 이후에 인스턴스를 시작할 수 있도록 하면 됩니다.

 


4. 키 페어를 생성해 저장한 뒤에 [인스턴스 시작] 버튼을 누릅니다.

 

 

인스턴스 접속


1. 아까 EC2 접속 목적의 키 페어 파일을 준비합니다.

 


2. 키 페어에 적절한 권한을 줍니다.


  1) 리눅스: 다음의 명령어로 권한을 설정합니다.

chmod 400 {키 페어 파일 이름.pem}


  2) 윈도우: 키 페어를 우클릭 한 뒤에 [속성] - [보안] [고급] - [상속 사용 안 함] - [명시적 사용] - [관리자 제외하고 모든 그룹 삭제]를 진행합니다. 이후에 관리자 권한으로 CMD를 실행합니다.

 

 

3. SSH 명령어로 서버에 접속합니다. 서버 접속 주소는 [Connect] 버튼을 누르면 나옵니다.

ssh -i "{키 페어 파일 이름.pem}" ubuntu@{AWS EC2 서버 URL}

 

 

  저는 다음과 같은 명령어를 확인할 수 있습니다.

 

 

  이제 다음과 같이 SSH로 AWS EC2 서버에 접속해보겠습니다.

 

 

MySQL 서버 설치 및 환경설정


1. AWS EC2 서버에 접속합니다.


2. MySQL를 설치하고 접속합니다.

sudo apt update # MySQL 설치를 위해 업데이트
sudo apt install mysql-server # MySQL 서버 설치
sudo mysql -u root -p # MySQL 접속

 


3. MySQL 접속 이후에 비밀번호를 설정합니다.

use mysql;
CREATE USER '{생성할 사용자 이름}'@'%' IDENTIFIED BY '{비밀번호}'; # 생성할 사용자 비밀번호 설정
GRANT ALL PRIVILEGES ON *.* TO '{사용자 이름}'@'%'; # 외부 접속이 가능하도록 설정
FLUSH PRIVILEGES;
exit;

 


4. MySQL 설정 파일을 수정합니다.

cd /etc/mysql/mysql.conf.d;
sudo vi mysqld.cnf;

 

  (이 때 만약 vi가 설치되어 있지 않다면 다음과 같이 vim을 설치합니다.)

 


5. mysqld.cnf를 수정하여 MySQL의 외부 접속을 허용합니다.

bind-address = 0.0.0.0


6. 수정 이후에 Mysql를 재시작 합니다.

sudo service mysql restart

 

MySQL 외부 접속 테스트


1. AWS EC2 보안 그룹 페이지로 이동합니다.

 

2. 보안 그룹 설정을 진행합니다. [인바운드] - [편집] - [규칙 추가] - [MySQL/Aurora] - 허용 IP로 [0.0.0.0/0]를 설정합니다.

 


3. MySQL Workbench와 같은 MySQL 관리 도구를 이용하여 접속합니다.

Hostname: {AWS EC2의 공인 IP 주소}
Username: {생성한 사용자 이름}
Password: {비밀번호}

 


4. MySQL에 접속하여 간단한 쿼리를 날립니다.

select now();

 

 

Apache 웹 서버 설치 및 환경설정


1. Apache 웹 서버를 설치합니다.

 

sudo apt-get install apache2

 

 

2. AWS EC2 보안 그룹 페이지로 이동합니다.


3. 보안 그룹 설정을 진행합니다. [인바운드] - [편집] - [규칙 추가] - [HTTP] - 허용 IP로 [0.0.0.0/0]를 설정합니다.

 


4. 공인 IP로 접속하여 웹 서버가 정상적으로 구동하는지 확인합니다.

 

 

5. apache2.conf 설정 파일을 엽니다.

sudo vi /etc/apache2/apache2.conf

 

6. 루트 디렉토리를 [/home/project]로 변경합니다.

<Directory /home/project/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

 


7. default.conf 설정 파일 열기

sudo vi /etc/apache2/sites-available/000-default.conf

 

8. 루트 디렉토리를 [/home/project]로 변경합니다.

DocumentRoot /home/project

 


9. /home/project 폴더 생성 및 index.html 파일을 생성합니다.

sudo mkdir /home/project
sudo vi /home/project/index.html


10. index.html 파일을 작성합니다.

Hello World!


11. Apache 웹 서버 재시작

sudo apachectl restart


12. 공인 IP로 접속하여 웹 서버가 정상적으로 구동하는지 확인합니다.

 

 

PHP 웹 서버 설치 및 Apache 연동

 

1. 간단히 옛날 버전의 PHP 5.6를 설치해보겠습니다.

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6

 

  (이 때 만약 add-apt-repository가 설치되어 있지 않다면 다음과 같이 설치합니다.)

 


2. 설치된 PHP 버전을 확인합니다.

php -version

 


3. Apache와 PHP 연동 테스트

sudo vi /home/project/index.php


4. PHP 소개 페이지를 작성합니다.

<?php phpinfo();?>


5. 공인 IP의 /index.php로 접속하여 PHP 연동이 제대로 됐는지 확인합니다.

 

  (index.html 파일을 지워야 할 수 있습니다.)

 

 

PHP와 MySQL 연동


1. MySQL 연동 라이브러리를 설치합니다.

sudo apt install php5.6-mysql
sudo service mysql restart
sudo apachectl restart


2. 설치된 패키지를 확인합니다.

dpkg -l | grep php

 

 

3. index.php 소스코드를 작성합니다.

 

<?php
$conn = mysqli_connect(
  '{데이터베이스 IP}',
  '{사용자 이름}',
  '{비밀번호}',
  '{데이터베이스 이름}',
  '3306');
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT VERSION()";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
print_r($row["VERSION()"]);
?>

 

 

4. 접속 결과를 확인합니다.

 

 

  정상적으로 MySQL, PHP, Apache가 설치되어 연동이 모두 완료되었습니다.

 

728x90
반응형

728x90
반응형

  사업자 폐지를 하고 싶을 때는 일반적인 경우 홈택스를 이용해, 인터넷으로 손쉽게 사업자 폐지를 할 수 있습니다. 사업자 폐지를 인터넷으로 하고자 한다면 다음과 같이 홈택스에 방문하면 됩니다.

 

  ▶ 홈택스(Hometax): https://www.hometax.go.kr

 

  방문 이후에는 가장 먼저 로그인을 해주세요.

 

 

  로그인 이후에는 다음과 같이 [신청/제출] 탭으로 이동합니다.

 

 

  이후에 [휴폐업신고] 탭으로 이동하여 폐업 신고를 진행하면 됩니다.

 

 

  폐업 신고를 위해서는 먼저 [공인인증서 인증]을 해야 합니다.

 

 

  인증 이후에는 바로 [폐업신고서]에 체크를 하여 폐업 신고를 진행할 수 있습니다.

 

 

  결과적으로 저는 다음과 같이 작성하여 제출했습니다.

 

 

※ 폐업 신고 이후에 해야 할 일 ※

 

  폐업 신고를 한 뒤에, 폐업일이 속하는 과세기간의 개시일로부터 폐업일까지의 사업실적에 대해 신고(부가가치세)해야 합니다. 이 때 폐업일이 속한 달의 말일로부터 25일 이내에 신고를 해야 한다고 하니 꼭 기억해두세요!

 

  저는 최근 과세기간 동안에 사업 실적이 없기 때문에, 다음과 같이 [부가가치세 신고]에서 무실적 신고를 하게 되었습니다.

 

 

  [무실적 신고] 같은 경우는 신고서를 작성하기가 매우 간편합니다. 사실 실적이 없는 지는 꽤 되었는데, 귀찮아서 사업자 폐지를 안 하고 있었거든요.

 

 

  그냥 그대로 [신고서 입력완료] 버튼을 누르면 신고가 끝납니다.

 

728x90
반응형

728x90
반응형

※ Google Colaboratory란? ※

 

  Google Colaboratory를 이용하게 되면, 기존에 주피터 노트북(Jupyter Notebook) 환경에서 인공지능을 공부하던 사람들은 이제 더욱 편하게 공부할 수 있게 됩니다. 자신의 컴퓨터 성능이 매우 좋은 것이 아니라면, 일반적인 프로그래밍을 공부하는 학생들은 CoLab을 이용하는 것을 추천합니다.

 

  CoLab은 주피터 노트북 환경과 Google Drive를 합친 것과 같습니다. 주피터 노트북만큼이나 편하게 소스코드를 작성하고, 그에 대한 설명을 작성할 수 있습니다. 뿐만 아니라 Google Drive에 문서를 저장하고, 이를 다시 불러올 수 있습니다. 더불어 구글 계정만 있으면 무료로 이용할 수 있다는 점에서 매우 간단히 이용하며 머신 러닝을 공부할 수 있습니다.

 

  CoLab은 2017년 10월에 공개되었고, 2019년 1월에 걸쳐 업데이트 되어 PyTorch를 포함해 상당수 유명 라이브러리들을 웹 환경에서 곧 바로 이용할 수 있는 상태입니다. 그래서 교육 목적, 팀 내에서 함께 연구할 목적으로 CoLab을 이용하면 매우 효과적입니다. 같이 소스코드를 작업하면, 곧바로 변경사항이 상대방에게 표시되기 때문에 사실상 뛰어난 공유 환경이라고 할 수 있습니다.

 

  이러한 CoLab은 무료 서비스일 뿐만 아니라 GPU까지 지원합니다. GPU는 한 번에 12시간 동안만 무료로 이용할 수 있지만, 공부를 하면서 웬만한 모델을 돌리는 목적으로 매우 충분하기 때문에 아주 강력하고 좋은 협업 개발환경이라고 할 수 있습니다.

 

  ▶ Google CoLab: https://colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

 

  지금까지 다양한 머신러닝 프로젝트를 진행하기에 앞서, 항상 자신의 컴퓨터에 Jupyter 개발환경을 구축해야 했습니다. 하지만 CoLab은 그 자체로 웹 브라우저만 있어도 실행할 수 있는 개발환경입니다. 따라서 매우 편리한 겁니다.

 

※ 파이썬(Python) 소스코드 작성해보기 ※

 

  Google Colaboratory에 접속하면 다음과 같은 [Google Colaboratory] 사용 방법에 대해서 안내가 나올 수 있습니다. 이 때는 [취소] 버튼을 눌러서 안내 문구를 꺼주시면 됩니다. 사실 안내 문구를 다 읽지 않아도, 사용하기에 직관적이고 편리하게 구성되어 있기 때문에 쉽게 이용할 수 있을 것입니다.

 

 

  파이썬(Python) 소스코드를 작성하기 위해서는 다음과 같이 [파일] - [새 Python 3 노트]를 열어주시면 됩니다.

 

 

  이후에 다음과 같이 파이썬(Python) 소스코드를 작성하여 구동시켜 볼 수 있습니다.

 

 

※ 소스코드 공유하기 ※

 

  Google Colaboratory의 가장 큰 장점 중 하나는 소스코드를 손쉽게 공유할 수 있다는 점입니다. 특히 [파일] - [GitHub에 사본 저장...] 버튼을 눌러서 GitHub의 특정한 Repository에 해당 파일을 업로드할 수 있습니다.

 

 

  저는 사전에 GitHub에 [Google-CoLab]이라는 이름의 Repository를 만들어 주었으며, 다음과 같이 Google-CoLab이라는 Repository에 특정한 CoLab 소스코드 파일을 업로드할 수 있도록 설정했습니다.

 

 

  결과적으로 소스코드가 업로드 되면, 다음과 같이 Repository에서 확인할 수 있게 됩니다.

 

※ 유의 사항 ※

 

  Google CoLab은 소스코드는 Drive에 영구적으로 저장이 된다는 장점이 있습니다. 하지만 소스코드를 실행함에 있어서 임시적으로 저장되는 변수 값, 데이터 등은 영구적이지 않다는 점을 유의하셔야 합니다. 그래서 학습 목적의 데이터를 다운로드 받아서 사용하고자 할 때는 Drive에 저장을 한 뒤에, 이를 불러오는 방식을 이용하셔야 합니다.

 

  이러한 현상이 발생하는 이유는 CoLab이 Docker 기반의 컨테이너 개발환경이기 때문입니다. 따라서 추가적으로 pip 등의 명령어를 이용해  다른 라이브러리를 설치했다고 하더라도, 몇 시간 뒤에는 해당 라이브러리가 설치 이전 상태로 돌아가 있을 수 있습니다. 그래서 다시 주기적으로 설치해야 하는 과정이 필요할 수 있습니다.

 

※ CoLab 성능 확인 ※

 

  파이썬 버전을 확인해 봅시다.

import sys 
sys.version_info 

  디스크 용량도 확인해보겠습니다.

!df -h

  메모리 정보는 다음과 같이 확인할 수 있습니다.

!cat /proc/meminfo 

  CPU 정보는 다음과 같이 확인할 수 있습니다.

!cat /proc/cpuinfo

  이후에 GPU를 사용할 수 있도록 설정해보겠습니다.

  이제 GPU를 사용할 수 있는 상태인지 확인해보겠습니다.

!nvidia-smi 

 


※ CoLab 파일 업로드 및 다운로드 ※

  파일을 업로드 할 때는 다음과 같이 할 수 있습니다.

from google.colab import files 
uploaded = files.upload() 

  위 소스코드를 실행하면 파일 업로드 버튼이 등장하게 되고, 이를 이용해 업로드 할 수 있습니다. 저는 한 번 하나의 문서 파일을 업로드 해보았습니다.

  업로드가 된 파일을 다운로드 받을 때는 다음과 같이 할 수 있습니다.

files.download('serverless.yml')

※ 라이브러리 사용해보기 ※


  최신 버전의 CoLab에는 처음부터 TensorFlow 및 PyTorch 등의 라이브러리가 설치되어 있습니다. 원래 PyTorch는 기본적으로 설치가 되어있지 않았지만, 2019년에 들어와서 사용할 수 있게 되었습니다.

import torch
print(torch.__version__)

 

728x90
반응형

728x90
반응형

  지금까지 AWS Lambda를 이용하는 방법에 대해서 알아보았습니다. 다만 단순히 AWS Lambda를 이용하여 코딩하고, 서비스를 개발하면 다양한 어려움에 봉착할 수 있습니다. 특히 AWS Lambda를 이용하면, 프로그램의 크기가 커질 때 직접 웹 사이트에서 코딩을 하는 것이 어려워집니다. 뿐만 아니라 API 게이트웨이 등을 주기적으로 설정해주어야 한다는 점에서 손이 많이 가게 됩니다.

 

  이럴 때 Serverless Framework를 이용하게 되면, AWS Lambda를 보다 손쉽게 이용할 수 있습니다. 직접 수작업으로 설정하던 것과 비교했을 때, 복잡한 작업을 간단한 명령어로 대신 처리할 수 있도록 해주기 때문에 매우 유용합니다.

 

  Serverless Framework를 이용하기 위해서는, IAM 사용자 설정을 해주셔야 합니다. 따라서 AWS 콘솔에 로그인을 한 뒤에 [My Security Credentials] 탭으로 이동합니다.

 

 

  이후에 [IAM Users]를 설정할 수 있도록 합니다.

 

 

  Serverless 프레임워크(Framework)의 실습을 위하여 간단히 하나의 사용자를 추가할 수 있습니다. 따라서 [Add user]를 눌러주세요.

 

 

  이후에 다음과 같이 사용자 이름을 설정한 뒤에 [Programmatic access]에 체크합니다. 그러면 프로그래밍 환경에서 AWS 계정 권한에 접근할 수 있게 됩니다.

 

 

  또한 해당 IAM 사용자에게 권한을 설정해 줄 수 있습니다. 다음과 같이 [AdministratorAccess] 권한을 부여하시면 됩니다. 이 권한은 말 그대로 AWS 계정과 동일한 수준의 권한을 의미합니다. 따라서 향후 만들어 질 IAM 사용자의 Secret Key 값을 다른 사람에게 노출하게 되면, 심각한 문제가 발생할 수 있으므로 반드시 유의하여 Secret Key 값을 관리하셔야 합니다.

 

 

  결과적으로 다음과 같이 사용자를 생성할 수 있습니다.

 

 

  리뷰를 완료하고, 사용자를 최종적으로 생성합니다.

 

 

  사용자가 생성되면 Access Key ID와 Secret Access Key 값이 주어집니다. 이 때 Secret Access Key 값은 반드시 유의하여 저장하셔야 합니다. 이 값을 다른 사람에게 노출하게 되면, 악의적인 의도를 가진 해커가 이를 악용하여 우리의 AWS 계정을 마음대로 다룰 수 있습니다. 예를 들면 무작위로 EC2 인스턴스를 생성해서 하루 만에 1억 가까이 과금이 되도록 할 수도 있겠죠? 따라서 매우 매우 조심하셔야 합니다.

 

 

  이제 Serverless Framework를 위한 AWS IAM 사용자가 만들어졌습니다. 이제 Serverless 프레임워크를 이용해 보겠습니다. 가장 먼저 serverless 모듈을 설치하셔야 합니다. 다음과 같은 명령어로 설치할 수 있습니다.

 

npm install -g serverless

 

 

  Serverless 프레임워크(Framework)는 기본적으로 다양한 템플릿을 제공하고 있습니다. 이러한 템플릿을 이용하면, 자신이 원하는 프로그래밍 언어를 선택하여 빠르게 개발을 진행할 수 있습니다. 다음의 명령어를 입력하여 템플릿(Template) 종류를 확인합시다.

 

serverless create --template

 

 

  이 중에서 가장 기본적인 Node.js 프로젝트 형태를 가지고 있는 aws-nodejs라는 템플릿을 이용해보도록 하겠습니다. 다음의 명령어를 입력하면, 현재 폴더에 aws-nodejs 템플릿의 파일들을 생성하게 됩니다.

 

serverless create --template aws-nodejs

 

 

  실제로 현재 폴더를 확인해 보시면, handler.js와 serverless.yaml 파일이 생성되어 있습니다.

 

  - handler.js: 실제로 API 역할을 수행하는 Node.js 소스코드입니다.

  - serverless.yaml: Serverless 프레임워크의 기본적인 설정 파일입니다.

 

 

  이제 Serverless 프레임워크(Framework)를 사용하기 위하여 AWS 계정 정보를 설정합니다. 아래와 같은 명령어로 AWS 계정 정보를 설정하면, 배포 할 때 해당 AWS 계정으로 배포하게 됩니다.

 

serverless config credentials --provider aws --key {Key ID} --secret {Secret Key}

 

 

  이제 실제로 API를 위한 소스코드를 작성해보도록 하겠습니다. 따라서 handler.js 코드를 수정합니다.

 

'use strict';

module.exports.hello = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: '성공적으로 배포가 완료되었습니다!',
      input: event,
    }, null, 2),
  };
};

 

  이후에 실질적인 배포 설정을 위하여 serverless.yaml 코드를 수정합니다. 서울(Seoul) 지역(Region)에 Node.js 10 버전으로 배포를 진행하는 것입니다. 또한 handler.js에 있는 hello 함수를 api/hello라는 경로의 GET 방식으로 배포하게 됩니다.

 

service: serverless-nodejs-study

provider:
  name: aws
  runtime: nodejs10.x
  region: ap-northeast-2

functions:
  hello:
    handler: handler.hello
    events:
      -  http:
            path: api/hello
            method: get

 

  이후에 배포를 진행합니다. 배포는 다음과 같은 명령어로 수행할 수 있습니다. deploy 명령어를 수행하면, 현재 폴더에 있는 serverless.yaml 파일에 적혀 있는 설정에 의하여 배포가 진행됩니다.

 

serverless deploy

 

 

  또한 배포가 완료되면, 각 HTTP 메소드(Method) 별로 호출할 수 있는 URL 주소가 나옵니다. 실제로 URL 주소로 접속해 보면 다음과 같이 우리가 작성한 API가 실행되는 것을 확인할 수 있습니다.

 

 

  이후에 AWS 콘솔에 접속하여, 실제로 배포가 완료된 AWS Lambda 함수를 확인할 수 있습니다.

 

 

  뿐만 아니라 작성한 API 소스코드의 길이가 짧기 때문에, AWS Lambda 소스코드를 직접 수정할 수도 있군요.

 

 

728x90
반응형

728x90
반응형

  흔히 우리가 앱을 개발할 때는 페이스북(Facebook) 회원가입/로그인 기능을 구현하곤 합니다. 소셜 로그인 기능에서 가장 중요한 것은 서버에서 이를 검증하는 것입니다. 이미 페이스북 계정으로 가입이 된 사용자의 로그인을 처리하는 소스코드는 PHP로 다음과 같이 작성할 수 있습니다. 이 때 해당 서버에서는 이메일(Email)을 기준으로 회원을 구분한다고 가정합니다. 다시 말해 Facebook API로부터 Access Token으로 이메일 정보를 받아 와서, 그것으로 서버에서 로그인 처리를 시켜주는 것입니다.

 

  이미 사용자가 앱에서 로그인을 했다고 가정하고, Access Token을 서버로 보냈을 때 이를 처리하는 예제입니다. 다음의 소스코드를 참고하시면 될 것 같습니다.

// 사용자로부터 Facebook 로그인 이후 Access Token을 받습니다.
$access_token = $this->input_check('access_token');
$client = new \GuzzleHttp\Client();
if($access_token == "") {
    $this->output->set_status_header(400); // 입력 값 형식이 바르지 않습니다.
    exit;
}
try {
    // Facebook Graph API를 이용하여 Email 정보를 받아올 수 있습니다.
    $response = $client->request('GET', 'https://graph.facebook.com/me?fields=name,email&access_token='.$access_token);
    $body = $response->getBody();
    if($response->getStatusCode() == 400) {
        $this->output->set_status_header(500);
        exit;
    }
    $json_response = json_decode($body, true);
    // Facebook Graph API로부터 Email 정보를 받아와 출력합니다.
    echo $json_response['email'];
    /*
    // 아래는 로그인 인증 수행을 위한 처리 로직 예제입니다.
    $email_data['member_email'] = $json_response['email'];
    $result = $this->model_login->check_signup_type($email_data);
    if($result) {
        switch($result->signup_type) {
            case '0' :
                $this->output->set_status_header(503); // 일반 회원으로 가입한 계정입니다.
                exit; break;
            default:
                $info = $this->model_login->get_info_by_email($email_data);
                if(empty($info)) {
                    $this->output->set_status_header(501); // 존재하지 않는 계정입니다.
                    exit;
                }
                $token = array(
                    "exp" => time() + (60 * 60 * 24 * 7), // Refresh Token의 유효 기간은 7일입니다.
                    "member_idx" => $info->member_idx,
                    "token_type" => "refresh_token"
                );
                $jwt = JWT::encode($token, $this->jwt_key);
                $response = array("refresh_token" => $jwt);
                echo json_encode($response);
        }
    } else {
        $this->output->set_status_header(501); // 존재하지 않는 계정
        exit;
    }
    */
} catch (Exception $e) {
    // 예외 처리를 진행합니다.
}

 

728x90
반응형

728x90
반응형

  구글 인 앱 결제(IAP)는 특정한 애플리케이션의 사용자가 인 앱 결제를 이용할 수 있도록 해주는 기능입니다. 일반적으로 인 앱 결제 기능을 앱에 넣는 경우, 앱에서 사용자가 특정한 물품을 구매한 뒤에 서버의 결제 완료 API를 호출하게 됩니다. 그러면 서버의 결제 완료 API는 앱 사용자에게 아이템을 지급하는 등의 처리를 하게 됩니다.

 

  하지만 많은 서버 개발자들은, 구글 인 앱 결제(In App Purchasing)검증 로직을 넣지 않습니다. 이는 매우 위험하다고 할 수 있습니다. 인 앱 결제 기능을 이용할 때는 클라이언트가 서버 결제 완료 API를 호출했을 때, 해당 사용자가 진짜로 결제를 했는지 확인해야 합니다. 예를 들어, 특정한 악성 클라이언트는 실제로 결제를 하지 않았음에도 서버 API 주소를 알아내서, 해당 API를 무한정 호출해 부당한 이익을 취할 수 있습니다.

 

  따라서 이번 시간에는 구글 인 앱 결제(IAP) 인증을 위한 구글 개발자 API를 사용하는 방법을 소개합니다.

 

  ▶ Google Cloud Platform API Library: https://console.cloud.google.com/apis/library

 

  구글 라이브러리는 위 링크에서 모두 확인할 수 있습니다.

 

 

  이후에 다음과 같이 [Google Play Android Developer API]를 검색하여 확인할 수 있도록 합니다.

 

 

  이후에 [Google Play Android Developer API]를 사용하겠다고 설정하시면 됩니다.

 

 

  이 때 [프로젝트]가 없는 경우 [프로젝트 만들기]를 진행하고, [새 프로젝트 생성] 이후에 [사용 설정]을 하시면 됩니다. 반면에 이미 구글 플레이 콘솔에 올라가 있는 앱과 연동되어 있는 프로젝트가 있는 경우 해당 프로젝트에서 그대로 확인하시면 됩니다. 우리가 해야 할 일은 바로 [사용자 인증 정보]를 만드는 것입니다. 다시 말해 특정한 안드로이드 앱의 사용자 결제 내역을 확인할 수 있는 권한을 가지고 있는, '사용자 인증 정보'를 생성해야 하는 것입니다.

 

 

  따라서 [사용자 인증 정보]로 이동한 뒤에 [사용자 인증 정보 만들기]를 눌러 [서비스 계정 키] 탭에 들어갑니다.

 

 

  이후에 [새 서비스 계정]을 선택한 뒤에 [서비스 계정 이름]을 설정합니다. 그리고 역할은 [소유자]로 선택할 수 있습니다. 이제 [생성] 버튼을 눌러서 JSON 파일을 생성하시면 됩니다. 생성 이후에는 JSON 파일이 생성되므로, 이 파일을 저장해주세요. 향후 서버에서 이 JSON 파일을 이용하여 구글 인 앱 결제 인증을 수행할 수 있습니다.

 

  이제 구글 플레이 개발자 콘솔에 업로드가 되어 있는 앱을 확인합니다.

 

▶ 구글 플레이 개발자 콘솔: https://play.google.com/apps/publish

 

  다음과 같이 Play Console에서 [설정] 탭에 들어가 [API 액세스]를 확인합니다. 그리고 만들어진 서비스 계정에 [액세스 권한 부여]를 진행하고, [앱 정보 보기] 및 [재무 데이터 보기]만 체크하여 [사용자 추가]를 진행하시면 됩니다.

 

 

  결과적으로 다음과 같이 [재무 데이터 보기] 권한이 있도록 해주시면 되는 것입니다.

 

 

  이제 재무 데이터를 볼 수 있는 권한이 추가되었으므로, 실제로 서버에서 API를 호출하여 인 앱 결제 내역을 확인할 수 있게 되었습니다. 서버 프로그램에서 이를 구현하기 위해서는, API 문서를 읽어 보시면 됩니다.

  

▶ 구글 결제 관련 개발자 API 명세서: https://developers.google.com/android-publisher/api-ref/purchases/products

 

  명세서 내용을 확인하면, 어떠한 방식으로 인 앱 결제 정보를 가져올 수 있는지 나타납니다. 핵심이 되는 내용은 다음과 같습니다.

 

 

  구글 결제 관련 개발자 API 사용 방법은 다음과 같습니다. 저는 PHP를 기준으로 설명했습니다.

 

cd /home/ubuntu
sudo vi composer.json
# Google API 설치 내용 작성하기
{
  "require": {
    "google/apiclient": "^2.0"
  }
}
# Composer로 설치하기
sudo composer install
ls
# 해당 폴더에 설치되어 있는 vendor 이용하기
# 연동을 위해 Google의 API JSON 키 파일을 /home/ubuntu의 위치에 두기
# 이후에 다음과 같이 사용하기 (클라이언트로부터 product_id와 purchase_token을 받도록)
$client = new Google_Client();
$client->setAuthConfig('/home/ubuntu/IAP.json');
$client->addScope('https://www.googleapis.com/auth/androidpublisher');
$service = new Google_Service_AndroidPublisher($client);
$package_name = "패키지 이름";
$purchase = $service->purchases_products->get($package_name, $product_id, $purchase_token);
# 이후에 다음의 Getter 함수로 각 상태 값 확인 가능
$purchase->getPurchaseState()
$purchase->getPurchaseType()

 

  (+추가) PHP 코드에 대한 자세한 내용은 다음의 포스팅에 기록해 놓았습니다.

 

https://ndb796.tistory.com/296

 

PHP 서버에서 안드로이드 인 앱 결제(IAP) 여부를 검증하는 API 개발하는 방법

일반적으로 안드로이드 어플리케이션을 개발할 때에는 인 앱 결제(IAP) 기능을 구현해야 할 때가 많습니다. 다만 이러한 인 앱 결제 기능을 구현할 때 알아 두어야 할 점이 있습니다. 그것은 바로 클라이언트가 제..

ndb796.tistory.com

 

728x90
반응형

728x90
반응형

  흔히 이사를 갈 때 주소 변경을 하는 것은 귀찮은 작업이 될 수 있습니다. 이때 주소 변경을 일괄적으로 도와주는 서비스가 있습니다. 대표적인 서비스로는 KT Moving이 있습니다. 이름은 KT Moving인데 실질적으로는 상당히 많은 카드사 및 통신사와 제휴가 되어 있기 때문에, 이 서비스만 이용해도 상당히 많은 불필요한 과정을 줄일 수 있습니다.

 

※ KT Moving ※

 

  ▶ KT Moving: http://www.ktmoving.com/

 

  KT Moving 서비스를 이용해 봅시다. 참고로 moving이사라는 뜻을 가지고 있습니다. 가장 먼저 변경된 집 주소를 입력한 뒤에 [주소 변경 신청] 버튼을 누릅니다.

 

 

  이후에 약관에 동의하고, 본인 인증을 진행합니다. 필자는 [휴대폰 인증]을 이용했습니다.

 

 

  KT Moving 서비스 제휴사를 선택합니다. 필자는 번거롭게 느껴져서 그냥 전체 선택했습니다.

 

 

  필자는 [자택] 주소가 변경된 것이므로, 전부 자택으로 선택했습니다.

 

 

  이제 신청 정보를 입력합니다. 본인의 휴대폰 번호, 이메일 주소 등을 확인합니다.

 

 

  결과적으로 다음과 같이 신청이 완료되었습니다.

 

 

※ 농협 주소일괄변경서비스 (2021년 기준으로 운영되고 있지 않음)

 

  농협은 [주소일괄변경서비스]를 제공하고 있습니다. 이것을 이용하면 자신이 이용하고 있는 은행/카드 서비스의 주소를 일괄적으로 변경할 수 있습니다. 사실 농협뿐만 아니라 대부분의 은행 서비스가 이를 지원하고 있습니다. 자신이 이용하는 은행의 인터넷 뱅킹 서비스에 접속하셔서, 주소지 일괄 변경 요청을 진행해주세요.

 

  이는 특정한 금융 회사에게 권한을 위임하여, 자신이 이용 중인 모든 카드에 대하여 주소 변경을 일괄적으로 할 수 있도록 해주는 것입니다. 매우 편리한 기능이라고 할 수 있습니다.

 

  ▶ 농협: https://banking.nonghyup.com

 

  농협 사이트로 들어가서 [로그인]을 진행하시면 됩니다.

 

 

  로그인 이후에는[My뱅크] 탭에서 [고객정보관리] 탭으로 이동한 뒤에 [금융거래 주소일괄변경]을 진행하시면 됩니다.

 

 

  이후에 화면에 나오는 대로 지시에 따르시고, 금융회사를 선택하여 일괄적으로 변경 요청을 진행하시면 됩니다.

 

 

※ 구글 애드센스 ※

 

  구글 애드센스와 같이 외국 기업과 관련한 서비스는, 주소를 일일이 변경해주실 필요가 있습니다. 구글 애드센스의 주소를 변경하는 경우 애드센스에 로그인을 하신 뒤에 [지급] 탭으로 이동하시면 됩니다. 이후에 [설정 관리]를 진행합니다.

 

 

  이후에 다음과 같이 [이름 및 주소] 부분을 변경해주시면 됩니다.

 

 

728x90
반응형

728x90
반응형

  일반적으로 특별한 사유가 없이 군대에 지원을 하지 않은 경우, 군대에 오라는 안내 편지가 오게 됩니다. 다시 말해 자동으로 입영 일자가 결정되어, 언제까지 입대를 하라고 통보가 오는 것입니다. 일반적으로 입영 일자 6개월 전에 입영 안내 편지를 받게 됩니다. 이 때 대학원 진학이나 창업 등의 다양한 사유로 인하여 입영 일자를 연기하는 것이 가능합니다.

 

  흔히 대학을 졸업할 때까지 군대를 가지 않은 사람이, 6개월 정도 대학원이나 창업을 준비하고 있는 상태일 수 있습니다. 이 때는 다음과 같이 생긴 [현역병 입영일자 등 안내] 편지를 받을 수 있습니다. 저는 향후 이번년도 9월부터 공대에서 대학원 석사 과정을 진행하게 될 예정인데, 입대하라는 안내를 받은 것이므로 당황스러웠습니다.

 

 

  당연히 병무청 쪽에서는 제가 최근에 어떤 활동을 하고 있는지, 정확히 파악하기 어렵습니다. 그러므로 제가 적절한 서류를 구비하여 합리적인 사유로 연기 신청을 직접 해야 하는 것입니다. 또한 입영 일자 연기는 입영일 5일 전까지 신청이 가능합니다. 다시 말해 안내 편지가 받은 뒤에 입영 연기 사유가 있다면, 서류를 구비하기 위한 시간을 주는 것입니다.

 

  이에 대한 자세한 내용은 [병무청]의 [복무제도] 탭에서 확인할 수 있습니다.

 

  병무청 입영일자 연기 안내: https://www.mma.go.kr/contents.do?mc=mma0000729

 

입영일자 연기 - 현역병,상근예비역 - 복무제도 - 병역이행안내 - 병무청

병역이행안내INFORMATION --> --> 입영일자 연기 입영일자 연기 개요 현역병 입영 대상자로서 질병 등 부득이한 사유로 지정된 입영일자에 입영할 수 없는 사람이 병역이행일 연기신청서를 제출하면 이를 심사하여 입영일자를 연기하는 제도 신청대상 현역병입영 대상자로서 아래 연기사유에 해당되는 사람. 단, 입영일자/입영부대를 본인이 선택한 사람은 입영일자 연기(질병, 직계 존·비속 간호, 천재·지변, 행방불명, 각군지원 사유자는 제외) 처리 제한 신청시

www.mma.go.kr

 

  위 링크에 들어가 보시면 대학원, 창업 말고도 굉장히 다양한 사유로 입영 연기하는 것이 가능합니다. 입영 연기를 하실 때에는 사이트에 직접 방문하셔서, 자신에게 맞는 입영 연기 사유를 찾으신 뒤에 해당 항목으로 입영 연기 신청을 하시면 됩니다.

 

  예를 들어 질병, 검정고시 준비, 취업자, 출산, 창업, 공무원 시험 준비 등의 다양한 사유로 연기를 할 수 있습니다. 또한 일반적인 경우 연기 신청을 하면 1~2년 정도의 연기를 해줍니다. 당연히 어떤 사유로도 무한히 연기를 할 수는 없고, 28세를 넘어가는 경우 입영 연기를 하기 어렵습니다.

 

  저는 확인을 해보니까 [대학원진학 예정자] 항목으로 입영 연기를 할 수 있다고 안내가 됩니다. 저는 실제로 대학원 합격 및 컨택까지 완료가 된 상태이므로, 무난히 입영 연기를 할 수 있습니다.

 

 

  또한 입영 연기를 하실 때 흔히 실수하시는 부분으로는, 잘못된 경로로 들어가는 것입니다. [현역병 입영일자 등 안내] 우편을 받은 경우 올바른 경로에 들어가서 신청을 하셔야 합니다.

 

잘못된 경로: [병무청 홈페이지 → 병무민원포털 → 군지원 → 입영일자 연기 신청]

올바른 경로: [병무청 홈페이지 → 병무민원포털 → 현역, 상근입영 → 입영일자 연기원 신청]

 

  바로 다음과 같이 [병무민원포털]로 이동하여 [현역, 상근입영] 탭으로 이동하세요.

 

 

  이후에 [입영일자 연기원 신청]을 통해 연기 신청을 할 수 있습니다.

 

 

  이후에 다음과 같이 안내사항에 동의를 하고 신청서를 제출하시면 됩니다. 더불어, 보완할 서류 항목이 있다면 유선이나 문자를 통해 다시 안내를 해주신다고 하네요.

 

 

  대학원 진학이 사유인 경우 졸업 증명서를 제출하면 된다고 하네요. 결과적으로 저는 다음과 같이 졸업 증명서를 제출했습니다.

 

 

  신청이 완료되면 다음과 같이 신청 결과 안내 메시지가 출력됩니다.

 

 

 

728x90
반응형