안경잡이개발자

728x90
반응형

  간혹 깃(Git)을 이용하다 보면 커미터(Committer)의 이름을 바꾸고 싶을 때가 있습니다. 혹은 깃 계정이 변경되거나 해서 이전 계정으로 커밋되어 있는 내용을 현재 계정으로 변경해야 할 때가 존재할 수 있습니다.


  저의 경우는 깃으로 소스코드를 작성할 때 이메일을 잘못 설정해서 다음과 같이 계정 이름만 ndb796이고, 이메일은 이상하게 등록되어 있는 상태였습니다. 따라서 이메일을 바르게 다시 작성할 필요가 있었습니다.



  이 때는 가장 먼저 해당 깃 프로젝트를 클론 하시면 됩니다. 그리고 해당 깃 프로젝트 경로로 들어갑니다.


git clone {깃 프로젝트}
cd {깃 프로젝트}


  이후에 깃(Git) 로그를 확인하여 잘못된 계정으로 커밋되어 있는 내용을 확인합니다.


git log


  저는 다음과 같이 ndb796@email.com이라는 이상한 이메일로 커밋이 되어 있는 상태였습니다.



  따라서 리눅스(Linux) 환경을 기준으로 다음과 같은 명령어를 넣으시면 됩니다.


git filter-branch --env-filter '

OLD_EMAIL="{예전 이메일}"
CORRECT_NAME="{현재 이름}"
CORRECT_EMAIL="{현재 이메일}"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags


  저는 ndb796@email.com으로 작성되어 있는 커밋을 ndb796@naver.com으로 변경했습니다.



  위 명령어 입력 이후에 다시 깃(Git) 로그를 확인해 보니 다음과 같이 정상적으로 변경되어 있는 것을 확인할 수 있었습니다.


git log


  이제 변경된 내용을 강제로 푸시하시면 됩니다. 다만, 강제로 푸시하실 때에는 원하지 않은 커밋 내용이 반영될 여지가 있기 때문에 유의할 필요가 있습니다. 다음의 명령어로 마스터(Master) 브랜치의 변경된 내역을 푸시할 수 있습니다.


git push --force --tags origin 'refs/heads/master'


  푸시 이후에 실제로 깃 허브(Git Hub)에 가보시면 다음과 같이 커밋 내역이 수정되어 있는 것을 확인할 수 있습니다.



  깃 수정이 완료된 이후에는 임시적으로 클론(Clone)을 수행했던 해당 깃 프로젝트 폴더를 제거합니다.




728x90
반응형

728x90
반응형

  간혹 구글 애드센스(Google Adsense) 광고 비용을 입금 받는 일자를 늦춰야 할 때가 있습니다. 이 때 지급 날짜를 늦추는 간단한 방법에 대해서 소개하고자 합니다. 구글 애드센스 공식 홈페이지는 다음의 링크와 같습니다.

 

  ▶ 구글 애드센스: https://www.google.com/adsense/ 

 

Google AdSense - ウェブサイトを収益化

Google AdSense を使用してウェブサイトを収益化しましょう。広告のサイズは自動的に最適化され、表示とクリックが促進されます。

www.google.co.kr

 

 

  구글 애드센스 마이페이지에 접속하신 이후에 [지급] 탭으로 이동합니다.

 

 

  이후에 [설정] 란에서 [설정 관리] 버튼을 눌러 지급 관련 설정을 진행할 수 있습니다.

 

 

  여기에서 위와 같이 [지급 일정] 부분을 수정하셔서 청구 기준액일정 보류 설정을 진행할 수 있습니다.

 

 

  저는 위와 같이 최소한 1,000 달러가 되었을 때 통장으로 입금되도록 설정되어 있는 것을 확인할 수 있습니다.

 

 

  저는 위와 같이 2,000 달러로 지급 기준액을 늘렸습니다. 이로써 2,000 달러 이상 쌓이지 않으면 입금이 이루어지지 않으므로 입금 받는 일자를 늦출 수 있습니다. 극단적으로는 이러한 지급 기준액을 매우 크게 설정하여 입금 일자를 늦출 수 있으니, 참고하시면 좋을 것 같습니다.

 

  또한 이렇게 지급 일정을 바꾸게 되면 구글 애드센스로부터 [지급 보류 설정됨]이라는 메일을 받게 될 수도 있습니다.

 

 

