mosh.조영현

소프트웨어는 무엇으로 만들어야 할까?


소프트웨어 개발은 다양한 언어와 도구를 사용하여 이루어집니다.

언어 또는 도구들은 특정 기업, 단체에서 만든 경우가 대부분인데, 각 언어마다 기술적 지향점, 호환성등이 많이 다릅니다.

결과물의 형태는 비슷하지만 각 언어 또는 플랫폼 끼리의 지향점과 개발 산출물, 생산성, 호환성 등은 아주 큰 차이점이 있으며, 한번 개발을 시작하면 바꾸기가 쉽지 않습니다.

따라서 처음 시작하기전 소프트웨어를 통해 얻으려는 가치와, 해결하고 싶은 문제들을 주의깊게 검토한 후, 기술 선택이 필요합니다.


포스팅 마지막에 가장 일반적으로 사용되는 언어와 플랫폼, 라이브러리등을 gpt의 도움을 받아 소개하겠습니다.

해당 표에 나와있지 않은 언어와 플랫폼들이 많음을 양해 부탁 드리며, 표를 보시면 아시겠지만, 선택지가 정말 많습니다.

어떤 기술로든 비슷한 결과물이 나올테지만, 어느정도의 비용으로 하는지, 특정 플랫폼에서 되는지, 안정성, 개발속도 등이 크게 차이가 납니다.


소프트웨어 개발에서 기술을 선택할 때는 다양한 질문과 고려 사항을 통해 최적의 도구와 플랫폼을 결정할 수 있습니다.

구현해야 하는 과제에 따라 목표의 형태를 가늠할 수 있는 질문지는 조금씩 바뀔 수 있겠지만, 다음은 흔히 쓰이는 질문지입니다.

기본 질문지

타겟 플랫폼은 무엇입니까?

Windows, macOS, iOS, Android, 웹, 크로스 플랫폼 (여러 플랫폼 지원 필요)


서버가 필요한가요? 클라이언트 사이드가 아닌 서버 단에 데이터등을 저장해야 하나요?

예: 클라우드 기반 서버, 온프레미스 서버, 아니오: 로컬 애플리케이션


산출물의 형태는 무엇인가요?

데스크탑 애플리케이션, 모바일 애플리케이션, 웹 애플리케이션, 임베디드 시스템, 게임, 데이터 분석 및 시각화


어떤 사람들이 사용하나요?

일반 소비자, 비즈니스 사용자, 개발자, 의료 전문가, 정부 기관, 특수 산업 사용자 (예: 제조업, 공학 등)


사내 시스템과 연동이 되야 하나요?

예: ERP, CRM, 데이터베이스 등과의 연동, 아니오


배포는 어떤 형태로?

웹 배포 (웹 애플리케이션), 앱 스토어 (iOS, Android), 소프트웨어 다운로드 (Windows, macOS), 패키지 매니저 (npm, PyPI, NuGet 등)


생산성이 중요한 요소인가요?

예: 빠른 개발 및 배포가 중요, 아니오


높은 신뢰도와 안정성이 중요한 요소인가?

예: 의료 기기, 금융 소프트웨어 등 높은 신뢰도 필요, 아니오

추가 고려 사항

성능 요구 사항은 무엇인가?

고성능 (실시간 처리, 대규모 데이터 처리 등), 보통 (일반 사용자 애플리케이션)


보안 요구 사항은 무엇인가?

높은 보안 (금융, 의료, 정부 기관), 일반적인 보안 수준


프로젝트의 예산과 시간 제약은 무엇인가?

짧은 개발 기간, 제한된 예산, 충분한 시간과 예산


기존 시스템과의 호환성이 중요한가?

예: 기존 기술 스택과의 통합 필요, 아니오


개발 팀의 기술 숙련도는 어떤가?

숙련된 팀: 새로운 기술 도입 가능, 초보자 팀: 학습 곡선이 완만한 기술 필요


유지 보수와 확장성은 중요한가?

예: 장기적인 유지 보수와 확장 가능성 중요, 아니오


오프라인 지원이 필요한가?

예: 인터넷 연결이 없는 상태에서도 동작, 아니오


다국어 및 현지화가 필요한가?

예: 여러 언어 지원 및 현지화 필요, 아니오


오픈 소스 사용에 대한 정책은 무엇인가?

허용됨: 오픈 소스 기술 사용 가능, 제한됨: 상용 소프트웨어 선호


심장박동기 개발을 위한 기술 선택 과정

심장박동기와 같은 의료 기기를 개발할 때는 높은 신뢰도와 안전성을 보장해야 하므로 기술 선택 과정이 매우 중요합니다.

아래는 심장박동기 개발을 위한 기술 선택 과정을 가상으로 답변하며 설명한 것입니다.

1. 타겟 플랫폼은 무엇인가?

심장박동기는 임베디드 시스템으로 작동하므로, 플랫폼은 마이크로컨트롤러와 같은 임베디드 시스템이 됩니다.

타겟 플랫폼: 임베디드 시스템 (마이크로컨트롤러)


2. 서버가 필요한가?

심장박동기 자체는 독립적으로 작동해야 하지만, 데이터를 수집하고 모니터링하기 위한 서버가 필요할 수 있습니다.

서버 필요 여부: 예 (데이터 모니터링 및 관리용)


3. 산출물의 형태는 무엇인가?

심장박동기는 임베디드 시스템에 포함된 소프트웨어입니다.

산출물 형태: 임베디드 시스템 소프트웨어


4. 어떤 사람들이 사용하나?

심장박동기는 환자와 의료 전문가가 사용합니다.

사용자: 의료 전문가, 환자


5. 사내 시스템과 연동이 되야 하나?

심장박동기 데이터는 병원의 의료 기록 시스템과 연동될 수 있습니다.

연동 필요 여부: 예 (병원 의료 기록 시스템과 연동)


6. 자동 업데이트가 되야 하나?

심장박동기 소프트웨어는 안정성과 신뢰성이 매우 중요하므로, 자동 업데이트는 신중하게 관리되어야 합니다.

자동 업데이트 필요 여부: 아니오 (필요한 경우에만 신중하게 업데이트)


7. 배포는 어떤 형태로?

심장박동기 소프트웨어는 의료 기기에 직접 배포됩니다.

배포 형태: 의료 기기 내장 배포


8. 생산성이 중요한 요소인가?

생산성보다는 높은 신뢰도와 안정성이 중요합니다.

생산성 중요성: 아니오


9. 높은 신뢰도와 안정성이 중요한 요소인가?

심장박동기는 생명과 직결된 장치이므로 매우 높은 신뢰도와 안정성이 요구됩니다.

신뢰도 및 안정성 중요성:


추가 고려 사항

성능 요구 사항은 무엇인가?

고성능 (실시간 처리, 정확한 심박 조율)


보안 요구 사항은 무엇인가?

높은 보안 (의료 데이터 보호)


