어... 벌써?
STEP 1 끝나고 1차 에이블 데이때 치킨 시켜 먹었던 것이 얼마 되지 않은 것 같은데, 벌써 STEP 2가 끝나고 빅 프로젝트만을 앞두고 있다.
이대로 흘려보내기엔 너무 아까운 것 같아서 어느정도 정리를 해보고자 한다.
무엇을 배웠나?
IT 인프라
다음과 같은 것들을 배웠다.
- 클라이언트-서버 개념
- 네트워크 개념 및 네트워크 장비
- 서버 인프라 : 온프레미스,
- 가상화 기술 : 서버 가상화, 컴퓨팅 가상화, 네트워크 가상화, 스토리지 가상화
- HCI : 네트워크, 컴퓨팅, 스토리지 전체를 하나의 단일 시스템으로 가상화
- SDDC : 데이터 센터 구성 요소의 모든 것을 하나의 Management Platfrom으로 통합 관리
- 클라우드 : 호스팅, 코로케이션, 클라우드
- IaaS, PaaS, SaaS
- 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, 멀티 클라우드 개념
- 개발 모형 : 모놀리식 아키텍처와 마이크로 서비스 아키텍처
- 컨테이너와 도커
- 마이크로 서비스 아키텍처를 위해 각 기능(어플리케이션)을 실행 가능한 컨테니어 단위로 격리하여 관리
- 도커 : 컨테이너 엔진으로써 컨테이너를 격리되도록 함, 각 컨테이너의 실행 및 관리하는
- 고가용성 : 이중화, Failover, Failback, 모니터링, 옵저버빌리티
- 보안 위험 및 솔루션 : 엔드포인트 보안(소프트웨어), 네트워크 보안, 접근제어, IAM, Zero Trust
코멘트
이 많은 것들을 단 하루만에 배웠다.
당연히 깊게는 배울 수 없었고, 이런 것이 있다~ 정도를 배우게 되었다.
웹프로그래밍 (HTML, CSS, JS)
프론트엔드 기초
- HTML, CSS로 간단하게 웹 페이지를 구성해보았다.
- Javascript의 문법 기초를 배우고, JQuery를 통해 간단한 스크립트를 작성하였다.
- ngrok을 통해 서버 없이 웹페이지를 배포하여 테스트 해보았다.
백엔드 기초
- WAS(Web Application Server) 개념에 대해 배웠다. (웹 서버와 달리 사용자 요청에 따른 동적 처리 제공)
- AWS를 이용해 우분투 서버 인스턴스를 생성했다.
- ssh를 이용한 비대칭키(공개키, 개인키) 방식의 보안 프로토콜에 대한 개념에 대해 배웠다.
- 우분투 쉘의 명령어를 배워, CLI를 통해 우분투 운영체제 서버 컴퓨터를 다루었다.
- Studio 3T를 통해 mongoDB 스토리지를 생성하여 우분투 서버와 연결하였다.
- Pymongo 패키지를 통해 파이썬 언어로 DB를 다루는 방법에 대해 배웠다.
- Nginx를 서버에 설치하여 웹페이지 배포 준비를 하였다.
- flask를 사용해 제작한 웹페이지를 구동하는 서버를 구성하여 서버에 배포하였다.
코멘트
- HTML, CSS는 에이블스쿨 수강 전 어느정도 배웠기 때문에 수업을 따라가는 것이 어렵지 않았다.
- JQuery는 선택자를 통해 HTML의 특정 요소를 선택하여 변경하는 기초적인 작업을 수행하였다. 문법을 따로 배우지 않고, 그냥 코드를 따라치는 형식이었기에 기억에 잘 남지 않는 것 같아 아쉬웠다.
- 서버 배포과정에서는 수강생이 많다보니 오류로 인해 지연되는 시간이 정말 길었다. 이로 인해 개념 설명 부분이 다소 부족하다고 느꼈는데, 특히 AWS 배포과정은 그냥 설명보고 그대로 따라하는 수준이었기 때문에 각 과정이 어떤 역할인지, 어떤 설정을 변경하면 어떻게 변하는지 등을 배울 수 없었던 점도 아쉬웠다.
가상화 / 클라우드
가상화 (AWS)
EC2 (Elastic Compute Cloud)
- 가상의 서버 컴퓨팅 자원
- EC2 Security Group : 규칙 기반으로 규칙을 만족하는 사람만 자원에 접근할 수 있도록 함, 여기서 그룹은 규칙을 모아놓은 그룹이라는 뜻
- EC2 인증 : SSH 프로토콜을 이용한 사용자 인증
VPC (Virtual Private Cloud)
- 할당 받은 서버 자원으로 부터 생성할 수 있는 격리된 가상 네트워크 환경
- IP Range : CIDR 기법을 이용해 VPC의 IP Range 결정
- Subnet : 하나의 VPC를 적절한 단위로 분할하여 사용하는 것
- Routing Table : VPC 내·외부와 통신하기 위한 경로를 저장한 테이블
- VPC 생성시 기본적으로 VPC 내부간 통신 경로가 설정된 Main Routing Table 제공
AWS 스토리지
- Block Storage (아마존 EBS) : SSD, HDD와 같은 가상화된 로컬 스토리지 사용
- 같은 Availability Zone(AZ)에 있는 스토리지만 사용 가능
- Snapshot 기능을 통해 다른 AZ, 다른 리전으로 스토리지 복제는 가능함
- File Storage (아마존 EFS) : 네트워크로 스토리지를 연결하여 사용
- Object Storage (아마존 S3) : 고가용성, 내구성, 무제한 용량, AZ와 관계없이 동일하게 접근할 수 있는 객체 기반 스토리지 서비스
- 백업 데이터, 빅데이터 등 대용량 데이터를 저장하기 위해 주로 사용
- Bucket(버킷) 단위로 데이터를 관리
- 하나의 오브젝트는 데이터+메타데이터로 구성되며 최대 한 번에 5TB까지 저장 가능
쿠버네티스
컨테이너
- 컨테이너 개념
- Container Engine : 각각의 컨테이너를 격리, 실행 및 관리하는 소프트웨어로 도커가 대표적인 Container Engine
도커
- 오픈소스 컨테이너 엔진
- 도커허브라는 공개 저장소를 통해 컨테이너의 자료를 관리
- Dockerfile과 Image를 통해 컨테이서 생성 및 실행
- 도커에서 실행할 수 있는 기초 명령어 (build, run, pull, push)
쿠버네티스 (k8s)
- 컨테이너 오케스트레이션 : 다수의 컨테이너를 다수의 시스템에서 각 목적(배포/복제/장애 복구 등)에 따라 총괄적으로 자동화하여 관리해주는 도구
- 쿠버네티스 : 가장 대표적인 컨테이너 오케스트레이션
- 클러스터 : 쿠버네티스에서 가장 큰 단위로, 가상 서버들이 속한 큰 클라우드
- 노드 : 클러스터 내 가상서버, 즉 컴퓨팅 단위
- 마스터 노드(control plane) : 전체 쿠버네티스 시스템을 관리 및 통제
- api server : 사용자나 다른 노드의 요청을 검증 및 처리하는 중간 다리 역할
- etcd : 모든 클러스터의 구성 데이터를 저장하는 저장소
- controller manager : 컨트롤러의 생성 및 배포
- scheduler : pod를 생성 및 배포할 노드를 결정
- 워커 노드(data plane) : 배포하고자 하는 어플리케이션을 실제 관리 및 실행
- kubelet : 노드 내 실행중인 컨테이너 상태를 주기적으로 점검 및 api server에 결과 전송
- container runtime : pod 안에 있는 컨테이너를 실행 및 컨테이너 생성을 위한 이미지 관리
- kube-proxy : 각 노드간 통신을 담당
- addons : 워커 노드에 설치하여 추가적 기능을 사용할 수 있는 도구
- 쿠버네티스 실습
- yaml 파일을 통한 pod, contoroller, namespace 등 생성
- kubectl을 이용한 명령어 입력
- EmptyDir, HostPath Volume, PV, PVC 등을 이용한 pod와 스토리지 연결
코멘트
- 비교적 수업시간이 넉넉했던 만큼 다양한 실습을 진행할 수 있었다.
- 다만 이런 기능이 있다~ 정도로 체험을 했기 때문에 실무에서 어떻게 쿠버네티를 통해 마이크로 서비스를 운영하는지에 대해서는 잘 알 수 없다는 점이 아쉬웠다.
SQL
SQL 이론
- RDBMS 개념
- RDBMS의 구조
- server : DB가 구동되는 서버
- DataBase : 서버에 저장된 데이터 집합
- Schema : 데이터베이스에 정의된 구조 (권한 등)
- Table : 데이터베이스의 각 테이블
SQL 실습
- SELECT와 쿼리를 이용한 데이터 조회 중심의 실습
- WHERE, GROUP BY ~ HAVING, ORDER BY, 집계함수, 서브 쿼리, JOIN 등
- INSERT, UPDATE, DELETE, TRUNCATE 등 기초적인 데이터 변경 쿼리 실습
코멘트
- STEP 2에서 진행했던 수업중 가장 도움이 된다는 것을 확 체감할 수 있었던 수업이었다. (특히 정보처리기사)
- 무작정 교안에 있는 명령어/코드를 따라치는게 아니라 생각하면서 실습을 진행할 수 있다는 점이 더 좋았다.
- 이후 미니프로젝트 수업에서 SQL문을 작성해서 데이터를 불러오거나 쓰는 연습을 할 수 있었다면 조금 더 체득이 잘 되었을 것 같다.
Django 활용 Web App 개발
가상 환경 설정
- anaconda 가상환경 생성
- anaconda 가상환경을 이용한 패키지 설치
Djnago
- Django의 개념 및 장단점 등
- Djnago MVT 구조 (Model + View + Templates)
- 흔히 MVC 패턴이라고도 하는데, MVC의 View는 Django의 Templates과 유사하고, Django의 View는 MVC의 Controller와 유사한 개념이라는 것에 주의하자. (이름만 같을 뿐 역할이 다르다)
- Pymongo 패키지(ORM)를 이용한 데이터베이스 다루기 실습
- Django 관리자 페이지 커스터마이징
- 간단한 회원가입 페이지 실습
- RESTful API 개념 및 실습
코멘트
- 가장 긴 시간동안 배우게 되는 Django 수업이다.
- 실무 프레임워크에서는 django를 잘 쓰지 않다보니, 프레임워크 자체를 배우기보다는 개념을 이해하는 것에 집중하였다. (다른 프레임워크 배울 때 보다 수월하게 배우기 위해)
- 보다 많은 것을 시도해보고 싶었는데, 이런저런 이유로 수업이 지연되서 생각보다 많은 진도를 나가지 못한 점이 아쉬웠다.
7차 미니프로젝트
mlflow
- 인공지능 모델을 서버에 쉽게 배포할 수 있도록 다양한 관리 기능을 제공해주는 오픈소스 도구
- 이미지 CNN 모델 실습 및 mlflow 실습 진행
Django 웹페이지 제작
- mlflow를 통해 학습된 모델을 Django 서버에 배포
- chatGPT API 이용
- 사용자가 정보를 입력하면 mlflow 모델 및 ChatGPT API를 이용해 결과를 화면에 출력하는 홈페이지 제작
- 게시판 기능, 회원가입/로그인 기능 구현
코멘트
- 가장 오랫동안 진행된 미니프로젝트이며, 처음으로 여럿이 협업하여 개발한 웹페이지이다.
- 코드 컨벤션 등을 정하지 않고, 각자 담당할 페이지를 정하여 기능 구현을 한 뒤 담당자 1명이 합치는 방식으로 진행했는데 각자 코드 스타일이나 CSS를 적용한 방법, 페이지 레이아웃 등이 모두 다르다보니 합치는 과정에서 정말 많은 수정이 필요했다.
- 깃을 이용한 버전관리 및 코드 관리와 코드 컨벤션을 정하는 것이 왜 중요한지 뼈저리게 깨달은 미니 프로젝트였다.
- 과정과는 별개로 결과는 역대 미니프로젝트에서 가장 우수한 성적을 받았기 때문에 뿌듯함을 느낄 수 있었다)
소감
좋았던 점
단순히 프레임워크를 배우는게 끝이 아니라 인프라, 서버 구축, 쿠버네티스, SQL 등 실무에 필요한 지식을 두루 가르쳐준 점이 좋았다.
수업 중에 진도를 다 나가지 못해도 교안을 통해 충분한 보충 자료 및 실습 자료가 제공되는 점이 좋았다.
Django를 다룰 때에도 단순히 문법을 배우는게 아니라 MVT 구조 등 개념적인 부분을 많이 배울 수 있다는 점이 좋았다.
아쉬웠던 점
STEP 2 자체가 기간이 짧다보니 쫓기듯이 수업이 진행되는 경우가 많았고, 하루에 너무 많은 내용을 다뤄 배운것을 정리하는 것도 어려웠다.
일부 실습에서 환경 설정이나 오류등의 문제로 수업이 지체되는 일이 잦았다. 아무래도 수강생이 많고 비대면으로 진행되는 특성상 어쩔 수 없는것 같았는데, 조금 더 매끄럽게 진행되었으면 하는 아쉬움이 있다.
미니프로젝트가 웹 개발 하나인 것이 아쉬웠다. 조금 더 쿠버네티스나 SQL 등을 다룰 수 있는 미니프로젝트가 하나 정도 더 있다면 좋을 것 같다.
빅프로젝트를 앞두고 실무 프로세스를 따라서 빅프로젝트를 수행해야 할텐데, 이 점에 대해서는 잘 다루지 않는다는 점이 아쉬웠다. (아키텍처 설계, 기능 정의서 작성 등)