• 1 번 글에서 언급한 바처럼

이번 멘토링에서 사용할 기술 스택은 다음과 같다

 

  • Python
    • Flask
  • AWS
    • Lambda
    • API Gateway
    • S3
    • DynamoDB
    • ECS
  • Deploy
    • Gitlab
    • Zappa

이제 해당 내용에 대해 정리를 해보고자 한다.

 

Python 

https://namu.wiki/w/Python

개발을 몰라도 한번씩은 들어봤을 언어이다. 

최근에는 대학교 1학년 필수교양에도 들어가는 것 같던데 나의 경우에는 졸업 직전 여름방학 멀티캠퍼스에서 아주 잠깐...

경험해보고 카카오톡 챗봇을 단시간에 만들어 본 것이 유일한 경험이고

이후에 뭔가 만들어봐야 한다고 생각만 하고 공부를 못했었다.

주요 특징이라면 인터프리터 언어이고 생각보다 오래된 언어이다. 이후에 데이터 엔지니어링 관련 라이브러리들이 많이 나오면서 정말 급상승 한 언어로 인지하고 있다.

아무래도 설치나 환경변수 잡는 등의 세팅이 자바나 다른 언어보다 용이? 하고 쉽기에 많이 입문하는 것으로 보인다.

 

 Flask

플라스크는 Python의 웹 애플리케이션 개발을 위한 프레임워크, Django(장고)도 웹 프레임워크이고 비교도 많이 되며 같이 쓰는 경우도 있다고 한다.

어떤게 더 가볍고 무겁다 이런 비교글들도 있지만 크게 차이는 없는 듯 하며 그냥 개발자의 선호도에 따라 나뉘는 듯? 하다.

누군가는 Flask가 더 배우기 쉽다고 말하기도 하고 사실은 더 어렵다 라는 글도 보인다.

 

프로젝트 레이아웃이 다르고 DB접근 방법에 대한 차이와 내가 원하는 기능을 추가할때의 편의성에 대한 차이가 Django에 대한 주요 차이점으로 보인다.

또한 Django는 RDBMS에 특화되어있고 NoSQL을 사용 한다면 그냥 Flask를 사용한다.

그러면 이제 RDB와 NoSQL에 대한 차이를 알아야 할 듯 하다.

 

RDBMS와 NoSQL의 차이 

  1. RDBMS
    1. 저장방식은 SQL(Strucured Query Language)에 의해 저장
    2. 정해진 스키마(데이터 구조와 제약조건에 관한 명세 기술, 속성 개체 관계)에 따라 데이터를 저장
    3. 테이블과 테이블이 관계를 맺고 있는 집합체 ( 외래키를 사용하여 Join)
  2. NoSQL
    1. 데이터가 증가하며 Scale-Up에 따른 비용 과다 등에 대한 대체 목적을 갖고 등장
    2. 일관성 포기 -> 데이터 분산 ( Scale-Out) - 클러스터링으로 하나의 DB 구성
    3. 유연성, 확장성, 고성능, 고기능성이라는 특징을 갖음
    4. 주로 키 - 값의 관계 ( Key-Value, Wide Columnar, Document(JSON, XML), Graph 등의 구조로 나뉨)
    5. 테이블간 연결 조회하는 join 없음

 

AWS

아마존 웹 서비스 

IT 인프라 구축에 필요한 다양한(엄청) 서비스를 제공한다.

원하는 만큼만 사용하고 비용을 측정하는 방식으로 사용

내가 하고 있는 SAP에서도 On-Premise와 Cloud(Rise)로 나뉘는 부분에서 Cloud에 해당