프로젝트의 예산과 시간 제약은 무엇인가?

충분한 시간과 예산 (안전성과 규제 준수 보장)


기존 시스템과의 호환성이 중요한가?

예 (병원의 기존 의료 시스템과 통합)


개발 팀의 기술 숙련도는 어떤가?

숙련된 팀 (의료 기기 개발 경험자 포함)


유지 보수와 확장성은 중요한가?

예 (장기적인 유지 보수와 소프트웨어 업데이트 필요)


오프라인 지원이 필요한가?

예 (인터넷 연결 없이도 작동해야 함)


다국어 및 현지화가 필요한가?\

아니오 (주로 의료 전문가가 사용)


오픈 소스 사용에 대한 정책은 무엇인가?

제한됨 (상용 소프트웨어와 검증된 오픈 소스 사용)

심장 박동기 세부 기술 선택

심장박동기 같은 경우 수억번이 실행되는중에 1회도 에러가 나면 안되는 그런 시스템인걸 감안해서 위 질문지에 대해 가상으로 답변을 했습니다.

해당 답변을 기반으로 여러가지 기술 선택지를 뽑을 수 있습니다.

프로그래밍 언어 선택

C/C++: 성능과 하드웨어 제어에 최적화되어 있으며, 많은 임베디드 시스템에서 사용되고 있습니다.

Assembly: 매우 저수준의 하드웨어 제어가 필요한 경우 사용됩니다.

Rust: 메모리 안전성과 성능을 모두 제공하는 언어로, 최근 임베디드 시스템에서 주목받고 있습니다.


개발 도구 및 프레임워크 선택

Keil MDK: ARM 마이크로컨트롤러 개발에 널리 사용되는 도구로, 강력한 디버깅 기능을 제공합니다.

IAR Embedded Workbench: 다양한 마이크로컨트롤러를 지원하며, 높은 최적화 수준과 디버깅 기능을 갖추고 있습니다.

Eclipse with CDT: 오픈소스 개발 환경으로 유연한 플러그인 시스템과 다양한 디버깅 및 분석 도구를 지원합니다.

RTOS (Real-Time Operating System): FreeRTOS, ARM mbed OS 등 실시간 성능과 안정성을 제공하는 운영 체제.


규제 및 표준 준수

IEC 62304: 의료 기기 소프트웨어 생명 주기 프로세스 준수.

ISO 13485: 의료 기기 품질 관리 시스템 준수.

FDA: 미국에서의 의료 기기 소프트웨어 규제 준수.

EMC (Electromagnetic Compatibility): 전자파 간섭 및 내성 기준 준수.

사내 시스템과 같은 안정성 보단 생산성이 중요한 경우

전혀 다른 시스템인 사내시스템의 경우, 심장 박동기에 비해 아주 낮은 수준의 안정성을 요구할 수 있습니다.

문제가 발생할 경우 담당자가 해결 하는 형태의 방식으로 진행하고, 안정성 신뢰성 보단, 생산성을 중요시하고, 낮은 수준의 기술 숙련도가 필요할 수 있습니다.


물론, 모든 시스템에 높은 성능, 안정성, 신뢰성을 보장하면 좋겠지만, 해당 요소들은 프로젝트 예산, 기간과 비례합니다. 따라서 프로젝트 상황에 따라 적절하게 조율 하며 기술 선택을 하는게 성공적인 비지니스의 발판이 될 수 있습니다.

오버스펙은 개발기한과 비용을 늘립니다. 예시

예시 1: 간단한 계산기를 위한 고성능 프로세서 사용

상황: 간단한 숫자 계산과 사칙연산만을 수행하는 계산기를 개발.

오버스펙: 계산기 기능을 구현하기 위해 최신 고성능 프로세서와 대규모 메모리 사용.

적절한 대안: 저성능 마이크로컨트롤러나 기존의 저사양 하드웨어 사용.


예시 2: 작은 팀 프로젝트에 대규모 협업 도구 사용

상황: 3명의 개발자가 참여하는 작은 팀 프로젝트.

오버스펙: 팀원 수에 비해 Jira, Confluence, Slack, Jenkins 등의 복잡한 협업 및 CI/CD 도구를 모두 도입.

적절한 대안: Trello와 같은 간단한 프로젝트 관리 도구와 GitHub 또는 GitLab을 사용하여 기본적인 협업 및 코드 관리.


예시 3: 단순 데이터 저장을 위한 NoSQL 데이터베이스 사용

상황: 단순한 고객 정보와 주문 내역을 저장해야 하는 애플리케이션.

오버스펙: 간단한 관계형 데이터베이스로 충분한데도 불구하고, MongoDB나 Cassandra와 같은 복잡한 NoSQL 데이터베이스 사용.

적절한 대안: MySQL이나 PostgreSQL과 같은 관계형 데이터베이스 사용.


예시 4: 작은 모바일 앱에 복잡한 아키텍처 적용

상황: 작은 모바일 앱을 개발하고자 함.

오버스펙: 간단한 기능을 제공하는 앱에 MVVM, Dagger, Retrofit 등의 복잡한 아키텍처와 라이브러리 사용.

적절한 대안: 단순한 구조와 기본 라이브러리를 사용하여 유지보수와 개발을 간편하게 함.


소프트웨어 기술 선택은 프로젝트의 성공에 매우 중요한 요소입니다. 특히 외주를 줄 때는 외주 회사가 제안하는 기술이 실제로 프로젝트 요구 사항을 충족하는지 신중하게 평가해야 합니다. 외주사의 경우 실제 프로젝트에 적합한 기술보단, 해당 회사에 보유하고 있고 주력으로 밀고 있는 기술을 제안하는 경우가 많습니다. 필수적인 기술 요구 사항을 명확히 하고, 외주 회사의 경험과 제안된 기술의 적합성을 객관적으로 검토하는 것이 중요합니다. 이를 통해 불필요한 오버스펙을 피하고, 적절한 기술 선택으로 프로젝트의 성공 가능성을 높여야 합니다.

*자사의 경우 보유 기술이 아닌 경우, 자사가 진행하기 적합하지 않은 경우 관련 내용을 상세하게 설명 드리고 고객께 가장 적합한 내용을 권해드립니다.

소프트웨어 기술 선택 시 주의할 점

1. 개발자의 기술 스택 이해하기

특화된 기술: 개발자들이 매우 잘 아는 기술로, 그들이 가장 능숙하게 다룰 수 있는 기술입니다.

보통 수준의 기술: 개발자들이 일정 수준의 경험을 가진 기술로, 능숙하진 않지만 작업을 수행할 수 있는 기술입니다.

범위의 차이: 일부 개발자는 좁고 깊게 특화된 기술을 가지며, 다른 개발자는 다양한 기술에 넓게 경험을 가진 경우도 있습니다. 외주 개발사들은 이런 개발자들을 보유하고 있는 회사입니다.


