[졸업프로젝트] 프로젝트설계 - 서버 구축 프레임워크
Server Development
- 애플리케이션의 로직을 구현할 서버프로그램을 제작하여 WAS에 탑재
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답처리, 아키텍처 모델 구현등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 서버 개발 프레임워크에 따라 지원하는 프로그래밍 언어가 제한적이므로 선정할 수 있는 프레임워크도 제한적
- 서버 개발 프레임워크의 대부분은 모델-뷰-컨트롤러 MVC패턴을 기반으로 개발됨
1. 클라이언트가 API로 데이터를 요청 Client → Controller
2. 데이터베이스에 데이터를 요청 Controller → Model
3. 요청에 따라서 데이터를 관리 및 응답 Model → Controller
4. 응답 받은 데이터를 클라이언트로 전송 Controller → View
5. 데이터를 화면으로 나타냄 View → Client
React로 블로그 만들기 11 : MVC 패턴 분할하기 : 네이버 블로그 (naver.com)
Framework
"뼈대나 근간을 이루는 코드들의 묶음"
- 프레임워크를 이용하겠다
➡ 프로그램의 기본 흐름과 구조를 정하고,
모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발을 진행하겠다
- 프레임워크 사용으로 얻을 수 있는 효과
1. 실력이 부족한 개발자라 허다러도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다.
2. 일정한 품질이 보장된 결과물을 얻을 수 있다.
3. 개발 시간을 단축할 수 있다.
출처: https://kimvampa.tistory.com/35 [Kim VamPa]
Mainly Used Framework
Spring Framework JAVA
장점
- 전자정부 표준 프레임워크 기반기술
- 관점지향(AOP, Aspect Oriented Programming)으로 반복적은 코드를 줄이고 핵심 비즈니스 로직에만 집중하여
트랜잭션,로깅 등 여러 모듈 들을 비즈니스 모듈과 분리 가능
- 의존성 주입(DI, Denpendecy Injection)를 지원하여 객체간 의존관계를 관리
Dependency Injection이란 무엇일까?
https://velog.io/@wlsdud2194/what-is-di
- 객체의 생성부터 관리까지 객체의 제어권이 프레임워크에 있음
- 기존 라이브러리 자원 용이 (높은 확장성)
- POJA(Plan Old Java Object)기반, Java코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용 할 수 있음
- 정형화 되어있기 때문에 일정 수준의 품질을 기대 할 수 있음
- 개발 후 유지보수 및 기능의 확장성에서 품질 보장
- 한국에서 수요가 많아 취업하는데 도움됨
- 한국에서 인기가 많기 떄문에 검색을 통해 많은 정보를 쉽게 얻을 수 있음
단점
- 내부의 기능이 많아 무거움
- 많은 기능을 탑재하여 유용하지만 습득하는데 시간이 오래걸림
- 정해진 방식대로 코드를 짜야함
- 언어나 라이브러리의 특정 버전에 따라 적용이 안될수도 있음
Django Python
장점
- 컴포넌트 재사용으로 신속한 개발가능
- 비교전 쉬운 언어인 Python을 기반으로 두기떄문에 배우기 쉬움
- 익히기 쉬운만큼 개발 속도도 빠르고, 코드 완성도도 유지하기 용이
- 웹 애플리케이션의 기능인 사용자인증, 사용자관리등
반복적으로 구현해야 하는 부분들이 기본적으로 구현되어있음
- 성공적인 도입사례(대표적으로 Instagram)
- 파이썬으로 얻을수있는 장점을 그대로 가져옴(다양한 라이브러리사용)
- 프론트와 관련된 프레임워크(React, Vue, Angular)를 사용하지 않고 DTL(Django Template Language)로 조작가능
- 데이터베이스 테이블을 models.py에 클래스로 작성하여 작업량을 줄인다.
(한번 작업하면 테이블까지 생성되어 매핑되기 때문에 편하게 작업이 가능하다.)
- 개발 비용을 크게 절감할 수 있음
단점
- 파이썬의 단점을 그대로 가져옴
(인터프리터언어이기 때문에 속도가 느린편, 실행될때까지 걸리지 않는 에러)
(코드가 수행되어야 에러를 알 수 있기때문에 모든케이스에 대해 소스코드를 검증해야함)
- 한글화된 문서가 별로없음
- 다른 웹 애플리케이션 프레임워크에 비해 성능이 떨어짐
- 기본적으로 구현된 기능들이 많기때문에 커스텀하기 어려움
- ORM(Object Relational Mapping) 기반이기 때문에 문법적어려움존재
(언어가 문법적으로 어려운게 아니라 구축하는 과정에서 원하는대로 기능을 구현하는데 어렵다는말 같음)
그 외 특징
- 앞서 설명한 MVC패턴이 아닌 MTV패턴을 사용
장고를 왜 사용할까?(특징, 장단점)
hmungto.tistory.com/302
Node.JS Java Script
장점
- 실시간으로 입출력이 번번한 애플리케이션에 적합
- 사용자의 요청은 한곳에서 받지만 작업은 실질적으로 멀티쓰레드로 운영하여 결과 구현
- 대규모 프로그램을 개발하기 용이
- 새로운 언어를 습득하지 않고 원래 자바스크립트와 동일하게 사용해서 서버 관리 기술을 빠르게 향상 할 수 있음
(근데 이건 내가 자바스크립트를 할 줄 몰라서 적용되는 장점은 아닐듯)
- 이벤트기반 비동기식이라 서버 무리가 적음
Single-Thread non-blocking I/O 이벤트기반 비동기식이란?
푸드코트의 경우 주문은 한곳에서 받지만 음식은 각 입점된 식당에서 만든다.
음식이 완성된 순서대로 각 식당에서 호출벨을 통해 손님을 부르고 손님은 음식을 픽업한다.
여기서 주문을 받는 직업은 싱글스레드이고, 요리를 완성해 벨을 호출하는 식당은 비동기 방식이다.
입력은 하나의 스레드에서 받지만 순서대로 처리 하지 않고 처리된 결과 값을 이벤트로 반환해주는 방식이 바로
Node.js가 사용하는 싱글 스레드 비동기 방식이다
- NPM(Node Package Manage)를 통한 다양한 모듈(패키지)제공
- 구글이 만드는 JavaScript 엔진을 사용하기때문에 구글에서 지속석으로 업데이트해줌
- C++로 개발된 V8 JavaScript 엔진이기 때문에 확장성이 좋음
- 간단한 로직
- 빠른 처리, 대용량
단점
- 쓰레드 하나가 무너지면 서버 전체가 다운됨. 업무 복잡도가 높다면 적합하지 않음
- 서버의 로직이 복잡한경우 콜백함수의 늪(Callback Hell)에 빠질수 있음
콜백함수의 늪(Callback Hell)?
Callback 함수가 그 결과 값을 가지고 Callback을 다시 호출하고,
그 결과 값으로 또 다시 Callback을 호출하게 되면 발생한다.
Callback 함수의 경우 익명 함수로 인라인 처리하는 경우가 많아서,
이렇게 Callback이 다시 Callback을 호출하게 되면, 코드를 눈으로 따라가기 어렵게 되고, 유지보수도 어려워진다.
그림출처 : Callback Hell in JavaScript | Asynchronous JavaScript with Callbacks in Hindi - YouTube
출처 : pitzcarraldo.medium.com/callback-hell-과-promise-pattern-471976ffd139
- 게시판같이 가벼운 I/O가 많은 웹서비스에 용이
- 하나의 작업이 오래걸리는 서비스에 적합하지 못함
- 코드가 수행되어야 에러를 알 수 있기때문에 모든케이스에 대해 소스코드를 검증해야함
그 외 특징
- 비동기 방식에 어올리는 서비스(네트워크 스트리밍,채팅 등)