7/8 Project 언어, 기술스택 선택

JK·2023년 7월 8일
0

오늘은 지금까지 나온 아이디어를 정리하고 발표용 PPT를 제작하며 어떤 언어, 기술 스택으로 구현해야 할지 고민하면서 생각해뒀던 언어, 기술 스택, DB의 특징과 장단점을 찾아봤습니다

언어

1. Jave

  • 특징
    • 객체 지향 언어이다
    • 컴파일 언어인 동시에 인터프리터 언어이다
      텍스트 소스를 컴파일 하여 클래스 파일로 만들고 자바 런타임이 클래스 파일을 인터프리트 하면서 실행된다
    • 어떠한 운영체제라도 독립적으로 자바언어를 사용할 수 있다
    • 개발자가 직접 메모리에 접근할 수 없고, 자바가 직접 관리한다
    • 객체간의 상호 작용을 정의하기 때문에 필요하지 않은 객체는 생성되지 않고, 필요한 객체만 생성하여 사용한다
    • 유지보수를 쉽고 빠르게 진행할 수 있다
  • 장점
    • 오픈소스이다
    • 멀티쓰레드를 쉽게 구현할 수 있다
    • 풍부한 라이브러리와 프레임 워크를 가지고 있다
    • 안전성과 보안성이 좋다
  • 단점
    • 초기에 학습하기 어렵다
    • 비교적 속도가 느리다
    • 예외처리가 불편하다
    • 비동기 처리를 하기 위해 추가적인 라이브러리나 프레임 워크를 사용해야 한다

2. - Jave Script

  • 특징
    • 객체 지향 언어이다
    • 동적이며 타입을 명시할 필요가 없는 인터프리터 언어이다
    • 객체지향 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있다
    • HTML의 내용, 속성, 스타일을 변경 할 수 있다
    • 동일한 언어를 사용하여 전체 애플리케이션 스택을 개발할 수 있다
    • 이벤트를 처리하고 사용자와의 상호작용을 가능하게 함
  • 장점
    • 한 언어로 여러가지 프로그래밍 기법을 다룰 수 있다
    • 텍스트 에디터, IDE 같은 것을 설치할 필요없이 브라우저에서 실행할 수 있다
    • 결과를 인터넷 브라우저 화면으로 볼 수 있어 편리하다
    • 클라이언트 측 개발에서 강력하고 유연한 언어이다
  • 단점
    • 다양한 브라우저와 버전에 따라 자바스크립트의 동작이 다를 수 있다
    • 클라이언트 측에서 실행되는 자바스크립트는 사용자의 브라우저에서 실행되므로, 보안 취약성에 노출될 수 있다
    • 비교적 속도가 느리다
    • 자바스크립트를 사용하여 개발한 애플리케이션은 웹 브라우저가 필요하고, 웹 브라우저에서 지원되지 않는 환경에서는 실행할 수 없다

기술 스택

Front-end

1. React Native

