[SK shieldus Rookies 19기] 인프라 활용을 위한 파이썬 1일차와 DT 특강

기록하는짱구·2024년 2월 28일
0

SK Shieldus Rookies 19기

목록 보기
1/43
post-thumbnail

DT 특강

📌 클라우드

🏢 데이터 센터(DC)
기업이 다양한 네트워크 형식의 컴퓨팅 및 스토리지 인프라를 수용하는 용도로 사용하는 물리적 시설

🧐 데이터 센터를 많이 보유한 곳?
통신사(SK, KT, LG)
삼성SDS 등의 IT 자회사

🏢 한국의 데이터 센터는 서울·경기에 대부분 분포
대부분의 회사가 수도권에 집중되어있는 경향을 보이기 때문
땅 가격 저렴 & 지역적으로 시원하다는 이점에 강원 지역에도 건설 중

🔩 데이터 센터는 무조건 이중화
자체 망이 죽더라도 다른 망으로의 서비스 제공이 가능해지기 때문

💡 데이터 센터 등급 분류
⑴ 1티어~4티어로 나뉘며 등급이 높을수록 신뢰도↑
⑵ 한국은 3티어, 가동률 99.98%에 1시간 정도의 다운타임을 가지고 있음
⑶ Five Nine 99.9990%는 다운타임이 5.256분을 가짐
적어도 Four Nine 정도 되어야 서비스가 안정적

📌 클라우드 데이터 센터

클라우드 시장에서 차지하는 비중(2021)비율
AWS33 %
Azure21 %
Alibaba Cloud10 %
IBM Cloud6 %
salesforce3 %
Tencent Cloud3 %
Oracle2 %

구글 클라우드와 구글 데이터 센터는 서로 다른 법인

📌 Region & Availability Zone

🏭 AWS 리전
AWS가 전 세계에서 데이터 센터를 클러스터링하는 물리적 위치
더 높은 가용성, 확장성, 내결함성을 위해 다중의 가용영역으로 구성
→ 홍수나 화재, 지진 같은 만일의 상황에 대비하여 가용영역(Availability Zone)을 4개 이상 구성

EC2(Elastic Compute Cloud)
AWS에서 제공하는 클라우드 컴퓨팅

EBS(Elastic Block Storage)
데이터를 저장
API를 이용해 생성, 연결, 수정 등의 역할 수행

AMI(Amazon Machine Image)
인스턴스를 실행 할 때 필요한 정보를 모아 저장한 단위
CPU의 타입, 저장 공간의 용량, OS가 무엇인지 등의 정보

💻 EC2 인스턴스
AWS 클라우드에서 사용하는 일종의 가상 컴퓨터

🔎 Amazone EC2 인스턴스 표기법

M5d.xlarge
M인스턴스 패밀리
5인스턴스 세대
d추가 기능
xlarge인스턴스 크기

인스턴스 크기
8코어 짜리를 2개, 4개, 8개로 나누어 운영
xlarge 8시간 운영하는 비용과 8xlarge 1시간 운영하는 비용은 같음
→ 즉, 작은 크기로 된 인스턴스를 사용할수록 비용 절감 가능

📌 마이크로 서비스

💡 클라우드의 장점
"Pay as you go"
"쓴 만큼 지불하라"

🏬 회사는 보통 5개년 감가상각
서비스를 시도하는 경우 → 클라우드 사용
서비스가 안정화 된 경우 → 온프렘(On-Prem) 사용

📢 여기서 잠깐! 온프레미스(On-premise)란?
IT 서비스를 운영하는 회사가 자체적으로 보유한 공간에 물리적으로 하드웨어 장비를 가지고 인프라를 직접 운영하는 방식

Cloud Native
클라우드의 장점을 최대한 활용하는 방식

🏦 CNCF (Cloud Native Computing Foundation)
클라우드 네이티브로의 전환이 가능한 다양한 오픈소스 프로젝트를 추진하고 관리하는 단체

CNCF
⑴ Containerized
⑵ Dynamically orchestrated
⑶ Microservices oriented

Cloud Native Lanscape
클라우드 네이티브를 전제로 한 오픈소스들이 즐비해있는 공간

마이크로 서비스

비용 효율적
▫ 예를 들어 자바에서는 하나의 패키지에 모든 기능이 포함되어 있다면 마이크로 서비스는 기능들을 분리시켜 별개의 컨테이너로 만들어 줌
▫ 장애가 발생하더라도 부분적으로만 쓰지 못하고 나머지 서비스는 이용 가능