장기적으로 보면 On-Premise가 비용은 저렴한 듯 하지만, 소규로로 작업하거나 특정 트래픽때 사용하기에 유용함

 

  • Lamda
    • 서버를 프로비저닝, 관리 하지 않고 코드를 실행하는 서버리스 컴퓨팅 서비스
    • 코드 실행, OS유지 관리, 용량 확장, 모니터링, 로깅 등 모든 컴퓨팅 리소스 관리를 수행
    • 코드는 Lamda함수로 구성, C# GO Java 파이썬 루비 등 언어 지원
  • API Gateway
    • 규모에 관계 없이 API를 손쉽게 생성, 게시, 유지관리, 모니터링 할 수 있는 완전관리형 서비스
    • RESTful API,  WEBSOCKET API 지원
    • 서버 앞단에서 모든 API서버들의 엔드포인트를 단일화 해주는 또 다른 서버
    • https://tommypagy.tistory.com/143
  • S3
    • Simple Storage Service
    • 주로 파일서버의 역할을 함
    • 사용자 과다로 트래픽이 늘어나도 시스템적인 작업 안해도 됨
    • 저장 파일 제한 없음
    • REST, SOAP 인터페이스 제공
    • 데이터 중복저장으로(이중화) 데이터 손실시 자동 복원
    • 버전관리
    • 보호수준 차등 선택가능 - 비용 절감
    • https://opentutorials.org/course/608/3006
  • DynamoDB
    • NoSQL < - > RDBMS
    • MongoDB와 같은...
    • ACID에 대응
    • 일관성 데이터즉시반영 포기 , 확장성을 특징
    • RDBMS의 경우에는 띄우는 순간부터 비용이지만 DynamoDB는 거의 안나옴(용도에 따라)
    • 키워드에 DB가 붙어있긴 하지만 세일즈포인트가 아닐까?
    • 도큐먼트 엔진같은 느낌 JSON처럼
    • 쿼리가 없음
  • ECS
    • Elastic Container Service
    • 컨테이너를 적절하게 분배 확장 축소하는 서비스
    • 멘토링에서 할 데이터가 하루 70~80mb가량이 들어오는데 람다에서는 처리시간이 10초가 넘기면 메모리를 늘린다고 해도 죽어버리고 맘...
    • 그렇다고 EC2를 사용하기엔 하루 15분 가량을 사용하는데 너무 리소스가 아까움
    • 이를 스케쥴링 해서 필요한 시간만 사용, 과금을 낮춤
    • 너무 사이즈가 커지면 컨테이너를 늘려서 병렬처리 하고자 함

Deploy

  •  GitLab
    • 비공개된 GitHub?
    • 트렐로와 같은 협업툴처럼 협업 기능을 적극적으로 사용해서 GitHub + 트렐로의 느낌
    • 버전관리, 원격저장, issue tracker 지원
    •  
  • Zappa
    • Serverless를 구출을 가능하게 해주는 Python Pakage
    • 자원을 분산 -> 함수는 함수대로 DB는 DB대로 나누어 연동
    • AWS APIGateway Path 추가 작업 안해도 되서(자동으로 해줌) 귀찮음 해소
    • 명령어 한줄로도 배포 가능!
    • 비용 저렴
    • Zappa를 사용하면 람다에는 덜 신경 써도 됨

 

이렇게 아주.. 간단하게 정리해보았는데

정리하면서도 아직 많이 부족함을 느꼈고 , 해당 부분을 공부하면서 더 채워 넣어야 할 것 같다.

기술스택 정리하면서도 마음이 웅장해진다... (긍정적의미로...)

 

평소 SAP 관련 글을 보며 알게되고 이후에도 다양한 개발과 생활 이야기를 작성해서 즐겨보던 블로그가 있었다.

글을 읽다보면 내용에 사족이 없고 간결하지만 유익한 정보를 얻을 수 있어서 수시로 확인하며 글을 읽어왔었고

SAP 관련 내용들을 메일로 조심스레 여쭤보고 조언도 얻을 수 있어서 항상 감사한 마음을 갖고 언젠가 뵙고 싶기도 했는데


티스토리 - 뷰티풀 프로그래밍 해당 블로그에


https://krksap.tistory.com/1918

문득 해당 새 글이 업로드 된 것을 보았다.


이전부터 파이썬에 대한 학습과 데이터 엔지니어링 공부를 해야 한다고 생각해왔었는데

스터디의 경우에는 스터디장분이나 스터디원에 따라 산으로 가는 경우도 경험해보고

그게 아니더라도 방향성을 잡고 진행하기가 쉽지 않고 드문 경우여서 배제하고 있었고

