5
5
6
6
저는 회사에서도 구글 계정으로 모든 처리를 진행하고 있어 연습 삼아 구글 호스팅 서비스를 사용하겠습니다.
7
7
다른 분들은 좀 더 저렴한 국내 서비스를 쓰셔도 됩니다.
8
- 이번 과정부터는 ** 비용이 직접 청구되니** 당장 서비스하실게 아니라면 꼭 안하셔도 됩니다!
9
- (준비물로 ** Master** 혹은 ** VISA 카드** 가 하나 있어야 합니다.)
8
+ 이번 과정부터는 ** 비용이 직접 청구되니** 당장 서비스하실게 아니라면 가장 하단에 있는 ** 9-4. 타임존 변경** 만 진행하셔도 됩니다!
9
+
10
+ > Tip)
11
+ 도메인 구매를 진행하신다면 ** Master** 혹은 ** VISA 카드** 가 하나 있어야 합니다.
10
12
11
13
## 9-1. 도메인 및 서비스 메일 생성
12
14
13
- G Suite는 구글에서 제공하는 비지니스 서비스 입니다.
15
+ G Suite는 ** 구글에서 제공하는 비지니스 서비스** 입니다.
14
16
회사에서 사용하기 위한 이메일과 도메인, 구글 앱스등을 제공하는데요.
15
17
보통 회사에서 업무용 이메일을 구성원들에게 나눠주고, 회사내에서 사용할 문서들을 구글 드라이브에 올려서 사용하는 경우가 많은데요.
16
18
이럴때 사용하는 서비스라고 보시면 됩니다.
@@ -262,21 +264,21 @@ p=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
262
264
![ route21] ( ./images/9/route21.png )
263
265
264
266
자 이제 다시 G Suite 이메일로 메일을 발송해봅니다.
267
+ 아래처럼 다시 보낸 메일이 잘 도착하셨나요!?
265
268
266
269
![ route22] ( ./images/9/route22.png )
267
270
268
- 다시 보낸 메일이 잘 도착하셨나요!?
269
- 저희 서비스에 도메인 설정과 서비스 이메일 생성이 완료 되었습니다!
271
+ 이제는 서비스 도메인과 서비스 이메일 생성이 완료 되었습니다!
270
272
271
273
## 9-3. HTTPS 연결
272
274
273
- 자 도메인 작업이 완료 되었으니, 이번엔 HTTPS를 서비스에 등록해보겠습니다.
274
- HTTPS가 없더라도 서비스에 문제는 없지만, 최근 동향이 ** "HTTPS는 기본적으로 갖추자"** 이기 때문에 이번 기회에 시작해보시는걸 추천드립니다.
275
+ 도메인 작업이 완료 되었으니, 이번엔 HTTPS를 서비스에 등록해보겠습니다.
276
+ HTTPS가 없더라도 서비스에 문제는 없지만, 최근 동향이 ** "HTTPS는 기본적으로 갖추자"** 로 가기 때문에 이번 기회에 시작해보시는걸 추천드립니다.
275
277
276
278
> Tip)
277
279
[ HTTPS는 HTTP보다 빠르다] ( https://tech.ssut.me/2017/05/07/https-is-faster-than-http/ ) ,
278
280
[ 구글 "네이버·다음은 왜 https 적용 안하나...크롬에서 경고 표시 띄울 것"] ( http://biz.chosun.com/site/data/html_dir/2017/02/13/2017021302077.html )
279
- 등 웹 사이트에서 HTTPS 사용을 최소한의 기초로 보자는 움직임이 많습니다.
281
+ 등 웹 사이트에서 HTTPS는 기본적으로 사용하자는 움직임이 많습니다.
280
282
281
283
> Tip)
282
284
HTTP와 HTTPS에 대한 차이점을 알고싶으신 분들은 [ HTTP 프로토콜 - joinc] ( https://www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/HTTP#s-5. ) 를 참고하시거나 가장 추천하는 네트워크 교재인 [ 그림으로 배우는 HTTP & Network Basic] ( http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788931447897 ) 를 읽어보시면 좋습니다!
@@ -288,7 +290,7 @@ HTTP와 HTTPS에 대한 차이점을 알고싶으신 분들은 [HTTP 프로토
288
290
특히 Let's Encrypt 설치 및 업데이트를 쉽게 해주는 certbot이 등장해서 사용하기도 굉장히 수월해졌습니다.
289
291
290
292
* [ certbox] ( https://certbot.eff.org/#centosrhel6-nginx )
291
- * [ Amazon Linux에서 Certbot의 Let's Encrypt] ( https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/SSL-on-an-instance.html#letsencrypt )
293
+ * [ Amazon Linux에서 Apache + Certbot의 Let's Encrypt] ( https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/SSL-on-an-instance.html#letsencrypt )
292
294
293
295
여기선 Amazon Linux 2017.09 버전의 EC2로 진행됩니다.
294
296
만약 본인의 서버 혹은 EC2의 버전이 다르시다면 위 링크를 참고해서 설치를 진행하셔도 됩니다.
@@ -311,62 +313,196 @@ wget https://dl.eff.org/certbot-auto
311
313
chmod a+x certbot-auto
312
314
```
313
315
314
- sudo로 ``` --debug ``` 옵션을 주어 설치파일을 실행합니다.
316
+ 그럼 이제 certbot을 통해 Nginx에 HTTPS를 설정하겠습니다.
315
317
316
- ``` bash
317
- sudo ./certbot-auto --debug
318
- ```
319
-
320
- "Is this ok [ y/d/N] "가 나오면 "y"를 입력하고 기다립니다.
321
- "Enter email address (used for urgent renewal and security notices)"가 나오면 Email 주소를 입력하라는 메세지이니, 본인의 Email주소를 입력하시면 됩니다.
322
- "(A)gree/(C)ancel"가 나오면 Let's Encrypt 서비스 계약 조건에 동의여부를 묻는것이니, A를 입력합니다. (동의)
323
-
324
- ![ ssl1] ( ./images/9/ssl1.png )
318
+ > Tip)
319
+ 모든 과정은 아래 이미지로 전부 캡쳐했으니 그걸 보셔도 무방합니다.
325
320
326
- AWS에서
321
+ 다음의 명령어를 입력합니다.
327
322
328
323
``` bash
329
- sudo vi /etc/nginx/ nginx.conf
324
+ sudo /home/ec2-user/certbot-auto -- nginx
330
325
```
331
326
332
- ``` bash
333
- sudo nginx -t
334
- ```
327
+ 명령어가 실행되면 몇가지가 수행되다가 도메인 입력을 하라는 메세지가 나옵니다.
335
328
336
329
``` bash
337
- sudo service nginx reload
338
- sudo service nginx stop
330
+ No names were found in your configuration files. Please enter in your domain
331
+ name(s) (comma and/or space separated) (Enter ' c ' to cancel):example.com www.example.com
339
332
```
340
333
334
+ 여기서 example.com과 www.example.com은 우리 서비스의 도메인을 얘기합니다.
335
+ 저는 ``` springboot-webservice.com ``` 과 ``` www.springboot-webservice.com ``` 으로 입력했습니다.
336
+ 다음으로 웹 서버에 보안성이 낮은 연결을 허용할지를 선택합니다.
337
+ 예제에 나와 있는 것과 같이 옵션 2를 선택하면 모든 서버 연결이 HTTPS로 연결됩니다.
338
+ (저는 2를 선택했습니다.)
339
+
341
340
``` bash
342
- wget https://dl.eff.org/certbot-auto
343
- chmod a+x certbot-auto
344
- sudo ./certbot-auto --nginx
341
+ Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
342
+ -------------------------------------------------------------------------------
343
+ 1: No redirect - Make no further changes to the webserver configuration.
344
+ 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
345
+ new sites, or if you' re confident your site works on HTTPS. You can undo this
346
+ change by editing your web server' s configuration.
347
+ -------------------------------------------------------------------------------
348
+ Select the appropriate number [1-2] then [enter] (press ' c' to cancel): 2
345
349
` ` `
346
350
347
- ### Let's Encrypt 인증서 자동 갱신 등록
351
+ 이렇게 하시면! 모든 설정이 완료 됩니다!
352
+
353
+ ! [ssl2](./images/9/ssl2.png)
354
+
355
+ 자 한번 우리 서비스를 다시 접속해볼까요?
356
+
357
+ ! [ssl3](./images/9/ssl3.png)
358
+
359
+ 와우! 서비스에 https가 적용되었습니다!
360
+ 이제 보안도 챙기고, 크롬브라우저에서 저희 서비스가 경고메세지가 출력될일도 없겠죠?
361
+
362
+ # ## 9-3-2. Let's Encrypt 인증서 자동 갱신 등록
363
+
364
+ SSL 인증서 설치는 끝이났습니다!
365
+ 여기서 실제 서비스로 이용해야할때 한가지 작업이 더 필요합니다.
366
+ 바로 인증서 자동 갱신입니다.
367
+ 아래처럼 Let' s Encrypt는 인증서가 3개월이면 만료가 됩니다.
368
+
369
+ 
370
+
371
+ 3개월마다 인증서를 갱신해야하는데, 이걸 사람이 직접 하기엔 귀찮은 작업이 됩니다.
372
+ 그래서 이 인증서 갱신을 자동화 시키겠습니다.
373
+ 보통 이렇게 리눅스 서버에 스케줄 작업을 걸때 crontab을 많이 사용합니다.
374
+
375
+ > Tip)
376
+ crontab(크론탭)의 설명은 [제타위키](https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab)가 가장 잘되어있기 때문에 한번 읽어보시면 금방 이해되실것 같습니다.
377
+
378
+ 그럼 crontab에 인증서 갱신 작업을 등록하겠습니다.
379
+ 아래 명령어로 crontab 편집창을 열고,
348
380
349
381
```bash
350
382
crontab -e
351
383
```
352
384
385
+ 다음의 코드를 등록합니다.
386
+
353
387
```bash
354
388
# Begin Let' s encrypt renew
355
- 0 4 1 * /3 * /bin/bash -l -c ' /home/ec2-user/certbot-auto renew --quiet --no-self-upgrade '
389
+ 0 4 1 * /3 * /bin/bash -l -c ' /home/ec2-user/certbot-auto renew'
356
390
# End Let's encrypt renew
357
391
` ` `
358
392
359
- ### 인증서 갱신 중 오류 발생시
393
+ ! [ssl5](./images/9/ssl5.png)
394
+
395
+ 등록한 시간은 ** 3개월에 1번씩 새벽 4시** 에 수행한다는 내용입니다.
396
+
397
+ > Tip)
398
+ [crontab.guru](https://crontab.guru/# 0_4_1_*/3_*)을 통해 수행 주기를 확인할 수 있습니다.
399
+
400
+ vi에서 저장할때와 마찬가지로 ` ` ` :wq` ` ` 로 저장 & 종료하면 crontab이 정상적으로 등록됩니다!
401
+
402
+ # ## 9-3-3. 인증서 갱신 중 오류 발생시
403
+
404
+ 만약 인증서 갱신 도중 오류가 발생하시면 아래 명령어를 차례로 입력하시면 됩니다.
405
+ 기존의 certbot으로 설치된 내용들을 삭제하신뒤,
360
406
361
407
` ` ` bash
362
408
sudo rm -rf /root/.local/share/letsencrypt/
363
409
sudo rm -rf /opt/eff.org/certbot/
364
410
` ` `
365
411
412
+ 다시 갱신을 시도합니다.
413
+
366
414
` ` ` bash
367
415
/home/ec2-user/certbot-auto renew -v --debug
368
416
` ` `
369
417
418
+ # # 9-4. 타임존 변경
419
+
420
+ 이 시간은 crontab 편에 이어서 진행됩니다.
421
+ EC2를 처음 설치하게 되면 타임존이 UTC가 됩니다.
422
+
423
+ ! [timezone1](./images/9/timezone1.png)
424
+
425
+ 현재 시간이 UTC로 되어있어, 모든 서버 관련 데이터가 한국시간 보다 9시간 차이가 납니다.
426
+ 이는 데이터베이스에서도 마찬가지인데요.
427
+ RDS도 기본 UTC인지라 아래와 같이 시간이 출력됩니다.
428
+ (캡쳐 당시 ** 한국시간은 2/17일 15시** 였습니다.)
429
+
430
+ ! [timezone2](./images/9/timezone2.png)
431
+
432
+ 그래서 EC2와 RDS의 타임존을 KST(한국시간)으로 변경하겠습니다.
433
+
434
+ # ## 9-4-1. EC2 타임존 변경
435
+
436
+ 아래명령어를 EC2에서 차례로 입력합니다.
437
+
438
+ ` ` ` bash
439
+ sudo rm /etc/localtime
440
+ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
441
+ date
442
+ ` ` `
443
+
444
+ ! [timezone3](./images/9/timezone3.png)
445
+
446
+ 최종 반영을 위해 EC2를 한번 부팅합니다.
447
+
448
+ ` ` ` bash
449
+ sudo reboot
450
+ ` ` `
451
+
452
+ 부팅후 10분뒤에 다시 재접속해서 시간을 확인해보시면!
453
+
454
+ ` ` ` bash
455
+ date
456
+ ` ` `
457
+
458
+ ! [timezone4](./images/9/timezone4.png)
459
+
460
+ 정상적으로 반영되었습니다!
461
+
462
+ # ## 9-4-2. RDS 타임존 변경
463
+
464
+ 이제는 RDS의 타임존을 변경하겠습니다.
465
+ 먼저 RDS의 파라미터 그룹으로 이동합니다.
466
+ 해당 RDS를 선택후, ** 파라미터 편집** 을 선택합니다.
467
+
468
+ ! [timezone5](./images/9/timezone5.png)
469
+
470
+ 필터에 ` ` ` time_zone` ` ` 을 입력해 ** time_zone** 파라미터를 찾습니다.
471
+
472
+ ! [timezone6](./images/9/timezone6.png)
473
+
474
+ ** time_zone** 값을 ** Aisa/Seoul** 을 선택합니다.
475
+ 자 ** 변경 사항 저장** 을 클릭해 최종 저장합니다.
476
+
477
+ ! [timezone7](./images/9/timezone7.png)
478
+
479
+ 그럼 RDS가 수정작업을 진행합니다.
480
+
481
+ ! [timezone8](./images/9/timezone8.png)
482
+
483
+ 수정 작업이 끝난후, DB 툴을 통해 아래 쿼리를 실행해보시면!
484
+
485
+ ` ` ` sql
486
+ select @@time_zone, now ();
487
+ ` ` `
488
+
489
+ 타임존이 변경된 것을 확인할 수 있습니다!
490
+
491
+ ! [timezone9](./images/9/timezone9.png)
492
+
493
+ RDS도 정상적으로 한국 시간이 반영되었습니다!
494
+
495
+ # # 마무리
496
+
497
+ ** 하나의 서비스를 개발하는 모든 과정을 진행** 했습니다!
498
+ 어떠셨나요! ?
499
+ 단순히 localhost:8080만 진행할때와는 전혀 다른 어려움이 많지 않으셨나요?
500
+ 그래도 이제는 ** 본인의 힘으로 하나의 서비스를 구축** 할수 있게 되었습니다.
501
+ 다음은 이번 시리즈의 마지막 챕터가 되겠습니다.
502
+ ** 서비스를 구축할때 미리 알았으면 좋았을 법한 팁** 들을 모아 공유드릴 예정입니다.
503
+ 마지막까지 잘 부탁드리겠습니다!
504
+ 고맙습니다^^
505
+
370
506
# # 참고
371
507
372
508
* [Email 연결](https://blog.andrewray.me/setting-up-gsuite-gmail-custom-domains-with-aws-route53/)
0 commit comments