페이스 북이 개발한 오픈 소스 모바일 애플리케이션 프레임워크

  • 장점 😁
    • ios, android를 동시에 개발 가능
    • javascript 라이브러리에 기반, 모바일 플랫폼 개발에 적합 + 강력한 커뮤니티 지원 ✅
      • 처음 앱을 개발하는 사람에게 유리
    • Object-C와 java를 통해 네이티브 렌더링 API 호출
      • Object-C : C언어에 스몰토크 스타일의 메시지 구문을 추가한 객체 지향 언어
    • 애플리케이션의 안정성과 신뢰성을 높이는 데있어서 간소화된 데이터 결합이 용이 ✅
    • 웹 확장에 유리 ✅
    • Hot Reload → 앱 개발 및 테스트를 빠르게 반복 가능 ✅
      • [redux](https://ko.redux.js.org/introduction/getting-started) : 오픈소스 자바 스크립트 라이브러리, state를 이용해 웹사이트 or 애플리케이션의 상태 관리
      • 코드를 수정한 뒤에도 애플리케이션의 상태가 사라지지 않고 변경사항 확인 가능
      • 즉, 앱을 처음부터 다시 시작하지 않고 새로운 코드 변경에 따른 사항만 표시
    • Live Reload
      • 자동 새로고침?
    • code push
      • 배포 후 패치시 심사 과정 없이 바로 업데이트 가능
    • 아키텍쳐 pattern
      • redux : funtional programming
      • mobx : object oriented programming
    • 다른 개발 툴이 필요하지 않다.
  • 단점 🥲
    • 유지보수가 힘들다.
    • 외부 라이브러리가 네이티브에 비하면 상대적으로 부족
    • 기본적인 네이티브 기능은 제공하지만 특정 플랫폼의 고급 기능에 접근할 때는 네이티브 모듈을 필요
    • 디버깅이 어려울 수 있다.→ 네이티브 앱과 자바스크립트 코드간 통신 문제 발생 가능

https://blog.back4app.com/ko/리액트-네이티브-앱을-위한-최고의-백엔드-플랫폼/

2. 1. javascript - Node.js → Nest.js

효율적이고 확장 가능한 Node.js 서버측 애플리케이션을 빌드하기 위한 프레임 워크

  • 장점
    • 자바스크립트 기반 → 프론트엔드에서도 사용
    • 모듈/컴포넌트 기반으로 프로그램을 작성함으로써 재사용성을 높임
    • IoC(Inversion of Control, 제어역전), DI(Dependency Injection, 의존성 주입), AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)와 같은 객체지향 개념을 도입
    • 데이터베이스, ORM, 설정(Configuration), 유효성 검사 등 수많은 기능을 기본 제공
    • 필요한 라이브러리를 쉽게 설치하여 기능을 확장할 수 있다.
  • 단점
    • 상대적으로 새로운 프레임워크이기 때문에 자료와 문서가 상대적으로 부족

NestJS로 배우는 백엔드 프로그래밍 : https://wikidocs.net/147787


데이터 베이스

데이터 베이스의 경우 크게 두가지로 나눠지는데 SQL과 NOSQL로 나눠지게 됩니다

1. SQL

  • SQL 데이터베이스는 Structured Query Language(구조화된 질의 언어)를 사용하여 데이터를 관리하는 데이터베이스 시스템입니다. SQL 데이터베이스는 테이블 형태로 데이터를 저장하며, 데이터베이스 스키마에 정의된 구조에 따라 데이터를 조작하고 검색할 수 있습니다
  • 장점
    • 테이블 간의 관계를 정의하여 데이터를 구조화할 수 있어서 데이터의 일관성과 무결성을 보장하며, 복잡한 데이터 관계를 표현하고 처리할 수 있다
    • SQL을 사용하여 데이터를 필터링, 정렬, 그룹화, 연산, 조인 등 다양한 작업을 수행할 수 있으며, 복잡한 데이터 검색도 가능하다
    • 사용자별로 접근 권한을 지정할 수 있다
    • ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원해서 작업의 원자성과 일관성을 보장하여 데이터의 정합성을 유지합니다
    • 쿼리 옵티마이저와 인덱스를 활용하여 데이터베이스 성능을 최적화할 수 있다
  • 단점
    • 대규모 데이터의 처리와 고성능 확장에 제한이 있을 수 있습니다
    • 상용 SQL 데이터베이스 솔루션은 비교적 높은 비용이 소요될 수 있습니다
    • 데이터베이스 스키마의 변경은 번거로울 수 있습니다
    • 정해진 스키마에 따라 데이터를 저장하므로, 데이터 모델이 유연성과 확장성을 제한할 수 있습니다