728x90
반응형

728x90
반응형

  이번 시간에는 파이어폭스(Firefox)를 이용해 ESNI를 적용해 웹 사이트에 접속하는 방법에 대해서 알아보도록 하겠습니다.


  파이어폭스는 다음의 경로에서 다운로드하여 설치할 수 있습니다.


  파이어폭스 다운로드: https://www.mozilla.org/ko/firefox/new/



  파이어폭스의 설치가 완료되면 파이어폭스 브라우저를 실행해주세요.


  이후에 검색 창에 about:config를 입력하여 환경 설정 페이지로 이동합니다.



  가장 먼저 ESNI 설정을 허용하기 위해 esni를 검색하여 값을 다음과 같이 true로 변경합니다.



  이후에 network.trr를 검색합니다. DNS over HTTPS를 지원하는 클라우드 플레어(Cloud Flare)를 이용하여 개발된 웹 사이트에 접속하기 위해 다음과 같이 설정합니다.



  결과적으로 클라우드 플레어를 이용하고 있는 서비스에 접속할 수 있게 되었습니다.


  이 때 특정한 웹 사이트가 클라우드 플레어를 적용하고 있는지 확인하기 위해 DNS Lookup 서비스를 이용합니다. 접속하고자 하는 웹 사이트의 DNS 서버를 확인하여 클라우드 플레어를 사용하고 있는지 체크합니다. 클라우드 플레어를 사용하는 웹 사이트의 경우 DNS over HTTPS를 적용하는 경우가 많기 때문에 대부분 접속이 가능할 것입니다.


  WHOIS DNS Lookup 사이트: http://www.whatsmyip.org/whois-dns-lookup



728x90
반응형

728x90
반응형

  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을 사용합니다.

728x90
반응형

728x90
반응형

  기본적으로 다른 사람의 컴퓨터에서 깃 허브(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)를 진행할 때마다 매 번 로그인을 진행해주셔야 합니다. 하지만 마찬가지로 윈도우 운영체제를 사용하는 상황에서 깃 데스크탑이 설치되어 있을 때는 자동으로 계정 정보가 저장되므로 [제어판]에서 자격 정보에 대해서 제거를 진행해주셔야 합니다. 혹은 깃 배시를 설치할 때 자격 증명 정보를 저장하도록 처리했다면, 깃 데스크탑을 이용하지 않아도 자격 정보가 저장될 수 있으므로 유의하셔야 합니다.


  다만 우분투 등 리눅스 운영체제를 사용하는 경우, 깃 데스크탑이 설치되어 있지 않고 커맨드만으로 푸시를 진행할 때 별도의 설정을 하지 않았다면 푸시를 할 때마다 로그인을 해주셔야 합니다. 따라서 계정 정보가 저장되지 않으므로 괜찮습니다.

728x90
반응형

728x90
반응형

  이번 시간에는 AWS EC2에 AWS RDS를 연동하는 방법에 대해서 알아보도록 하겠습니다. 기존에 운영하는 AWS EC2 서비스가 있을 때 이에 안전한 방법으로 데이터베이스를 연결해야 하는 경우가 존재할 수 있습니다. 따라서 그럴 때를 대비하여 한 번 AWS EC2에 AWS RDS를 연동해보도록 하겠습니다.


※ AWS EC2 인스턴스의 VPC 정보 확인 ※


  일단 자신이 현재 가지고 있는 AWS EC2 정보를 먼저 파악하는 것이 중요합니다. 우리는 이 EC2에 AWS RDS 서비스를 연결할 것이기 때문에 EC2와 동일한 VPC에 AWS RDS를 설치해야 해요. 그러므로 VPC ID를 확인하는 것이 첫 번째입니다. 이후에는 [보안 그룹]을 확인합니다. 현재 제 AWS EC2 인스턴스의 보안 그룹은 launch-wizard-2입니다.



