소프트웨어 개발 방법 및 도구(1), Problem Definition

2022. 7. 28. 14:07강의 내용 정리/소프트웨어 개발 방법 및 도구

728x90
반응형

본 포스팅은 경희대학교 소프트웨어 융합학과 교수님이신 이성원 교수님의 강의 영상을 토대로 작성합니다. 실제 수업 시간에 진행하시는 강의 영상을 유튜브에 올리셔서 모두가 볼 수 있도록 하셨습니다. 아직 학부생이기에 수강신청을 통해 수업을 들을 수 있지만 들을 수 있는 학점이 제한되어 방학 중에 유튜브로 시청하고, 강의 내용을 본 포스팅을 통해 정리하고자 합니다.

 

글을 정리하는 현재 중간 고사 범위까지 공부하였으며 보다 깔끔하게 정리한 뒤 포스팅하기 위해 필기한 내용을 정리하며 복습하고 있습니다.


Problem Definition

소프트웨어를 개발하는 실무에서 문제를 만났을 때 어떻게 해결할 수 있는지


 

 

Q. 어떤 소프트웨어를 짤 것인가?(동기)

1. 능동적으로 소프트웨어를 짠다.

2. 다른 사람의 요청에 따라 소프트웨어를 짠다.

-> Agile 개발방법론이 대세이기에 능동적으로 소프트웨어를 짜는  것이 중요하다.

 

 

Q. 어떤 소프트웨어를 짤 것인가?(방향성)

1. 백지부터 소프트웨어를 짠다. (scratch)

2. 기존의 것을 사용해 소프트웨어를 짠다.

 

 

Q. 어떤 소프트웨어를 짤 것인가?(기술)

1. 하드웨어에 의존성이 있이 소프트웨어를 짠다.

2. 하드웨어에 의존성이 없이 소프트웨어를 짠다.

-> 기술적인 의존성이 있다면 하드웨어에 대해 알 필요가 있다.

 

 

Q. 어떤 소프트웨어를 짤 것인가?(기간 vs 성능)

1. 기간에 맞춰 짜는 것이 중요한 소프트웨어를 짠다.

2. 더 좋은 성능을 가지는 것이 중요한 소프트웨어를 짠다.

 

 

=> 문제를 어떤 식으로 정의하냐에 따라 접근 방식이 달라질 수 있다. 따라서 개발하고자 하는 소프트웨어의 특징을 알고 있는 것이 중요하다.


1.케이스 스터디

1) 하드웨어에 의존적인 소프트웨어를 만드는 케이스

(1) 아두이노를 사용해야하는 경우 C를 사용해야하고 개발도구는 Sketch IDE를 사용해야한다. 

 

(2) 라즈베리파이를 사용해야하는 경우 ARM Processor에서 돌아가도록 해야한다. GPIO를 지원하는 기술을 사용해야한다.

 

(3) CUDA를 사용하는 경우 이를 잘 지원하는 NVIDIA GPU, C/C++/Fortran 등을 사용해야한다.

 

=> 특정 하드웨어에 의존적인 경우 그 하드웨어를 지원하는 언어를 사용해 소프트웨어를 짜야한다.


2) 웹서버를 만드는 케이스 (성능이 중요한 소프트웨어를 만드는 케이스)

성능은 Key Performance Indexex(KPI)를 가지고 지표를 판단해야한다.


 

(1) C++ / Proxygen

- 개발을 해야한다,

- HTTP인 통신프로토콜을 구현한 것이 페이스북의 Proxygen이다.

- 하지만 매우 어려워서 확산이 어렵지만 굉장히 빠르다.

- 벤치마크 상으로 10배 이상 성능이 좋은 경우가 있었다. 

 

(2) Python / Django

- 개발을 해야한다.

- 장고 프레임워크를 사용하면 서버를 운영할 수 있다.

- 굉장히 많은 사람들이 컨트리뷰션을 했기에 안정성도 있다.

 

(3) Javascript / Node.js

- 개발을 해야한다.

- 웹에 특화된 프로그래머가 쉽게 짤 수 있다.

 

(4) Apache/Nginx

- 개발할 필요가 없고 설치해서 사용하면 된다.

- 개발을 하지 않으면 설명서를 읽고 설치해서 운영할 수 있다.

 

cf) 다음주까지 웹서버를 짜오라고 한다면 웹서버를 구현하기 위해 Django를 사용해 문제를 해결할 것이다. -> 정해진 날짜에 맞춰 구현하기 위해 하는 것이다.

 

- C++을 1이라 가정했을 때 동일한 문제를 푸는 경우 얼마나 느린가를 확인할 수 있다. -> 파이썬은 매우 느린것을 볼 수 있다. (심한 경우 100배 차이가 난다.)

- Python3 언어 자체에 대해 개량을 한 PyPy3는 성능이 더 좋아진 것을 볼 수 있다.

- Go는 매우 성능이 좋고 요즘 확산되고 있는 언어이다. 

- 분야에 특화된 언어들이 따로 존재한다. 특정 분야의 전문가가 된다면 그 분야의 도구, 언어에 대해 이해하고 있어야할 필요가 있다. 

- 정량적으로 성능을 체크할 때 어떤 것에 초점을 맞춰야하는지 잘 알고 있어야한다.

 

3) 모바일 어플리케이션을 개발하는 케이스

(1) Native platform

- 하드웨어에 대해 개발할 때 최적화된 플랫폼을 의미한다.

- 빠르고 최적화가 가능하지만  IOS, Android를 각각 개발해야한다.

 

(2) Cross platform

- 웹에서 소프트웨어를 짜고, 그 소스코드에 도구를 써서 IOS, Android에서도 사용할 수 있다.

- 간단하지만 성능은 최적화가 어렵다.

- 툴을 사용하는데 그 프레임워크가 지원하는 기능 안에서만 Cross platform이 가능하다.

- ex) CORDOVA, Electron

 

 

결론

문제의 정의에 따라 특징을 파악하고 그에 맞는 언어를 선택하는 것이 중요하다.


출처

https://www.youtube.com/watch?v=tPuT-H8di-0&list=PLz7S5PHCu4OniCxtW6jOOQEJEXX7PAUlA&index=2 

 

728x90
반응형