DNS란?

 

    DNS란 Domain Name System의 약어로, 인터넷에서 사용되는 컴퓨터나 기기들의 주소를 인터넷 사용자가 쉽게 이해하고 기억할 수 있는 도메인 이름(예: www.google.com/) 변환해주는 시스템입니다.

    DNS는 인터넷에서 매우 중요한 역할을 하며, 인터넷 사용자가 웹 사이트를 방문하거나 이메일을 보내는 등의 모든 인터넷 활동에서 사용됩니다.

 

 

 

 

 

 

DNS 작동

 

    브라우저(PC) → local DNS(ip를 제공해주는 업체 isp 인터넷 서비스프로바이더 _ex. 통신사)  → DNS 서비스 순으로 동작합니다.  DNS 서비스는 계층적으로 구성된 분산 시스템으로 이루어져 있으며, 이 계층 구조에서는 Root DNS Server, TLD DNS Server, SLD DNS Server가 각각의 역할을 수행합니다.

 

1. Root DNS 서버

    인터넷에서 최상위에 위치하며 모든 요청이 이 서버를 거쳐야 한다. TLD(Top-Level Domain) DNS Server에 마지막 주소(ex. com, io 등)를 알려준다.

2. TLD DNS 서버

    도메인 이름의 최상위 레벨을 관리(ex. com, io등)한다. 모든 도메인 이름은 하나 이상의 TLD에 속하며, SLD DNS 서버에 도메인 이름(ex. naver, google)을 알려준다.

3. SLD DNS 서버

    도메인의 중간 레벨을 관리(ex. naver, google)한다. 도메인 이름에 대한 IP 를 반환한다.

 

 

    주소를 요청하면 많은 통신이 일어나므로 매번 주소를 요청하는 것은 비효율적입니다. 이 때문에 주소를 한 번 알아내면 캐싱(PC나 local DNS에 주소를 저장)이 일어나게 됩니다.

 

 

 

 

    ❓ 그렇다면 캐싱을 얼마나 오래 가지고 있을까요?

 

 

 

TTL (Time to Live)

    DNS 레코드가 캐싱될 수 있는 최대 시간을 나타내는 값입니다. TTL이 높을수록 DNS 레코드가 캐싱될 수 있는 시간이 더 길어지므로, 캐시 효율성은 높아집니다. 일반적으로, TTL은 분에서 시간 단위로 설정됩니다.

 

 

 

 

 

IPv4와 IPv6

  • IPv4와 IPv6는 인터넷 프로토콜 주소 체계입니다.
  • IPv4는 32비트로 구성된 주소 체계로, 최대 약 43억개의 IP 주소를 사용할 수 있습니다.
  • 인터넷 사용자의 증가로 인해 IPv4 주소가 부족해지는 문제가 발생했습니다.
  • IPv6가 등장하게 되었습니다.
  • IPv6는 128비트로 구성된 주소 체계로, 약 340경개의 IP 주소를 사용할 수 있습니다.
  • 주소 고갈 문제를 해결할 수 있을 뿐만 아니라, 보안성과 기능 면에서도 개선되었습니다.

IPv4 예시) 192.168.0.1. 

IPv6 예시) 2001:0db8:85a3:0000:0000:8a2e:0370:7334

 

 

 

 

레코드 타입

    DNS 레코드 타입은 다음과 같습니다.

  • A 레코드: 호스트네임(도메인 네임)과 IPv4 주소를 연결합니다.
  • AAAA 레코드: 호스트네임과 IPv6 주소를 연결합니다.
  • CNAME 레코드: 호스트네임을 다른 호스트네임과 연결합니다. 다른 호스트네임은 반드시 A 혹은 AAAA 레코드가 있어야 합니다.
  • NS 레코드: 호스트존의 네임서버(DNS 서버)를 지정합니다.

    호스트존은 주소록입니다. public 호스트존은 도메인 네임의 IP 주소를 가리키며, private 호스트존은 사설망 내부에서 사용됩니다. 또한, SOA 레코드는 메타 데이터를, NS 레코드는 네임서버 정보를 담고 있습니다.

 

 

 

 

 

