📍 간단 후기
🏷️ 수업 내용
AWS 수업이 시작됐다. 여태 배운 수업 내용 중 LLM이 가장 재밌었는데, 뒤집혔다. AWS는 항상 혼자 시도하려 하면 막막하기만 했다. 그러나 차근차근 배우면서 실행되는 것을 보니까 확실히 재밌었다. 기본 내용이나 구조를 파악하면서 하니까 더 신선하게 다가오면서 흥미를 느꼈던 것 같다.
AWS 관련 내용이 끝나고 하루동안 소프트웨어공학 수업을 진행했다. 전반적인 프로젝트 산출물에 대해 배웠다고 보면 된다. 요구사항 명세서, 유스케이스, 등등에 관한 내용이었다.
🏷️ 4차 프로젝트
3,4차 프로젝트의 팀 구성은 원래 같다. 다만 최종 프로젝트를 고려해 4차 프로젝트와 최종 프로젝트 팀 구성을 같게 했다고 한다. 따라서 4차 프로젝트는 최종을 위한 준비 과정이 되었다.
최종 프로젝트의 주제 구성은 다음과 같다.
- 1번 : LLM 활용 내부고객 업무 효율성 향상을 위한 문서검색시스템
- 2번 : LLM 활용 대화형 상품추천 시스템
- 3번 : 자체 sLLM 개발 통한 기업업무 활용 생성형AI 플랫폼
- 4번 : LLM 활용 인공지능 인플루언서 만들기
- 5번 : LLM 활용 AI모의면접 시스템
- 6번 : LLM 활용 고객 상담 챗봇
각 팀당 1,2,3순위를 선택하여 제출한 후 배정받는 형식으로 진행된다. (인기 없는 프로젝트는 바로 탈락!)
우리 팀은 3 4 1 순으로 제출하였다.
***꿀팁!(믿거나 말거나) : 빨리 제출할 수록 1순위 될 확률 UP!
우리팀은 제일 빨리 제출해서 그런지는 몰라도 3번을 맡게 되었다. 많은 팀들이 3번을 노렸기에, 더 잘해야겠다는 생각과 재밌을 것 같다는 생각이 든다.
📍 좋았던 점
- Cloud
Cloud는 인터넷을 통해 컴퓨팅 자원과 서비스를 제공하는 IT 환경을 의미한다.
Cloud의 서비스 유형은 세가지로 나뉜다.
- IaaS(이아스?): 서버, 스토리지, 네트워크 등 하드웨어 인프라를 가상화하여 제공 / 가상화된 컴퓨팅 자원 제공 -> 사용자가 운영체제 및 애플리케이션을 직접 설치하고 관리해야 함
- PaaS(파스): IaaS에 운영체제, 런타임 환경, 개발 도구, 데이터베이스 등 개발 환경을 포함하여 제공 / 개발 및 배포를 위한 플랫폼 제공 -> 사용자는 애플리케이션 코드를 개발하고 배포하는 데에만 집중
- SaaS(싸스): 완전히 관리된 소프트웨어를 인터넷을 통해 제공 / 사용자는 소프트웨어에만 집중하고, 인프라, 운영체제, 보안, 업데이트 등은 제공업체에서 관리함
- AWS

