"한 가지 언어만 아는 사람은 한 권의 책만 읽는 것과 같다"
는 체코 속담처럼,
저는 영어가 어떤 일을 하든 가장 기본이라고 생각합니다. 언어를 잘하면 어떤 상황, 어떤 환경에서도 잘 적응할 수 있고, 세계적으로 일을 할 때 많은 도움이 됩니다. 그래서 이번 주부터 영어회화 학원을 다니기 시작했고 앞으로 열심히 할 계획입니다.
이번주는 SQL 마무리하고, 생성형 AI와 Streamlit을 통해서 사이트를 구현하고, 그동안 배운 내용 Test 를 봤습니다.
이번주 배운 내용 요약
요일 | 내용 | 난이도 |
월 | SQL 마무리(integrity, index, view, Stored Procedure) | ★☆☆☆☆ |
화 | SQL 마무리(Stored Procedure/Partition) | ★☆☆☆☆ |
수 | Prompt 엔지니어링 | ★★★☆☆ |
목 | Docker | ★☆☆☆☆ |
금 | Docker | ★☆☆☆☆ |
월요일 / SQL(intergrity, index, view)
1. intergrity
- 온전한, 무결성, 진실성
- 용량을 아끼고 빠르게 조회하기 위해 여러 테이블로 관리함
- 여러 제약 조건이 있음
- UNIQUE : 고유한 값만 저장가능, null 허용
- check : if 조건식과 같이 저장 직전의 데이터의 유효 유무를 검증하는 제약 조건
- default
- FK(Foreign key)
2. view
물리적으로는 미 존재, 단, 논리적으로 존재
"바로가기"와 비슷한 개념
(1) 조인한 VIEW에도 새로운 정보 입력이 가능할까?
- 조인한 VIEW에는 기본적으로 값 수정이 안된다.
- 여러개의 테이블을 JOIN한 VIEW에서는 CUD가 불가하다.
- CUD(Create, Update, Delete)
- DB는 정합성, 무결성 엄청 따지기 때문에 VIEW에다 뭘 넣을 생각을 하면 안된다.
- 목적상 VIEW는 조회용으로만 쓰는 것을 권장함
3. 윈도우 함수
- 특정 범위 열만 꺼내서 보는 함수
- like 창문처럼
- 이게 아니면 긴 where 절을 써야 한다.
- 순위함수 라고도 불림
일반 집계 함수: SUM, MAX, MIN, AVG, COUNT
그룹 내 행 순서 함수: FIRST_VALUE, LAST_VALUE, LAG, LEAD
그룹 내 비율 함수: RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE 등
- RANK : 중복 허용, 1, 1, 1, 2, 2, 3 순서
- DENSE_RANK : RANK와 작동법 동일, 동일한 값에 대해서 같은 순위 부여, 중간 순위 비우지 X
- ROW_NUMBWR : 순위 겹치지 않음
화요일 / Stored Procedure/Partition
1. Procedure 함수
여러개의 sql을 묶어 함수처럼 사용하는 것
2. Trigger
- trigger는 특정한 이벤트 후에 자동으로 실행이 됨
- INSERT, DELETE, UPDATE 이후에
- 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것
- 어떤 테이블에서 특정 이벤트가 발생했을 때, 실행시키고자 하는 이벤트가 자동 실행
- 트리거는 직접 실행시킬 수 없고, 오직 해당 테이블에 이벤트가 생길 경우에만 실행된다.
- DML에만 작동되며, mysql에서는 트리거 사용 안됨
- 사용된 후에 사용될 지, 끝난 후 처리를 할지
3. Partition
[ 파티션 유형]
- 레헤리컴
- RANGE
- HASH
- LIST
- KEY
- 장점
- 성능 향상 : 특정 파티션만 스캔하여 쿼리 성능을 향상시킬 수 있음
- 관리 용이성 : 데이터 삭제, 백업, 복구 작업이 더 쉬워짐
- 병렬 처리 : 여러 파티션에서 동시에 작업을 수행할 수 있음
- 단점
- 설계, 관리가 어려울 수 있다
- 잘못하면 키 관리 어려움
수요일 / Prompt 엔지니어링
1. pymysql 연동
# 1. 모듈을 불러옵니다.
import pymysql
from pymysql.constants import CLIENT
connection = pymysql.connect(host='localhost',
user='root',
password='0000',
db='student_mgmt', client_flag=CLIENT.MULTI_STATEMENTS)
# 3. 대신 일하게 만들 커서를 만듭니다.
cursor = connection.cursor()
# 4. 실행할 SQL문을 넘깁니다. - 기본적으로 한 번에 한 문장을 넘기는구나
cursor.execute("INSERT INTO students (name, gender, birth, english, math, korean) VALUES ('wage3', 'woman', '1982-1-13', 76, 30, 80); \
INSERT INTO students (name, gender, birth, english, math, korean) VALUES ('tina3', 'woman', '1982-12-3', 87, 62, 71);")
# 5. DB에 현재 상태를 COMMIT 합니다.
connection.commit()
# 6. DB와 연결을 닫습니다.
connection.close()
2. pandas와 pymysql 연동
pandas를 쓰면 표 형식 즉, data frame 형식으로 저장할 수 있음
!pip install PyMySQL
import pymysql
import pandas as pd
host_name = 'localhost' # 구글 컴퓨터라 내 컴퓨터의 localhost에 접속 불가 - 어디서나 접속할 수 있는 원격 DB가 필요하다
host_port = 3306
username = 'root'
password = '0000'
database_name = 'fisa'
db = pymysql.connect(
host=host_name, # MySQL Server Address
port=host_port, # MySQL Server Port
user=username, # MySQL username
passwd=password, # password for MySQL username
db=database_name, # Database name
charset='utf8'
)
3. Prompt 엔지니어링
chat gpt 활용 코드
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4",
messages=[
{
"role": "system",
"content": "Given the following SQL tables, your job is to write queries given a user’s request.\n \n CREATE TABLE Orders (\n OrderID int,\n CustomerID int,\n OrderDate datetime,\n OrderTime varchar(8),\n PRIMARY KEY (OrderID)\n );\n \n CREATE TABLE OrderDetails (\n OrderDetailID int,\n OrderID int,\n ProductID int,\n Quantity int,\n PRIMARY KEY (OrderDetailID)\n );\n \n CREATE TABLE Products (\n ProductID int,\n ProductName varchar(50),\n Category varchar(50),\n UnitPrice decimal(10, 2),\n Stock int,\n PRIMARY KEY (ProductID)\n );\n \n CREATE TABLE Customers (\n CustomerID int,\n FirstName varchar(50),\n LastName varchar(50),\n Email varchar(100),\n Phone varchar(20),\n PRIMARY KEY (CustomerID)\n );"
},
{
"role": "user",
"content": "Write a SQL query which computes the average total order value for all orders on 2023-04-01."
}
],
temperature=0.7,
max_tokens=64,
top_p=1
)
[ 프롬프트 짜는 팁 ]
- R F T C
- Role(역할)
- Format(형식)
- Task(업무)
- constraint(제약)
1. ZERO Shot
# zero shot
import openai
os.environ['OPENAI_API_KEY'] = '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'
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant. List three fruits:"}
],
temperature=2,
max_tokens=50,
n=5
# stop = ['.', '\n']
)
response.choices[4].message.content
response.choices[0].message.content
2. One shot
# one shot
import openai
os.environ['OPENAI_API_KEY'] = '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'
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant. List three fruits:"},
{"role": "user", "content": "1.망고, 2.바나나, 3.오렌지"}
],
temperature=1,
max_tokens=50,
n=5
# stop = ['.', '\n']
)
# one shot
response.choices[1].message.content
3. Few shot
# few shot
import openai
os.environ['OPENAI_API_KEY'] = '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'
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant. List three fruits:"},
{"role": "user", "content": "1.망고, 2.바나나, 3.오렌지"},
{"role": "user", "content": "- 망고, - 수박, - 오렌지"}
],
temperature=1,
max_tokens=50,
n=5
# stop = ['.', '\n']
)
response.choices[4].message.content
목요일 / Docker
1. Docker?
- 부두, 선창
- like 충전기
- 무슨, 누구의 폰이건 하나의 충전기에서 다 충전할 수 있게 함
- 하나의 컴퓨터에서 다른 환경에서의 작업이 가능하다.
- 운영체제는 그냥 사용하면서 각각의 가상 환경 사용
- 파이썬은 또 깔지 않고 거기에 필요한 프로그램들만 깔면됨(like 가상환경)
- 기본적으로 리눅스에서 돌아감
- mac os에도 유닉스가 있음
- 리눅스도 유닉스 기반으로 움직임
- 명령어 → 쉘 → 커널(실제로 일을하는 역할)
- 윈도우를 리눅스처럼 쓸 수 있는 거 설치
- 도커 설치
- 원래 os 랑 무관한 app 여러개 만들 수 있음
금요일 / Doker 2
1. 석범님 Docker 특강
- 왜 그램에 docker를 설치했는가?
- 도커가 linux에서만 동작하는 것
- 지금은 사파리가 맥에만 존재하고, 윈도우에서는 안됨
- 리눅스에서만 도커가 설치 가능함
- 도커를 설치하기 위해서 리눅스를 설치한 것
- 사파리가 도커라고 생각
- 도커를 실행시키면 탭 하나 하나가 도커의 컨테이너
- 탭 생성, 컨테이너 생성 → 각 페이지별로 다른 활동 가능함
- 네이버는 페이스북 아이디를 쓸 수 없음 → 도커의 중요시 되는 점
- 메타의 신입 사원으로 들어갔다고 가정
- 인스타도 있고 페북도 있고, 메타 퀘스트(오큘러스 인수)
- 메타에서 서비스를 운영하게 되는데
- 페이스북은 파이썬 3.9로 세팅
- 메타는 3.12
- 인스타그램은 버전 2라 생각
- 우리 컴퓨터는 로컬에서 하나의 버전으로 사용할 수 밖에 없음 → 꼬이기 쉽고 실수하기도 쉬움.
- 좋은 점
- 3.9에서 개발하다가 개발 끝나면 닫아버리고
- 또 다시 필요하면 새 컨테이너 제작해서 사용하면 편리함
- 도커에서 실행이 된다는게 확정이 되면 더이상 호환성 문제 생각안하고 배포 편함
- 도커시스템에서 다른 사람에게 공유할 수 있음
- 다른 서비스에서도 실행이 보장됨
- 어제 설치한 도커 데스크탑은 한꺼번에 보기 창같은 거임.
- 실제로 올릴 때는 그래픽 인터페이스 사용안함.
- 오케스트레이션이 됨
- 리소스를 세분화해서 쓸 수 있음
- 그램이 30명중에 20명밖에 못준다. 10명은 노트북 없이 작업을 해야될 수 있다.
- 도커는 이런 상황에서 20개를 30명으로 쪼길 수 있다.
- 이게 왜 중요?
- 아마존, 구글, 오라클이나 여러 클라우드에서 제공하는 방식이다.
- 물리적인 컴퓨터를 주는게 아니라 아마존 입장에선 더 싼 가격에 여러 요금제를 세분화 하고 많은 사람들한테 서비스 제공이 가능하다.
- 맥은 할당을 할 수 있음. 메모리 사이즈, CPU 사이즈를 결정할 수 있다.
- 도커를 왜씀?
- 대부분 리눅스 바탕
- vmware는 리소스를 유동적으로 제어할 수 없음
- 한번 초기 세팅하면 나중에 바꾸기 어려움
- 한번 늘리면 줄이기 너무 힘들다.
- 도커를 사용하면 좀 더 편리하게 할 수 있음
- 구글, 아마존이 도커 사용 → 업계 표준이 되었음
- 이번주는 새로운 내용을 배우기 보다는 그동안 배운 내용을 종합하는 내용이 많았다.
요일 | 식사 | 특이사항 |
월 | ![]() |
라면 + 오토김밥 먹었음 오토김밥 - 오토김밥 먹었는데 스팸 김밥이 더 맛있음 |
화 | ![]() |
태국 음식점 갔음 진짜 진짜 진짜 맛있었음 또가야징 끝나고 술마셨지롱 |
수 | ![]() |
리조또 먹었음 진짜 진짜 맛있었음 또가야징 |
목 | ![]() |
디엠씨 건물 8층 식당갔음 너무 더웠음(가는 길에 같이 가던 사람들이 우리 버리고 가서 돌고 돌아서 도착해서 더 더웠음.) 근데 가격 치고 맛있었음 영어 학원 처음 간날 |
금 | ![]() |
진짜 맛있었음 끝나고 강남가서 술마셨음 |
- 이번주는 새로운 내용을 배우기 보다는 그동안 배운 내용을 종합하는 내용이 많았다.
이번주는 그동안 배운 내용을 토대로 하나의 완성 사이트를 만드는 일이 많았다. 생각보다 재밌었고 그동안 배운 내용을 정리해볼 수 있는 기회가 된 것 같아서 좋았다.
이번주 목요일 부터 오픽 학원을 다니기 시작했다. 진짜 너무 피곤하고 힘들지만 그래도 갓생을 사는 것 같아서 나름 뿌듯하다.
이번주부터 Docker를 배웠는데 Docker는 언제 어디서나 잘 쓰일 것 같아서 다음주부터 더 열심히 들을 계획이다.
이번주 금요일에는 첫 시험을 봤다. 100점중에 93점을 받았고 실습 파일에서 살짝 실수가 있었다. 시험 준비하느라 금요일 아침에는 운동을 처음으로 빠지게 되었다. 운동을 빼먹지 않고 열심히 해보는게 6개월 간의 목표다.
어쨌든, 이번주는 약간 그동안의 배운 내용을 정리하고 마무리하는 느낌이었다. 다음 주 부터 더 열심히 해봐야겠고, 영어도 열심히 해야겠다.
'우리FISA 주차별 회고록' 카테고리의 다른 글
[ 우리FISA AI 엔지니어링 5주차 회고 ] Docker (0) | 2024.08.11 |
---|---|
[ 우리FISA AI 엔지니어링 3주차 회고 ] Streamlit, MySQL (1) | 2024.07.28 |
[ 우리FISA AI 엔지니어링 2주차 회고 ] Python 마무리, Numpy, Pandas (0) | 2024.07.21 |
[ 우리FISA AI 엔지니어링 1주차 회고 ] Python 기초 (2) | 2024.07.14 |