CNAME vs Alias

CNAME Alias
DNS 레코드의 유형
호스트 이름을 다른 호스트 이름에 매핑하는 데 사용
호스트 이름을 다른 호스트 이름으로 매핑 퍼블릭 IPv4 DNS랑 연결
호스트 이름이 변경되었거나 호스트 이름이 서로 다른 IP 주소를 가리키도록 하려는 경우에 유용 호스트 이름을 Amazon S3 버킷, Elastic Load Balancer 또는 Amazon CloudFront 분산 된 웹 사이트와 같은 AWS 리소스에 매핑
CNAME은 루트 도메인이 아닌경우에만 적용가능
(ex app.mydomain.com O, mydomain.com X)
AWS 리소스에 대한 DNS 레코드를 만들 수 있음
(Amazon Route 53에서만 지원)

 

 

 

 

 

Route53

TLD DNS, SLD DNS 서버 두 개의 역할을 동시에 한다.

 

 

  • 도메인을 구매했다면 서버가 다운되거나 에러가 있을 때를 대비하여, NS(네임 서버)에 4개가 생성되어 있다.
  • SOA 메타데이터가 담겨있다.

 

CNAME 적용하기

 

 

 

 

Alias 적용하기

 

 

# 도메인으로 IP주소 확인하기
nslookup ctest.도메인.com

 

※ CNAME은 서브 도메인이 필요

※ EC2 퍼블릭 IPv4 DNS로는 Alias를 사용할 수 없다.

'aws' 카테고리의 다른 글

08. [aws] VPC  (0) 2023.05.26
07. [aws] 도메인 HTTPS 연결  (0) 2023.05.26
05.5 [aws] Sqlectron  (0) 2023.05.23
05. [aws] RDS  (0) 2023.05.14
04.5. [aws] SSL과 HTTPS  (0) 2023.05.14

설치하기

 

아래 사이트에서 Download GUI를 클릭합니다. 연동된 깃허브 하단의 OS와 버젼을 골라 다운받아 설치합니다.

 

https://sqlectron.github.io/

 

Sqlectron - One single DB client for any relational DB

A simple and lightweight SQL client desktop/terminal with cross database and platform support.

sqlectron.github.io

 

 

 

 

 

Sqlectron 연결하기

 

 

왼쪽에 user 테이블 생성

 

 

  • user  테이블 오른쪽 클릭 > Insert Statement : 테이블에 데이터를 넣어줄 수 있음
  • (Sqlectron) user 테이블에 다시 들어가면 데이터가 저장된 것을 확인 할 수 있음
  • (aws) RDS > 모니터링 탭 > 사용을 볼 수 있음

※ SELECT * FROM `user` LIMIT 1000 안 지우고 Insert하면 에러남

'aws' 카테고리의 다른 글

07. [aws] 도메인 HTTPS 연결  (0) 2023.05.26
06. [aws] DNS, CNAME vs Alias  (0) 2023.05.23
05. [aws] RDS  (0) 2023.05.14
04.5. [aws] SSL과 HTTPS  (0) 2023.05.14
04. [aws] ELB  (0) 2023.05.07

넘파이(numpy)

    넘파이는 컴퓨터가 계산하기 좋은 형태를 제공합니다. 그래서 판다스에 비해 메모리도 덜 들고 계산도 더 빠릅니다.

  • npy, npz와 같은 확장자 혹은 텍스트 파일로 입출력
  • 넘파이 배열과 판다스 형식은 상호 변환 가능
  • 넘파이는 인덱스나 칼럼명이 없음

 

import numpy as np

 

 

 

 

 

배열 생성

kitsch = np.array([['우', '리', '만', '의'],
                   ['자', '유', '로', '운'],
                   ['n', 'i', 'n', 'e'],
                   ['t', 'e', 'e', 'n']])