2. NOSQL

  • NoSQL 데이터베이스는 "Not Only SQL" 또는 "Non-Relational" 데이터베이스로서, 관계형 데이터베이스 모델이 아닌 다른 데이터 모델을 사용하여 데이터를 저장하고 관리하는 데이터베이스 시스템을 말합니다. NoSQL 데이터베이스는 대량의 분산 데이터 처리와 확장성을 강조하며, 유연한 데이터 구조와 스키마 없이 데이터를 저장할 수 있는 특징을 가지고 있습니다
  • 장점
    • 대규모 데이터 처리와 수평적 확장에 용이합니다
    • 스키마에 엄격한 제약이 없으므로 유연한 데이터 모델을 가지고 있습니다
    • 데이터를 키-값 쌍이나 문서 형태로 저장하므로, 단순하고 빠른 데이터 액세스가 가능합니다. 특히 키-값 저장소는 매우 빠른 읽기 및 쓰기 성능을 제공합니다
    • 비정형 데이터(문서, 그래프, 열 패밀리 등)를 처리하는 데 적합합니다
  • 단점
    • 데이터의 일관성보다는 가용성과 분할 내성을 우선시하는 특징을 가지고 있습니다. 데이터 일관성 보장에 있어서 관계형 데이터베이스에 비해 제약이 있을 수 있습니다
    • ACID(원자성, 일관성, 고립성, 지속성) 특성을 완전히 보장하지 않는 경우가 많습니다
    • 지원되는 도구, 라이브러리, 문서화 등이 상대적으로 부족할 수 있으며, 고객 지원도 한정적일 수 있습니다

nest.js 사용시 필요한 typeorm : https://orkhan.gitbook.io/typeorm/readme_ko

1. MySQL

  • 장점

    • 오픈 소스 데이터베이스 → 많이 사용하여 문서가 풍부함
    • SQL에 기반을 둔 관계형 데이터베이스
    • 다양한 OS 지원 → OS 전환이 어렵지 않다
    • 다른 DBMS에 비해서 작고 빠르다 → 단순 쿼리를 사용시 매우 빠름 → read only site에 최선의 성능
    • 인덱싱, 쿼리 최적화 캐싱 등 → 대용량 처리 가능
    • 개발 속도 빠름
    • ACID transaction을 지원 → 일관성 및 신뢰성 보장
    • 백업, 복구 기능 제공
    • aws RDS 제공 → 후에 업로드시 필요할듯?
      https://blog.naver.com/gi_balja/223042740762
  • 단점
    - 초기 설정 복잡
    - 데이터 스키마 정의시 무결성을 유지하도록 노력해야 한다
    - 성능을 위해 복제 방식 변경시 어려울 수 있음

    https://velog.io/@kwontae1313/NestJS-프로젝트-DB연결하기

2. SQLite

  • 안드로이드의 내장 데이터베이스
  • 장점
    • 경량화된 데이터베이스 엔진으로, 안드로이드에서도 빠르게 동작합니다.
    • 안드로이드에서 지원하는 내장 데이터베이스로, 별도의 데이터베이스 솔루션을 개발하거나 구매할 필요가 없어지며, 앱 개발 속도와 효율성을 높일 수 있습니다.
    • 구현하기 쉽고 관리하기도 간단합니다.
    • 모바일 기기와 같은 리소스가 제한된 환경에서도 안정적인 데이터베이스 솔루션을 제공할 수 있습니다.
    • 데이터의 ACID 특성을 제공하여 데이터 일관성을 보장할 수 있습니다.
    • 다른 데이터베이스 솔루션에 비해 더 적은 메모리 사용량과 디스크 공간을 필요로 합니다.
  • 단점
    • 대규모 데이터 처리에는 적합하지 않습니다.
    • 동시에 여러 사용자가 데이터베이스를 접근하는 환경에서는 성능이 저하될 수 있습니다.
    • 일부 고급 기능(예: 스토어드 프로시저)을 지원하지 않습니다.
    • 데이터 타입이 제한적이며, 정교한 데이터 처리에는 한계가 있습니다.

3. Maria DB

  • 장점
    • 실행 프로그램들과 유틸리티는 모두 MySQL과 이름이 동일하며 호환된다
    • 무료이다!
    • 단순한 데이터 트랜잭션에 뛰어남.
  • 단점
    • 생태계가 다소 부족하다
    • MySQL에 특정 기능을 의존하는 애플리케이션의 경우 호환성 문제가 발생할 수 있다
profile
^^

0개의 댓글

관련 채용 정보