[코드잇] 프로그래밍 오버뷰 (프로그래밍 분야와 학습 가이드)
웹 개발 분야
웹 개발
- 웹 개발 = 프론트엔드 + 백엔드
- 이미 수요가 많은 분야인데, 아직도 계속해서 커지고 있음.
어떤회사나 프론트백엔드 개발자가 있음.
그냥 소프트웨어 엔지니어라는 타이틀 되어 있는 곳도 다루고 있는 서비스가 웹 기반이라면 웹 개발자 뽑는거나 마찬가지 - 관심있는 분야가 따로 없으면 수요가 많은 웹 개발이나 데이터 사이언스 분야로 진입하는 것이 좋음.
- 유저들이 사용하는 서비스를 직접 만들고 싶다 → 웹 개발
- 다양한 각도에서 데이터를 사용하고 싶다, 수학적 기법을 활용,인사이트 도입 → 데이터 사이언스
프론트엔드(Front-end) = 클라이언트
HTML, CSS, JS + React, Angular, Vue
- HTML: 이미지, 글자, 버튼 등이 어디에 들어갈지 정해준다.
- CSS: 이미지, 글자, 버튼 등의 요소에 크기나 색깔 같은 스타일을 입혀준다.
- JavaScript: 유저 동작에 따른 사이트의 반응을 정해준다.
◆ 학습 가이드
- 추천 : 시각적인 것에 관심이 많고 눈에 보이는 결과물이 있어야 동기부여 잘되는 사람
- HTML, CSS, JS + React
- react가 몇 년 째 안정적으로 1등을 지키고 있음.
백엔드(Back-end) = 서버
데이터베이스, API
- 데이터베이스 : SQL, NoSQL
- API : Java, Python, Kotlin, PHP, Ruby, JS
• 데이터베이스
- SQL : 규칙이 엄격, 역사가 깊어서 안정적
→ 백엔드를 제대로 해보고 싶으면 배우기 (SQL→NoSQL)
- NoSQL : 비교적 최근에 생긴 방식, 유연하고 간편
→ 프론트엔드 위주로 공부하고 백엔드는 가볍게 한다면 배우기
• API (Application Programming Interface)
- 응용 프로그램 간의 상호작용을 가능하게 하는 인터페이스
- 프로그램들이 서로 통신하고 상호작용하기 위한 규칙과 절차를 정의하는 것
- API를 통해 소프트웨어 개발자는 외부 시스템에 요청을 보내고, 응답을 받아 처리하며, 서비스를 이용할 수 있음.
- 백엔드 개발자가 API를 만들면 클라이언트와 서버가 소통할 수 있음.
◆ 학습 가이드
- 추천 : 데이터를 다루는 게 좋고, 복잡한 시스템을 설계하는 것이 좋은 사람
- 언어, 프레임워크, 데이터베이스를 하나씩 골라야 하는데 선택지가 많음.
안정적인 서비스를 구현하고 싶다면 | 프론트엔드와 백엔드를 각각 제대로 공부하고 싶다면 | |
언어 | 파이썬 | JS언어 중 node.js |
프레임워크 | Django | Express.js |
데이터베이스 | SQL | SQL, MongoDB |
이유 | 파이썬의 진입장벽이 낮은 편 장고에서 미리 해주는 게 정말 많다 |
SQL이 필수이고 NoSQL은 선택 가볍게 시작하는 단계라면 mongoDB같은 NoSQL도 좋음 백엔드 개발을 제대로 하고 싶으면 SQL은 필수 |
- 한국에서 유독 Java 비중이 높지만 Java는 언어가 어렵고, 생산성이 떨어짐.
- 처음 배우는 입장에서는 파이썬 Django / JS Node.js 추천함.
모바일 개발 분야
• 보통 개발자는 다음과 같이 분류함.
- 프론트엔드 개발자 = 웹 프론트엔드 개발자
- 모바일 클라이언트 개발자
- 백엔드/서버 개발자
• 모바일 개발을 위해서는 아이폰과 안드로이드 앱을 따로 만들어야 함.
- 아이폰 - Swift
- 안드로이드 - Kotlin
• 크로스 플랫폼(Cross Platform)
- 개발자를 따로 구해야 하니 기업에서 비용이 많이 소모되어 크로스 플랫폼이 등장함.
- 크로스 플랫폼(Cross Platform)의 종류
- React Native : 페이스북
- Flutter : 구글 (Dart라는 프로그래밍 언어를 사용)
• Swift & Kotlin
- 모바일에 최적화된 형태
- 충분한 인원과 충분한 시간이 필요함.
• React Native & Flutter
- 서비스가 복잡하지 않고 높은 성능이 필요하지 않을 때 적합함.
- 개발 비용이 적게 듦.
◆ 학습 가이드
React Native vs Flutter
- 현재 나의 상황과 목표에 따라 결정하면 됨.
- 필요한 것만 배워서 빠르게 모바일 개발을 하고 싶다면 Dart와 Flutter
- 자바스크립트와 리액트를 배울 계획이 있다면 React Native
데이터 개발 분야
• 데이터 엔지니어
- 많은 양의 데이터를 효과적으로 처리
- 데이터베이스와 빅테이터에 특화된 기술
- 작은 회사에선 백엔드 엔지니어가 대신하기도 함
• 데이터 애널리스트
- 데이터를 활용해서 직관적인 분석
- SQL로 데이터를 추출하거나 파이썬으로 데이터 분석
- 발견한 인사이트를 팀원들과 경영진에게 전달
• 데이터 사이언티스트
- 머신 러닝을 이용해서 미래를 예측
- 파이썬을 가장 많이 사용
- 머신 러닝을 서비스에 도입시킬 방법을 고민
• 머신러닝 엔지니어
- 실제 프로덕트에 적용함.
- 백엔드 개발자가 머신 러닝을 배워서 맡기도 함.
- 머신러닝 알고리즘을 실제로 서비스에 녹여내는 역할.
• 머신러닝 리서처
- 새로운 머신러닝 알고리즘을 찾거나 기존 알고리즘 개선
- 주로 수학, 통계에 깊이가 있는 석사, 박사 학위자
◆ 학습 가이드
• 데이터 애널리스트, 데이터 사이언티스트로 진입
• 파이썬 vs R
→ 파이썬이 갈수록 더 확고한 선두 주자
- 언어 : Python, R
- 프레임워크 : NumPy, pandas, seaborn, PyTorch, TensorFlow
- 데이터베이스 : SQL
그밖의 다양한 분야들
게임 개발 분야
• 여러 형태가 있어서 축약해서 말하기 힘듦
ex. 웹사이트 접속후 실행, 모바일 게임, 콘솔게임 등
• 형태에 따라 개발 방식이 많이 다름
게임개발에 가장 많이 쓰이는 기술 : Unity, Unreal
• Unreal 엔진 : C++ 기반
- 조금 더 완성도 높은 결과물을 낼 수 있음.
- 사용하는 툴이나 언어가 Unity에 비해 익히기 어려움.
• Unity 엔진 : C# 기반
- 게임에 원하는 물체들을 드래그해서 넣을 수 있음.
- 이 물체가 어떻게 동작할지는 C# 언어를 통해 코딩으로 구현함.
→ 대부분 둘이 비슷한 퀄리티를 낼 수 있어서 비교적 접근성이 높은 Unity가 시장에서 더 많이 사용됨.
블록체인 분야
• 비트코인, 이더리움, 솔라나, 카르다노 / 가상화폐, NFT, Defi / 탈중앙화 시스템
- 웹사이트나 모바일앱은 기존과 동일
- 백엔드가 탈 중앙화된 형태이지, 보여지는 부분은 일반적인 서비스와 크게 다를 게 없음.
• 블록체인 엔지니어
- 대부분 블록체인 위에 올라가는 앱인 DApp(Decentralized App)을 제작함.
- 일반적인 백엔드 개발자와 다르게 블록체인에 대한 이해가 필요함.
- 어떤 블록체인인지에 따라 개발에 사용되는 기술이 다름.
ex. 이더리움 - Solidity(언어)
임베디드 시스템(Embedded System)
• 하드웨어를 동작하게 하는 기술 (ex. 냉장고, TV, 전등 등)
• 이런 기계들에는 성능이 덜 좋은 컴퓨터가 들어가고, 세밀하고 효율적인 자원관리가 필요함.
• 요즘에는 파이썬도 쓰이나, 대표적으로 C가 쓰임.
사물인터넷(IoT Internet of Things) : 일상의 사물들이 데이터를 공유하는 기술
시스템 프로그래밍 : 운영체제를 만드는 개발자로 하드웨어에 관한 지식이 필수임.
그밖에 VR, AR 등 다양한 개발 분야가 있음.
비개발자의 코딩 활용
• 비개발자의 경우 아이디어 구현, 업무활용, 개발협업에서 코딩을 활용할 수 있음.
아이디어 구현
• 앱이나 웹사이트 제작을 통해 본인의 아이디어를 구현할 수 있음.
• 개발을 위해서는 동업자인 개발자를 구하는 게 쉽지 않고, 본인이 개발 지식이 있어야 동업하기 수월함.
업무 활용
• 데이터 분석
ex. 사이트 디자인 - AB테스트를 통해 데이터에 의존해서 효과적인 디자인을 선택할 수 있음.
• 업무 자동화 : 사무직에서 반복적인 업무
ex. 아침마다 엑셀파일 다운해서 취합하고 이메일 전송 → 파이썬으로 자동화 가능
개발 협업
• 최근 it산업이 발전하면서 소프트웨어 회사 조직에서 일할 가능성이 높음
• it회사에 다니면 '서버, 클라리언트, 데이터베이스, API' 등의 용어를 듣게 됨.
• 같이 일하는 직군으로 프로덕트 매니저, UX/UI 디자이너, 디지털 마케터 등이 있음.
- PM : 팀원 대부분이 엔지니어라서 개발 지식이 있어야 함.
- UX/UI 디자이너 : 프론트엔드 지식이 있으면 소통에 편함.