# 판다스로 변환시 칼럼과 인덱스 지정 가능
# pd.DataFrame(kitsch, columns=['num1', 'num2', 'num3', 'num4'], index=['cat', 'dog', 'bear'])

# 넘파이로 변환
# np.array('판다스 형식')

 

 

 

 

배열 인덱싱과 연산

 

# [행, 열] 순으로 작성합니다.
kitsch[2:3, :]
# array([['n', 'i', 'n', 'e'],
#        ['t', 'e', 'e', 'n']])


array_one = np.array([[1, 2], [3, 4]])
array_nine = np.array([[9, 8], [7, 6]])


# 사칙연산 가능
# array_one + 1  

array_one * array_nine
# array([[ 9, 16],
#        [21, 24]])

array_one @ array_nine
# array([[ 9+14,  8+12],
#        [27+28, 24+24]])  # 이해하기 쉽게 풀어씀

 

 

random 함수

np.random.randint(1, 10, n)
# 1~10까지 수를 n개 선택

np.random.choice(['cat', 'bird', 'dog', 'bear', 'zelda'], size=3, replace=False)
# 리스트 중 3개를 뽑음
# 리스트 순서로 정렬 X
# 뽑는 순서대로 나옴

 

 

 

기타

 

np.arange(1, 100, 8)  # 파이썬 range와 동일
# array([1, 8, 16, ... ])

# range의 끝이 포함되는 버전
np.linspace(1, 100, 8)
# array([1., 8., 15., 22., ...])

'머신러닝' 카테고리의 다른 글

extra [머신러닝] 판다스  (0) 2023.05.18
01 [머신러닝] 머신러닝이란?  (2) 2023.05.16

아나콘다(window)

 

https://www.anaconda.com/products/individual 

 

Free Download | Anaconda

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

 

 

(VS code 확장프로그램)

  • Python
  • Python Extension Pack
  • Code Runner

 

 

(Anaconda Prompt)

# 파이썬 버전 확인
python -V

# 가상환경 설정
conda create --name 프로젝트명 python=3.8 pip
y # Proceed ( [y] / n )?

conda activate 프로젝트명  # 가상환경 시작
conda deactivate  # 가상환경 종료

# 패키지 설치
pip install tensorflow
pip install opencv-python
conda install -c conda-forge dlib
y # Proceed ( [y] / n )?

# 패키지 설치 확인
conda list

 

 

 

아나콘다 - VS code 연동

 

(VS code)

F1 → Python Select Interpreter  인터프리터 선택   아나콘다에서 생성한 가상환경 선택

 

설치한 버전이 출력되는지 확인

import cv2
import tensorflow as tf
import dlib

print(cv2.__version__)
print(tf.__version__)
print(dlib.__version__)

 

판다스(pandas)

    데이터 분석에서 가장 많이 쓰이는 라이브러리로 열이 하나면 시리즈, 둘 이상이면 데이터프레임이라고 합니다. 판다스는 사람이 읽기 쉬운 형태의 자료구조를 제공합니다.

    판다스는 SQL, 엑셀파일, CSV파일등 데이터를 읽어들이고 반대로 데이터를 파일 형식으로 만들거나 DB에 올릴 수 있습니다.

 

import pandas as pd

 

 

 

csv 파일 불러오기

url = '캐글이나 오픈엠엘 같은 사이트의 공개 데이터 url'
df = pd.read_csv(url, index_col=0)  # 0번째 컬럼을 인덱스로 지정

df
df.head()  #기본 5개 출력
df.tail()  #기본 5개 출력

 

 

 

데이터 정보 출력

df.info()
  • 데이터 행과 인덱스를 출력
  • 칼럼의 이름과 수를 출력
  • Null이 아닌 데이터의 수를 출력
  • 자료형을 출력

 

자료형  
object 텍스트와 같은 문자 형태
int 소수점이 없는 숫자
float 소수점이 있는 숫자
bool True/ False
datetime 날짜/ 시간의 자료형

 

 

 