2. 외주 회사의 기술 유도

특정 기술 유도: 외주 회사가 자신들이 잘 다루는 기술로 프로젝트를 유도하는 경우가 있습니다.

최고라고 포장: 자신의 기술을 과장하여 최고라고 주장하는 경우가 있습니다.


3. 기술 선택 시 주의사항

필수 요구 사항 확인: 프로젝트에 반드시 필요한 기술 요구 사항을 명확히 정의합니다.

기술 적합성 검토: 각 기술이 프로젝트의 요구 사항을 얼마나 잘 충족하는지 검토합니다.

외주 회사의 경험 검토: 외주 회사가 제안하는 기술에 대한 경험과 성공 사례를 검토합니다.

객관적인 평가: 외주 회사의 주장에 대해 객관적으로 평가하고, 필요시 외부 전문가의 의견을 구합니다.

장기적인 유지보수: 선택한 기술이 장기적으로 유지보수와 확장성에 적합한지 고려합니다.


4. 외주 계약 시 주의사항

투명성: 외주 회사와의 계약에서 기술 선택의 이유와 기술 스택에 대한 투명성을 요구합니다.

기술 문서화: 프로젝트의 기술적 요구 사항과 선택된 기술의 이유를 문서화합니다.

의사소통: 개발 과정에서 지속적인 의사소통을 통해 기술 선택이 적절한지 모니터링합니다.

리스크 관리: 기술 선택에 따른 리스크를 식별하고 관리 계획을 세웁니다.


5. 기술 선택 과정에서 발생할 수 있는 문제

기술 부족: 특정 기술에 대한 외주 회사의 경험 부족으로 인한 문제 발생.

비용 증가: 필요 이상의 복잡한 기술 선택으로 인한 개발 비용과 시간 증가.

유지보수 어려움: 적절하지 않은 기술 선택으로 인한 장기적인 유지보수 문제 발생.

기술 종속: 특정 기술이나 외주 회사에 지나치게 종속되는 문제 발생.


각 기술은 고유한 장단점을 가지고 있으며, 위에 나열한 모든 기술을 실무적으로 다루는 전문가는 있기가 어렵고, 각 기술에 최적화된 다양한 회사 또는 전문가가 존재합니다.


프로젝트의 요구 사항에 따라 최적의 기술을 선택하는 것이 중요합니다. 기술 선택 시에는 최대한 깊이 고민해보고, 각 기술의 특성을 면밀히 분석하여 프로젝트에 가장 적합한 기술을 선택하시길 권해드립니다. 또한, 전문가와 많은 이야기를 나누는 것이 큰 도움이 될 수 있습니다. 프로젝트 기술 선택은 프로젝트의 시작이며, 가장 중요한 첫걸음입니다.


위 포스팅 관련해서 1:1로 상담해 보고 싶으시다면 클릭해주세요!






프로그래밍 언어

언어/플랫폼/라이브러리

제작사

지향점

호환성

C

ANSI

성능, 하드웨어 제어

크로스플랫폼

C++

ISO

객체지향, 성능

크로스플랫폼

C#

Microsoft

생산성, .NET 통합

Windows, Linux, macOS (.NET Core/5+)

Java

Oracle

객체지향, 플랫폼 독립성 (JVM)

크로스플랫폼

Python

Python Software Foundation

생산성, 가독성

크로스플랫폼

JavaScript

Netscape, Mozilla Foundation

웹 개발, 이벤트 기반 프로그래밍

크로스플랫폼

TypeScript

Microsoft

JavaScript의 정적 타입 지원

크로스플랫폼

Ruby

Yukihiro Matsumoto

생산성, 간결함

크로스플랫폼

PHP

The PHP Group

서버 사이드 웹 개발

크로스플랫폼

Swift

Apple

성능, 안전성

iOS, macOS

Objective-C

Apple

객체지향, NeXTSTEP 및 macOS 개발

iOS, macOS

Kotlin

JetBrains

현대적, 간결함

Android, JVM

Go

Google

성능, 병렬 처리

크로스플랫폼

Rust

Mozilla Foundation

성능, 메모리 안전성

크로스플랫폼

Dart

Google

프런트엔드, 성능

크로스플랫폼

Scala

EPFL

함수형, 객체지향

크로스플랫폼 (JVM)

Perl

Larry Wall

텍스트 처리, 스크립팅

크로스플랫폼

R

R Foundation

통계, 데이터 분석

크로스플랫폼

Haskell

Haskell Committee

함수형 프로그래밍

크로스플랫폼

Lua

PUC-Rio

스크립팅, 임베디드 시스템

크로스플랫폼

MATLAB

MathWorks

수학, 과학 계산

Windows, macOS, Linux

VBA

Microsoft

Microsoft Office 자동화

Windows, macOS

Shell Scripting

GNU Project, 기타

시스템 관리, 자동화

Unix 계열, Windows (WSL)



윈도우 개발 플랫폼 및 라이브러리

언어/플랫폼/라이브러리

제작사

지향점

호환성

.NET Framework / .NET Core / .NET 5+

Microsoft

범용 개발 플랫폼

Windows, Linux, macOS (.NET Core/5+)

WinForms

Microsoft

데스크탑 애플리케이션 개발

Windows

WPF

Microsoft

복잡하고 화려한 UI

Windows

UWP

Microsoft

Windows 10과 이후 버전용 앱 개발

Windows 10 이상

Win32 API

Microsoft

전통적인 Windows API

Windows

MFC

Microsoft

C++ 기반 애플리케이션 개발

Windows

DirectX

Microsoft

고성능 그래픽스 및 게임 개발

Windows

XNA

Microsoft

게임 개발

Windows, Xbox

Unity

Unity Technologies

게임 개발

크로스플랫폼



맥 개발 플랫폼 및 라이브러리

언어/플랫폼/라이브러리

제작사

지향점

호환성

Cocoa

Apple

네이티브 macOS 애플리케이션 개발

macOS

Cocoa Touch

Apple

네이티브 iOS 애플리케이션 개발

iOS, macOS

AppKit

Apple

macOS GUI 개발

macOS

SwiftUI

Apple

현대적 UI 개발

iOS, macOS

SpriteKit

Apple

2D 게임 개발

iOS, macOS

SceneKit

Apple

3D 그래픽스

iOS, macOS

Metal

Apple

고성능 그래픽스

iOS, macOS

Core Data

Apple

데이터 관리 및 영속성

iOS, macOS



크로스플랫폼 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

React Native

Facebook

모바일 크로스플랫폼 앱 개발

iOS, Android

Flutter

Google

모바일 크로스플랫폼 앱 개발

iOS, Android, 웹, 데스크탑

Xamarin

Microsoft

모바일 크로스플랫폼 앱 개발

iOS, Android, Windows

Electron

GitHub

데스크탑 크로스플랫폼 앱 개발

Windows, macOS, Linux

Qt

Qt Company

