On the journey of
[디지털파워온] Python Serverless Coding 본문
Python
- 클라우드는 다 빌려서 사용함
- 서버리스는 서버가 없다는 것이 아니라, 준비된 서버가 없다는 것(사용자가 요청한 후 만들어지는 것)
- 자바가 강세였지만, 이제는 파이썬(전 세계적으로 대세, 인공지능이나 데이터 분석을 하고 있음)
<AWS Ramp-Up Guide for Serverless>
- ec2로 인스턴스를 만드는 것 파이썬을 개발하려고 만드는 것
security 다 맞고, 일부만 열어놓는 거
windows+r cmd
<What is Python?>
- 자바보다 오래된 언어(1991)
- 라이브러리가 가장 많이 제공된다
- 파이썬으로 AI 개발, 데이터 분석에 사용을 많이 한다
- 고대 그리스 신화의 뱀
- 만든 사람 : 귀도 반 로섬(네덜란드)
- 왜 만들었을까? 크리스마스 때 심심해서
- 왜 파이썬? 내가 좋아하는 티비 프로그램 이름이 monty python’s flying circus(이름은 작명하는 사람 마음이니까)
<Python Popularity>
- 영어권 사람들에게 설문조사했는데 전 세계 가장 많은 개발자가 쓰는 언어(2-3년째)
- 대세, TREND
<Starting the Python Interpreter>
- 언어 배우면 인간은 이렇게 생각하는데 컴퓨터 언어로 바꿀 때 변형이 필요하다
- 파이썬은 인간이 생각한대로 코딩할 수 있다
- 인터렉티브한 프로그램, 명령한 것 바로바로 알려줌
<Python Syntax Features>
- 처음에 언어를 배울 때는 쉽지만, 오히려 다른 언어를 했던 사람에게는 까다로울 수 있다(언어가 다르니까!)
- 관용 표현은 그 나라 사람 아니면 이해가 되지 않는다
- 파이썬만의 고유한 특징 존재! **들여쓰기(indentation)**를 아주 잘 해야 한다! 오류의 원인!
pwd
cd
ls
<Standard Input & Output>
- 변수라고 하는 작은 공간 안에 임시적으로 저장
- 괄호 안에 있는 것 먼저 → int 변환 후 →변수로 저장
- input은 읽어들이는 친구가 다 글자다!
- 키/ 몸무게는 실수 → float
<Variables, Names, and Objects>
- 모든 것이 다 객체라고 생각하면, 자동차에 타이어 끼듯이(분리해서 타이어만 갈아끼우면 된다) 가상 머신에 네트워크 카드를 끼우는 것!
- 서브넷도 내가 바꿀 수 있다 : 프라이빗, 퍼블릭 선택할 수 있다
- variable : 각각의 박스를 객체, 변할 수 있다
- constant : 변할 수 없다(강의실은 변수, 총장실은 상수)
- 파이썬에서는 상수 입력하지 않음, 모든 것을 다 바꿀 수 있다
- 실제로는 2진수가 들어간다
- 각 객체마다 식별자가 있어야 한다(누구꺼인지, 라벨 필요 = identitifier)
- 라벨링 규칙 : naming convention, 이름은 키워드X, 대소문자구별, 특수문자X(예외 : _ 등)
<Python Tuples>
- 고정, 수정X, read-only list, 보안
- 괄호 사용
<Python Dictionary>
- key & value
파이프라인을 바꿀 수 있다
표준 입력? 파일 입력! 파이프라인 시작은 파일의 위치 / 파이프라인 끝은 입력 버퍼
네트워크에서 읽고 읽어드린 것을 이벽 버퍼에 가져다 둠
크롤링 : 웹을 긁어다가 랜카드 통해서 빨대 통해서 입력 버퍼로 들어옴 → 네트워크입력
데이터베이스에서 가져와서 → db 입력
시작점은 출력 버퍼 끝점 모니터 → 표준 출력
파일 복사 : 읽어서 내보냄, 파일 입력 파일 출력
#Exercise1
user_second = input('초단위의 시간 : ')
print('user_second 변수의 타입 =', type(user_second))
user_second = int(user_second)
print('user_second 변수의 타입 =', type(user_second))
hour = user_second // 3600
result = user_second % 3600
minute = result // 60
second = result % 60
print(user_second,"초는", hour, "시간", minute, "분", second, "초입니다.")
>>
초단위의 시간 : 1000
user_second 변수의 타입 = <class 'str'>
user_second 변수의 타입 = <class 'int'>
1000 초는 0 시간 16 분 40 초입니다.
#Exercise2
money = int(input('가지고 있는 돈: '))
mok = money // 120
rest = money % 120
print(money, '원은 사탕', mok, '개 사고 나머지는', rest, '원입니다.')
>>
가지고 있는 돈: 5000
5000 원은 사탕 41 개 사고 나머지는 80 원입니다.
Working Directory - ex1.py, ex2.py
git resioning 준비 - staging area
git resioning
알파 테스트 : 우리회사끼리만 테스트
베타 테스트 : 공개
하나은행 차세대 프로젝트 : 오픈예정 2023 3.1 오픈 전에 이미 개발 팀에서는 작년에 개발이 끝났을 것이다 계속적으로 테스트, 내부 직원이 테스트
우리나라 전투기 하나 만들면 몇 년을 테스트한다 우리가 원하는 성능대로 잘 되는지, 어떤 악조건을 만나면 문제가 생기는지 다양한 방법으로 테스트
검사해야하는데 어디서? 스테이징 서버에서!
워킹 디렉토리 = 개발자의 자신의 노트북 → 우리팀 스테이징 서버(테스트를 위한 공간)로 올림→개발자 모여서 하낭느행 스테이징 서버에서 조사를 한다 이상이 없는지 돈 누수인지..
일반인들이 하나은행 차세대 서버에 들어와서 홈뱅킹한다
우리도 똑같다! 회사 운영 서버 = 프로덕션 서버 (실제 유저들이 이용하는 서버)
일반적으로 프로그래밍할 때 폭포수 모델 → 여러 단계 걸치면서 통과/검증 반복 → 최종적으로 오픈
중간에 여러 단계를 둔다
스테이징 에어리어, 워킹 디렉토리, 실제로 버전관리가 가능한 깃에서 역추적이 가능한=커밋공간
바로 프로덕션 환경으로 가지 못해서 테스트 공간 필요, 중간에 과정 필요
- 깃에서는 등록 과정=add(스테이징 에어리어에 등록한다, 버저닝 된다, 테스트 된다)
- 등록된 아이가 이상이 없으면 추적하기 위한 커밋 단계를 거치게 된다
리파지토리는 두 가지를 확인해봅자
- 리모트에 대한 정보가 있는가 없는가(.git에서 확인할 수 있다 - 유저 정보, 이메일 정보, 패스워드 정보 있음. 원격 리모트 정보도 있는가?) 리모트 별칭=origin → 리모트 정보도 나온다!
- 원격 리파지토리에 대한 연결을 가지고 있네 (주소가 있네 포인터가 있네!)
vpc 안에 있는 서비스는 다 사설 공간으로 프라이빗인데, 퍼블릭이라고 칭한다.
- 퍼블릭은 바깥으로 나갈 수 있는 인터넷 게이트웨이 주소를 가지고 있다, 안 가지고 있으면 프라이빗 서브넷
- 게이트웨이 있으면 퍼블릭 서브넷으로 접근 가능. 프라이빗은 인터넷으로 업데이트는 어떻게 할까? 나는 인터넷으로 나가고 싶어! 들어오지ㅡㄴ 못해도.. 게이트웨이 주소 없는데?,, NAT을 퍼블릭에 가져다준다. 나트 없으면 프라이빗, 있으면 퍼블릭
커밋 = 깃 관리를받는 파일이다!
커밋을 할 때 이 파일을 왜 커밋을 하고 이 파일이 언제 만들어졌는지 등의 메시지를 써서 커밋할 수 있어서 -m 옵션을 쓴다(message, short message, 간단 메시지) 원하는 스트림으로 메시지를 주면 된다
커밋번호1개 커밋대상번호2개.. 무엇을 역추적해야하나? 번호 쓰는 방식이므로 좋은 방식이 아니다
커밋 에어리어에 올라온 정보 볼때 스테이터스 뿐만 아니라 메시지 썼기 때문에 메시지 확인하고 싶다면 git log 검색
add logo status
/ 일반적인 나누기 연산자
// 몫 연산자
% 나머지 연산자
비트 = 0과 1 → 4개 모이면 16진수 → 8개 모이면 아스키코드 → 한글은 2바이트
4비트 = nibble
8bit= octet
iP는 4개의 옥탯
바이트가 모여 캐릭터, 캐릭터가 모여 워드, 워드가 모여 스테이트먼트(sentence, 문장)
조건 관련된 스테이트먼트, 반복 스테이트먼트=루프, 분기 스테이트먼트=브랜치, operator은 하나의 기호
#Exercise4
season = input('좋아하시는 계절 :(영어소문자로)')
if season == 'spring' :
print('개나리, 진달래')
elif season == 'summer' :
print('장미, 아카시아')
elif season == 'fall' :
print('백합, 코스모스')
else :
print('동백, 매화')
>>
좋아하시는 계절 :(영어소문자로)spring
개나리, 진달래
name = input('이름: ')
kor = input('국어: ')
eng = input('영어: ')
math = input('수학: ')
tot = kor + eng + math #총점
avg = tot / 3 #평균
if 90 <= avg <= 100 : grade = 'A'
elif 80 <= avg <= 90 : grade = 'B'
elif 70 <= avg <= 80 : grade = 'C'
elif 60 <= avg < 70 : grade = 'D'
else : grade = 'F'
print('이름 = %s, 국어 = %d, 영어 = %d, 수학 = %d' % (name, kor, eng, math))
Exercise ) BMI
name = input('이름: ')
age = float(input('나이: '))
height = float(input('키: ')) ; height = height /100
weight = float(input('몸무게: '))
bmi = weight/ (height ** 2)
print(bmi)
if bmi < 18.5 : ob = '저체중'
elif bmi <= 23 : ob = '정상'
elif bmi <= 25 : ob = '과체중'
elif bmi <= 30 : ob = '경도비만'
elif bmi <= 35 : ob = '중도비만'
else : ob = '고도비만'
print('%s님(%d세)의 BMI지수 = %.1f이고, %s입니다.' % (name, age + 1, bmi, ob))
<Loops>
- 반복문, 데이터 크롤링해서 가져온 데이터 몇 개인지 모를 때 루프 몇 번 돌아야 할지 모름
- while ; 끝을 알 수 없는 경우에, 조건 자체가 달라진다,
- for ; 끝 모를 때 , 범위 안에 있으면 참 범위 안에 없으면 거짓
# 1, 2, 3, 4, 5
for num in range(1, 101):
if num % 3 == 0 :
print(num, end = ' ')
>>
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
tot = 0
count = 0
for num in range(1, 101):
if num % 6 == 0:
tot = tot + num
count = count + 1
print('6의 배수의 총합은 %d이고, 갯수는 %d개 입니다.' %(tot, count))
>>
6의 배수의 총합은 816이고, 갯수는 16개 입니다.
<Functions>
- x 값이 얼마인지 함수 안에 넣어야 한다
- 괄호 있으면 함수 없으면 변수
- 대부분 변수는 명사형을 쓴다. 함수는 동사형을 쓴다. (print, input, range)
- built-in function : 내장함수
- 아무것도 모르는 상황에서 function을 만든다면?
# Exercise9
# function
def calcsum(start, last) :
tot = 0
for num in range(start, last+1):
tot = tot + num
print('%d부터 %d까지의 총합 = %d' % (start, last, tot))
calcsum(1, 5)
calcsum(5, 10)
calcsum(20, 50)
calcsum(1, 100)
>>
1부터 5까지의 총합 = 15
5부터 10까지의 총합 = 45
20부터 50까지의 총합 = 1085
1부터 100까지의 총합 = 5050
- 콜바이네임 :
- 콜바이벨류 : 바뀌지 않는, number, string
- 콜바이레퍼런스 : list, dictionary, 수정가능
- 딕셔너리, 제이선타입 비슷할 수밖에 없다
- PascalCasing ; 대소문자 구분
- camelCasing ; 대소문자 구분
- snake_casing ; 대소문자 구분
- Kebab-Casing ; -는 특수문자로 쓸 수 없기때문에 파이썬에서는 지원 x
<JSON File>
- 람다 퍽션이 제이슨을 많이 사용한다
- 파일 처리에서 제이슨을 주로 다루게 된다, 어떻게 제이슨 파일로 저장할 것인가? 어떻게 dict로 변환할 것인가?
- 제이슨 표기법 : 객체 표현할 때 중괄호 안에 객체 표현
- 공유하면 데이터가 대부분 xml → csv→ json… 등등
- 긁어와서 파싱해야 하는데 유저가 원하는 것은 정보 뽑아내기! 유저들은 보기 어려우니까 긁어와서 정제할 때 내용 따로따로 나눠야 한다.
- 문제? xml은 파싱하기 쉽지 않음!
- 설명하기 위해서 만든 것
- 파이썬에 제이슨 모듈이 있어서 import
- 4개 메소드(함수) : dumps, dump, lords( ), lord( )
- 제이슨 파일↔ 객체
- 제이슨은 객체들을 제이슨 문자열로 바꿔준다=인코딩
- 문자열을 파이썬 객체로(**스트링(수정X)**은 제이슨 파일에 저장, 문자열로 변환해서 제이슨으로 저장, 제이슨에서 문자열→다시조작하려면 리스트나 튜플로(수정 가능 객체)), dumps, loads로 수정이 되게, 안되게 만들 수 있다
- 파이썬에서 쓰는 객체와 문자열 사이 변환은 dumps , loads 사용
- 객체를 파일이나 데이터 베이스에 저장
- 읽을 때는 read mode로
- 쓰기 모드=W→ 내보내는(나가기) 방향↔read mode → 방향 반대
- 파일처리 : dump, load (s 없이!)
- 읽어들일 때는 load
- 객체변환 loads (디코딩)
- 퍼블릭에 가져다놓고 우리 노트북에서 접근 : 이야스
- 루트 계정 패스워드를 sql로 준다
- h = host name,
- mysql 3306
- ec2에 my sql 설치.
- 은행에서는 java가 가장 인기기 많다
- finance & military
- k뱅크 시작하면서 우리도 탈-오라클을 해보자. 오라클 아닌 db 시작=센세이션
- 대부분 플라스크는 간단한 웹 어플리케이션
- 회사 입장에서 보면 단독 서버 운영하기 위해 부담이 된다
- 파이썬으로 웹 어플리케이션 만든다? 많이 사용하지 않음. 노드같은 언어에 밀림
- 실제로 플라스크 관련 책도 별로 없다
- 요청하는 쪽 / 요청을 응답받는 쪽
- 항상 서버가 가동되고 있어야 한다
- 서버리스는 서버가 없는 것이 아님
- 관리할 서버가 없다는 것!!!!!!!!!!!!!!!!!
- 여전히 서버가 필요하다 반응해야 할 서버는 리소스를 홀딩하고 있지 않다
- 항상 사용 중도 아니고, 리소스 고민할 필요 없다
- 실제로 유저에게 요청했을때 실행해야 할 배포코드만 가지고 있으면 된다
- 나타났다가 사라지는
- 프로비전 : 미리 준비했다가 유저가 요청하면 반응한다.
- 유저가 요청할까봐 미리 준비도 하지 않는다. 아예 없다가 요청하면 그때 만들어진다!!!!!!
- 지금 시대에는 온프레미스를 거쳐서 IaaS → PaaS → serverless
- 이벤트 방식으로
- 유저가 들어왔다=이벤트
- 유저가 들어올 때 일어나면 된다
- 서버오리엔티드 : 입구 계속 주시해야한다
- 서버리스 : 문에 종을 닳아둠. 딸랑 소리 나면 그제서야 손님 응대하면 된다
- 이벤트 아키텍트 : 일이 일어나면! 반응
- 커플링 vs 디커플링
- 커플링 : 자동차와 엔진과의 관계. 엔진 없는 자동차 없음. 타이트하게 묶여 있음. 예) 사람 몸. 사람 몸에 필요 없는 장기 없음. 다 연결되어 있다 하나 문제가 생기면 나비효과로 다른 곳에도 문제가 생긴다
- 디커플링 : 서버리스는 디커플링! 분리되어있다. 에어컨과 자동차. 나중에 에어컨을 자동차에 설치해도 됨. 분리가 가능하다!
- 부르는 것도 반응하는 것도 별도. 커플링→꼭 디비는 mysql 끈끈하게 연결되어있어서.
- 디커플링은 한쪽만 바꿔도 된다.
- PaaS 클라우드 기반 개발 = 서버리스 개발
- 멀티클라우드 : 에저(사원), aws(제품) 두 개 연결해서 돌림, 서버리스는 안 됨 서버리스는 한 플랫폼만 가능하다
- event는 딕셔너리 타입!
- 딕셔너리니까 키를 통해서 벨류를 뽑아낼 수 있다
- 람다를 타깃으로 파이썬 공부를 한다면 json & dictionary 를 공부해야 한다
'Experiences & Study > 하나 디지털파워온 1기' 카테고리의 다른 글
[디지털파워온] 구글 클라우드 개괄(Google Cloud) (0) | 2023.08.04 |
---|---|
[디지털파워온] Data & AI (0) | 2023.08.04 |
[하나 디지털파워온] AWS 공인교육 필기 (3) (0) | 2023.08.02 |
[하나 디지털파워온] AWS 공인교육 필기 (2) (0) | 2023.08.02 |
[하나 디지털파워온] AWS 공인교육 필기 (1) (0) | 2023.08.02 |