※ DB 보안 그룹 설정하기 ※


  따라서 [보안 그룹] 탭으로 이동해보도록 합시다. 그러면 아까 확인했던 launch-wizard-2라는 이름의 보안 그룹이 눈에 보입니다. 이 보안 그룹의 ID 값을 기록하세요. 우리는 이 보안 그룹에서만 DB에 접근할 수 있도록 설정할 것입니다. 이후에 [보안 그룹 생성] 버튼을 눌러보도록 합시다. 



  이제 DB Security Group이라는 이름으로 우리가 만들 DB가 들어갈 보안 그룹을 만들어 주시면 됩니다. 이 때 [인바운드] 보안 그룹 규칙으로 방금 우리가 확인했던 EC2의 보안 그룹에서만 접근할 수 있도록 설정해주시면 됩니다. 이 때 저는 MySQL DB를 사용할 것이므로 MySQL 포트인 3306으로 설정했습니다.



※ DB 서브넷 그룹 설정하기 ※


  이제 AWS RDS의 [서브넷 그룹] 탭으로 이동하여 [DB 서브넷 그룹 생성] 버튼을 눌러서 서브넷 그룹을 만들어 보도록 하겠습니다.



  다음과 같이 DB Subnet Group이라는 이름으로 서브넷 그룹을 만든 이후에 EC2와 동일한 VPC를 선택합니다.  그리고 [이 VPC와 관련된 모든 서브넷 추가] 버튼을 누르시면 됩니다.




  결과적으로 DB 서브넷 그룹을 생성해주시면 됩니다. 그러면 다음과 같이 하나의 서브넷 그룹 생성이 완료됩니다.



※ DB 한글 설정을 위한 파라미터 그룹 설정하기 ※


  MySQL 데이터베이스는 기본적으로 한글을 지원하지 않습니다. 그래서 [파라미터 그룹] 탭으로 이동하여 한글 지원을 위한 [파라미터 그룹 생성]을 진행하셔야 합니다.



  다음과 같이 MySQL 5.6 버전의 파라미터 그룹을 만들어 줍시다.



  이제 만들어진 파라미터 그룹으로 들어가 편집을 수행합니다.



  가장 먼저 [char]를 검색하여 모든 캐릭터 인코딩 관련 값을 UTF8으로 변경해주세요.



  이후에 [collation]을 검색하여 모든 값을 utf8_general_ci로 변경해 주시면 됩니다.




  이후에는 꼭 [변경 사항 저장] 버튼을 눌러서 저장해 주시면 됩니다.



※ AWS RDS 데이터베이스 생성하기 ※


  이제 실질적으로 MySQL 데이터베이스를 생성해보도록 하겠습니다. 그리고 AWS EC2에서만 접속이 가능하도록 설정할 것입니다.



  다음과 같이 MySQL 엔진을 선택하여 [RDS 프리 티어에 적용되는 옵션만 사용]을 체크해주세요. 무료로 이용하는 편이 좋을 거예요.



  결과적으로 다음과 같이 MySQL 5.6을 선택하여 만들어 주시면 됩니다.




  다만 고급 설정 구성을 하실 때에는 서브넷 그룹으로는 우리가 만들었던 DB Subnet Group을 선택한 뒤에, 보안 그룹도 마찬가지로 우리가 만들었던 DB Security Group을 선택하시면 됩니다. 그리고 [퍼블릭 액세스 가능성]아니요로 선택해주셔야 VPC 내부의 EC2에서만 접근이 가능합니다.



  결과적으로 데이터베이스 옵션으로는 아까 만들었던 한글 전용 파라미터 그룹을 선택하시고, 나머지는 기본 설정으로 데이터베이스를 생성해주시면 됩니다.




  결과적으로 다음과 같이 DB 인스턴스가 생성되었습니다.



