Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

정모/2022.02.23: Difference between revisions

From ZeroWiki
No edit summary
(Repair batch-0007 pages from live compare)
 
(33 intermediate revisions by one other user not shown)
Line 1: Line 1:
__TOC__
= OMS =
= OMS =
* [[정우현]] 학우님: 프레임워크 고르는 방법
* [[정우현]] 학우님: 프레임워크 고르는 방법
Line 5: Line 7:


== 이 주제를 선택한 이유 ==
== 이 주제를 선택한 이유 ==
소프트웨어 마에스트로 같은 프로젝트를 할 때, 프로젝트 계획서를 많이 쓸 텐데 그때 잘 설명하기 위해서.
소프트웨어 마에스트로 같은 프로그램에서 프로젝트 계획서를 많이 쓸 텐데, 그때 잘 설명하기 위해서.
특정 프레임워크를 고른 이유를 잘 설득할 수 있어야 함.
특정 프레임워크를 고른 이유를 잘 설명하고 설득할 수 있어야 함.


== 프레임워크를 고민해서 고르는 이유는 뭘까? ==
== 프레임워크를 고민해서 고르는 이유는 뭘까? ==
# 한번 결정하면 바꾸는 데에 시간과 비용이 많이 듦.
# 한번 결정하면 바꾸는 데에 시간과 비용이 많이 듦.
# 프레임워크에 따라 개발 속도, 성능, 비용의 차이가 날 수 있음.
# 프레임워크에 따라 개발 속도, 성능, 비용의 차이가 날 수 있음.
# 프레임워크를 처음 골라보는 사람들은, 고성능이 최고라고 생각함. 하지만 필요 이상의 고성능을 추구하면, 개발 속도가 저하되거나 팀원을 뽑기 어려워질 수 있음. (ex. 러스트 + ?)
# 프레임워크를 처음 골라보는 사람들은, 고성능이 최고라고 생각함. 하지만 필요 이상의 고성능을 추구하면, 개발 속도가 저하되거나 팀원을 뽑기 어려워질 수 있음. (ex. Rust + ?)
# 성능만을 추구하다가 대용량 트래픽을 못 견디게 되는 경우가 발생할 수도 있음.
# 성능만을 추구하다가 대용량 트래픽을 못 견디게 되는 경우가 발생할 수도 있음.
== 좋은 프레임워크는 상황마다 다르다 ==
# 혼자서 다 개발해야 하고, 보편적인 서비스 어플(ex. 홈페이지, 거래 플랫폼, 소개팅 앱, 카페 예약 시스템 등 현실의 개념을 가져와서 개발하는 유형)을 만드는 경우는 성능이 좀 떨어지더라도 기본적인 기능이 갖춰진 프레임워크가 좋음.
# 복잡한 비즈니스 로직이 필요하교, 방대한 코드를 다뤄야 하는 경우 코드의 재사용을 잘 지원해주는 데코레이터나 코드 제네레이션을 잘 지원해주는 cli가 잘 지원되는 프레임워크가 좋을 수 있음. (ex. nestjs)
# 극한의 성능이 필요한 경우, 인기가 없고 구현 예시가 없는 힙한 프레임워크로 갈 수 있음. (언급했던 Rust + ??? 시리즈가 그럼)


== 예시 ==
== 예시 ==
=== 프론트엔드 ===
=== 프론트엔드 ===
* 머러가 필요한 어플, 동영상을 편집하고 수정하는 어플 -> 고성능이 필요 -> 네이티브 애플리케이션으로 개발해야함(안드로이드, 스위프트 ios)
# 머러가 필요한 어플, 동영상을 편집하고 수정하는 어플 -> 고성능이 필요 -> 네이티브 애플리케이션으로 개발해야함(안드로이드, 스위프트 ios)
* 보편적인 어플? 모바일 프론트엔드 개발이 처음? -> 크로스 플랫폼 프레임워크 (ex. Flutter)
# 보편적인 어플? 모바일 프론트엔드 개발이 처음? -> 크로스 플랫폼 프레임워크 (ex. Flutter)
* 웹모바일 프론트엔드 개발 많이 해봤다?-> 웹 앱 (ex. Nextjs)
# 웹모바일 프론트엔드 개발 많이 해봤다?-> 웹 앱 (ex. Nextjs)