크로스플랫폼 GUI 개발

Windows, macOS, Linux

MAUI

Microsoft

크로스플랫폼 UI 개발

Windows, macOS, iOS, Android

Kivy

Kivy Organization

크로스플랫폼 Python GUI 프레임워크

크로스플랫폼

PhoneGap / Cordova

Adobe

모바일 크로스플랫폼 앱 개발

iOS, Android

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼



웹 개발 프론트엔드

언어/플랫폼/라이브러리

제작사

지향점

호환성

HTML

W3C

웹 페이지 구조

크로스플랫폼

CSS

W3C

웹 페이지 스타일

크로스플랫폼

JavaScript

Netscape, Mozilla Foundation

웹 페이지 동적 동작

크로스플랫폼

TypeScript

Microsoft

JavaScript의 정적 타입 지원

크로스플랫폼

React

Facebook

UI 컴포넌트 기반 프레임워크

크로스플랫폼

Vue.js

Evan You

경량화된 UI 프레임워크

크로스플랫폼

Angular

Google

전체적인 웹 애플리케이션 프레임워크

크로스플랫폼

Svelte

Svelte Society

컴파일러 기반 UI 프레임워크

크로스플랫폼

Bootstrap

Twitter

CSS 프레임워크

크로스플랫폼

Tailwind CSS

Tailwind Labs

유틸리티 퍼스트 CSS 프레임워크

크로스플랫폼



웹 개발 백엔드

언어/플랫폼/라이브러리

제작사

지향점

호환성

Node.js

OpenJS Foundation

JavaScript 런타임 환경

크로스플랫폼

Express

OpenJS Foundation

Node.js 웹 프레임워크

크로스플랫폼

Django

Django Software Foundation

Python 웹 프레임워크

크로스플랫폼

Flask

Pallets Projects

Python 마이크로 웹 프레임워크

크로스플랫폼

Ruby on Rails

David Heinemeier Hansson

Ruby 웹 프레임워크

크로스플랫폼

Laravel

Taylor Otwell

PHP 웹 프레임워크

크로스플랫폼

Spring

Pivotal Software

Java 웹 프레임워크

크로스플랫폼

ASP.NET

Microsoft

.NET 웹 프레임워크

Windows, Linux, macOS (.NET Core/5+)

NestJS

Kamil Myśliwiec

Node.js 웹 프레임워크

크로스플랫폼

Koa.js

OpenJS Foundation

Node.js 웹 프레임워크

크로스플랫폼

Phoenix

Phoenix Team

Elixir 웹 프레임워크

크로스플랫폼



데이터베이스

언어/플랫폼/라이브러리

제작사

지향점

호환성

MySQL

Oracle

관계형 데이터베이스

크로스플랫폼

PostgreSQL

PostgreSQL Global Development Group

관계형 데이터베이스

크로스플랫폼

SQLite

D. Richard Hipp

임베디드 관계형 데이터베이스

크로스플랫폼

MongoDB

MongoDB, Inc.

NoSQL 데이터베이스

크로스플랫폼

Redis

Redis Ltd.

인메모리 데이터베이스

크로스플랫폼

Cassandra

Apache Software Foundation

NoSQL 데이터베이스

크로스플랫폼

MariaDB

MariaDB Corporation

관계형 데이터베이스

크로스플랫폼

Firebase Firestore

Google

NoSQL 클라우드 데이터베이스

크로스플랫폼

Oracle Database

Oracle

관계형 데이터베이스

크로스플랫폼

Microsoft SQL Server

Microsoft

관계형 데이터베이스

Windows, Linux

DynamoDB

Amazon Web Services

NoSQL 클라우드 데이터베이스

크로스플랫폼

CouchDB

Apache Software Foundation

NoSQL 데이터베이스

크로스플랫폼



게임 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼

Godot

Godot Engine

게임 개발

크로스플랫폼

Cocos2d

Cocos

게임 개발

크로스플랫폼

CryEngine

Crytek

게임 개발

크로스플랫폼

Panda3D

Carnegie Mellon University

게임 개발

크로스플랫폼

GameMaker Studio

YoYo Games

게임 개발

크로스플랫폼

Phaser

Photon Storm

HTML5 게임 개발

크로스플랫폼



데이터 과학 및 머신러닝

언어/플랫폼/라이브러리

제작사

지향점

호환성

Python

Python Software Foundation

데이터 과학, 머신러닝

크로스플랫폼

R

R Foundation

통계, 데이터 분석

크로스플랫폼

Julia

Julia Computing

데이터 과학, 고성능 컴퓨팅

크로스플랫폼

SAS

SAS Institute

통계, 데이터 분석

크로스플랫폼

MATLAB

MathWorks

수학, 과학 계산

Windows, macOS,



임베디드 시스템

언어/플랫폼/라이브러리

제작사

지향점

호환성

C

ANSI

성능, 하드웨어 제어

크로스플랫폼

C++

ISO

객체지향, 성능

크로스플랫폼

Assembly

각종 하드웨어 제조사

하드웨어 제어

크로스플랫폼

Rust

Mozilla Foundation

성능, 메모리 안전성

크로스플랫폼

Python

Python Software Foundation

임베디드 시스템 스크립팅

크로스플랫폼

Arduino

Arduino

하드웨어 제어, 프로토타이핑

Arduino 하드웨어

Raspberry Pi

Raspberry Pi Foundation

교육, 프로토타이핑

Raspberry Pi 하드웨어



클라우드 플랫폼 및 도구

언어/플랫폼/라이브러리

제작사

지향점

호환성

AWS (Amazon Web Services)

Amazon

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Google Cloud Platform

Google

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Microsoft Azure

Microsoft

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Heroku

Salesforce

클라우드 애플리케이션 배포

크로스플랫폼

Netlify

Netlify

정적 웹사이트 호스팅

크로스플랫폼

Vercel

Vercel

정적 웹사이트 호스팅

크로스플랫폼

Docker

Docker, Inc.

컨테이너화

크로스플랫폼

Kubernetes

Google

컨테이너 오케스트레이션

크로스플랫폼



모바일 앱 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

Android Studio

Google

Android 네이티브 앱 개발

Android

Xcode

Apple

iOS, macOS 네이티브 앱 개발

iOS, macOS

React Native

Facebook

모바일 크로스플랫폼 앱 개발

iOS, Android

Flutter

Google

모바일 크로스플랫폼 앱 개발

iOS, Android, 웹, 데스크탑

Ionic

Ionic

모바일 크로스플랫폼 앱 개발

iOS, Android

PhoneGap / Cordova

Adobe

모바일 크로스플랫폼 앱 개발

iOS, Android

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼


위시켓 프리모아 웹개발 앱개발 소프트웨어개발 크몽 외주개발 기술선택가이드

소프트웨어는 무엇으로 만들어야 할까?


소프트웨어 개발은 다양한 언어와 도구를 사용하여 이루어집니다.