데이터 통계 정보 출력

round(df.describe(), 0)

 

용어  
count 데이터의 개수
mean 데이터 평균값
std 데이터 표준편차(오류 범위)
% 데이터를 오름차순으로 정리해, %가 되는 지점

 

 

 

 

데이터프레임 생성

# 딕셔너리
df_dic = {'animal':['Cat', 'Dog', 'Bear'], 'age':[8, 9, 10]}
pd.DataFrame(df_dic)

# 리스트
pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], 
columns=['num1', 'num2', 'num3', 'num4'], index=['cat', 'dog', 'bear'])

# 출력
#     num1  num2  num3  num4
# cat   1    2    3    4
# dog   5    6    7    8
# bear  9    10   11   12

 

 

 

 

인덱싱

행과 열 인덱싱

# 열(칼럼)
# 하나
df['num1']
# 여러개
df[['num1', 'num2', 'num3', 'num4']]


# 행
# 하나
df.loc['cat']
# 여러개
df.loc[['cat', 'dog', 'bear']] # or ['cat':'bear']

# 행의 인덱스로 인덱싱
df.iloc[[1, 2]]
# 출력
#     num1  num2  num3  num4
# dog   5    6    7    8
# bear  9    10   11   12


# 열과 행 인덱싱
df.iloc[0:1, 2:3]
# 출력
#     num3  num4
# cat   3    4
# dog   7    8

 

 

행렬 제거하기

df.drop(['num2', 'num3'], axis=1)

# axis X 행에서 제거
# axis O 열에서 제거

 

 

인덱스 변경

# 기존 인덱스 대체
df.reset_index(drop=True)
#     num1  num2  num3  num4
# 1   1    2    3    4
# 2   5    6    7    8
# 3   9    10   11   12

# 인덱스 삽입
df.set_index('num1')
# (num1)  num2  num3  num4
#   1    2    3    4
#   5    6    7    8
#   9    10   11   12

 

 

 

 

 

변수 계산

# 합과 평균을 함께 보기
df.aggregate(['sum', 'mean'])

# 모든 열 연산
df[['Age', 'Fare']].mean()

 

데이터의 개수 count( )
sum( )
평균 mean( )
중윗값 median( )
분산 var( )
표준편차 std( )

 

 

 

그룹별 계산

# 여러가지 한 번에 계산
df.groupby('class').agg(['count','mean'])

# 클래스 변수 확인
df['class'].unique()
# 클래스 변수 개수 확인
df['class'].nunique()
# 클래스별 데이터 개수
df['class'].value_counts()

 

 

데이터프레임 합치기

 

merge

  • 특정 열을 기준으로 데이터 결합
first = pd.read_csv('데이터')
second = pd.read_csv('데이터')


# 교차 결합
first.merge(second)

# 키값을 지정해 결함
first.merge(second, on = {'키값이 될 변수'})

# 전체 결합
# 데이터가 없다면 NaN(빈값)으로 표시
first.merge(second, how='outer')

# first에 second 결합
first.merge(second, how='first')

 

 

Join

  • 동일한 이름의 열(칼럼)이 중복되면 에러
  • 인덱스를 기준으로 데이터 결합
# 중복 칼럼을 버리고 합치기
first.drop('중복칼럼', axis=1).join(second.drop('중복칼럼', axis=1))

# 중복 칼럼을 기준으로 합치기
first = first.set_index('중복칼럼')
second = second.set_index('중복칼럼')
first.join(second)

# inner 조인(교차결합)
first.join(second, how='inner')

 

 

Concat

  • 기본은 행을 기준으로 결함, axis를 통해 열을 기준으로 결합
  • 내부, 외부 조인만 가능
pd.concat([first, second], axis=1)

 

'머신러닝' 카테고리의 다른 글

extra [머신러닝] 넘파이  (1) 2023.05.19
01 [머신러닝] 머신러닝이란?  (2) 2023.05.16

+ Recent posts