[부스트캠프 AI Tech] 공부 정리 (D+36, 37)

Becky's Study Lab·2024년 1월 1일
0

Boostcamp

목록 보기
36/42

생각보다 한 해가 너무 일찍 끝나버렸다. 상반기에 몸이 많이 안 좋았고, 이를 회복하고 열심히 하반기에 달렸지만 생각보다 뭔가 많이 이룬게 없다는 생각이 들었다. 인턴도 다녀오고 이거저거 뭘 많이 했다고 생각했는데...
크리스마스를 보내고 나니 뭔가 아쉽기도 하고 많은 생각이 든다.

부캠에서 8주차는 "AI서비스 개발 기초"를 배우는 주간이다. 그래서 이번 일주일은 개발 관련 내용들을 배웠고 똑같이 벨로그에 정리해보려고 한다.

소프트웨어 엔지니어링

: 소프트웨어의 품질과 유지 보수성을 보장하는 학문 분야

소프트웨어 개발 라이프사이클(Software Development Lifecyele, SDLC)

이러한 사이클을 돌면서 점진적으로 개발을 해나간다고 볼 수 있다고 한다. 이 과정에서 어떻게 하면 가장 효율적으로 개발하여 품질은 좋되, 유지 보수성을 높일 수 있을지 고민해 볼 필요가 있다.

모듈로 구성된 소프트웨어

위의 그림을 보면 결국 프로그램 자체는 여러 모듈이 모여져 있는 상태인건데, 이걸 간단하게 생각하면 프로그램 안에 클래스로 표현된 모듈들이 엄청 많이 모여서 클래스 속 함수가 서로 엮어서 동작한다는 거다.

좋은 소프트웨어 설계

응집도(Cohesion)와 결합도(Coupling)

높은 응집도(모듈 내 교류)와 느슨한 결합도(모듈 끼린 덜 교류)를 가진 소프트웨어를 지향

  • Cohesion(응집도) : 모듈 내의 구성 요소간 서로 연관되어 있는 정도
  • Coupling(결합도) : 모듈과 모듈 간의 상호 의존 정도

Software Testing(test)

사용자들에게 안정적으로 소프트웨어를 사용할 수 있도록, 기능이 추가될 때 기존 시스템에서 오류가 생긱는지 버그가 있는지 등을 확인함

문서화

소프트웨어를 이용하기 위한 Readme, API 문서, 아키텍처 문서, 설치 방법 문서 등 개발한 소프트웨어에 대한 문서화는 필수적이다.

좋은 소프트웨어는 좋은 문서가 같이 존재
=> 개인 프로젝트도 문서화를 신경 쓰자!!

🤔 소프트웨어 엔지니어링을 배워야 하는 이유

위의 그림은 Twitter의 2022년 아키텍처였다. 실제로 너무나 자연스럽게 서비스에 AI가 스며들어 있다. AI만을 아는 것은 너무나 일부를 알고 있는 거라는 걸 위의 아키텍처를 보면 깨달을 수 있다.

우리가 사용하는 서비스에 너무나 자연스럽게 AI, 머신러닝이 사용되고 있다
단순히 모델만을 알아서는 AI의 사용성을 이해하기 어렵고, 모델보다 크고 복잡한 시스템에서 제 역할을 하기 위해 소프트웨어 엔지니어링을 이해해야한다!

버전 관리

모든 패키지는 버전이 중요하다. 버전에 따라서 기능 차이가 있고, 버전에 따라서 다른 패키지와의 활용도 달라지기 때문이다.

버전(Version)과 버저닝(Versioning)

  • 버전(Version) : 소프트웨어 제품의 특정 릴리스에 대한 고유한 식별자
  • 버저닝(Versioning) :소프트웨어에 Unique한 버전 이름, 버전 번호를 할당하는 과정

버저닝(Versioning)의 방법

CalVer(Calendar Versioning)방식

날짜 기반 시스템을 사용해 버전 번호를 할당하는 방법

SemVer(Semantic Versioning)방식

주번호, 부번호, 패치번호를 증가시키면서 버전 번호를 할당하는 방법

  • 이전 버전과 호환되지 않는 변경 => 주번호 +1
  • 이전 버전과 호환되며 새로운 기능이 추가 => 부번호 +1
  • 이전 버전의 버그 수정이 진행 => 패치번호 +1

HashVer(Hash Versioning)방식

SHA-1, SHA-256해시 알고리즘을 사용해 버전에 대해 고유 식별자를 생성하는 방법

파이썬의 버저닝

파이썬 설치 방법 비교

이렇게 다양한 방법으로 파이썬을 설치할 수 있었다.
수업에서는 conda자체의 프로그램이 무겁기에, 가장 베스트 방법으로 Pyenv를 추천했다.

가상 환경 (Virtual Env)

파이썬 버전에 따라, 패키지 버전에 따라 다르게 구성해서 가상환경을 구성해서 프로젝트를 구성하면 프로젝트를 독립적으로 관리할 수 있다.

conda를 쓰다가 개발이 꼬여지는 걸 전에도 느꼈기에 아래의 그림이 너무나 이해갔다.

수업에서는 venv를 사용해서 가상환경을 구성하는 걸 추천했다. 실제로도 가상 환경 구축에 가장 많이 사용되는 방법이라고 한다.

참고로, venv는 파이썬 내장 모듈이어서 이미 설치되어 있다.
코드로 venv를 사용해 가상 환경 만드는 과정을 정리만해보려고 한다.

MacOS 기준 Teminal 사용시

python -m venv "가상 환경 폴더를 만들 경로"
#보통 프로젝트 최상위 경로에서 .venv로 만드는 것이 관습

source "가상 환경 폴더"/bin/activate
#가상환경 접속 (활성화)

위 과정으로 .venv라는 가상환경을 만들면 아래와 같이 가상환경 구조를 볼 수 있다.

파이썬 패키지 매니저

패키지 매니저 : 패키지를 설치하고 버전을 관리하는 것

1) pip
2) poetry
3) conda

위의 3가지 중에서 사실 conda는 anaconda 자체의 패키지 매니저다. 무거워서 실무에서 설치가 안되어 있는 경우도 많다고 한다.

pip의 문제점

pip 가 정말 특이한 특징이 있는데,
1) 개발 환경과 배포 환경의 패키지가 분리되지 않음
2) pip list로는 패키지간의 의존성을 알 수 없음
3) pip uninstall 시 의존성이 있떤 패키지들은 삭제되지 않음

=> pip로는 정교한게 패키지 관리를 할 수 없음
=> poetry가 더 나음

🔖 Reference
응집도와 결합도 설명
conda는 이제 그만 쓸래요

profile
배우고 공부하고 기록하는 것을 멈추지 않는다.

0개의 댓글