언어 또는 도구들은 특정 기업, 단체에서 만든 경우가 대부분인데, 각 언어마다 기술적 지향점, 호환성등이 많이 다릅니다.

결과물의 형태는 비슷하지만 각 언어 또는 플랫폼 끼리의 지향점과 개발 산출물, 생산성, 호환성 등은 아주 큰 차이점이 있으며, 한번 개발을 시작하면 바꾸기가 쉽지 않습니다.

따라서 처음 시작하기전 소프트웨어를 통해 얻으려는 가치와, 해결하고 싶은 문제들을 주의깊게 검토한 후, 기술 선택이 필요합니다.


포스팅 마지막에 가장 일반적으로 사용되는 언어와 플랫폼, 라이브러리등을 gpt의 도움을 받아 소개하겠습니다.

해당 표에 나와있지 않은 언어와 플랫폼들이 많음을 양해 부탁 드리며, 표를 보시면 아시겠지만, 선택지가 정말 많습니다.

어떤 기술로든 비슷한 결과물이 나올테지만, 어느정도의 비용으로 하는지, 특정 플랫폼에서 되는지, 안정성, 개발속도 등이 크게 차이가 납니다.


소프트웨어 개발에서 기술을 선택할 때는 다양한 질문과 고려 사항을 통해 최적의 도구와 플랫폼을 결정할 수 있습니다.

구현해야 하는 과제에 따라 목표의 형태를 가늠할 수 있는 질문지는 조금씩 바뀔 수 있겠지만, 다음은 흔히 쓰이는 질문지입니다.

기본 질문지

타겟 플랫폼은 무엇입니까?

Windows, macOS, iOS, Android, 웹, 크로스 플랫폼 (여러 플랫폼 지원 필요)


서버가 필요한가요? 클라이언트 사이드가 아닌 서버 단에 데이터등을 저장해야 하나요?

예: 클라우드 기반 서버, 온프레미스 서버, 아니오: 로컬 애플리케이션


산출물의 형태는 무엇인가요?

데스크탑 애플리케이션, 모바일 애플리케이션, 웹 애플리케이션, 임베디드 시스템, 게임, 데이터 분석 및 시각화


어떤 사람들이 사용하나요?

일반 소비자, 비즈니스 사용자, 개발자, 의료 전문가, 정부 기관, 특수 산업 사용자 (예: 제조업, 공학 등)


사내 시스템과 연동이 되야 하나요?

예: ERP, CRM, 데이터베이스 등과의 연동, 아니오


배포는 어떤 형태로?

웹 배포 (웹 애플리케이션), 앱 스토어 (iOS, Android), 소프트웨어 다운로드 (Windows, macOS), 패키지 매니저 (npm, PyPI, NuGet 등)


생산성이 중요한 요소인가요?

예: 빠른 개발 및 배포가 중요, 아니오


높은 신뢰도와 안정성이 중요한 요소인가?

예: 의료 기기, 금융 소프트웨어 등 높은 신뢰도 필요, 아니오

추가 고려 사항

성능 요구 사항은 무엇인가?

고성능 (실시간 처리, 대규모 데이터 처리 등), 보통 (일반 사용자 애플리케이션)


보안 요구 사항은 무엇인가?

높은 보안 (금융, 의료, 정부 기관), 일반적인 보안 수준


프로젝트의 예산과 시간 제약은 무엇인가?

짧은 개발 기간, 제한된 예산, 충분한 시간과 예산


기존 시스템과의 호환성이 중요한가?

예: 기존 기술 스택과의 통합 필요, 아니오


개발 팀의 기술 숙련도는 어떤가?

숙련된 팀: 새로운 기술 도입 가능, 초보자 팀: 학습 곡선이 완만한 기술 필요


유지 보수와 확장성은 중요한가?

예: 장기적인 유지 보수와 확장 가능성 중요, 아니오


오프라인 지원이 필요한가?

예: 인터넷 연결이 없는 상태에서도 동작, 아니오


다국어 및 현지화가 필요한가?

예: 여러 언어 지원 및 현지화 필요, 아니오


오픈 소스 사용에 대한 정책은 무엇인가?

허용됨: 오픈 소스 기술 사용 가능, 제한됨: 상용 소프트웨어 선호


심장박동기 개발을 위한 기술 선택 과정

심장박동기와 같은 의료 기기를 개발할 때는 높은 신뢰도와 안전성을 보장해야 하므로 기술 선택 과정이 매우 중요합니다.

아래는 심장박동기 개발을 위한 기술 선택 과정을 가상으로 답변하며 설명한 것입니다.

1. 타겟 플랫폼은 무엇인가?

심장박동기는 임베디드 시스템으로 작동하므로, 플랫폼은 마이크로컨트롤러와 같은 임베디드 시스템이 됩니다.

타겟 플랫폼: 임베디드 시스템 (마이크로컨트롤러)


2. 서버가 필요한가?

심장박동기 자체는 독립적으로 작동해야 하지만, 데이터를 수집하고 모니터링하기 위한 서버가 필요할 수 있습니다.

서버 필요 여부: 예 (데이터 모니터링 및 관리용)


3. 산출물의 형태는 무엇인가?

심장박동기는 임베디드 시스템에 포함된 소프트웨어입니다.

산출물 형태: 임베디드 시스템 소프트웨어


4. 어떤 사람들이 사용하나?

심장박동기는 환자와 의료 전문가가 사용합니다.

사용자: 의료 전문가, 환자


5. 사내 시스템과 연동이 되야 하나?

심장박동기 데이터는 병원의 의료 기록 시스템과 연동될 수 있습니다.

연동 필요 여부: 예 (병원 의료 기록 시스템과 연동)


6. 자동 업데이트가 되야 하나?

심장박동기 소프트웨어는 안정성과 신뢰성이 매우 중요하므로, 자동 업데이트는 신중하게 관리되어야 합니다.

자동 업데이트 필요 여부: 아니오 (필요한 경우에만 신중하게 업데이트)


7. 배포는 어떤 형태로?

심장박동기 소프트웨어는 의료 기기에 직접 배포됩니다.

배포 형태: 의료 기기 내장 배포


8. 생산성이 중요한 요소인가?

생산성보다는 높은 신뢰도와 안정성이 중요합니다.

생산성 중요성: 아니오


9. 높은 신뢰도와 안정성이 중요한 요소인가?

심장박동기는 생명과 직결된 장치이므로 매우 높은 신뢰도와 안정성이 요구됩니다.

신뢰도 및 안정성 중요성:


추가 고려 사항

성능 요구 사항은 무엇인가?

고성능 (실시간 처리, 정확한 심박 조율)


보안 요구 사항은 무엇인가?

높은 보안 (의료 데이터 보호)


프로젝트의 예산과 시간 제약은 무엇인가?

충분한 시간과 예산 (안전성과 규제 준수 보장)