※ AWS RDS에 연결하기 ※


  이제 만들어진 데이터베이스의 정보를 확인해보도록 합시다.



  다음과 같이 [연결] 탭에서 엔드포인트를 확인하시면 됩니다. 이 엔드포인트 주소로 접속할 수 있어요.



  이제 한 번 접속을 해봅시다.


  ▶ MySQL 접속 명령어: mysql -u empo -p --host empo.crtzcfwok2ed.ap-northeast-2.rds.amazonaws.com


  다음과 같이 외부 IP에서 해당 MySQL에 접속하려고 하면 연결 오류 메시지가 출력됩니다. 보안 그룹이 우리를 지켜주고 있는 거예요.



  하지만 같은 VPC 내에 있는 EC2에서 접근을 시도하면 다음과 같이 성공적으로 연결이 이루어지는 것을 확인할 수 있습니다.



  따라서 성공적으로 AWS EC2에 AWS RDS를 연동하게 된 것입니다.

728x90
반응형

728x90
반응형

  기본적으로 AWS VPC 안에 다양한 AWS 서비스를 포함하여 전체 시스템을 구축하는 경우가 많습니다. 다만 AWS VPC를 제거하고자 할 때 여러 개의 서비스가 서로 복잡하게 연결되어 있으면 제거가 안 될 수도 있습니다. 따라서 이번 시간에는 AWS VPC 안에 포함되어 있는 서비스들을 통째로 제거하는 방법에 대해서 알아보도록 하겠습니다.