업데이트 편리
▫ 서비스를 분화시켜 놓으면 업데이트가 빠름
▫ 필요에 따라 사용하려는 부분만 업데이트 가능

분리된 환경, 서비스가 다른 서비스를 호출하는 형식으로 사용
▫ 유튜브나 넷플릭스 같은 것들

📌 Container & Kubernetes

구조
App App
Operating System
Hardware → 맨 밑
구조1구조2
VM1-OS-Bin/Lib-AppVM2-OS-Bin/Lib-App
HypervisorHypervisor
OperatingSystem Operating System
HardwareHardware → 맨 밑

가상화
격리된 상태라도 서비스 제공 가능
회사에서 많이 사용 ex. VMware

Guest OS의 단점
리소스 오버헤드
부트업 타임 증가

📢 이러한 가상화의 단점은 컨테이너로 보완 가능

구조1구조2
Container1-Bin/Lib-AppContainer2-Bin/Lib-App
Operating SystemOperating System
HardwareHardware → 맨 밑

컨테이너
별도의 OS 공간 X
격리 제공
오버헤드 X
VMware보다는 컨테이너가 사용에 용이

🚪 Docker
대표적인 컨테이너 런타임
도커를 말아넣으면 라이브러리 간 충돌 발생 X
VMware보다 더 작게, 오버헤드 없이 운영 가능
같은 피지컬 서버에 더 많은 서버를 띄울 수 있음

💻 Serverless
개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델

쿠버네티스(K8S)
컨테이너들을 서버에 안전하게 띄워주는 역할
명령에 따라 내부에서 알아서 관리하는 것
만약 컨테이너 하나가 죽었다면, 쿠버네티스가 이를 확인하고 죽은 컨테이너를 찔러본 다음 다시 실행시킴


인프라 활용을 위한 파이썬

📌 파이썬의 개요

파이썬(Python)

1990년 네덜란드 소프트웨어 엔지니어인 귀도 반 로섬이 만든 언어

인터프리터를 사용하는 객체지향 언어이자 플랫폼에 독립적인 동적 타이핑 대화형 언어
공동 작업과 유지 보수가 매우 쉽고 편리

ex. 인스타그램, 넷플릭스, 아마존 등

📖 파이썬의 특징

사람이 생각하는 방식을 그대로 표현할 수 있는 인간다운 언어

문법이 쉬워 빠르게 배우기 가능
문법 자체가 쉽고 간결해 사람의 사고 체계와 매우 닮아있음

무료지만 강력
오픈 소스

간결
펄(Perl)은 100가지 방법으로 1가지 일 처리
파이썬은 가장 좋은 방법 1가지만 사용

프로그램을 실행하려면 줄(들여쓰기)을 반드시 맞춰야 함
가독성 향상
프로그램의 시각적 구조가 의미 구조를 정확하게 반영

개발 속도가 빠름
"Life is too short, You need Python."
→ 이에 파생된 말

📖 파이썬으로 할 수 있는 일

웹 프로그래밍
웹 프로그램 만들기에 적합한 도구

인공지능과 머신러닝
자연어 처리, 음성 인식, 이미지 인식 등과 같은 인공지능 기술 구현

수치 연산 프로그래밍

데이터 분석
Numpy, Pandas, Matplotlib 등의 라이브러리를 활용해 데이터 분석

데이터베이스 프로그래밍

시스템 유틸리티 제작
운영체제(윈도우, 리눅스 등)의 시스템 명령어를 사용하는 도구를 통한 시스템 유틸리티 제작

GUI(Graphic User Interface) 프로그래밍
화면에 윈도우 창을 만들고 프로그램 동작 등의 기능 가능

C/C++과 결합
C나 C++로 만든 걸 파이썬에서, 파이썬에서 만든 프로그램을 C나 C++에서 사용 가능

사물 인터넷
라즈베리파이를 제어하며 사물 인터넷 구현

📖 파이썬으로 할 수 없는 일

시스템과 밀접한 프로그래밍 영역
운영체제, 엄청난 횟수의 반복과 연산이 필요한 프로그램 등 빠른 속도를 요구하거나 하드웨어를 건드려야 하는 등의 행위 불가능

모바일 프로그래밍
안드로이드 네이티브 앱 개발 부족
→ 아이폰 앱 개발 불가

📌 실습 환경 구성

📖 파이썬 설치

https://www.python.org/downloads