기존 시스템과의 호환성이 중요한가?

예 (병원의 기존 의료 시스템과 통합)


개발 팀의 기술 숙련도는 어떤가?

숙련된 팀 (의료 기기 개발 경험자 포함)


유지 보수와 확장성은 중요한가?

예 (장기적인 유지 보수와 소프트웨어 업데이트 필요)


오프라인 지원이 필요한가?

예 (인터넷 연결 없이도 작동해야 함)


다국어 및 현지화가 필요한가?\

아니오 (주로 의료 전문가가 사용)


오픈 소스 사용에 대한 정책은 무엇인가?

제한됨 (상용 소프트웨어와 검증된 오픈 소스 사용)

심장 박동기 세부 기술 선택

심장박동기 같은 경우 수억번이 실행되는중에 1회도 에러가 나면 안되는 그런 시스템인걸 감안해서 위 질문지에 대해 가상으로 답변을 했습니다.

해당 답변을 기반으로 여러가지 기술 선택지를 뽑을 수 있습니다.

프로그래밍 언어 선택

C/C++: 성능과 하드웨어 제어에 최적화되어 있으며, 많은 임베디드 시스템에서 사용되고 있습니다.

Assembly: 매우 저수준의 하드웨어 제어가 필요한 경우 사용됩니다.

Rust: 메모리 안전성과 성능을 모두 제공하는 언어로, 최근 임베디드 시스템에서 주목받고 있습니다.


개발 도구 및 프레임워크 선택

Keil MDK: ARM 마이크로컨트롤러 개발에 널리 사용되는 도구로, 강력한 디버깅 기능을 제공합니다.

IAR Embedded Workbench: 다양한 마이크로컨트롤러를 지원하며, 높은 최적화 수준과 디버깅 기능을 갖추고 있습니다.

Eclipse with CDT: 오픈소스 개발 환경으로 유연한 플러그인 시스템과 다양한 디버깅 및 분석 도구를 지원합니다.

RTOS (Real-Time Operating System): FreeRTOS, ARM mbed OS 등 실시간 성능과 안정성을 제공하는 운영 체제.


규제 및 표준 준수

IEC 62304: 의료 기기 소프트웨어 생명 주기 프로세스 준수.

ISO 13485: 의료 기기 품질 관리 시스템 준수.

FDA: 미국에서의 의료 기기 소프트웨어 규제 준수.

EMC (Electromagnetic Compatibility): 전자파 간섭 및 내성 기준 준수.

사내 시스템과 같은 안정성 보단 생산성이 중요한 경우

전혀 다른 시스템인 사내시스템의 경우, 심장 박동기에 비해 아주 낮은 수준의 안정성을 요구할 수 있습니다.

문제가 발생할 경우 담당자가 해결 하는 형태의 방식으로 진행하고, 안정성 신뢰성 보단, 생산성을 중요시하고, 낮은 수준의 기술 숙련도가 필요할 수 있습니다.


물론, 모든 시스템에 높은 성능, 안정성, 신뢰성을 보장하면 좋겠지만, 해당 요소들은 프로젝트 예산, 기간과 비례합니다. 따라서 프로젝트 상황에 따라 적절하게 조율 하며 기술 선택을 하는게 성공적인 비지니스의 발판이 될 수 있습니다.

오버스펙은 개발기한과 비용을 늘립니다. 예시

예시 1: 간단한 계산기를 위한 고성능 프로세서 사용

상황: 간단한 숫자 계산과 사칙연산만을 수행하는 계산기를 개발.

오버스펙: 계산기 기능을 구현하기 위해 최신 고성능 프로세서와 대규모 메모리 사용.

적절한 대안: 저성능 마이크로컨트롤러나 기존의 저사양 하드웨어 사용.


예시 2: 작은 팀 프로젝트에 대규모 협업 도구 사용

상황: 3명의 개발자가 참여하는 작은 팀 프로젝트.

오버스펙: 팀원 수에 비해 Jira, Confluence, Slack, Jenkins 등의 복잡한 협업 및 CI/CD 도구를 모두 도입.

적절한 대안: Trello와 같은 간단한 프로젝트 관리 도구와 GitHub 또는 GitLab을 사용하여 기본적인 협업 및 코드 관리.


예시 3: 단순 데이터 저장을 위한 NoSQL 데이터베이스 사용

상황: 단순한 고객 정보와 주문 내역을 저장해야 하는 애플리케이션.

오버스펙: 간단한 관계형 데이터베이스로 충분한데도 불구하고, MongoDB나 Cassandra와 같은 복잡한 NoSQL 데이터베이스 사용.

적절한 대안: MySQL이나 PostgreSQL과 같은 관계형 데이터베이스 사용.


예시 4: 작은 모바일 앱에 복잡한 아키텍처 적용

상황: 작은 모바일 앱을 개발하고자 함.

오버스펙: 간단한 기능을 제공하는 앱에 MVVM, Dagger, Retrofit 등의 복잡한 아키텍처와 라이브러리 사용.

적절한 대안: 단순한 구조와 기본 라이브러리를 사용하여 유지보수와 개발을 간편하게 함.


소프트웨어 기술 선택은 프로젝트의 성공에 매우 중요한 요소입니다. 특히 외주를 줄 때는 외주 회사가 제안하는 기술이 실제로 프로젝트 요구 사항을 충족하는지 신중하게 평가해야 합니다. 외주사의 경우 실제 프로젝트에 적합한 기술보단, 해당 회사에 보유하고 있고 주력으로 밀고 있는 기술을 제안하는 경우가 많습니다. 필수적인 기술 요구 사항을 명확히 하고, 외주 회사의 경험과 제안된 기술의 적합성을 객관적으로 검토하는 것이 중요합니다. 이를 통해 불필요한 오버스펙을 피하고, 적절한 기술 선택으로 프로젝트의 성공 가능성을 높여야 합니다.

*자사의 경우 보유 기술이 아닌 경우, 자사가 진행하기 적합하지 않은 경우 관련 내용을 상세하게 설명 드리고 고객께 가장 적합한 내용을 권해드립니다.

소프트웨어 기술 선택 시 주의할 점

1. 개발자의 기술 스택 이해하기

특화된 기술: 개발자들이 매우 잘 아는 기술로, 그들이 가장 능숙하게 다룰 수 있는 기술입니다.

보통 수준의 기술: 개발자들이 일정 수준의 경험을 가진 기술로, 능숙하진 않지만 작업을 수행할 수 있는 기술입니다.

범위의 차이: 일부 개발자는 좁고 깊게 특화된 기술을 가지며, 다른 개발자는 다양한 기술에 넓게 경험을 가진 경우도 있습니다. 외주 개발사들은 이런 개발자들을 보유하고 있는 회사입니다.


2. 외주 회사의 기술 유도

특정 기술 유도: 외주 회사가 자신들이 잘 다루는 기술로 프로젝트를 유도하는 경우가 있습니다.