※ 제거 순서를 고려하여 제거하기 ※


  기본적으로 VPC, [보안 그룹] 등을 지우기 전에는 그 안에 포함되어 있는 EC2나 RDS와 같은 실제 서비스들을 먼저 제거하셔야 합니다. 저는 지난 포스트(http://ndb796.tistory.com/224)에서 EC2와 RDS를 하나의 VPC 안에 넣어서 관리하는 방법에 대해서 알아보았습니다. 저는 이렇게 만들어진 시스템 구성을 통째로 제거해 볼 것입니다. 당연히 EC2와 RDS를 먼저 제거해야 합니다.


  따라서 다음과 같이 EC2 관리 화면에서 인스턴스부터 [제거] 해주겠습니다. 제거할 때는 [인스턴스 상태] 탭에서 [종료] 버튼을 누르시면 됩니다. 실제로는 인스턴스를 종료했을 때 완전히 제거가 이루어집니다.



  인스턴스를 종료하면 자동으로 볼륨 저장소가 제거됩니다. 당연한 겁니다.



  이후에 해당 인스턴스의 공인 IP를 위해 사용되던 탄력적 IP가 있다면 [탄력적 IP] 탭에서 이 또한 제거해주시면 됩니다.



  다음과 같이 [주소 연결 해제]를 먼저 진행해 주시고, [주소 릴리즈]까지 해주시면 됩니다.




  이제 EC2가 완전히 VPC에서 제거되었으므로 RDS 또한 지워주도록 하겠습니다. AWS RDS 서비스에서 [데이터베이스] 탭에 가서 우리 VPC에 포함되어 있는 데이터베이스를 찾아서 [수정] 버튼을 눌러주시면 됩니다.



  기본적으로 데이터베이스는 [삭제 방지] 기능이 적용되기 때문에 이를 비활성화 처리 해주셔야 합니다.



  다음과 같이 삭제 방지 비활성화 처리를 [즉시 적용] 해주시면 됩니다.



  이후에 데이터베이스를 삭제할 수 있습니다. [삭제] 버튼을 눌러 삭제해주세요.



  데이터베이스는 EC2보다 삭제하는 과정이 귀찮습니다. 왜냐하면 실제로 상당수 서비스에서 가장 중요한 데이터는 모두 데이터베이스 안에 있기 때문입니다. 그래서 [delete me]라는 문구를 입력하여 삭제를 진행해주셔야 합니다.



  이제야 VPC로 돌아오셔서 VPC를 삭제 처리할 수 있습니다. VPC 안에 포함되어 있는 EC2 및 RDS가 모두 제거된 상태라면 어렵지 않게 VPC를 삭제할 수 있습니다.



  다음과 같이 [Delete VPC] 버튼을 눌러서 VPC를 제거해보세요.



  만약 네트워크 인터페이스 등이 존재하는 경우 VPC를 곧바로 제거하실 수 없습니다. 이럴 때는 네트워크 인터페이스를 먼저 제거해주시면 됩니다.



  다음과 같이 네트워크 인터페이스를 먼저 제거해주세요.



  이제 VPC를 다시 제거해주시면 안정적으로 제거가 완료됩니다.



  VPC를 지우면서 연관된 오브젝트를 한꺼번에 지우도록 처리하시면 깔끔하게 제거가 완료됩니다.



728x90
반응형

728x90
반응형

※ AWS VPC 서비스를 이용해 AWS EC2와 RDS를 관리하는 방법 ※


  이번 시간에는 AWS VPC 서비스를 이용해 AWS EC2와 RDS를 안전하게 관리하는 방법에 대해서 알아보도록 하겠습니다. 우리는 일반적으로 AWS EC2를 이용해 웹 서버를 구동시키고, MySQL과 같은 데이터베이스는 AWS RDS 서비스를 이용하여 별도의 독립된 공간에서 관리합니다. 이 때 EC2는 웹 서버가 있다는 점에서 퍼블릭(Public) 상태여야 하며 RDS는 EC2에서만 접근할 수 있는 프라이빗(Private) 상태여야 해요.


  다시 말해 다음과 같이 시스템을 구성하는 것이 안전하며 효과적입니다.



  말 그대로 외부에서는 EC2에만 접근할 수 있으며 AWS RDS 데이터베이스는 EC2를 거쳤을 때만 이용할 수 있습니다. 그래서 외부에서 바로 DB에 접근할 수 없다는 점에서 중요한 정보를 안전하게 보관할 수 있다는 것입니다. 이는 가장 간단하면서도 보편적인 시스템 구성도입니다. 결과적으로 VPC라는 것을 이용해 AWS EC2와 AWS RDS를 감싸야 합니다. 따라서 가장 먼저 AWS VPC를 만들어 보도록 하겠습니다.


※ VPC 만들어보기 ※


  ▶ VPC 관리: https://console.aws.amazon.com/vpc/


  VPC는 해당 사이트에 접속해서 생성할 수 있습니다. 바로 [VPC 만들기] 버튼을 눌러 이동합니다.



  우리는 2번째 옵션인 [퍼블릭 및 프라이빗 서브넷이 있는 VPC]를 선택하면 됩니다. 외부에서 접속 가능한 퍼블릭(Public) 서브넷을 반드시 열어 두어야 합니다. 이후에 Public Subnet이라는 이름으로 외부에서 접속 가능한 서브넷을 만들 예정입니다.



  다음과 같이 퍼블릭 서브넷(Public Subnet)프라이빗 서브넷(Private Subnet)의 이름을 설정하면 됩니다. 이 때 프라이빗 서브넷의 가용 영역을 기억해두시면 좋습니다. 나중에 프라이빗 서브넷을 하나 더 만드는데, 그 프라이빗 서브넷의 설정에 있어서 필요한 정보이기 때문입니다. 그리고 NAT 게이트웨이로 NAT 인스턴스를 사용하시면 됩니다. 어차피 저는 NAT 인스턴스 사용 설정만 해 놓고, 실제로는 사용하지 않을 생각입니다.



  그러면 NAT 인스턴스의 세부 정보를 설정할 수 있습니다. 저는 가장 기본적인 인스턴스인 t2.nano를 이용했습니다. 어차피 NAT 인스턴스는 지운 다음에 다시 만들어 줄 생각이에요. 이후에 [VPC 만들기] 버튼을 눌러서 VPC를 생성하시면 됩니다.



  이후에 [서브넷] 탭으로 이동해 보시면 다음과 같이 방금 우리가 만들었던 Public Subnet과 Private Subnet이 존재하는 것을 확인할 수 있습니다. 다만 VPC의 정상적인 동작을 위해서는 한 개의 Private Subnet을 더 만들어야 합니다. 따라서 [서브넷 생성] 버튼을 누를 수 있습니다.



  서브넷을 생성할 때는 아까 우리가 생성했던 VPC를 대상 VPC로 설정해주시면 됩니다.



  다만 이번에 만드는 두 번째 프라이빗 서브넷은 처음에 만들었던 프라이빗 서브넷과 다른 [가용 영역]을 사용해야 합니다. 만약 같은 가용 영역을 사용하시는 경우, 나중에 최종 단계에서 가용 영역이 최소 2개 이상 필요하다는 오류 메시지를 만나게 될 거예요. 또한 IPv4 CIDR 블록으로는 10.0.2.0/24를 사용하시면 됩니다. 이후에 [생성]을 진행해주시면 됩니다.



  이제 다음과 같이 Private Subnet이 2개 존재하는 것을 확인할 수 있습니다. 이 두 개의 프라이빗 서브넷이 동일한 라우팅 테이블을 가지는지 확인해주시면 됩니다. 다음 사진과 같이 각 서브넷을 클릭해서 [라우팅 테이블] 탭에서 확인하시면 됩니다.



※ 보안 그룹 설정하기 ※


  이제 실제로 어떠한 프로토콜을 이용해서 우리의 VPC에 접근할 수 있는지를 설정하기 위해서 [보안 그룹] 탭으로 이동해서 [Create Security Group] 버튼을 눌러서 보안 그룹을 만들어 주시면 됩니다.



  기본적으로 외부에서 접속이 가능한 보안 그룹으로 Security Group을 생성합니다. 마찬가지로 대상 VPC로는 처음에 만들었던 VPC를 넣어주신 뒤에 [Create] 버튼을 눌러서 생성해주시면 됩니다.



  보안 그룹을 만든 이후에는 다음과 같이 만들어진 보안 그룹을 클릭하여 [Edit Rules] 버튼을 눌러서 규칙(Rule)을 추가하시면 됩니다.



  이후에 다음과 같이 SSH와 HTTP 프로토콜을 열어서 외부에서 접속할 수 있도록 설정하시면 됩니다.



  결과적으로 다음 그림과 같이 인바운드 규칙(Inbound Rule)을 확인해 보시면 80번 포트 및 22번 포트로는 외부에서 접속이 가능한 것을 확인할 수 있습니다. 이제 내부망에서 DB에 접속할 수 있는 보안 그룹 또한 만들어주도록 하겠습니다.



  이후에 다음과 같이 DB Security Group이라는 이름으로 보안 그룹을 만든 뒤에 대상 VPC를 설정해주시면 됩니다.



  이번에 만들어진 보안 그룹도 마찬가지로 [Edit Rules]를 눌러서 규칙을 추가할 수 있습니다. 이 때, 아까 만들었든 Security Group의 그룹 ID를 저장해 두시면 됩니다.



  다음과 같이 3306 포트로만 접속할 수 있도록 설정하시면 됩니다. 이 때 [소스] 탭으로는 아까 만들었던 Security Group의 그룹 ID를 넣으시면 됩니다. 그러면 Security Group에 속해 있는 컴퓨터만 DB Security Group에 접근할 수 있게 됩니다.



※ 데이터베이스 서브넷 설정 ※


  이제 하나의 데이터베이스를 만들어서 설정을 해보도록 하겠습니다. 가장 먼저 [서브넷 그룹] 탭으로 이동해서 [DB 서브넷 그룹 생성] 버튼을 누르시면 됩니다.



   이후에 다음과 같이 DB 서브넷 그룹을 만들어 주세요. 만드실 때는 처음에 생성했던 VPC로 설정하시고 [이 VPC와 관련된 모든 서브넷 추가] 버튼을 눌러서 VPC와 관련된 서브넷을 모두 추가하시면 됩니다.



  결과적으로 모든 서브넷이 추가된 것을 확인할 수 있습니다.



※ 데이터베이스 만들기 ※


  결과적으로 [데이터베이스] 탭으로 이동해서 [데이터베이스 생성] 버튼을 눌러서 데이터베이스를 만들어 보도록 하겠습니다.



  다음과 같이 프리 티어로 MySQL을 만들어 보도록 하겠습니다.



  이후에 다음과 같이 DB 세부 정보를 지정할 수 있습니다. 저는 MySQL 5.6으로 설정하고 기본 설정 그대로 진행했습니다.



  이후에 고급 설정 탭에서 VPC의 세부 설정을 진행하시면 됩니다. 다음과 같이 아까 만들어 주었던 DB Subnet Group과 DB Security Group으로 설정을 해주시면 됩니다. 그러면 동일한 VPC에 있는 Security Group에서만 이 DB에 접근할 수 있게 됩니다.



  이후에 나머지 설정을 해주시고 DB 인스턴스를 만들어 주시면 됩니다.



※ AWS EC2 인스턴스 만들기 ※


  이제 AWS EC2 인스턴스를 만들어서 퍼블릭(Public)한 접근이 가능하도록 설정하겠습니다. 따라서 AWS EC2 관리 페이지의 [인스턴스] 탭에서 [인스턴스 시작] 버튼을 눌러 인스턴스를 만들어 보도록 하겠습니다.



  저는 우분투(Ubuntu) 서버로 생성을 진행하여 인스턴스까지 설정해보도록 하겠습니다.




  이후에 인스턴스 세부 정보를 편집하여 VPC 설정을 진행하도록 하겠습니다.



  다음과 같이 처음에 만들었던 VPC로 설정을 진행하시면 됩니다. 또한 서브넷 설정에 있어서 만들었던 Public Subnet으로 설정하시면 됩니다.



  이후에 [보안 그룹 구성] 탭으로 이동하여 아까 만들었던 Security Group으로 설정하여 외부에서 접근 가능하도록 설정합니다.



  이후에 인스턴스를 시작해주시면 됩니다.



  또한 해당 인스턴스에 접근하기 위하여 키 페어를 설정합니다.



  이제 인스턴스가 생성되었습니다.



  다만 이렇게 만들어진 인스턴스는 기본적으로 공인 IP가 할당되어 있지 않습니다. 따라서 탄력적 IP(Elastic IP)를 설정해줍니다.



  하나의 탄력적 IP를 선택해 [주소 연결] 기능을 눌러 다음과 같이 방금 생성했던 인스턴스를 설정해주시면 됩니다.



  이제 이 인스턴스에 해당 퍼블릭 IP로 접속할 수 있습니다.



  실제로 접속을 해보면 다음과 같습니다.



※ VPC 내부의 MySQL 접속하기 ※


  이제 VPC 내부에 있는 MySQL에 접속해보도록 하겠습니다. AWS RDS 서비스로 가서 아까 만들었던 DB를 확인합니다. 그러면 해당 DB에 접속할 수 있는 URL이 보입니다.



  이제 외부에서 여기에 접속하려고 하면 접속 실패 메시지가 뜨는 것을 확인할 수 있습니다.



  따라서 EC2에서 MySQL을 설치해서 EC2에서 해당 MySQL 서버에 접속해보도록 하겠습니다.


  ▶ APT 업데이트: sudo apt-get update

  ▶ MySQL 설치: sudo apt install mysql-client-core-5.7


  다음 사진과 같이 동일 VPC 내의 EC2에서 접속했을 때 비로소 접속이 되는 것을 확인할 수 있습니다.


  ▶ MySQL 접속하기: sudo mysql -u user -p --port 3306 --host db.crtzcfwok2ed.ap-northeast-2.rds.amazonaws.com



  이로써 VPC 내부에서만 접속이 가능한 MySQL 데이터베이스가 구축이 되었습니다. 반면에 EC2는 퍼블릭(Public)한 공간에 있기 때문에 누구나 언제든지 접속이 가능합니다. 이와 같은 구성이 많이 사용되는 이유는 EC2에 MySQL을 설치하는 것보다 RDS 서비스로 따로 분리하는 것이 더 효과적인 DB 관리가 가능하기 때문이에요.


728x90
반응형

728x90
반응형

  노션(Notion)을 활용한 팀 프로젝트 관리 방법에 대해서 알아보도록 하겠습니다. 노션(Notion)은 최근에 슬랙(Slack)과 함께 프로젝트 일정 관리를 위한 목적으로 많이 활용되고 있습니다. 결과적으로 팀 내에서 메신저 기능으로는 슬랙을 사용하고, 프로젝트 일정 관리 및 업무 분장에 있어서는 노션을 사용하면 효과적입니다.


  ▶ 노션(Notion) 공식 사이트https://www.notion.so/



  노션 사이트에 접속해서 [Desktop] 탭으로 이동하시면 다음과 같이 응용 프로그램으로 다운로드를 받을 수 있습니다. 노션은 브라우저만 이용해서도 사용할 수 있지만 데스크탑 응용 프로그램으로 설치해서 사용하는 것이 보다 간편하고 효율적입니다.



  데스크탑 프로그램으로 설치가 완료되면 다음과 같이 로그인을 수행해주시면 됩니다.



  로그인 이후에는 특정한 워크스페이스(Workspace)에서 다음과 같이 팀 내에서의 일정 및 업무들을 관리할 수 있습니다.









728x90
반응형

728x90
반응형

  프로그래밍 개발을 공부하는 여러분들은 다양한 환경에서의 테스트를 위해 무료 도메인(Domain) 주소가 필요할 때가 있습니다. 말 그대로 도메인 주소만 필요할 때 프리넘(Freenom) 서비스를 이용하면 무료 도메인을 사용할 수 있습니다. 저 또한 가상 호스트(Virtual Host) 등의 다양한 기능의 테스트 목적으로 실제 도메인 배포 이전에 Freenom 서비스를 이용해 도메인 설정 테스트를 수행합니다.


  일단 공짜라서 좋아요.


  ▶ 프리넘(Freenom) 서비스 공식 주소: https://my.freenom.com/clientarea.php


  이 주소에 들어가서 바로 로그인을 수행하시면 됩니다. 저는 구글 계정으로 로그인을 수행했습니다.



  이제 메인 주소에서 바로 특정 도메인 주소를 입력하여 사용이 가능한지의 여부를 확인할 수 있습니다.



  저는 다음과 같이 사용하고자 하는 도메인 주소를 넣어서 확인을 해보았습니다. 



  그러면 무료로 사용할 수 있는 도메인 주소를 위와 같이 확인할 수 있습니다. 저는 .tk 도메인을 선택했습니다. 이를 선택한 이후에 결제(Checkout) 버튼을 눌러서 구매를 진행하시면 됩니다.



  그러면 위와 같이 기본적으로 3개월 사용 설정이 되는 것을 확인할 수 있습니다.



  이제 이메일 인증 이후에 해당 도메인을 사용할 수 있습니다.



  그리고 본인의 개인 정보를 입력한 이후에는 실제로 도메인을 구매할 수 있습니다.



  이후에 로그인이 된 상태에서 [Services] - [My Domains]로 가시면 구매한 도메인 목록을 확인할 수 있습니다.



  이후에 다음과 같이 방금 구매한 도메인에 대해서 [Manage Domain] 버튼을 눌러서 환경 설정을 진행할 수 있습니다.



  이후에 [Manage Freenom DNS] 탭에 들어가세요.



  그러면 다음과 같이 자신이 소유하고 있는 서버의 아이피 주소를 넣으면 우리가 구매한 도메인 주소가 특정 아이피 주소로 연결됩니다. 이러한 방법으로 매우 간단히 무료 도메인을 구매하여 사용할 수 있습니다.



  또한 가상 호스트(Virtual Host) 기능도 설정하여 사용할 수 있습니다. 예를 들어 www.도메인 주소.tk, admin.도메인 주소.tk, api.도메인 주소.tk와 같은 형태로 사용한다면 위와 같이 설정하시면 됩니다. 내용을 비워두면 우리가 구매한 기본 도메인 주소로 사용이 됩니다. 이상으로 Freenom을 이용해 무료 도메인 호스팅을 사용하는 방법에 대해서 알아보았습니다.

728x90
반응형