📖 Visual Studio Code 설치

https://code.visualstudio.com/download

📖 파이썬 설치 확인

cmd(명령 프롬프트) → 시작 메뉴에서 실행

C:\Users\r2com> python --version
Python 3.12.2				# 설치한 파이썬 버전이 표시

📖 파이썬 실행

2가지 방법 中 원하는 방법으로 실행

① 대화형 인터프리터 실행 → 시작 메뉴 → python 으로 실행
② 명령 프롬프트 → python 명령으로 실행

C:\Users\r2com> python
Python 3.12.2 (tags/v3.12.2:6abddd9, Feb  6 2024, 21:26:36) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

📖 IDLE 실행

시작 메뉴 → python idle 실행

📢 여기서 잠깐! 통합 개발 환경(IDE)이란?
개발을 함에 있어 필요한 것들을 모아놓은 것
ex. 파이참, VS코드 등

📖 VSCode 실행

# 디렉토리 생성
C:\Users\r2com> mkdir c:\python

# 생성한 디렉토리로 이동
C:\Users\r2com> cd c:\python

# 현재 디렉토리를 프로젝트 기준(루트) 디렉토리로 설정한 후 VSCode 실행
c:\python> code .

파이썬의 경우 print 함수를 사용하지 않더라도 코드 실행 결과가 하단에 즉시 출력됨

VS코드의 경우 별도의 파일을 만들어 실행할 때 결과를 즉각적으로 내기 위해선 print 함수가 필요

📌 산술 연산자

>>> 3/2  # 정수/정수의 결과로 실수 반환
1.5
>>> 3%2  # %는 나눗셈 결과에서 나머지만 반환
1
>>> 3//2  # //는 나눗셈 결과에서 몫만 반환
1


>>> 5 / 2
2.5
>>> 5 % 2
1
>>> 5 // 2
2

📌 변수

괄호(=)를 기준으로 왼쪽엔 변수명, 오른쪽엔 변수값
ex. a = 1

>>> a = 1  # 변수에 값 할당(할당 연산자 '=' 사용)
>>> b = 2
>>> a + b  # 변수에 할당된 값 사용
3
>>> a = 10  # 새로운 값 할당 가능(변수의 값 변경 가능)
>>> b = 20
>>> a + b  # 변수가 숫자 타입의 값을 가지면 덧셈 연산으로 동작
30
# 변수의 값을 따옴표로 묶으면 문자열(string) 타입의 값을 가지게 됨
>>> a = "string"

>>> b = "문자열"

# 변수가 문자열 타입의 값을 가지면 + 연산자는 문자열을 결합하는 용도로 동작
>>> a + b 
'string문자열'

📌 자료형

📖 숫자형

📝 숫자형(number)
숫자 형태로 이루어진 자료형

분류예시
정수123, -345, 0
실수123.45, -1234.5, 3.4e10
8진수0o34, 0o25
16진수0x2A, 0xFF

📝 숫자형을 활용하기 위한 연산자
사칙연산(+, -, *, /)
x의 y제곱을 나타내는 ** 연산자
나눗셈 후 나머지를 리턴하는 % 연산자
나눗셈 후 몫을 리턴하는 // 연산자

>>> a = 10
>>> b = 20
>>> a * b
200
>>> a ** b
100000000000000000000

📖 문자열

📝 문자열(string)
문자, 단어 등으로 구성된 문자들의 집합
따옴표("", '')로 묶여진 데이터
ex. "python", 'apple' 등

>>> a = """aaa  # 여러 줄(라인)에 내용을 포함하는 문자열을 의미
... bbb"""    # 입력할 내용이 남아있음을 의미
>>> a
'aaa\nbbb'    # 개행문자(\n)를 포함한 문자열 → \n는 줄 바꿈 문자(이스케이프 문자)

>>> print(a)
aaa
bbb           # 개행문자에 의해 새로운 줄에서 출력


           +-- 문자열 데이터의 시작을 의미
           |      +-- 문자열 데이터의 끝을 의미하는 기호로 해석
           |      | 
           |      |
>>> food = 'Python's favorite food is perl'
                   ~~~~~~~~~~~~~~~~~~~~~~~~
                   # 프로그램에서 해석할 수 없는 내용으로 처리
                   
  File "<stdin>", line 1
    food = 'Python's favorite food is perl'
                   ^
SyntaxError: invalid syntax

