->소프트웨어를 개발하는 과정에서 체계적이고 효율적인 방법을 사용하여 소프트웨어의 품질과 유지보수성을 보장하는 학문분야
(Software is a set of Computer program and associated documentation and data. )

1) Planning
2) Analysis
3) Design
4) Implementation
5) Testing & Integration
6) Maintenance
->1) ~6) 까지 계속 반복.


낮은 응집도
-> 하나의 모듈이 여러가지 기능을 담당하고 공동의 목적이 없고 관련되어 있지 않음
높은 응집도
각각의 모듈이 긴밀하게 엮이고 각각의 모듈이 하나의 역할 담담.
👉Class, 객체지향 사고 필요
하나의 Class 에 모든 기능을 구현하는 것이 아닌, 목적에 맞게 나누고 서로 교류하는 인터페이스

좋은 소프트웨어란, 높은 응집도 + 낮은 결합도를 가진 소프트웨어다.

테스팅이란, 사용자들에게 안정적으로 소프트웨어를 사용할수
있도록,기능이 추가될 때 기존시스템에서 오류가 생기는지 버그가 있는지등을 확인하는과정
테스팅 종류
- Unit test : 개별단위
- Integration test: 다른 단위, 구성요소 테스트
- End to End Test : 처음부터 끝까지 테스트
- Performance Test : 성능, 부하 테스트
문서화 : 소프트웨어를 이용하기 위함 README, API문서, 아키텍처문서

머신러닝 모델ML 은 위에 저 작은 점에 불과
👉 머신러닝 모델을 실제 유저에게 사용하게 할려면, 소프트웨어 엔지니어링을 하게 될 것.
-> 소프트웨어 엔지니어링 관점에서도 생각해야함.
ex) Twitter engineering

머신러닝은 거대한 구조 속에 일부.
-> 서비스에 AI기술들을 적용하기 위해서 서비스를 만들어내는,소프트웨어 엔지니어링을 이해하는 것이 중요
AI 를 개발하는 것 -> MLDL,LLM 등 여러 범위를 포함함.



시간대별 지역별 수요예측을 한 후에, 수요가 많은 지역으로 미리 자동차 배치
또한 이상탐지, ETA(Estimated Time of Arrival) 등등 예측.

개인화 추천에 그래프 알고리즘 사용.

학습에 도움을 주는 AI

이미지를 AI를 이용하여 검색할 수 있게금 함.