'''디테일한 예시'''
'''디테일한 예시'''
* 소개팅앱을 만들고 싶음 -> 매칭 풀이 많아야 함 -> 안드로이드에만 내면 안 됨 -> 크로스플랫폼 선택
# 소개팅앱을 만들고 싶음 -> 매칭 풀이 많아야 함 -> 안드로이드에만 내면 안 됨 -> 크로스플랫폼 선택
* 크로스플랫폼을 사용하고 싶은데, 성능이 필요함 -> 어쩔 수 없이 네이티브로 개발.
# 크로스플랫폼을 사용하고 싶은데, 성능이 필요함 -> 어쩔 수 없이 네이티브로 개발.
* 웹 앱은, 프론트엔드에선 언젠간 쓰게 돼있음. 나중에 다른 주제로 얘기해볼 예정.
# 웹 앱은, 프론트엔드에선 언젠간 쓰게 돼있음. 나중에 다른 주제로 얘기해볼 예정.
 
=== 백엔드 ===
=== 백엔드 ===
# 계산성능은 딱히 필요없는데, 커스터마이징이 잘 되어야 하고 트래픽을 잘 받아야 하는 경우 -> Nestjs
# 계산성능은 딱히 필요없는데, 커스터마이징이 잘 되어야 하고 트래픽을 잘 받아야 하는 경우 -> Nestjs
이런 경우엔 노드 기반. 노드는 인터프리터 플랫폼을 사용하기에 속도가 빠르진 않음. 하지만 기본적으로 인풋 아웃풋을 잘함.
이런 경우엔 노드 기반. 노드는 인터프리터 플랫폼을 사용하기에 속도가 빠르진 않음. 하지만 기본적으로 인풋 아웃풋을 잘함.
(ex. 단순한 서버, 소개팅앱서버 이런건 곱셈, 나눗셈을 막 많이 하지 않음)
(ex. 단순한 서버, 소개팅앱서버 이런건 곱셈, 나눗셈을 막 많이 하지 않음)
# 계산 성능도 필요하고 커스터마이징도 잘 되어야 하고, 트래픽도 많이 받아야 함. -> Spring WebFlux
# 계산 성능도 필요하고 커스터마이징도 잘 되어야 하고, 트래픽도 많이 받아야 함. -> Spring WebFlux
이런 경우엔 컴파일언어가 좋음. 하지만 c, c++, Rust는 쉽지 않고 자바 계열이 좋음.
이런 경우엔 컴파일언어가 좋음. 하지만 c, c++, Rust는 쉽지 않고 자바 계열이 좋음.
그럼 Kotlin, Java + Spring WebFlux를 사용함.  
그럼 Kotlin, Java + Spring WebFlux를 사용함.  
# 프로토타입만 만들어야 함, 시간이 없어서 남이 만든 기능 가져다 써야 함 -> Ruby on Rails, Django
# 프로토타입만 만들어야 함, 시간이 없어서 남이 만든 기능 가져다 써야 함 -> Ruby on Rails, Django
스타트업에선 3번으로 만들어보고 성공하면 2번으로 넘어가는 식으로 진행되는 경우가 많음.
스타트업에선 3번으로 만들어보고 성공하면 2번으로 넘어가는 식으로 진행되는 경우가 많음.
# api 서버만 띄우면 되고 성능이 가장 중요 -> actix(Rust), gin(Go)
# api 서버만 띄우면 되고 성능이 가장 중요 -> actix(Rust), gin(Go)
이런 경우엔 네이티브가 Rust와 Go임.
이런 경우엔 네이티브가 Rust와 Go임.


