18강 필터(Filter) 함수를 이용한 고객(Customer) 검색 기능 구현하기 [React와 Node.js로 만드는 고객 관리 시스템 개발 강좌]
이번 시간에는 필터(Filter) 함수를 이용하여 고객(Customer) 검색 기능을 구현하는 방법에 대해서 알아보도록 하겠습니다.
▶ App.js
기본적으로 검색 창에 사용자가 입력한 문자열을 스테이트(State)에 반영하기 위해서는 다음과 같은 값 변경 처리 함수가 필요합니다. 바로 함수를 만들어 보도록 하겠습니다.
이후에 생성자(Constructor)에서 이를 바인딩(Binding) 처리해주시면 됩니다.
이후에 <InputBase>에서 다음과 같이 작성합니다.
지금까지는 단순히 고객 스테이트가 변경되면 전체 고객을 바로 보여주는 식으로 코드가 동작했습니다. 이제는 전체 고객 컴포넌트를 생성하는 부분을 render() 함수의 가장 윗 부분에서 새롭게 명시해주도록 하겠습니다.
이후에 <TableBody> 부분을 다음과 같이 작성하면 됩니다.
마지막으로 새로운 고객이 추가된 경우 검색 창 내용도 비워질 수 있도록 처리하겠습니다.
※ 실행 결과 ※
'React와 Node.js로 만드는 고객 관리 시스템 개발 강좌' 카테고리의 다른 글
우분투(Ubuntu) 서버에서 스웨거(Swagger) 설치 및 사용 방법
※ 스웨거(Swagger) 설치하기 ※
우분투(Ubuntu)와 같은 리눅스 서버에 스웨거(Swagger)를 설치하기 위해서 선택할 수 있는 가장 간단한 방법은 npm을 이용해 swagger를 설치하는 것입니다. 바로 다음과 같은 명령어를 통해 설치를 진행해보겠습니다.
sudo apt install npm
sudo npm install -g swagger스웨거(Swagger)가 설치된 이후에는 [swagger project create] 명령어를 이용해 스웨거 프로젝트를 생성할 수 있습니다.
swagger project create {프로젝트 이름}
프로젝트를 생성할 때는 어떤 프레임워크를 이용해서 스웨거 프로젝트를 생성할 지 결정할 수 있습니다. 저는 자바스크립트 기반의 서버 프레임워크인 익스프레스(Express)를 선택하겠습니다. 또한 저는 프로젝트 이름을 swagger라고 설정하겠습니다.
이후에 생성된 프로젝트 폴더로 이동하여 [swagger project start] 명령어를 이용해 스웨거를 동작시킬 수 있습니다.
# [Express] 프로젝트 설정하기
cd swagger
swagger project start스웨거 프로젝트는 기본적으로 10010번 포트로 실행됩니다.
혹시 AWS EC2 서버를 이용하는 분들은 다음과 같이 [보안 그룹]의 [인바운드 규칙 편집]에서 10010번 포트를 열어주셔야 합니다.
결과적으로 다음과 같이 우리의 서버에 10010번 포트를 이용해 접속할 수 있습니다. 스웨거 프로젝트가 처음 생성되면 기본적인 경로로 /hello?name={이름}의 형태로 API를 사용해 테스트 할 수 있습니다.
※ 스웨거(Swagger) 항상 실행시키기 ※
이제 서버에서 스웨거가 항상 실행되고 있는 상태로 만들 필요가 있습니다. 이를 위해 다음과 같이 bg 및 disown -h 명령을 이용합니다.
# [Ctrl] + Z 입력하여 현재의 Swagger 서버 실행 종료하기
bg
disown -h이후에 다음과 같이 netstat 명령을 이용하여 스웨거가 항상 실행되고 있는 것을 확인할 수 있습니다.
※ 스웨거(Swagger) UI 기능 넣기 ※
스웨거(Swagger) UI 기능을 넣기 위해서는 app.js 파일을 수정하여 swagger-ui 미들웨어 라이브러리를 불러오시면 됩니다. 이 때 소스코드 상에서 API를 호출할 대상이 되는 서버의 아이피와 포트 번호를 입력하여 실행시키면 됩니다. 뿐만 아니라 공인 IP가 있는 서버를 이용하는 경우, 해당 IP를 넣으셔야 합니다.
'use strict';
var SwaggerUi = require('swagger-tools/middleware/swagger-ui');
var SwaggerExpress = require('swagger-express-mw');
var app = require('express')();
module.exports = app; // for testing
var config = {
appRoot: __dirname // required config
};
SwaggerExpress.create(config, function(err, swaggerExpress) {
if (err) { throw err; }
swaggerExpress.runner.swagger.host = '아이피:10010';
app.use(SwaggerUi(swaggerExpress.runner.swagger));
// install middleware
swaggerExpress.register(app);
var port = process.env.PORT || 10010;
app.listen(port);
if (swaggerExpress.runner.swagger.paths['/hello']) {
console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott');
}
});
이후에 /docs 경로로 접속을 하면 다음과 같이 Swagger UI가 등장합니다. 다만 이렇게 누구든지 접속할 수 있는 경로에 UI가 존재하면, 누구든지 해당 경로에 접속해서 테스트해 볼 수 있다는 문제점이 존재합니다. 따라서 API 키를 설정하여 쉽게 접속할 수 없도록 해야 합니다.
그러므로 API Key를 이용했을 때만 Swagger를 사용할 수 있도록 보안 처리를 해줍시다. sudo vi app.js를 입력하여 app.js를 열어서 다음과 같이 config 변수의 내용을 수정해주도록 하겠습니다.
var config = {
appRoot: __dirname, // required config
swaggerSecurityHandlers: {
api_key: function (req, authOrSecDef, scopesOrApiKey, cb) {
// API 키 값이 'my_key'일 경우에만 허용합니다.
if ('my_key' === scopesOrApiKey) {
cb();
} else {
cb(new Error('access denied!'));
}
}
}
};
이어서 sudo vi api/swagger/swagger.yaml를 입력하여 swagger.yaml 파일을 열어서 스웨거 파일을 작성할 수 있습니다. 앞서 명시한 API Key를 적용해보도록 하겠습니다. 다음의 내용을 기존에 만들어진 swagger.yaml 문서에서 'definitions' 부분의 바로 위에 넣습니다.
securityDefinitions:
api_key:
type: apiKey
in: query
name: api_key
security:
- api_key: [ ]
이제 다시 프로젝트를 실행해서 테스트 해보면 다음과 같습니다. API를 호출하기에 앞서 자신이 설정한 키를 상단에 넣어주세요.
만약에 키를 넣지 않고 호출하면 다음과 같이 오류 메시지가 출력됩니다.
반면에 키를 넣고 호출하면 api_key라는 파라미터로 키 값이 함께 전송되며 다음과 같이 정상적으로 결과가 출력됩니다.
'Swagger' 카테고리의 다른 글
| Swagger Hub를 이용한 REST API 관리 (2) | 2019.01.20 |
|---|
AWS EC2 볼륨(Volume) 간단히 증가시키는 방법
AWS EC2를 이용하다 보면 볼륨(Volume)이 초과되어 새로운 라이브러리 등을 설치하는 데에 제약이 생길 수 있습니다. 이번 시간에는 정해진 서버 용량인 볼륨(Volume)이 부족할 때 볼륨의 용량을 늘리는 방법에 대해서 소개하고자 합니다.
따라서 가장 먼저 AWS EC2 관리 페이지로 이동하여 [볼륨] 탭으로 이동하시면 됩니다.
이후에 자신이 늘리고자 하는 인스턴스의 [볼륨]을 찾으셔서 [작업] - [볼륨 수정]에 들어가시면 됩니다. 저는 크기가 8GB인 볼륨을 16GB로 늘려보도록 하겠습니다.
이후에 볼륨을 원하는 크기로 증가시키시면 됩니다. 정말 간단합니다.
수정 내역이 반영되기까지는 일반적으로 10분 ~ 1시간 내외의 시간이 소요될 수 있습니다.
결과적으로 다음과 같이 처리가 진행 중인 것을 확인할 수 있습니다.
저는 약 10분의 시간이 흐른 뒤에 다음과 같이 초록색으로 볼륨 증가 완료 처리 되었습니다.
이제 인스턴스를 재부팅 해주시면 안정적으로 적용됩니다.
다시 서버에 접속하여 다음의 명령어로 볼륨 내의 용량이 어떻게 배정되어 있는지 확인할 수 있습니다. 저는 성공적으로 기존의 8GB의 디스크 용량이 16GB로 증가한 것을 확인했습니다.
df -Th
'AWS' 카테고리의 다른 글
| AWS RDS로 만든 MySQL 기준 시간을 한국 시간으로 설정하는 방법 (0) | 2019.03.27 |
|---|---|
| AWS EC2 인스턴스 성능(사양) 변경하는 방법! (인스턴스 유형 변경) (0) | 2019.03.19 |
| AWS EC2에 탄력적 IP(Elastic IP)를 이용해 고정 IP 부여하기 (0) | 2019.03.19 |
| AWS EC2 인스턴스 지역 변경하기 (이미지를 활용한 방법) (0) | 2019.03.19 |
| AWS EC2에서 Jupyter Notebook 개발환경 구축하는 방법 (2) | 2019.01.20 |
XML, JSON, YAML 형식 내용 정리 및 비교 분석
JSON, YAML, XML은 모두 데이터(Data)를 표현하는 형식입니다. 다만 그 형태와 문법은 조금씩 다르다는 점에서 그 차이점을 바르게 인지하고 있는 것이 중요합니다. 따라서 이번 시간에는 XML, JSON, YAML에 대해서 공부한 뒤에 이를 비교하는 시간을 가져보도록 하겠습니다. 세 가지 중에서 무엇이 가장 효과적이라고 말할 수는 없으며 상황에 맞는 형식을 이용할 수 있으면 됩니다.
1. XML
XML은 데이터를 표현하기 위하여 많이 사용되어 온 방식으로 HTML과 흡사한 구조를 가지고 있습니다. XML이 가지는 고유한 문법이 있다는 점에서 소프트웨어 및 하드웨어에 대하여 독립적으로 데이터를 처리할 수 있습니다. XML의 특징은 꺽쇠(<>)입니다. XML은 트리(Tree) 계층 구조를 가지고 있습니다. 루트(Root) 요소부터 시작해 여러 개의 자식을 계층적으로 포함하게 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<name>홍길동</name>
<score>95</score>
<hobby>
<element>Soccer</element>
<element>Ninza</element>
</hobby>
</user>
<user>
<name>이순신</name>
<score>100</score>
<hobby>
<element>Sing</element>
<element>Dancing</element>
</hobby>
</user>
<user>
<name>나동빈</name>
<score>97</score>
<hobby>
<element>Coding</element>
<element>Hiding</element>
</hobby>
</user>
</users>
또한 XML은 유효성 검증(Validation)을 통해서 올바르게 작성되었는지 확인할 수 있습니다.
▶ XML 유효성 검증 사이트: https://www.xmlvalidation.com/
※ XML 선언 ※
XML 문서는 기본적으로 <xml> 태그를 이용해서 XML 문서임을 명시할 수 있습니다. 속성으로는 다음과 같은 것들을 넣을 수 있습니다.
- version: XML 문서의 버전을 명시합니다.
- encoding: XML 문서의 문자 셋(Character Set)을 명시합니다. 일반적으로 UTF-8을 사용합니다.
- standalone: XML 문서 외부 소스 데이터에 의존하는지의 여부를 명시합니다.
따라서 일반적으로 다음과 같이 작성할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
※ XML 문법 ※
XML 문서는 규칙적인 형태를 가지고 있습니다. 가장 중요한 문법으로는 XML 요소들은 시작 태그와 종료 태그로 구성된다는 점입니다. 태그는 꺽쇠(<>)를 이용해 명시하며, 닫는 태그에는 슬래시(/)를 함께 넣어줍니다. 예를 들어 TITLE이라는 이름의 태그를 사용한다고 하면 다음과 같이 사용할 수 있습니다.
<TITLE>내용</TITLE>
이 때 시작태그와 종료 태그는 대소문자까지 모두 동일해야 합니다. 또한 태그 안에 속성을 명시할 때는 따옴표를 넣어주어야 합니다. 속성을 사용할 때는 다음과 같이 사용할 수 있습니다.
<TITLE color="red" type="bold">내용</TITLE>
※ XML 주석 ※
XML은 주석(Comment)을 넣을 수 있습니다. XML의 주석은 <!-- 주석 내용 --> 형태로 사용할 수 있습니다.
2. JSON(JavaScript Object Notation)
JSON 또한 XML과 비슷하게 데이터를 처리하기 위한 형식입니다. 일반적으로 서버와의 통신 규약인 REST API를 사용할 때 가장 많이 사용되어, 최근에는 XML보다는 JSON 형식이 채택되고 있습니다. 사실상 모든 프로그래밍 언어에서 JSON을 지원한다는 점에서 XML과 YAML에 비해서 채택률이 높아지고 있습니다. JSON은 주석을 사용할 수 없다는 특징이 있습니다.
가장 먼저 XML 형식을 JSON 형식으로 바꾸는 예제를 확인하며 문법을 확인해보도록 하겠습니다.
[ 변환 이전 ]
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<name>홍길동</name>
<score>95</score>
<hobby>
<element>Soccer</element>
<element>Ninza</element>
</hobby>
</user>
<user>
<name>이순신</name>
<score>100</score>
<hobby>
<element>Sing</element>
<element>Dancing</element>
</hobby>
</user>
<user>
<name>나동빈</name>
<score>97</score>
<hobby>
<element>Coding</element>
<element>Hiding</element>
</hobby>
</user>
</users>
[ 변환 이후 ]
{
"users": {
"1": {
"name": "홍길동",
"score": 95,
"hobby": ["Soccer", "Ninza"]
},
"2": {
"name": "이순신",
"score": 100,
"hobby": ["Sing", "Dancing"]
},
"3": {
"name": "나동빈",
"score": 97,
"hobby": ["Coding", "Hiding"]
}
}
}
기본적으로 JSON 형식에서는 키(Key) 값이 서로 다른 형태로 사용됩니다. 그래서 위와 같이 사용자를 1, 2, 3으로 구분하는 방식으로, 사용자 명단에 대한 내용을 작성할 수 있습니다. 다만 JSON은 XML과 다르게 꺽쇠가 사용되지 않고 대괄호({})와 큰 따옴표를 이용해 계층형 구조를 형성한다는 특징이 있습니다.
▶ JSON 유효성 검증 사이트: https://www.xmlvalidation.com/
JSON 또한 유효성 검증 사이트에서 그 문법적 유효성을 검증할 수 있습니다.
3. YAML
YAML 또한 JSON과 비슷하게 사람이 읽기 쉬운 형태의 데이터 표현 형식입니다. YAML은 XML과 문법적으로 유사한 점이 많습니다. YAML에서도 주석을 사용 가능하며 개행, 공백으로 블록을 인식합니다. 다만, 태그를 사용하지 않고 공백 위주로 데이터를 구분하므로 한 줄로 작성할 수 없다는 특징이 있습니다.
그리고 JSON은 한글 등의 멀티 바이트 문자를 인코딩하여 보여주지만 YAML은 한글과 같은 유니코드를 그대로 사용할 수 있다는 장점이 있습니다. 일반적으로 API를 만들 때에는 JSON을 사용하며, YAML은 설정 파일을 작성할 때 가장 많이 사용된다는 특징이 있습니다. 심지어 YAML는 상속(Inherit) 등의 기능도 적용할 수 있다는 점에서 효율적입니다.
앞서 다루었던 사용자 명단 예제를 YAML 형태로 표현하면 다음과 같이 나타낼 수 있습니다.
users:
1:
name: 홍길동
score: 95
hobby:
- Soccer
- Ninza
2:
name: 이순신
score: 100
hobby:
- Sing
- Dancing
3:
name: 나동빈
score: 97
hobby:
- Coding
- Hiding
▶ YAML 유효성 검증 사이트: http://www.yamllint.com/
이와 같이 YAML 문서는 위에서 아래로 직렬적으로 작성되어 있다는 점에서 [데이터 직렬화 형식]이라고도 부릅니다. 일반적으로 Swagger API, Spring Boot, Docker 등의 굉장히 많은 환경에서 설정(Conf) 파일 작성을 목적으로 YAML을 사용합니다.
'기타' 카테고리의 다른 글
| 구글 애드센스(Google Adsense) 광고비 입금 받는 일자 늦추는 방법 (1) | 2019.02.26 |
|---|---|
| Firefox를 이용해 ESNI를 적용하는 방법 (1) | 2019.02.15 |
| 다른 사람 컴퓨터에서 깃 허브(Git Hub) 이용할 때 주의할 점 (0) | 2019.01.19 |
| AWS EC2에 AWS RDS 연동하기 (3) | 2019.01.03 |
| AWS VPC 안에 포함되어 있는 서비스들을 통째로 제거하는 방법 (2) | 2019.01.03 |
AWS EC2에서 Jupyter Notebook 개발환경 구축하는 방법
일반적으로 자신만의 서버를 구축하고 싶을 때는 가장 손쉬운 형태로 AWS EC2 서비스를 사용할 수 있습니다. AWS EC2에서는 하나의 컴퓨터(Computer) 자원을 하나의 인스턴스(Instance)라고 표현합니다. 이번 시간에는 AWS EC2를 이용하여 우분투(Ubuntu) 리눅스 개발환경을 구축한 뒤에 주피터 노트북(Jupyter Notebook)을 설치하여 외부에서 서버를 쉽게 관리하는 방법에 대해서 알아보도록 하겠습니다.
다음의 절차를 천천히 따라오시면, AWS에 대해서 아예 모르는 초보자도 30분 안에 AWS 우분투 서버와 Jupyter Notebook을 이용한 개인 서버 환경을 구축하실 수 있습니다. 바로 한 번 AWS EC2 인스턴스부터 만들어 보도록 하겠습니다.
※ AWS EC2 인스턴스 만들기 ※
AWS 콘솔(Console)에 접속하신 이후에 [EC2] 서비스에 들어갑니다.
[인스턴스 시작] 버튼을 눌러서 인스턴스를 생성하고 시작할 수 있습니다.
이후에는 우분투(Ubuntu) 리눅스 서버로 [선택]하여 생성해주겠습니다.
기본적으로 프리 티어(Free Tier) 서비스를 선택하여 사용하도록 하겠습니다.
별도의 설정을 바꿀 필요 없이 바로 [시작] 버튼을 눌러서 인스턴스를 구동시킬 수 있어요.
다만 처음 인스턴스를 시작할 때 [키 페어]를 설정할 수 있습니다. 이 키 페어는 실제로 AWS EC2 서버에 접속하기 위한 목적으로 사용됩니다. 따라서 키 페어를 분실하는 경우 상당히 귀찮은 일이 발생할 수 있습니다. 따라서 개인 드라이브에 소중히 보관하셔야 합니다. 저는 다음과 같이 새로운 키 페어를 생성하도록 하겠습니다.
결과적으로 키 페어 파일을 다운로드 한 뒤에 [인스턴스 시작]을 눌러주시면 완료됩니다.
※ AWS EC2 인스턴스에 접속하기 ※
저는 이렇게 만들어진 인스턴스에 [연결] 버튼을 눌러서 접속해보도록 하겠습니다.
이후에는 다음과 같이 서버에 접속할 수 있는 SSH 명령어가 나옵니다.
다만 윈도우(Windows) 운영체제에서 우분투 서버에 접속하기 위해서는 키 페어에 대한 귀찮은 [사용 권한 설정]이 필요합니다. 따라서 아까 다운로드 받은 키 페어 파일의 [속성]을 확인하여 [보안] - [고급] 탭으로 이동하시면 됩니다.
기본적으로 관리자 권한으로만 해당 키 페어를 사용하도록 처리해야 서버에 접속할 수 있어요.
따라서 원활한 권한 설정을 위해 [상속 사용 안 함] 처리를 진행해주세요.
그리고 [명시적 사용 권한으로 변환]으로 진행하시면 됩니다.
이후에 다음과 같이 일반 사용자들(Users)에 대한 모든 권한을 제거해 주시고, 관리자 그룹에서만 접근할 수 있도록 남겨줍니다.
이제 명령 프롬프트를 관리자 권한으로 실행하여 접속해보도록 하겠습니다.
해당 키 페어 파일이 존재하는 위치로 이동하여 앞서 확인했던 SSH 명령어로 서버에 접속하시면 됩니다.
이제 접속이 완료된 것을 확인할 수 있습니다. 최신 우분투에는 기본적으로 깃(Git), 파이썬(Python) 등이 설치가 되어 있습니다. 그러므로 간단히 파이썬을 이용해 정상적으로 구동되는 지의 여부를 확인해보도록 하겠습니다.
※ 주피터 노트북(Jupyter Notebook) 설치하기 ※
주피터 노트북은 다음과 같이 pip3 명령어를 이용하여 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install notebook※ 주피터 노트북(Jupyter Notebook) 비밀번호 설정하기 ※
이후에 주피터 노트북(Jupyter Notebook)의 비밀번호를 만들어 보도록 하겠습니다. 파이썬(Python)에서 다음과 같은 명령어로 비밀번호를 입력하여 생성할 수 있습니다.
python3
>> from notebook.auth import passwd
>> passwd()
# 비밀번호 설정한 뒤에 SHA1 값 기록해 놓기이제 실제로 주피터 비밀번호 설정 및 접속 설정을 하기 위해서 주피터 환경 설정 파일을 생성하도록 하겠습니다.
jupyter notebook --generate-config
sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py이제 주피터 환경 설정을 진행하기에 앞서 현재 서버의 내부망 IP 주소를 확인하도록 하겠습니다. 주피터 노트북을 이용해 서버를 개방할 때는 IP 주소 및 포트 번호를 설정해야 하기 때문입니다. 저는 다음과 같이 172.31.20.175라는 IP 주소를 확인할 수 있었습니다.
이제 다음과 같이 jupyter_notebook_config.py 파일을 열어서 환경 설정 내용을 작성해주시면 됩니다. 기본적으로 내용들이 주석처리 되어 있으므로 소스의 가장 아래 쪽에 다음과 같은 내용을 추가적으로 넣어주시면 됩니다.
c = get_config()
c.NotebookApp.password = u'sha1:{해시 값}'
c.NotebookApp.ip = '{내부 아이피}'
c.NotebookApp.notebook_dir = '{시작 디렉토리}'
# 내부 아이피로는 SSH로 접속했을 때 콘솔 창에 나오는 아이피를 입력하기환경 설정을 할 때는 기본적으로 주피터 노트북에 접속하기 위한 비밀번호는 앞서 설정했던 비밀번호의 SHA-1 해시 값을 넣어주시면 됩니다. 이후에 내부 아이피와 주피터에 접속했을 때 확인하게 되는 시작 디렉토리를 설정하시면 됩니다. 결과적으로 다음과 같이 작성하시면 됩니다.
※ 주피터 노트북(Jupyter Notebook) 실행하기 ※
이제 주피터 노트북을 실행할 수 있습니다. 저는 루트(Root) 권한을 허용한 형태로 주피터 노트북을 열어보도록 하겠습니다. 말 그대로 주피터 비밀번호만 알고 있으면 해당 서버를 완전히 루트 권한으로 다룰 수 있게 허용한다는 의미입니다.
sudo jupyter-notebook --allow-root명령어 입력 이후에는 다음과 같이 8888번 기본 포트로 주피터가 열린 것을 확인할 수 있습니다.
※ 방화벽 설정하기 ※
이후에 AWS EC2 관리 페이지에서 [보안 그룹] 설정을 통해 8888번 포트 방화벽을 개방할 수 있습니다. 기본적으로 AWS EC2는 보안을 위해 대부분의 포트를 막아놓습니다. 그래서 이와 같이 특정한 서버 프로그램을 운영할 때마다 보안 그룹 설정을 해주어야 합니다.
이후에 다음과 같이 [인바운드]에서 [편집] 버튼을 눌러 8888번 포트를 [위치 무관]으로 열어주시면 됩니다. 그러면 전세계 어디에서나 우리 서버의 주피터에 접속을 시도할 수 있게 됩니다.
※ 서버에 접속해보기 ※
이제 준비가 완료되었으므로 주피터(Jupyter)에 접속해보도록 하겠습니다. 우리 AWS EC2 서버의 공인 IP를 확인합니다.
이제 브라우저에서 해당 아이피에 8888번 포트로 접속하시면 됩니다. 다음과 같이 접속하여 비밀번호를 입력해 보겠습니다.
접속 이후에는 바로 [New] - [Terminal]에 들어가서 터미널에 접속해보도록 하겠습니다.
터미널에 접속한 이후에는 루트(Root) 권한을 이용할 수 있는 형태로 서버를 완전히 마음대로 컨트롤할 수 있게 됩니다.
※ 주피터 노트북 항상 켜놓기 ※
이제 주피터 노트북을 항상 켜놓는 방법에 대해서 소개하겠습니다. 기본적으로 주피터 노트북을 실행하는 명령을 입력한 이후에 동작을 종료하고, bg 명령을 이용해 백 그라운드에서 돌아가도록 처리할 수 있습니다. 이후에 소유권을 포기하면 백 그라운드에서 항상 주피터 서버가 동작하는 상태가 됩니다. 이로써 항상 서버를 열어놓을 수 있습니다. 명령어는 다음과 같습니다.
sudo jupyter-notebook --allow-root
# [Ctrl] + Z 입력하여 실행 종료하기
bg
disown -h'AWS' 카테고리의 다른 글
| AWS RDS로 만든 MySQL 기준 시간을 한국 시간으로 설정하는 방법 (0) | 2019.03.27 |
|---|---|
| AWS EC2 인스턴스 성능(사양) 변경하는 방법! (인스턴스 유형 변경) (0) | 2019.03.19 |
| AWS EC2에 탄력적 IP(Elastic IP)를 이용해 고정 IP 부여하기 (0) | 2019.03.19 |
| AWS EC2 인스턴스 지역 변경하기 (이미지를 활용한 방법) (0) | 2019.03.19 |
| AWS EC2 볼륨(Volume) 간단히 증가시키는 방법 (1) | 2019.01.20 |
Swagger Hub를 이용한 REST API 관리
스웨거(Swagger)는 대표적인 API 관리 도구입니다. 일반적으로 프로그램을 개발할 때에는 백 엔드 개발자와 프론트 엔드 개발자가 서로 협력하는 형태로 개발을 진행하게 됩니다. 이 때 백 엔드 프로그램과 프론트 엔드 프로그램 사이에서 정확히 어떠한 방식으로 데이터를 구조 받을 지에 대한 명세가 필요할 수 있습니다. 이러한 내용이 담긴 문서를 일반적으로 API 명세서라고 말합니다.
스웨거 허브는 다양한 프로젝트의 API 관리 기능을 지원해주는 스웨거 서비스입니다. 여러 명의 개발자가 스웨거 허브에 가입하여 하나의 프로젝트에 대한 API를 작성하고, 테스트 해 볼 수 있습니다.
▶ 스웨거 허브(Swagger Hub): https://swagger.io/tools/swaggerhub/
바로 한 번 스웨거 허브에 가입한 뒤에 로그인을 하여 실습을 진행해보도록 하겠습니다. 또한 기본적인 Open API 작성 방법에 대해서도 소개하겠습니다. 일단 바로 사이트에 접속하여 [Sign In]에 들어가 회원가입을 진행하겠습니다.
스웨거 허브(Swagger Hub)를 이용하시면 됩니다.
회원가입은 깃 허브(Git Hub)를 이용해서 진행할 수도 있지만, 저는 이메일을 이용해서 회원가입을 진행하겠습니다. 기본적으로 스웨거 허브는 혼자서 개인적인 목적으로 사용할 때는 무료로 이용할 수 있습니다. 다만 팀 규모로 이용할 때는 가격 정책이 적용될 수 있답니다.
회원가입 이후에 조직(Organization)을 생성하여, 자신의 팀원들을 초대할 수도 있습니다. 저는 단순히 예제만 다루는 목적으로 이용할 것이므로 대충 작성하고 넘어가도록 하겠습니다.
결과적으로 로그인을 진행하게 되면 새로운 API(New API)를 만들 수 있습니다. 말 그대로 특정한 프로젝트 하나에 대한 API 명세서를 작성할 수 있습니다.
이후에 API를 생성할 때는 설정을 진행할 수 있습니다. Open API 버전은 현재 2.0이 가장 많이 사용되며, 템플릿(Template)을 정해줄 수 있습니다. 템플릿은 API 명세서를 더 쉽게 작성할 수 있도록 도와주는 것으로, 기본적인 API 명세서 형태를 미리 갖춘 문서를 의미합니다.
가장 기본적인 예제인 펫 스토어(Pet Store) 예제를 통해 API 템플릿을 구성해보도록 하겠습니다. 말 그대로 애견샵 컨셉의 프로젝트 API 명세서라고 이해하시면 됩니다. 이를 많이 참고하셔서 향후 프로젝트의 API를 구성하시면 효율적이에요.
프로젝트가 생성되면 바로 다음과 같은 화면을 만날 수 있습니다. 처음 이러한 화면을 만나면 당황스러울 수 있으나 익숙해 지면 정말 효율적인 화면 구성이라는 것을 이해할 수 있어요.
▶ 화면의 왼쪽에는 API 내비게이션(Navigation)이 존재합니다.
▶ 그리고 중간에는 API 명세서의 에디터(Editor)가 들어가 있습니다. 실질적으로 이 소스코드가 API 명세서의 핵심이라고 할 수 있습니다.
▶ 오른쪽에는 실제로 API 명세서의 사용자 입장에서 테스트를 할 수 있는 UI 다큐먼트(UI Docs)가 존재합니다.
실제로 에디터에 작성되어 있는 소스코드가 UI 다큐먼트에서 어떻게 출력되는지 확인해보도록 하겠습니다. 기본적으로 스웨거 코드를 작성할 때는 특정한 API의 경로에 대해서 명시한 뒤에, HTTP 메소드(Method)에 대해서 명시합니다. 이후에 그 동작 과정에 대해서 적어주면 됩니다.
▶ GET 방식: 데이터 조회
▶ POST 방식: 새로운 데이터의 삽입 및 수정
▶ PUT 방식: 기존 데이터의 수정
▶ DELETE 방식: 기존 데이터의 삭제
아래 예제는 /pet/{petId}라는 경로에 GET 방식 및 POST 방식으로 접근했을 때의 처리 방식에 대해서 보여주고 있습니다.
실제로 오른쪽의 UI 다큐먼트를 보시면, 다음과 같이 테스트 환경이 구축되어 있는 것을 확인할 수 있습니다. 파라미터(Parameter)를 설정하여 데이터를 전송할 수 있습니다. 데이터를 전송하면 서버는 그에 대한 응답(Response)를 주게 됩니다.
기본적으로 응답 코드가 200인 경우 정상적으로 데이터를 처리하여 반환했다는 것을 의미합니다.
실제로 다음과 같이 응답 코드 200과 함께 JSON 형태의 응답(Response) 데이터가 출력된 것을 확인할 수 있습니다. 이처럼 REST API 형태로 데이터를 주고 받을 때는 JSON 형식을 이용한다는 특징이 있습니다.
또한 스웨거 API에서는 인증(Authorize)에 대한 처리 정보도 관리할 수 있습니다.
그리고 각 데이터 모델(Model)에 대해서도 정의할 수 있는데요, 일반적으로 데이터베이스에 기록되어 있는 모델 형태를 그대로 가져와 사용합니다. 아래 소스코드에서는 주문(Order) 오브젝트에 대해 정의하고 있습니다.
이어서 다음과 같이 전체 API에 대한 개요를 작성할 수 있으며, 추가적으로 태그(Tag)를 넣어서 각 API를 분류시킬 수 있습니다. 이러한 구성 덕분에 스웨거(Swagger) API는 단 하나의 소스코드로 하나의 단일 프로젝트에 대한 전체 API를 명세할 수 있는 것입니다.
또한 작성된 코드를 다운로드(Download)하여 여러 개의 프로그래밍 언어 환경에 붙여넣기 할 수 있습니다. [Export] - [Download API]에 들어가서 원하는 형태로 API를 다운로드 해주세요.
대표적인 형태인 [JSON Resolved]로 다운로드를 진행하면 다음과 같은 압축 파일이 다운로드 됩니다.
'Swagger' 카테고리의 다른 글
| 우분투(Ubuntu) 서버에서 스웨거(Swagger) 설치 및 사용 방법 (0) | 2019.01.20 |
|---|
다른 사람 컴퓨터에서 깃 허브(Git Hub) 이용할 때 주의할 점
기본적으로 다른 사람의 컴퓨터에서 깃 허브(Git Hub)를 이용할 때는 몇 가지 유의할 점이 있습니다. 바로 계정 설정인데요. 특히나 윈도우(Windows)에서 깃을 이용하는 경우에는 깃 데스크탑(Git Desktop)을 이용하면, 계정 정보를 시스템에서 기본적으로 저장한다는 특징이 있습니다. 그래서 다른 사람의 컴퓨터에서 깃 허브로 푸시(Push)를 한 뒤에 계정 정보가 계속 남아있을 수 있어요. 이를 관리하는 방법에 대해서 소개하고자 합니다.
기본적으로 깃 푸시(Git Push) 이전에는 사용자 계정에 대한 설정을 합니다.
※ 전체 프로젝트에 대해 깃 계정 설정하는 방법 ※
git config --global user.name "{사용자 계정 이름}"
git config --global user.email "{사용자 이메일}"
※ 현재 프로젝트에 대해서만 깃 계정 설정하는 방법 ※
git config --local user.name "{사용자 계정 이름}"
git config --local user.email "{사용자 이메일}"
기본적으로 다른 사람의 컴퓨터를 이용할 때는 [현재 프로젝트에 대해서만 깃 계정 설정하는 방법]을 따라 진행하시길 권장합니다.
또한 실제로 푸시(Push)를 진행할 때는 자신이 계정에 대한 권한이 있음에 대해서 인증해야 해요.
1) 인증서를 이용하는 경우
인증서를 이용해서 인증하는 경우에는, 꼭 깃 허브 이용 이후에는 인증서 파일을 제거해주셔야 합니다.
2) 깃 데스크탑을 이용해 인증하는 경우
깃 데스크탑을 이용해 인증할 때는 다음과 같은 로그인 창이 나오게 되며, 로그인 이후에 푸시를 진행할 수 있어요.
인증 이후에는 윈도우에 계정 정보가 남아 있으므로 [제어판] - [사용자 계정] - [자격 증명 관리자] - [Windows 자격 증명] - [일반 자격 증명]에서 깃 정보가 등록되어 있는 것을 확인해야 합니다.
이후에 [제거]를 눌러서 깃 계정 정보를 제거해주시면 됩니다.
3) 커맨드를 이용하는 경우
커맨드(Command)를 이용하는 경우 기본적으로 푸시(Push)를 진행할 때마다 매 번 로그인을 진행해주셔야 합니다. 하지만 마찬가지로 윈도우 운영체제를 사용하는 상황에서 깃 데스크탑이 설치되어 있을 때는 자동으로 계정 정보가 저장되므로 [제어판]에서 자격 정보에 대해서 제거를 진행해주셔야 합니다. 혹은 깃 배시를 설치할 때 자격 증명 정보를 저장하도록 처리했다면, 깃 데스크탑을 이용하지 않아도 자격 정보가 저장될 수 있으므로 유의하셔야 합니다.
다만 우분투 등 리눅스 운영체제를 사용하는 경우, 깃 데스크탑이 설치되어 있지 않고 커맨드만으로 푸시를 진행할 때 별도의 설정을 하지 않았다면 푸시를 할 때마다 로그인을 해주셔야 합니다. 따라서 계정 정보가 저장되지 않으므로 괜찮습니다.
'기타' 카테고리의 다른 글
| Firefox를 이용해 ESNI를 적용하는 방법 (1) | 2019.02.15 |
|---|---|
| XML, JSON, YAML 형식 내용 정리 및 비교 분석 (0) | 2019.01.20 |
| AWS EC2에 AWS RDS 연동하기 (3) | 2019.01.03 |
| AWS VPC 안에 포함되어 있는 서비스들을 통째로 제거하는 방법 (2) | 2019.01.03 |
| AWS VPC를 이용해 EC2와 RDS를 안전하게 관리하기 (1) | 2019.01.02 |
15강 프로젝트 완성
지금까지 강의를 잘 따라오신 여러분들은 다음과 같이 완성된 프로젝트를 확인할 수 있게 될 거예요.
※ 완성된 프로젝트 ※
※ 복습하기 ※
프로젝트를 완성해 나가면서 배웠던 큼직한 요소들에 대해서 복습을 해봅시다!
1) React 및 파이어베이스 호스팅
본 강좌의 핵심이었던 React 개발 및 파이어베이스 호스팅에 대해서 잊으시면 안 돼요. React에서 다루는 각 데이터를 파이어베이스에 저장하고 관리했으며 파이어베이스 호스팅 서비스를 이용해 웹 사이트를 운영할 수 있었어요.
2) 플라스크(Flask) API 서버 구축
이후에 우리는 AWS EC2를 이용하여 플라스크에 워드 클라우드 API를 달아서 구동시켰습니다. 프리 티어를 이용해 무료로 서버를 구축하고, 이에 웹 서버를 올리는 방식으로 효과적으로 API를 구축했답니다.
3) 클라우드 플레어(Cloud Flare) HTTPS 서비스
이후에는 도메인 주소를 생성하고, 클라우드 플레어 서비스를 이용해서 우리의 API 서버에 HTTPS를 입히는 과정을 거쳤어요.
4) 파이어베이스(Firebase)
파이어베이스(Firebase)의 데이터베이스 서비스를 활용하는 방법에 대해서도 공부하는 시간을 가졌습니다.
5) 안드로이드 스튜디오(Android Studio)
우리는 최종적으로 만들어진 웹을 앱 형태로 배포하기 위하여 안드로이드 스튜디오를 이용해 웹 앱을 개발하고, APK 파일을 추출했어요.
'React와 Firebase로 만드는 Word Cloud 웹앱' 카테고리의 다른 글
| 14강 React 프로젝트를 안드로이드 웹 앱(Web App)으로 배포하기 (0) | 2019.01.13 |
|---|---|
| 13강 Cloud Flare를 이용한 HTTPS 설치 및 최종 배포 (0) | 2019.01.13 |
| 12강 AWS EC2에서 플라스크(Flask) 웹 서버 구동시키기 (2) | 2019.01.12 |
| 11강 워드 클라우드(Word Cloud) 상세 수치 설정하기 (0) | 2019.01.12 |
| 10강 React와 플라스크(Flask) 연동하기 (1) | 2019.01.12 |
14강 React 프로젝트를 안드로이드 웹 앱(Web App)으로 배포하기
이번 시간에는 안드로이드 스튜디오(Android Studio)를 이용하여 현재까지 만들었던 웹 애플리케이션을 앱(App) 형태로 배포하도록 하겠습니다. 따라서 안드로이드 스튜디오를 실행하여 프로젝트를 생성하도록 하겠습니다.
이후에 빈 액티비티 형태로 프로젝트를 구성합니다.
이후에 다음과 같은 3개의 소스코드를 작업하시면 됩니다.
먼저 레이아웃부터 작업해주시면 됩니다.
▶ activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
▶ MainActivity.java
package tk.wordcloudpython.wordcloud;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private ValueCallback<Uri> filePathCallbackNormal;
private ValueCallback<Uri[]> filePathCallbackLollipop;
private final static int FILE_CHOOSER_NORMAL_REQ_CODE = 1;
private final static int FILE_CHOOSER_LOLLIPOP_REQ_CODE = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
/* 웹 세팅 작업하기 */
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setSaveFormData(false);
webSettings.setSavePassword(false);
webSettings.setUseWideViewPort(true);
webSettings.setSupportMultipleWindows(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
/* 리다이렉트 할 때 브라우저 열리는 것 방지 */
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient() {
// 안드로이드 3.0 이상
public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType) {
filePathCallbackNormal = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("text/plain");
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILE_CHOOSER_NORMAL_REQ_CODE);
}
// 안드로이드 4.1 이상
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
openFileChooser(uploadMsg, acceptType);
}
// 안드로이드 5.0 이상
public boolean onShowFileChooser(
WebView webView, ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
if (filePathCallbackLollipop != null) {
filePathCallbackLollipop.onReceiveValue(null);
filePathCallbackLollipop = null;
}
filePathCallbackLollipop = filePathCallback;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("text/plain");
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILE_CHOOSER_LOLLIPOP_REQ_CODE);
return true;
}
});
/* 웹 뷰 띄우기 */
webView.loadUrl("https://wordcloud-e11f9.firebaseapp.com/");
}
public void onBackPressed() {
if (webView.canGoBack()) webView.goBack();
else finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == FILE_CHOOSER_NORMAL_REQ_CODE) {
if (filePathCallbackNormal == null) return;
Uri result = (data == null || resultCode != RESULT_OK)? null : data.getData();
filePathCallbackNormal.onReceiveValue(result);
filePathCallbackNormal = null;
} else if (requestCode == FILE_CHOOSER_LOLLIPOP_REQ_CODE) {
if (filePathCallbackLollipop == null) return;
filePathCallbackLollipop.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
filePathCallbackLollipop = null;
}
} else {
if (filePathCallbackLollipop != null) {
filePathCallbackLollipop.onReceiveValue(null);
filePathCallbackLollipop = null;
}
}
}
}
▶ AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tk.wordcloudpython.wordcloud">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.NoActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
이제 안드로이드 애뮬레이터를 활용하여 프로젝트를 테스트 해보겠습니다.
다만 파일 선택을 하고 싶어도 다음과 같이 파일이 존재하지 않는 것을 확인할 수 있습니다.
따라서 안드로이드 애뮬레이터로 파일을 옮기기 위해서 일단 하나의 텍스트 파일을 생성하겠습니다.
따라서 안드로이드 스튜디오에서 오른쪽 아래의 [Device File Explorer] 탭을 열어서 [sdcard] 폴더에 텍스트 파일을 넣어주시면 됩니다.
우클릭 이후에 업로드(Upload)를 진행하시면 됩니다.
이제 다시 텍스트 파일 업로드를 진행하시면 됩니다.
다음과 같이 텍스트 파일을 추가해보도록 하겠습니다.
이제 추가된 텍스트 파일을 확인해보도록 하겠습니다.
성공적으로 워드 클라우드가 생성되는 것을 확인할 수 있습니다.
※ APK 파일 배포하기 ※
실제로 구글 플레이스토어 마켓 등에 배포하기 위해서는 APK 파일로 추출하는 과정이 필요합니다. 안드로이드 스튜디오를 활용해 다음과 같은 과정으로 APK 파일을 추출할 수 있습니다. 가장 먼저 [Build] 탭에서 APK 파일을 추출하는 버튼을 누르시면 됩니다.
저는 다음과 같이 앱 번들을 이용하지 않고 단순 APK 파일로 추출하도록 하겠습니다.
먼저 APK 파일을 만들기 위해서는 먼저 키 페어를 생성해주셔야 합니다.
저는 다음과 같은 경로에 키를 만들어 줄 거예요.
키를 생성할 때는 키를 생성한 사람에 대한 서명 정보를 기입해주셔야 합니다.
이후에 다음과 같이 해당 키로 APK 파일을 생성해주시면 됩니다.
약간의 시간이 흐른 뒤에 빌드(Build)가 끝나면 릴리즈 된 APK 파일을 확인하실 수 있습니다.
※ 깃에 업로드하기 ※
안드로이드 프로젝트를 깃에 업로드하여 관리하는 방법 또한 알아보도록 하겠습니다.
깃 프로젝트를 설정할 때는 루트 프로젝트를 설정하시면 됩니다.
이후에 ADD 및 COMMIT을 진행하시면 됩니다.
커밋을 하실 때에는 [Unversioned Files]로 표시되어 있는 프로젝트의 환경 설정 파일들도 함께 커밋해주세요.
커밋 이후에는 푸시를 진행하시면 됩니다.
푸시를 하실 때에는 깃 허브(Git Hub)의 원격지 주소로 푸시하시면 됩니다. 따라서 [Define Remote]를 선택합니다.
이후에 깃 허브(Git Hub)에 하나의 리포지터리를 만들어 주시고, 이를 넣어주시면 됩니다.
전체 파일들을 다 푸시해주시면 다음과 같이 깃 허브에 프로젝트가 등록되는 것을 확인할 수 있습니다.
※ 완성된 프로젝트를 클론(Clone)하는 방법 ※
이후에 완성된 프로젝트를 다른 개발 환경에서 클론하고자 할 때는 다음과 같이 해주시면 됩니다.
클론 받기 위한 주소를 넣고, 특정한 폴더로 프로젝트를 다운로드 해주세요.
이후에 다음과 같이 클론 된 소스코드를 통해 프로젝트를 구성하시면 됩니다.
기본적으로 계속 다음(Next) 버튼을 누르시면 됩니다.
다음과 같이 프로젝트 클론(Clone)까지 다루어 보았습니다.
'React와 Firebase로 만드는 Word Cloud 웹앱' 카테고리의 다른 글
| 15강 프로젝트 완성 (1) | 2019.01.13 |
|---|---|
| 13강 Cloud Flare를 이용한 HTTPS 설치 및 최종 배포 (0) | 2019.01.13 |
| 12강 AWS EC2에서 플라스크(Flask) 웹 서버 구동시키기 (2) | 2019.01.12 |
| 11강 워드 클라우드(Word Cloud) 상세 수치 설정하기 (0) | 2019.01.12 |
| 10강 React와 플라스크(Flask) 연동하기 (1) | 2019.01.12 |
13강 Cloud Flare를 이용한 HTTPS 설치 및 최종 배포
※ 기존 소스코드의 문제점 확인 ※
가장 먼저 리액트(React) 소스코드에서 API 경로를 AWS EC2의 경로로 바꾸어보도록 하겠습니다.
이후에 기존에 존재하던 build 폴더를 제거한 뒤에 다시 yarn build 명령어를 수행합니다.
그리고 firebase deploy 명령어를 입력하여 배포를 진행하도록 하겠습니다.
이후에 배포된 경로로 접속하면 [워드 클라우드]를 생성하고자 할 때 다음과 같이 HTTPS 미설정 오류 메시지가 출력됩니다. 이러한 오류 메시지는 파이어베이스가 HTTPS를 지원하지만 우리의 API 서버는 HTTPS를 지원하지 않기 때문에 발생합니다. 따라서 우리의 플라스크(Flask) 웹 서버도 HTTPS를 지원하도록 처리해야 합니다.
※ FREENOM 서비스를 이용해 무료 도메인 사용하기 ※
▶ 프리넘 서비스: https://freenom.com
프리넘 서비스는 무료로 도메인을 사용할 수 있도록 해줍니다. 결과적으로 우리가 HTTPS를 사용하기 위한 초석이 되어주므로 일단 도메인부터 구매해보도록 하겠습니다. 저는 회원가입 및 로그인 이후에 wordcloudpython라는 도메인을 사용하겠다고 검색해보도록 하겠습니다.
이후에 다음과 같이 .tk 도메인을 채택하겠습니다.
저는 다음과 같이 무료로 도메인을 사용해보도록 하겠습니다.
구매 이후에는 다음과 같이 [My Domains] 탭에서 자신이 구매한 도메인을 관리할 수 있습니다.
다음과 같이 타겟(Target) 주소로 우리의 AWS EC2 서버 주소를 입력해주시면 됩니다.
이후에는 통상적으로 약 5분 뒤에 도메인 설정이 완료됩니다. 다음과 같이 해당 도메인으로 접속했을 때 플라스크 API가 동작합니다.
※ 도메인에 HTTPS를 적용하기 위해 Cloud Flare 사용하기 ※
▶ Cloud Flare 가입: https://dash.cloudflare.com/sign-up
클라우드 플레어에 가입한 이후에 HTTPS를 적용할 수 있습니다.
이후에 다음과 같이 우리가 사용하게 된 무료 도메인을 사이트(Site)로 추가하시면 됩니다.
이후에 클라우드 플레어가 자동으로 DNS 레코드를 얻어오게 됩니다. [Next] 버튼을 눌러주세요.
이후에 무료로 서비스를 이용하기 위해 무료 플랜(FREE PLAN)을 설정해주겠습니다.
이후에 다음과 같이 wordcloudpython.tk라는 우리의 도메인을 52.79.163.195라는 AWS EC2 IP 주소로 연결해주었습니다. 이로써 결과적으로 Cloud Flare의 DNS 서버에 wordcloudpython.tk라는 쿼리가 들어오면 52.79.163.195로 연결을 진행해주는 것입니다.
이후에 다음과 같이 기존의 네임 서버(Name Server)를 바꾸어주라는 메시지가 나오게 됩니다. 다음의 그림에서 요구하는 대로 FREENOM 서비스의 네임 서버를 매핑해주시면 됩니다.
따라서 다음과 같이 [Nameservers] 탭에서 커스텀 네임 서버(Custom Name Server)로 클라우드 플레어의 DNS 주소를 넣어주시면 됩니다.
이후에 Cloud Flare에서 DNS 설정이 완료될 때까지 기다리시면 됩니다. [Re-check now] 버튼을 누른 뒤에 약간의 시간을 기다리시면 됩니다.
결과적으로 다음과 같이 설정이 완료되면 이메일로 설정 완료 메시지가 나온다고 하네요. 일반적으로 1시간 안에 설정이 완료됩니다.
결과적으로 잠시 후에 Cloud Flare에서 새로고침을 해보시면 설정이 완료되어 정상적으로 동작하고 있다는 것을 확인할 수 있습니다.
기본적으로 Cloud Flare는 HTTPS로 요청(Request)을 받아서 우리의 AWS EC2 서버의 80번 포트로 패킷을 전달해주게 됩니다. 따라서 이제 우리는 플라스크(Flask) 웹 서버를 80번 포트로 열어야 합니다. 그러므로 보안 그룹에서 80번 포트를 허용해주시면 됩니다.
당연히 플라스크의 소스코드도 80번 포트를 이용하도록 수정하셔야 해요.
결과적으로 다음과 같이 80번 포트로 동작하도록 서버를 구동시키면 됩니다.
※ HTTPS 접속 확인 ※
결과적으로 다음과 같이 HTTPS로 접속을 해보시면 성공적으로 플라스크 서버가 동작하는 것을 확인할 수 있습니다.
따라서 이제 API 서버의 URL을 새로운 경로로 바꾸어 다시 배포해주시면 됩니다.
최종적으로 AWS EC2에서 플라스크 웹 서버를 다시 구동시켜주도록 하겠습니다.
이후에 다음과 같이 성공적으로 호스팅된 파이어베이스 서버에서 API가 정상적으로 동작하는 것을 확인할 수 있습니다.
'React와 Firebase로 만드는 Word Cloud 웹앱' 카테고리의 다른 글
| 15강 프로젝트 완성 (1) | 2019.01.13 |
|---|---|
| 14강 React 프로젝트를 안드로이드 웹 앱(Web App)으로 배포하기 (0) | 2019.01.13 |
| 12강 AWS EC2에서 플라스크(Flask) 웹 서버 구동시키기 (2) | 2019.01.12 |
| 11강 워드 클라우드(Word Cloud) 상세 수치 설정하기 (0) | 2019.01.12 |
| 10강 React와 플라스크(Flask) 연동하기 (1) | 2019.01.12 |