AWS는 Cloud를 제공하는 가장 유명하고 꽉 잡고 있는 회사이다. 따라서 이번 부트캠프 과정은 AWS Cloud를 사용한다.
- EC2: AWS에서 제공하는 IaaS의 한 종류
가장 대표적인 EC2를 사용했다. 사용자에게 가상 서버를 임대해주는 서비스이다. 이는 한마디로 하드웨어를 빌리는 작업이다.
EC2를 생성하려면 꼭 알아야하는 개념은 다음과 같다.
- AMI: 원하는 환경 구성한 뒤 이미지로 만들어 재사용 할 수도 있음
- 보안 그룹: 보안을 위해 IP와 포트 번호를 이용해 정의해두는 서버 접속 규칙
- 키 페어: 서버에 접속하기 위한 열쇠
EC2의 주요 구성요소는 인스턴스와 AMI가 있다.
** 인스턴스: EC2에서 생성한 가상 컴퓨팅 환경 / 컴퓨터 대수 라고 생각
** AMI(Amazon Machine Image): 서버에 필요한 운영체제와 소프트웨어가 포함된 템플릿 / EC2 인스턴스의 기반이 되는 이미지
EC2 생성
- 지역 선택: 가장 가까운 곳으로 / 처리 시간 단축 -> 서울
- AMI: Ubuntu server 24.04 LTS
- 인스턴스: 프리티어
- 키 페어: 유형(RSA) / 형식(.pem)
- 네트워크 유형: SSH / HTTP / 사용자 지정 - 8888(jupyter lab) / 사용자 지정 - 8000(Django)
- 스토리지: 30GB -> 프리티어가 쓸 수 있는 용량
퍼블릭 IP 주소는 실행할 때마다 매번 바뀐다.
탄력적 IP 주소 할당 - 고정 IP를 생성
EC2와 탄력적 IP 주소 연결 후 IP를 고정한다.
커멘드 / 터미널 창에서 해당 EC2 연결을 진행한다. 파일 권한을 읽기 모드로 설정한 후, ssh -i "pem 파일 경로" 서버계정@Public_IP 명령어를 진행하면 EC2 서버에 연결된다.
- nginx

Nginx는 오픈소스 웹서버 프로그램이다. 이는 http 요청을 받아서 응답을 생성하는 역할과 static 파일 서비스를 담당한다.
Django는 WSGI와 통신해서 실행하지만, Nginx는 가지고 있는 파일을 업로드 해준다.
요청이 들어오면 그 요청에 맞는 응답을 만들어내는 것이 동적인 것. 이미 만들어진 파일들 내에서 제공해주는 것이 정적인 것.
*sudo apt install nginx / sudo service nginx start -> sudo service nginx status로 확인 가능 / sudo service nginx stop / 80번 포트에서 확인 가능
동작구조는 다음과 같다.
받은 요청을 파이썬 앱(Django, Flask 등)에 전달 -> 앱은 응답을 생성하여 다시 WSGI에 전달 -> WSGI는 응답을 웹 서버로 전달 -> 웹 서버는 http 응답 정보를 사용자에게 반환
따라서 web server 역할로 많이 쓰이는 것이 Nginx이고, WSGI server로 많이 쓰이는 것이 gunicorn이라고 보면 된다.
**설정
DEBUG를 False로 지정해 커맨드 창에서 웹 서버 로그 등이 남지 않도록 하고, ALLOWED_HOSTS를 전체에 관해 허용한다.
#######################################
# Static files (CSS, JavaScript, Images) 들을 요청할때 사용할 url의 시작
# https://docs.djangoproject.com/en/5.2/howto/static-files/
STATIC_URL = 'static/'
# app/static 이외의 경로에 static 파일들이 있을 경우 그 디렉토리를 설정.
STATICFILES_DIRS = [BASE_DIR / 'staticfiles'] #/static/imgs/survey.jpg
STATIC_ROOT = BASE_DIR / 'statics'
# python manage.py collectstatic 실행하면 모든 static 파일들을 STATIC_ROOT 경로에 모아준다.
# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
###############################
# 사용자 정의 User 모델을 등록
###############################
AUTH_USER_MODEL = "account.User" # AbstractUser 클래스를 등록.
################################
# 로그인 관련 설정
################################
# 로그인 하지 않은 사용자가 @login_required 인 View를 호출 했을 때 이동할 url을 지정.
LOGIN_URL = '/account/login'
############################################
# MEDIA 설정 (파일업로드)
############################################
# 업로드 파일들을 저장할 root 경로 설정
MEDIA_ROOT = BASE_DIR / "media"
# Client가 업로드된 파일을 요청할 때 사용할 (시작)url 설정
MEDIA_URL = "/media/"
# "/media/xxxxx" url로 요청하면 MEDIA_ROOT 경로에서 찾아서 응답.
static 및 media 파일을 설정해 구조가 어긋나지 않도록 설정해준다.
nginx의 설정파일 생성을 위해 다음과 같은 경로를 생성해 서비스 설정을 진행한다.
심볼릭 링크를 생성 하고 nginx를 재시작하여 적용 및 실행한다.
**심볼릭 링크: 실제로 있는 디렉토리 경로를 접근하기 쉬운 링크로 '바로가기'를 만들어 손쉽게 접근 가능하도록 한다.
- gunicorn