=== 데이터베이스 ===
=== 데이터베이스 ===
1.빠른 api 반속이 필요하고 데이터 인테그레이션이 깨져도 괜찮은 경우 혹은 schemaless하게 진행하는 경우 -> mongodb
# 빠른 api 반속이 필요하고 데이터 integration이 깨져도 괜찮은 경우 혹은 schemaless하게 진행하는 경우 -> mongodb
(ex. 게임 서버.
(ex. 게임 서버.
-> 반속이 빨라야 함.
  -> 반속이 빨라야 함.
-> integration이 깨져도 괜찮음. -> 서버가 터지거나 아이템이 몇 개 사라져도 엄청난 문제가 생기진 않음(롤백)
  -> integration이 깨져도 괜찮음. -> 서버가 터지거나 아이템이 몇 개 사라져도 엄청난 문제가 생기진 않음(롤백)
-> schemaless -> 아이템이 계속 추가될 수 있음(무기, 장신구 ... 등등))
  -> schemaless -> 아이템이 계속 추가될 수 있음(무기, 장신구 ... 등등) )
# 데이터 integration이 매우 중요한 경우. -> mysql, postgres
# 데이터 integration이 매우 중요한 경우. -> mysql, postgres
(ex. 은행, 군대의 기록 등)
(ex. 은행, 군대의 기록 등)
 
== Q&A ==
# 정우현 학우님은 어떤 프레임워크를 주로 쓰시나요? (백엔드)
-> 현업에선 2번을 많이씀. 난 1번을 많이 쓰지만, 2번으로 넘어가려고 하고 있음. 코드를 짤 때는 압도적으로 nextjs를 가장 많이 쓴 거 같음.
# 학부생 수준에선 코틀린을 배우지 않아도 기업의 프로젝트에 참여할 수 있을까요?
-> 프레임워크를 잘 쓰는 것도 중요하지만, 각각의 프레임워크엔 나름의 철학이 있다.
그걸 이해하는 게 가장 중요하다고 생각함. 그러려면 오랜 기간 공부해야 함.
디자인 패턴, 데이터 중심 어플리케이션 등을 공부하면 적응하는 데엔 큰 무리가 없을 것이라 생각.
+ 학부생 수준에서 외주를 할 때는 2번은 딱히 필요하지 않음. 다만 취업할 때는 필요함.
# 백엔드에서 계산 성능이라는 건 어떤 걸 의미하는 건가요?
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 ==
# 강사 수는 어느 정도로 예상 중인가요?
한 자리 수로 예상 중. 작년처럼 8명 정도면 적절하지 않나 생각 중. 2월 23일 기준 5명이 지원함.
-> 새싹이 강사 수보다 너무 많다. 맡아야 할 사람이 많아지는 경우가 있음.. -[[김은솔]]
-> 최대한 많이 뽑겠다. -[[김도엽]]
# 한명 당 몇명의 멘티를 배정할 예정인가요?
강사님들의 요청에 따라 배정. 따로 건의사항이 없다면 1/n 생각중.
# 강사 한 명당 맡을 수 있는 팀의 제한이 있나요?
제한은 없음.
# 설명회는 언제인가요?
3월 5일 토요일 예상 중.


== 좋은 프레임워크는 상황마다 다르다 ==
= 참가자 =
# 혼자서 다 개발해야 하고, 보편적인 서비스 어플(ex. 홈페이지, 거래 플랫폼, 소개팅 앱, 카페 예약 시스템 등 현실의 개념을 가져와서 개발하는 유형)을 만드는 경우는 성능이 좀 떨어지더라도 기본적인 기능이 갖춰진 프레임워크가 좋음.
# 복잡한 비즈니스 로직이 필요하교, 방대한 코드를 다뤄야 하는 경우 코드의 재사용을 잘 지원해주는 데코레이터나 코드 제네레이션을 잘 지원해주는 cli가 잘 지원되는 프레임워크가 좋을 수 있음. (ex. nestjs)
# 극한의 성능이 필요한 경우, 인기가 없고 구현 예시가 없는 힙한 프레임워크로 갈 수 있음. (언급했던 러스트 + ??? 시리즈가 그럼)
== 참가자 ==
[[김동영]] [[정우현]] [[김도엽]] [[김동욱]] [[김은솔]] [[김휘경]] [[이민욱]] [[최민준]] [[한재민]]
[[김동영]] [[정우현]] [[김도엽]] [[김동욱]] [[김은솔]] [[김휘경]] [[이민욱]] [[최민준]] [[한재민]]
= 댓글 =
= 댓글 =
 
