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