최고라고 포장: 자신의 기술을 과장하여 최고라고 주장하는 경우가 있습니다.


3. 기술 선택 시 주의사항

필수 요구 사항 확인: 프로젝트에 반드시 필요한 기술 요구 사항을 명확히 정의합니다.

기술 적합성 검토: 각 기술이 프로젝트의 요구 사항을 얼마나 잘 충족하는지 검토합니다.

외주 회사의 경험 검토: 외주 회사가 제안하는 기술에 대한 경험과 성공 사례를 검토합니다.

객관적인 평가: 외주 회사의 주장에 대해 객관적으로 평가하고, 필요시 외부 전문가의 의견을 구합니다.

장기적인 유지보수: 선택한 기술이 장기적으로 유지보수와 확장성에 적합한지 고려합니다.


4. 외주 계약 시 주의사항

투명성: 외주 회사와의 계약에서 기술 선택의 이유와 기술 스택에 대한 투명성을 요구합니다.

기술 문서화: 프로젝트의 기술적 요구 사항과 선택된 기술의 이유를 문서화합니다.

의사소통: 개발 과정에서 지속적인 의사소통을 통해 기술 선택이 적절한지 모니터링합니다.

리스크 관리: 기술 선택에 따른 리스크를 식별하고 관리 계획을 세웁니다.


5. 기술 선택 과정에서 발생할 수 있는 문제

기술 부족: 특정 기술에 대한 외주 회사의 경험 부족으로 인한 문제 발생.

비용 증가: 필요 이상의 복잡한 기술 선택으로 인한 개발 비용과 시간 증가.

유지보수 어려움: 적절하지 않은 기술 선택으로 인한 장기적인 유지보수 문제 발생.

기술 종속: 특정 기술이나 외주 회사에 지나치게 종속되는 문제 발생.


각 기술은 고유한 장단점을 가지고 있으며, 위에 나열한 모든 기술을 실무적으로 다루는 전문가는 있기가 어렵고, 각 기술에 최적화된 다양한 회사 또는 전문가가 존재합니다.


프로젝트의 요구 사항에 따라 최적의 기술을 선택하는 것이 중요합니다. 기술 선택 시에는 최대한 깊이 고민해보고, 각 기술의 특성을 면밀히 분석하여 프로젝트에 가장 적합한 기술을 선택하시길 권해드립니다. 또한, 전문가와 많은 이야기를 나누는 것이 큰 도움이 될 수 있습니다. 프로젝트 기술 선택은 프로젝트의 시작이며, 가장 중요한 첫걸음입니다.


위 포스팅 관련해서 1:1로 상담해 보고 싶으시다면 클릭해주세요!






프로그래밍 언어

언어/플랫폼/라이브러리

제작사

지향점

호환성

C

ANSI

성능, 하드웨어 제어

크로스플랫폼

C++

ISO

객체지향, 성능

크로스플랫폼

C#

Microsoft

생산성, .NET 통합

Windows, Linux, macOS (.NET Core/5+)

Java

Oracle

객체지향, 플랫폼 독립성 (JVM)

크로스플랫폼

Python

Python Software Foundation

생산성, 가독성

크로스플랫폼

JavaScript

Netscape, Mozilla Foundation

웹 개발, 이벤트 기반 프로그래밍

크로스플랫폼

TypeScript

Microsoft

JavaScript의 정적 타입 지원

크로스플랫폼

Ruby

Yukihiro Matsumoto

생산성, 간결함

크로스플랫폼

PHP

The PHP Group

서버 사이드 웹 개발

크로스플랫폼

Swift

Apple

성능, 안전성

iOS, macOS

Objective-C

Apple

객체지향, NeXTSTEP 및 macOS 개발

iOS, macOS

Kotlin

JetBrains

현대적, 간결함

Android, JVM

Go

Google

성능, 병렬 처리

크로스플랫폼

Rust

Mozilla Foundation

성능, 메모리 안전성

크로스플랫폼

Dart

Google

프런트엔드, 성능

크로스플랫폼

Scala

EPFL

함수형, 객체지향

크로스플랫폼 (JVM)

Perl

Larry Wall

텍스트 처리, 스크립팅

크로스플랫폼

R

R Foundation

통계, 데이터 분석

크로스플랫폼

Haskell

Haskell Committee

함수형 프로그래밍

크로스플랫폼

Lua

PUC-Rio

스크립팅, 임베디드 시스템

크로스플랫폼

MATLAB

MathWorks

수학, 과학 계산

Windows, macOS, Linux

VBA

Microsoft

Microsoft Office 자동화

Windows, macOS

Shell Scripting

GNU Project, 기타

시스템 관리, 자동화

Unix 계열, Windows (WSL)



윈도우 개발 플랫폼 및 라이브러리

언어/플랫폼/라이브러리

제작사

지향점

호환성

.NET Framework / .NET Core / .NET 5+

Microsoft

범용 개발 플랫폼

Windows, Linux, macOS (.NET Core/5+)

WinForms

Microsoft

데스크탑 애플리케이션 개발

Windows

WPF

Microsoft

복잡하고 화려한 UI

Windows

UWP

Microsoft

Windows 10과 이후 버전용 앱 개발

Windows 10 이상

Win32 API

Microsoft

전통적인 Windows API

Windows

MFC

Microsoft

C++ 기반 애플리케이션 개발

Windows

DirectX

Microsoft

고성능 그래픽스 및 게임 개발

Windows

XNA

Microsoft

게임 개발

Windows, Xbox

Unity

Unity Technologies

게임 개발

크로스플랫폼



맥 개발 플랫폼 및 라이브러리

언어/플랫폼/라이브러리

제작사

지향점

호환성

Cocoa

Apple

네이티브 macOS 애플리케이션 개발

macOS

Cocoa Touch

Apple

네이티브 iOS 애플리케이션 개발

iOS, macOS

AppKit

Apple

macOS GUI 개발

macOS

SwiftUI

Apple

현대적 UI 개발

iOS, macOS

SpriteKit

Apple

2D 게임 개발

iOS, macOS

SceneKit

Apple

3D 그래픽스

iOS, macOS

Metal

Apple

고성능 그래픽스

iOS, macOS

Core Data

Apple

데이터 관리 및 영속성

iOS, macOS



크로스플랫폼 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

React Native

Facebook

모바일 크로스플랫폼 앱 개발

iOS, Android

Flutter

Google

모바일 크로스플랫폼 앱 개발

iOS, Android, 웹, 데스크탑

Xamarin

Microsoft

모바일 크로스플랫폼 앱 개발

iOS, Android, Windows

Electron

GitHub

데스크탑 크로스플랫폼 앱 개발

Windows, macOS, Linux

Qt

Qt Company

크로스플랫폼 GUI 개발

Windows, macOS, Linux

MAUI

Microsoft

크로스플랫폼 UI 개발