본업을 생각하면 회사 업무가 최근 급등하기도 했고 SAP 공부도 빠듯한데 해도 될까라는 고민과

다른 멘티분들에게 발목을 잡지 않을까 라는 죄책감이 많이 들어서 선뜻 신청하지 못하고 있다가

바쁜거야 아마 죽는 그 날까지 바쁘다는 핑계를 대면 아무것도 할 수 없을 것 같았고

훌륭한 멘토님께 제대로 마음 먹고 해 볼 수 있는 좋은 기회라고 판단 하고 신청하게 되었다.

죄책감은... 내가 부족한 만큼 더 열심히 해서 채워 나갈 수 밖에 없는 부분...




아무튼 첫 멘토링을 진행하며 앞으로 진행해야 하는 방향성을 잡아주셨고 계획을 잡게 되었는데

  1. 우리는 팀 프로젝트의 형식으로 진행하게 된다.

    • 물론 모든 내용을 각각 개인이 하게 되면 실력이야 당연히 늘겠지만 정해진 시간에 정해진 개발을 해야 한다는 점에 있어 중요한 부분은 함께하고 개별적인 부분을 나눠서 하기로 하였다.

    • 매일 2~3시간씩, 주 5일, 5주의 시간을 할애하기로 하였고 ( 아마 부족한 나에게는 ... 최소 2배 이상의 시간이 필요하다라는 생각...)

      4시간을 개발에 쓰려면 5 ~ 6 시간을 해야 하니, 회사 업무를 정말 뽝집중해서... 업무시간내에 끝내고 새벽 1~2시 까지는 해야 할 것이라고 판단 (운동이나 게임 영화 이런건 어림없지)

  1. 사용 할 데이터는 공공데이터 포럼의 농축 수산부에서 제공하는 경매 데이터를 활용한다.

    • 이미 멘토님께서 기존에 개발한 설계와 코드가 존재하며

    • 데이터의 량이 충분할 뿐 아니라 매일 갱신되며 해당 데이터를 정해진 스케쥴링에 맞춰 가져오고 쓴다.

  1. 기술 셋 (크게 분류)

    • Python

      • Flask
    • AWS

      • Lambda
      • API Gateway
      • S3
      • DynamoDB
      • ECS
    • Deploy

      • Gitlab
      • Zappa

    위에 크게 언급한 기술 스텍을 기반으로 프로젝트를 진행한다 문제는 들어봤지만 제대로 써본 기술셋이 없을 뿐더러 ( 파이썬부터가 ... )
    들어보지도 못한 친구들을 공부해야 한다는 것...
    우선 기술 스텍에 대한 글을 따로 작성하며 정리해야 할 것 같다.

  1. AD Sense 를 통한 광고 유입 확인

    • 최종적으로 프로젝트 이후에는 애드센스를 달고 실제 사용자들이 어디서 얼마나 머무는지 어디에서 이탈하는지 수익은 나는지 등의
    • 테스트를 해볼 것 같다. 이전에 구글 애널릭틱스를 사용하여 분석하는 것을 본 적이 있는데 굉장히 상세하고 분석하지 좋았던 기억이 나는데 이번에도 한번 더 체험 해 볼 수 있을 것이다.
  2. 위의 내용을 기반으로 계획

    • 위의 내용들을 기반으로 WBS처럼 계획을 짜는 과정을 가졌다.
    • 하지만 나의 경우에는 해당 내용이나 선행지식 정도를 정확히 몰라 멘토님께 계속 여쭤보았고
    • 이를 통해 공통과제와 개인과제로 분류 진행하게 되었다.



이 외에도 더 많은 내용을 기재하고 싶은데...

정해진 기간동안 해야 할 과제도, 파이썬 개별 공부도 너무 부족하여 최대한 효율적으로 시간을 사용 해야 할 것 같으며

앞으로의 멘토링 과정에서 민폐 끼치지 말고 많은 것들을 배우고 성장 할 수 있는 기회가 되길 바라며 그 바램보다 더 많이 노력해야겠다.

정리를 하면서도 말씀헤주신 내용에 비해 기재한 내용이 너무 부족하고 빈약해서 부끄럽...다

+ Recent posts