Difference between r1.54 and the current
@@ -7,7 +7,7 @@
== 이 주제를 선택한 이유 ==
소프트웨어 마에스트로 같은 프로그램에서 프로젝트 계획서를 많이 쓸 텐데, 그때 잘 설명하기 위해서.
특정 프레임워크를 고른 이유를 잘 설득할 수 있어야 함.
특정 프레임워크를 고른 이유를 잘 설명하고 설득할 수 있어야 함.
== 프레임워크를 고민해서 고르는 이유는 뭘까? ==
1. 한번 결정하면 바꾸는 데에 시간과 비용이 많이 듦.
1.1. 이 주제를 선택한 이유 ¶
소프트웨어 마에스트로 같은 프로그램에서 프로젝트 계획서를 많이 쓸 텐데, 그때 잘 설명하기 위해서.
특정 프레임워크를 고른 이유를 잘 설명하고 설득할 수 있어야 함.
특정 프레임워크를 고른 이유를 잘 설명하고 설득할 수 있어야 함.
1.2. 프레임워크를 고민해서 고르는 이유는 뭘까? ¶
- 한번 결정하면 바꾸는 데에 시간과 비용이 많이 듦.
- 프레임워크에 따라 개발 속도, 성능, 비용의 차이가 날 수 있음.
- 프레임워크를 처음 골라보는 사람들은, 고성능이 최고라고 생각함. 하지만 필요 이상의 고성능을 추구하면, 개발 속도가 저하되거나 팀원을 뽑기 어려워질 수 있음. (ex. Rust + ?)
- 성능만을 추구하다가 대용량 트래픽을 못 견디게 되는 경우가 발생할 수도 있음.
1.3. 좋은 프레임워크는 상황마다 다르다 ¶
- 혼자서 다 개발해야 하고, 보편적인 서비스 어플(ex. 홈페이지, 거래 플랫폼, 소개팅 앱, 카페 예약 시스템 등 현실의 개념을 가져와서 개발하는 유형)을 만드는 경우는 성능이 좀 떨어지더라도 기본적인 기능이 갖춰진 프레임워크가 좋음.
- 복잡한 비즈니스 로직이 필요하교, 방대한 코드를 다뤄야 하는 경우 코드의 재사용을 잘 지원해주는 데코레이터나 코드 제네레이션을 잘 지원해주는 cli가 잘 지원되는 프레임워크가 좋을 수 있음. (ex. nestjs)
- 극한의 성능이 필요한 경우, 인기가 없고 구현 예시가 없는 힙한 프레임워크로 갈 수 있음. (언급했던 Rust + ??? 시리즈가 그럼)
1.4.1. 프론트엔드 ¶
- 머러가 필요한 어플, 동영상을 편집하고 수정하는 어플 -> 고성능이 필요 -> 네이티브 애플리케이션으로 개발해야함(안드로이드, 스위프트 ios)
- 보편적인 어플? 모바일 프론트엔드 개발이 처음? -> 크로스 플랫폼 프레임워크 (ex. Flutter)
- 웹모바일 프론트엔드 개발 많이 해봤다?-> 웹 앱 (ex. Nextjs)
- 소개팅앱을 만들고 싶음 -> 매칭 풀이 많아야 함 -> 안드로이드에만 내면 안 됨 -> 크로스플랫폼 선택
- 크로스플랫폼을 사용하고 싶은데, 성능이 필요함 -> 어쩔 수 없이 네이티브로 개발.
- 웹 앱은, 프론트엔드에선 언젠간 쓰게 돼있음. 나중에 다른 주제로 얘기해볼 예정.
1.4.2. 백엔드 ¶
- 계산성능은 딱히 필요없는데, 커스터마이징이 잘 되어야 하고 트래픽을 잘 받아야 하는 경우 -> Nestjs
이런 경우엔 노드 기반. 노드는 인터프리터 플랫폼을 사용하기에 속도가 빠르진 않음. 하지만 기본적으로 인풋 아웃풋을 잘함.
(ex. 단순한 서버, 소개팅앱서버 이런건 곱셈, 나눗셈을 막 많이 하지 않음)
- 계산 성능도 필요하고 커스터마이징도 잘 되어야 하고, 트래픽도 많이 받아야 함. -> Spring WebFlux
이런 경우엔 컴파일언어가 좋음. 하지만 c, c++, Rust는 쉽지 않고 자바 계열이 좋음.
그럼 Kotlin, Java + Spring WebFlux를 사용함.
- 프로토타입만 만들어야 함, 시간이 없어서 남이 만든 기능 가져다 써야 함 -> Ruby on Rails, Django
스타트업에선 3번으로 만들어보고 성공하면 2번으로 넘어가는 식으로 진행되는 경우가 많음.
- api 서버만 띄우면 되고 성능이 가장 중요 -> actix(Rust), gin(Go)
이런 경우엔 네이티브가 Rust와 Go임.
1.4.3. 데이터베이스 ¶
- 빠른 api 반속이 필요하고 데이터 integration이 깨져도 괜찮은 경우 혹은 schemaless하게 진행하는 경우 -> mongodb
(ex. 게임 서버.
-> 반속이 빨라야 함.
-> integration이 깨져도 괜찮음. -> 서버가 터지거나 아이템이 몇 개 사라져도 엄청난 문제가 생기진 않음(롤백)
-> schemaless -> 아이템이 계속 추가될 수 있음(무기, 장신구 ... 등등) )
- 데이터 integration이 매우 중요한 경우. -> mysql, postgres
(ex. 은행, 군대의 기록 등)
1.5. Q&A ¶
- 정우현 학우님은 어떤 프레임워크를 주로 쓰시나요? (백엔드)
-> 현업에선 2번을 많이씀. 난 1번을 많이 쓰지만, 2번으로 넘어가려고 하고 있음. 코드를 짤 때는 압도적으로 nextjs를 가장 많이 쓴 거 같음.
- 학부생 수준에선 코틀린을 배우지 않아도 기업의 프로젝트에 참여할 수 있을까요?
-> 프레임워크를 잘 쓰는 것도 중요하지만, 각각의 프레임워크엔 나름의 철학이 있다.
그걸 이해하는 게 가장 중요하다고 생각함. 그러려면 오랜 기간 공부해야 함.
디자인 패턴, 데이터 중심 어플리케이션 등을 공부하면 적응하는 데엔 큰 무리가 없을 것이라 생각.
+ 학부생 수준에서 외주를 할 때는 2번은 딱히 필요하지 않음. 다만 취업할 때는 필요함.
- 백엔드에서 계산 성능이라는 건 어떤 걸 의미하는 건가요?
https://avelinorun.medium.com/go-vs-python-more-request-per-second-1ee0ca7e8681
단순히 http 서버를 띄워서 hello world 화면을 보여주는 예시일 뿐인데도 차이가 크게 나는 것을 확인할 수 있음.
3.1. 진행 상황 ¶
- 강사 모집 중.
- 새싹교실 관련 자세한 내용은 강사 신청서에 있음.
- 강사 신청서는 제로페이지 공지 단톡방, 21, 20, 19, 18학번 단톡방에 올라가 있음.