* 1-2에 3번, 1-3에 3번에
: Rust + ?
라고 써놨는데 ?가 뭔지 모르겠어요. 그리고 각주 다는 법 아시는 분은 공유 부탁드립니다. -[[김동영]]

Latest revision as of 01:32, 27 March 2026

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. 단순한 서버, 소개팅앱서버 이런건 곱셈, 나눗셈을 막 많이 하지 않음)
  1. 계산 성능도 필요하고 커스터마이징도 잘 되어야 하고, 트래픽도 많이 받아야 함. -> Spring WebFlux
이런 경우엔 컴파일언어가 좋음. 하지만 c, c++, Rust는 쉽지 않고 자바 계열이 좋음.
그럼 Kotlin, Java + Spring WebFlux를 사용함. 
  1. 프로토타입만 만들어야 함, 시간이 없어서 남이 만든 기능 가져다 써야 함 -> Ruby on Rails, Django
스타트업에선 3번으로 만들어보고 성공하면 2번으로 넘어가는 식으로 진행되는 경우가 많음.
  1. api 서버만 띄우면 되고 성능이 가장 중요 -> actix(Rust), gin(Go)
이런 경우엔 네이티브가 Rust와 Go임.

데이터베이스

  1. 빠른 api 반속이 필요하고 데이터 integration이 깨져도 괜찮은 경우 혹은 schemaless하게 진행하는 경우 -> mongodb
(ex. 게임 서버.
 -> 반속이 빨라야 함.
 -> integration이 깨져도 괜찮음. -> 서버가 터지거나 아이템이 몇 개 사라져도 엄청난 문제가 생기진 않음(롤백)
 -> schemaless -> 아이템이 계속 추가될 수 있음(무기, 장신구 ... 등등) )
  1. 데이터 integration이 매우 중요한 경우. -> mysql, postgres
(ex. 은행, 군대의 기록 등)

Q&A

  1. 정우현 학우님은 어떤 프레임워크를 주로 쓰시나요? (백엔드)
-> 현업에선 2번을 많이씀. 난 1번을 많이 쓰지만, 2번으로 넘어가려고 하고 있음. 코드를 짤 때는 압도적으로 nextjs를 가장 많이 쓴 거 같음.
  1. 학부생 수준에선 코틀린을 배우지 않아도 기업의 프로젝트에 참여할 수 있을까요?
-> 프레임워크를 잘 쓰는 것도 중요하지만, 각각의 프레임워크엔 나름의 철학이 있다.
그걸 이해하는 게 가장 중요하다고 생각함. 그러려면 오랜 기간 공부해야 함.
디자인 패턴, 데이터 중심 어플리케이션 등을 공부하면 적응하는 데엔 큰 무리가 없을 것이라 생각.
+ 학부생 수준에서 외주를 할 때는 2번은 딱히 필요하지 않음. 다만 취업할 때는 필요함.
  1. 백엔드에서 계산 성능이라는 건 어떤 걸 의미하는 건가요?
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명이 지원함.
-> 새싹이 강사 수보다 너무 많다. 맡아야 할 사람이 많아지는 경우가 있음.. -김은솔
-> 최대한 많이 뽑겠다. -김도엽
  1. 한명 당 몇명의 멘티를 배정할 예정인가요?
강사님들의 요청에 따라 배정. 따로 건의사항이 없다면 1/n 생각중.
  1. 강사 한 명당 맡을 수 있는 팀의 제한이 있나요?
제한은 없음.
  1. 설명회는 언제인가요?
3월 5일 토요일 예상 중.

참가자

김동영 정우현 김도엽 김동욱 김은솔 김휘경 이민욱 최민준 한재민

댓글

  • 1-2에 3번, 1-3에 3번에
Rust + ?
라고 써놨는데 ?가 뭔지 모르겠어요. 그리고 각주 다는 법 아시는 분은 공유 부탁드립니다. -김동영