Windows, macOS, iOS, Android

Kivy

Kivy Organization

크로스플랫폼 Python GUI 프레임워크

크로스플랫폼

PhoneGap / Cordova

Adobe

모바일 크로스플랫폼 앱 개발

iOS, Android

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼



웹 개발 프론트엔드

언어/플랫폼/라이브러리

제작사

지향점

호환성

HTML

W3C

웹 페이지 구조

크로스플랫폼

CSS

W3C

웹 페이지 스타일

크로스플랫폼

JavaScript

Netscape, Mozilla Foundation

웹 페이지 동적 동작

크로스플랫폼

TypeScript

Microsoft

JavaScript의 정적 타입 지원

크로스플랫폼

React

Facebook

UI 컴포넌트 기반 프레임워크

크로스플랫폼

Vue.js

Evan You

경량화된 UI 프레임워크

크로스플랫폼

Angular

Google

전체적인 웹 애플리케이션 프레임워크

크로스플랫폼

Svelte

Svelte Society

컴파일러 기반 UI 프레임워크

크로스플랫폼

Bootstrap

Twitter

CSS 프레임워크

크로스플랫폼

Tailwind CSS

Tailwind Labs

유틸리티 퍼스트 CSS 프레임워크

크로스플랫폼



웹 개발 백엔드

언어/플랫폼/라이브러리

제작사

지향점

호환성

Node.js

OpenJS Foundation

JavaScript 런타임 환경

크로스플랫폼

Express

OpenJS Foundation

Node.js 웹 프레임워크

크로스플랫폼

Django

Django Software Foundation

Python 웹 프레임워크

크로스플랫폼

Flask

Pallets Projects

Python 마이크로 웹 프레임워크

크로스플랫폼

Ruby on Rails

David Heinemeier Hansson

Ruby 웹 프레임워크

크로스플랫폼

Laravel

Taylor Otwell

PHP 웹 프레임워크

크로스플랫폼

Spring

Pivotal Software

Java 웹 프레임워크

크로스플랫폼

ASP.NET

Microsoft

.NET 웹 프레임워크

Windows, Linux, macOS (.NET Core/5+)

NestJS

Kamil Myśliwiec

Node.js 웹 프레임워크

크로스플랫폼

Koa.js

OpenJS Foundation

Node.js 웹 프레임워크

크로스플랫폼

Phoenix

Phoenix Team

Elixir 웹 프레임워크

크로스플랫폼



데이터베이스

언어/플랫폼/라이브러리

제작사

지향점

호환성

MySQL

Oracle

관계형 데이터베이스

크로스플랫폼

PostgreSQL

PostgreSQL Global Development Group

관계형 데이터베이스

크로스플랫폼

SQLite

D. Richard Hipp

임베디드 관계형 데이터베이스

크로스플랫폼

MongoDB

MongoDB, Inc.

NoSQL 데이터베이스

크로스플랫폼

Redis

Redis Ltd.

인메모리 데이터베이스

크로스플랫폼

Cassandra

Apache Software Foundation

NoSQL 데이터베이스

크로스플랫폼

MariaDB

MariaDB Corporation

관계형 데이터베이스

크로스플랫폼

Firebase Firestore

Google

NoSQL 클라우드 데이터베이스

크로스플랫폼

Oracle Database

Oracle

관계형 데이터베이스

크로스플랫폼

Microsoft SQL Server

Microsoft

관계형 데이터베이스

Windows, Linux

DynamoDB

Amazon Web Services

NoSQL 클라우드 데이터베이스

크로스플랫폼

CouchDB

Apache Software Foundation

NoSQL 데이터베이스

크로스플랫폼



게임 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼

Godot

Godot Engine

게임 개발

크로스플랫폼

Cocos2d

Cocos

게임 개발

크로스플랫폼

CryEngine

Crytek

게임 개발

크로스플랫폼

Panda3D

Carnegie Mellon University

게임 개발

크로스플랫폼

GameMaker Studio

YoYo Games

게임 개발

크로스플랫폼

Phaser

Photon Storm

HTML5 게임 개발

크로스플랫폼



데이터 과학 및 머신러닝

언어/플랫폼/라이브러리

제작사

지향점

호환성

Python

Python Software Foundation

데이터 과학, 머신러닝

크로스플랫폼

R

R Foundation

통계, 데이터 분석

크로스플랫폼

Julia

Julia Computing

데이터 과학, 고성능 컴퓨팅

크로스플랫폼

SAS

SAS Institute

통계, 데이터 분석

크로스플랫폼

MATLAB

MathWorks

수학, 과학 계산

Windows, macOS,



임베디드 시스템

언어/플랫폼/라이브러리

제작사

지향점

호환성

C

ANSI

성능, 하드웨어 제어

크로스플랫폼

C++

ISO

객체지향, 성능

크로스플랫폼

Assembly

각종 하드웨어 제조사

하드웨어 제어

크로스플랫폼

Rust

Mozilla Foundation

성능, 메모리 안전성

크로스플랫폼

Python

Python Software Foundation

임베디드 시스템 스크립팅

크로스플랫폼

Arduino

Arduino

하드웨어 제어, 프로토타이핑

Arduino 하드웨어

Raspberry Pi

Raspberry Pi Foundation

교육, 프로토타이핑

Raspberry Pi 하드웨어



클라우드 플랫폼 및 도구

언어/플랫폼/라이브러리

제작사

지향점

호환성

AWS (Amazon Web Services)

Amazon

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Google Cloud Platform

Google

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Microsoft Azure

Microsoft

클라우드 컴퓨팅, 스토리지

크로스플랫폼

Heroku

Salesforce

클라우드 애플리케이션 배포

크로스플랫폼

Netlify

Netlify

정적 웹사이트 호스팅

크로스플랫폼

Vercel

Vercel

정적 웹사이트 호스팅

크로스플랫폼

Docker

Docker, Inc.

컨테이너화

크로스플랫폼

Kubernetes

Google

컨테이너 오케스트레이션

크로스플랫폼



모바일 앱 개발

언어/플랫폼/라이브러리

제작사

지향점

호환성

Android Studio

Google

Android 네이티브 앱 개발

Android

Xcode

Apple

iOS, macOS 네이티브 앱 개발

iOS, macOS

React Native

Facebook

모바일 크로스플랫폼 앱 개발

iOS, Android

Flutter

Google

모바일 크로스플랫폼 앱 개발

iOS, Android, 웹, 데스크탑

Ionic

Ionic

모바일 크로스플랫폼 앱 개발

iOS, Android

PhoneGap / Cordova

Adobe

모바일 크로스플랫폼 앱 개발

iOS, Android

Unity

Unity Technologies

게임 개발

크로스플랫폼

Unreal Engine

Epic Games

게임 개발

크로스플랫폼


위시켓 프리모아 웹개발 앱개발 소프트웨어개발 크몽 외주개발 기술선택가이드