*pip install gunicorn
gunicorn과 app을 연결하여 앱을 실행할 수 있다.
"gunicorn --bind 0.0.0.0:포트번호 실행시킬앱.wsgi:application" 을 통해 gunicorn과 앱을 연결한다.
which gunicorn를 통해 gunicorn 파일 위치 파악하고 설정 파일을 생성한다.
해당 경로의 파일을 생성해 gunicorn의 서비스 설정을 진행한다.(컴퓨터 시작 시 자동 실행 되도록 설정) -> 주석은 꼭 지우기
설정 파일에 맞춰 아래와 같이 서비스를 시작한다.
만약 내용이 바뀌었다면 아래와 같이 재시작한다.
📍 부족한 점
- Linux

chmod - 권한 : 1,2,3,4,5,6,7(r-4, w-2, x-1 / 읽기, 쓰기, 실행) / user, group, other 에 맞춰 순서대로 권한 부여 / 명령어: ex) chmod 721 a.txt
sudo - su: super user의 줄임말 / 처음 Ubuntu를 설치한 후 sudo apt update/upgrade 를 통해 새 버전이 있는지 확인 후 업그레이드 한다.
ps - 작업중인 프로세스 확인 / PID 확인 후 kill -15 PID값 하면 프로세스 종료가 가능하다.(-9는 강제종료 / -15는 정상종료)
***echo .env >> .gitignore 를 통해 해당 파일을 추가한 gitignore 파일 생성
- Miniconda
- EC2를 연결한 가상환경인 ubuntu에 Miniconda를 설치해 실습을 진행했다.
- bash를 통해 Miniconda 설치를 진행했고, source .bashrc를 통해 적용을 완료했다.
- jupyter lab
- pip install jupyterlab
- jupyter lab --generate-config(설정 파일 생성)
- jupyter lab --no-browser(브라우저 띄우지 않고 서버에서 실행)
- ipython(jupyter lab의 python)실행 후 from jupyter_server.auth import passwd 입력 및 jupyter lab 접속 때 필요한 비밀번호 설정을 한다.( .jupyter 파일 내의 config 파일에 ip, password를 작성한다.)
- nohup jupyter lab &: nohup(실행한 인스턴스에서 실행) / &(background 실행 - 눈에는 보이지 않지만, 실행은 되고 있음)
- SSH와 VScode 연결

항상 커멘드 창에서만 EC2를 활용하기에는 불편한 일이 많다. 그래서 VScode에 연결하는 과정이 필요했다.
remote-ssh를 마켓플레이스에서 먼저 설치한다. 이후 SSH 호스트에 연결하고 config에 고정 IP와 User 이름, 키페어 경로를 지정해주면 연결 완료이다.
연결이 완료됐다면, EC2 인스턴스는 새로운 환경이다 보니, python이나 jupyter 등을 설치해 줄 필요가 있다.
*** EC2라는 IaaS 구축 후 python 등을 설치해 PaaS 구축 완료. 다음으로 app(Streamlit, Django 등)까지 연결해주면 SaaS 구축 완료이다.
새로운 가상환경에 따라 로컬에도 새로운 가상환경을 만들었다. 명령어는 "create -n 가상환경이름 python=3.13" 을 입력했다.
(생성된 가상환경 확인: conda info -e)
이후 가상환경 활성화 후 필요한 패키지들을 설치해 환경을 설정했다. (해당 작업들은 모두 로컬에서 폴더를 따로 만들고 git repository도 새롭게 만들어 진행했다.)
**pip install streamlit langchain langchain-openai python-dotenv langchain-community
pip list --format=freeze(pip freeze) > requirements.txt 를 통해 requirements.txt를 만들 수 있다.
***requirements.txt: app을 실행하려면 설치가 필요한 패키지 목록
만약 다른 사람들이 내 github의 repository를 보고 app을 실행하고 싶다면 git clone(pull)을 받아 "pip install -r requirements.txt"를 하면 실행이 가능하다. (.env를 통해 본인의 API key 등록은 필수!!)
https://github.com/ki-student/simple_chatbot
GitHub - ki-student/simple_chatbot
Contribute to ki-student/simple_chatbot development by creating an account on GitHub.
github.com
이렇게 올린 github repository를 Ubuntu Ec2 가상환경에 clone을 진행하여 활용하면 SaaS 구축 완료이다!
하지만 해당 app.py를 streamlit을 통해 실행시키려 하면 연결이 안될 것이다. 해당 port 번호가 열려있지 않기 때문이다.
그래서 "streamlit run app.py --server.port=원하는 포트번호(열려있는 포트번호)" 로 실행시켜야 app이 실행된다.