쌍따옴표(" ")

                  +-- 문장 부호의 의미로 사용  
                  |
           +------|-----------------------+-- 문자열 데이터의 시작과 끝을 의미하는 기호로 사용 
           |      |                       |
>>> food = "Python's favorite food is perl"
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            문자열 데이터에 홑따옴표를 포함하고 있는 경우
            → 문자열 데이터를 쌍따옴표로 묶어서 표현
>>> food
"Python's favorite food is perl"

이스케이프 처리

                  +-- 뒤에 나오는 홑따옴표가 문자열 데이터의 시작과 끝을 의미하는 기호가 아닌  
                  |   문장 부호의 의미로 사용되는 것을 의미 ⇒ 이스케이프 처리
                  | 
           +------|------------------------+-- 문자열 데이터의 시작과 끝을 의미하는 기호로 사용 
           |      |                        |
>>> food = 'Python\'s favorite food is perl'
>>> food
"Python's favorite food is perl"

💻 문자열

Ex.

>>> s='abcd'
>>> len(s)
4
>>> l=[1,2,3,4]
>>> len(l)
4
>>> 'nh' + 'xy'  # 문자열 + 문자열 → 문자열 결합
'nhxy'
>>> 'nh' + 3     # 문자열 + 숫자 또는 숫자 + 문자열 → 에러
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> 3 + 'hn'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> str(3)         # 매개변수로 설정된 숫자를 문자로 변환해주는 함수
'3'
>>> 'nh' + str(3)
'nh3'
>>> str(3) + 'nh'
'3nh'
>>> 10+'10'       # 숫자 + 문자열 → 에러
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 10+int('10')  # 숫자 + 숫자 → 덧셈 결과 도출
20
>>> str(10)+'10'  # 문자열 + 문자열 → 문자열 결합 결과 도출
'1010'
>>> int('1234')  # int 함수에는 정수 형태의 문자열이 매개변수로 전달되어야 함
1234
>>> int('1234.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1234.0'
>>> int('123')
123
>>> float('123')
123.0
>>> int('123.45')   	# 타입 변환 오류
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '123.45'

>>> 4 * '-'			  	# 반복 (반복 횟수가 0보다 작거나 같으면 빈 문자열 반환)
'----'
>>> 'NULL' * 0				
''
>>> 'NULL' * -3
''

📖 의미 문자와 이스케이프

📝 의미 문자 = 메타 문자 = 특수 기호
어떤 기능에서 특별한 용도로 정의되어 있거나 의미를 가지고 있는 문자

Ex.

SQL문에서 홑따옴표는 문자열 데이터의 시작과 끝을 의미

select * from users where name = 'Hong'
								 ~    ~

URL에서 &요청 파라미터와 파라미터를 구분짓는 용도

http://www.test.com/getCompanyInfo.jsp?
companyName=SK&city=Secoul&type=ITService
~~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~~~                    

🔎 의미 문자에서 의미를 제거하고 단순 문자로만 사용하고 싶은 경우

해당 기능에서 제공하는 일정한 규칙에 따라 변형해서 사용
→ 인코딩

Ex.

# MySQL의 경우 홑따옴표를 두 번 사용하면 홑따옴표 문자로 인식
select * from users where name = 'John''s Junior 2'
									  ~~


# & 기호를 URL 인코딩하여 전달
http://www.test.com/getCompanyInfo.jsp?companyName=Bandi%26Luice	
                                                     

의미 문자를 제거하고 단순 문자로 사용한다는 의미의 문자 사용
이스케이프를 의미하는 문자인 백슬래시(\)

Ex.

select * from users where name = 'John\'s Junior 2'
									  ~~

💻 여러 줄인 문자열을 변수에 대입하고 싶을 때
'\n' 삽입

Ex.

multi = """  # \n
첫 번째 라인
두 번째 라인
세 번째 라인
"""
print("*" * 10)  # "*" 문자를 10번 반복
print(multi)
print("*" * 10)
  • 결과
 **********
첫 번째 라인  
두 번째 라인  
세 번째 라인  
 **********
multi = """
첫 번째 라인
두 번째 라인
세 번째 라인
"""
  
print("*" * 10)
print(multi)
print("*" * 10)
  
singleline = "\n첫번째\n두번째\n세번째\n"
  
print("*" * 10)
print(singleline)
print("*" * 10)
  • 결과
  **********
  첫 번째 라인
  두 번째 라인
  세 번째 라인
  **********
  **********
  첫번째
  두번째
  세번째
  **********

0개의 댓글