오늘은 지금까지 나온 아이디어를 정리하고 발표용 PPT를 제작하며 어떤 언어, 기술 스택으로 구현해야 할지 고민하면서 생각해뒀던 언어, 기술 스택, DB의 특징과 장단점을 찾아봤습니다
언어
1. Jave
- 특징
- 객체 지향 언어이다
- 컴파일 언어인 동시에 인터프리터 언어이다
텍스트 소스를 컴파일 하여 클래스 파일로 만들고 자바 런타임이 클래스 파일을 인터프리트 하면서 실행된다
- 어떠한 운영체제라도 독립적으로 자바언어를 사용할 수 있다
- 개발자가 직접 메모리에 접근할 수 없고, 자바가 직접 관리한다
- 객체간의 상호 작용을 정의하기 때문에 필요하지 않은 객체는 생성되지 않고, 필요한 객체만 생성하여 사용한다
- 유지보수를 쉽고 빠르게 진행할 수 있다
- 장점
- 오픈소스이다
- 멀티쓰레드를 쉽게 구현할 수 있다
- 풍부한 라이브러리와 프레임 워크를 가지고 있다
- 안전성과 보안성이 좋다
- 단점
- 초기에 학습하기 어렵다
- 비교적 속도가 느리다
- 예외처리가 불편하다
- 비동기 처리를 하기 위해 추가적인 라이브러리나 프레임 워크를 사용해야 한다
2. - Jave Script
- 특징
- 객체 지향 언어이다
- 동적이며 타입을 명시할 필요가 없는 인터프리터 언어이다
- 객체지향 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있다
- HTML의 내용, 속성, 스타일을 변경 할 수 있다
- 동일한 언어를 사용하여 전체 애플리케이션 스택을 개발할 수 있다
- 이벤트를 처리하고 사용자와의 상호작용을 가능하게 함
- 장점
- 한 언어로 여러가지 프로그래밍 기법을 다룰 수 있다
- 텍스트 에디터, IDE 같은 것을 설치할 필요없이 브라우저에서 실행할 수 있다
- 결과를 인터넷 브라우저 화면으로 볼 수 있어 편리하다
- 클라이언트 측 개발에서 강력하고 유연한 언어이다
- 단점
- 다양한 브라우저와 버전에 따라 자바스크립트의 동작이 다를 수 있다
- 클라이언트 측에서 실행되는 자바스크립트는 사용자의 브라우저에서 실행되므로, 보안 취약성에 노출될 수 있다
- 비교적 속도가 느리다
- 자바스크립트를 사용하여 개발한 애플리케이션은 웹 브라우저가 필요하고, 웹 브라우저에서 지원되지 않는 환경에서는 실행할 수 없다
기술 스택
Front-end
페이스 북이 개발한 오픈 소스 모바일 애플리케이션 프레임워크
- 장점 😁
- 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/리액트-네이티브-앱을-위한-최고의-백엔드-플랫폼/
효율적이고 확장 가능한 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
2. SQLite
- 안드로이드의 내장 데이터베이스
- 장점
- 경량화된 데이터베이스 엔진으로, 안드로이드에서도 빠르게 동작합니다.
- 안드로이드에서 지원하는 내장 데이터베이스로, 별도의 데이터베이스 솔루션을 개발하거나 구매할 필요가 없어지며, 앱 개발 속도와 효율성을 높일 수 있습니다.
- 구현하기 쉽고 관리하기도 간단합니다.
- 모바일 기기와 같은 리소스가 제한된 환경에서도 안정적인 데이터베이스 솔루션을 제공할 수 있습니다.
- 데이터의 ACID 특성을 제공하여 데이터 일관성을 보장할 수 있습니다.
- 다른 데이터베이스 솔루션에 비해 더 적은 메모리 사용량과 디스크 공간을 필요로 합니다.
- 단점
- 대규모 데이터 처리에는 적합하지 않습니다.
- 동시에 여러 사용자가 데이터베이스를 접근하는 환경에서는 성능이 저하될 수 있습니다.
- 일부 고급 기능(예: 스토어드 프로시저)을 지원하지 않습니다.
- 데이터 타입이 제한적이며, 정교한 데이터 처리에는 한계가 있습니다.
3. Maria DB
- 장점
- 실행 프로그램들과 유틸리티는 모두 MySQL과 이름이 동일하며 호환된다
- 무료이다!
- 단순한 데이터 트랜잭션에 뛰어남.
- 단점
- 생태계가 다소 부족하다
- MySQL에 특정 기능을 의존하는 애플리케이션의 경우 호환성 문제가 발생할 수 있다