장고 app 연결을 위한 repository도 올려본다.
+++
settings.py의 DB 아이디 비번 바꾸기!
https://github.com/ki-student/Django_EC2
GitHub - ki-student/Django_EC2
Contribute to ki-student/Django_EC2 development by creating an account on GitHub.
github.com
- PaaS - RDS
RDS: 클라우드 내에 DB까지 내장되어 있는 인스턴스이다. / RDS를 통해 AWS의 클라우드 환경에 DB를 연결한다.(자동화 가능)
EC2는 기본적으로 DB가 연결되어있지 않기 때문에, 직접 관리해야 해 복잡성이 증가한다. => DB 활용 시 RDS가 더 유리하다.
따라서 RDS를 사용하면 DB 관리자가 필요하지 않을 수 있다.

AWS 내 Aurora and RDS로 생성 가능하다. 템플릿을 프리티어로 쓸 경우 내부에서만 DB 접근이 가능하다. 실제 운영은 프로덕션으로 하면 되고, 여기서는 개발/테스트로 진행했다.
RDS는 퍼블릭 IP가 없고, 엔드포인트를 활용한다. 이를 통해 mysqlworkbench로 연결을 진행한다.
**인바운드 규칙 하나 추가해 3306 포트 열기!
"sudo apt install mysql-client" 를 통해 mysql을 EC2 인스턴스 리눅스 환경에서 사용할 수 있게 한다.
mysql 서버 접속은 다음과 같다.
+++
홈페이지에서 내용 변경 시 DB에서 확인이 가능하다. 페이지의 내용을 변경할 경우 gunicorn을 재시작해야 하는데, 로컬에서 바꾼 후 적용하는 것이 가장 바람직하다.
📍 성찰 및 마무리
가장 재밌었던 AWS 수업이 지나갔다. 이제 실전에 적용해 볼 시간이다. 4차 프로젝트는 3차 프로젝트 내용과 비슷하지만, AWS에 빌드 및 배포를 하는 것이다. 과연 어떻게 진행될 지 기대된다. 최종 프로젝트의 Prototype이 될 작업이라 굉장히 중요하지만, 또 바뀔 수도 있는 작업이라고 생각한다.
전 과정의 모든 수업은 끝났다. 뒤돌아 보니 정말 많은 것을 배웠다. 프로젝트도 이번 4차까지 하면 4번이나 했고, 기존에 모르던 지식들을 활용해서 작게나마 성과있는 작업들을 진행했다 보니, 돌아보면 엄청 바빴던 시간이다.
모든 일에는 기억이 남는다. 이걸 기억이 아닌 기술로 남기기 위해 남은 2달 동안 4달 배운 내용들을 잘 활용해서 실무에 바로 뛰어들 수 있는 사람이 되도록 노력하겠다.
'[SKN FAMILY AI CAMP] > 주간' 카테고리의 다른 글
| 🐉 SKN FAMILY AI CAMP 13기 20주차 후기 (2025.08.04 ~2025.08.08) (0) | 2025.08.10 |
|---|---|
| 🐉 SKN FAMILY AI CAMP 13기 18주차 후기 (2025.07.21 ~ 2025.07.25) (6) | 2025.07.25 |
| 🐉 SKN FAMILY AI CAMP 13기 16주차 후기 (2025.07.07 ~2025.07.11) (5) | 2025.07.11 |
| 🐉 SKN FAMILY AI CAMP 13기 14주차 후기 (2025.06.23 ~2025.06.27) (1) | 2025.06.28 |
| 🐉 SKN FAMILY AI CAMP 13기 13주차 후기 (2025.06.16 ~2025.06.20) (0) | 2025.06.20 |