# 개요
빠르고, 안정적이며, 추후 수정 및 파악이 용이한 개발을 하는 것은 어플리케이션 개발자의 숙원이자, 해결하기 어려운 문제인 것 같다.
빠르고, 안정적으로 내가 원하는 Application을 만들어 내려면 어떻게 해야할까?
단순하게, 느끼는 것은 어느 기술을 습득하든 해당 기술/프레임워크의 전문가가 되려면... (원하는 App을 수준으로 뚝닭 만드는?)
- 빠름을 위해서는 기본 기능에 대한 개념 이해와 문법들이 어느 정도 체화*암기가 되어 있어야 하는 것 같다.
(프레임워크의 장점에 대한 이해, 프레임워크의 큰 틀 이해, 개발 노하우까지)
- 또한, 안정성(유지보수성)을 가지기 위해서는 표준 프레임워크 및 개발방식을 준수 해야 한다.
(프로젝트 구현 난이도가 간단한지, 복잡한지에 따라 꼭 복잡한 프레임워크를 적용할 필요가 없다.)
초반에는 Cheat Sheet를 가져다 놓고, 사용한다고 치더라도, 해당 코드가 어떠한 용도로 만들어졌고, 어떻게 사용되는지에 대한 이해는 명확해야할 것 같다. (모르면, 그때 그때 찾아서, 이해하고, 정리해 놓는 것이 낫다. 어느 순간에는 언어별로 다를 것이 없고, 유사한 부분와 개선된 부분만 눈에 들어오게 될 것이다.) 그리고, 자주 사용되는 것은 자연스럽게 저절로 익혀지게 된다.
# 개발 히스토리
- 지금껏 아마추어스럽게, 언어/프레임워크에 대한 기초 구현 지식만 습득한 후(기본 책으로 치면 절반 정도만?), 무작정 개발을 시작했다.
> 지금도 어느 정도 프레임워크 상의 핵심, 기초 개념만 학습 및 정리(기초 동영상 강의 SET 또는 기본 서적)하고, Tutorial을 진행한다.
> 세부적인 기능들은 Application을 구현해 나가면서 기본 Document > Best Practice & Tutorial > 구글링 순으로 해결해 나간다.
- 필요한 기능을 나열하고, 필요한 기능만 구글링하면서 처음부터 나오는 코드를 Copy & Paste해보는 시행착오 방식으로, 모조리 시도해보았다. 해결되면, 어떻게 동작하는지에 대한 의심없이 넘어갔다. 생소한 코드나 문법, 단어가 등장해도 검색도 잘 해보지 않았다.
(적어도 언어/프레임워크 상에서 해당 기능에 대한 Best Solution, Library, 표준을 파악하지 못했다.)
(기능이 아닌, 어려운 문제 이슈 해결의 경우는 인터넷을 다 찾아서, 찾아낸 방법으로 하고, 추후를 위해 출처와 해결책을 기록해두면 괜찮다)
(물론, 다 자세하게는 정리할 수는 없다. 최소한 개념이나 해당 문법이 어떠한 기능을 하고 있는지에 대한 유추까지는 가능해야 한다.)
- 어떻게 작성하는 것이 표준인지도 파악하지 못하고, 다른 사람의 코드를 짜집기하였다.
- 그때 그때 해결해야할 문제는 구글링하면서, 해당 문제의 원인과 해결 방법의 이해도 없이 중구난방으로 소스를 수정해가면서 개발해왔다.
- 언어 또는 프레임워크가 제공하는 기본 컴포넌트들이 정확히 어떠한 역할을하고 무엇을 위해 만들어졌는지 생소한 개념을 그때그때 Research하고 이해하고 정리하지 않았다.
- 표준적으로 해당 컴포넌트가 어떤 방식으로 사용되는지에 대한 이해도 없이, 그냥 내가 원하는 동작만 작동되면 그 상태에서 코드를 갈무리 해왔다.
# 현재 개발 방식
1. 구현하기를 원하는 Application을 구현하는데 사용될 수 있는 언어, 프레임워크를 탐색 * 장단점 정리
(비교 관련 10개 사이트 정도만 보면 어느 정도 장단점이 명확해진다.)
- 기본적으로 플랫폼별로 메인으로 제공하는 언어/프레임워크가 존재한다.
- 멀티 플랫폼을 지원하는 언어/프레임워크가 존재한다.
(ex) S App을 구현하기 위해서는 아래와 같은 언어/프레임워크 옵션이 존재했다.
- Android Native : Java, Kotlin 중에 선택
- React Native : React에 대한 개념을 익힌 사람에게는 쉬우나, 생소한 개념(state)들이 있고, 표준도 너무 다양함
- Angular 기반 Ionic : Angular에 대한 개념을 익힌 사람에게는 HTML5, css, js 기반이므로 구현이 쉽고, 컴포넌트도 다양하게 존재, 필요한 핵심 기능 라이브러리(오픈소스 다수의 star를 보유한 3rd party 라이브러리)를 적용 가능함
2. 각 프레임워크의 기술적 성숙도 / 러닝 커브 / 검색 용이성 / 호환성 / 기술검토 : 필요한 핵심 기술 및 3rd 라이브러리 존재 여부 / 구현 난이도 / 성능을 고려하여, 내 자신의 지금 환경과 상황에서 최선의 것을 선정한다.
(ex) S App을 구현할 때, 아래와 같은 이유로 Angular 기반 Ionic 프레임워크를 선정
- 시간이 매우 적은 편이고, Android와 Ios를 지원하는 App을 만들어야 함 (성능은 약간 포기하는대신, 시간 절약, 두개의 플랫폼 동시 적용)
- Angular에 대한 기초 개념을 익힌 상태였고, Router에 관한 개념도 이해가 된 상황이라, 큰 틀을 그리는 것이 가능했음
(전체적인 프레임워크 프로젝트 구성 및 동작 구조에 대한 지식 확보)
(Angular, Typescript에 대한 기초 동영상 Set 정독 및 정리 완료)
- 필요한 핵심 기술 라이브러리가 신뢰할 만한 3rd library와 관련 tutorial 검색도 가능했음
(그것도 쉬운 설정으로 적용 가능)
3. 선정된 프레임워크 상에서 표준 폴더 구조를 파악한다. 내가 원하는 App의 폴더 구조를 작성해 본다.
- Ionic 프레임워크의 경우, 보통 pages 별 또는 기능별로 폴더링 후, 해당 폴더 안에 DB Service, DB Model, UI Component, UI Page, UI Detail Page까지 독립적으로 구현하여, 하나의 기능 모듈로 만드는 방식이었다. 그리고, Router Module이 해당 모듈의 메인 페이지들을 호출하는 방식으로 작성되었다.
4. 해당 프레임워크 관련 DB 관련 조사 및 선정
(ex) S App의 경우, 온라인 DB가 아닌 디바이스 DB를 사용할 것이므로, Cordova Sqlite로 선정
- 가장 안정적인 편
5. 해당 DB와 프레임워크 간의 아주 잘 만들어진 Tutorial을 직접 작성해가며, 만든 뒤 학습한 내용을 정리한다. (CRUD가 포함되면 좋다.)
- 기능 하나를 온전히 구현하고 표준에 따라 작성된 좋은 Tutorial 또는 Boilerplate는 프레임워크 내에 하나의 작은 단위 프레임워크가 된다.
(ex) S App의 경우, SQLite와 Ionic 프레임워크간 CRUD example을 반응형에 맞게, 표준으로 작성된 Tutorial에 따라 가장 단순한 기능 구현
6. 프레임워크의 기본 boilerplate 앱 리서치 후, 레이아웃이 일치하는 제공하는 소스를 참조 및 복사하여, 전체 폴더 구조 생성 및 껍데기 생성, Routing(연결관계)를 설정한다.
(이 때 생소한 단어나 문법은 시간이 다소 들더라도 검색해가면서, 개념들을 숙지하고 글로 정리해둔다.)
7. 필요한 기능 나열 및 리서치 후, 가장 Best Solution/Library/Practice를 찾는다.
(ex)
Date 라이브러리 : moment.js, date-fns 라이브러리 외에 여러개의 옵션이 었었으나, 용량대비 성능인 date-fns 선정(최소 20k이상 품질이 보장된 라이브러리로 간주)
Cron 라이브러리 : cron-descriptor, cron-parser.js, cron-generator.js
//품질이 어느정도 보장된 library는 수정없이, 해당 기능만 사용하여 구현
//필요한 기능은 있으나, 평범한 개발자의 source의 경우, fork 해와서 변경해서 구현
Calendar 라이브러리
8. 기본 Document를 통해 필요할 때마다, 기본 기능을 더 학습하고, 적용한다.
# Dev Insight
"Application 개발 전략 중 강조한 중요한 전략의 하나는 '항상 프레임워크 기반으로 접근하라'는 것이었습니다. 당연히 책의 예제 애플리케이션도 프레임워크를 먼저 만들고 나서, 프레임워크를 이용하는 코드를 만드는 방식으로 작성됐습니다."
# 출처
-https://12bme.tistory.com/157 [길은 가면, 뒤에 있다.]
'[DEV] Developer 회고' 카테고리의 다른 글
Event Sourcing의 개념 (0) | 2020.11.19 |
---|---|
[개념정리] Apache Tomcat, Web/Was 이해하기 (0) | 2020.09.15 |
Quartz Cron vs 일반 Cron 비교 (0) | 2020.08.06 |
Window 개발시, 유용한 Tip (0) | 2020.07.27 |
웹훅[Webhook]이란? (0) | 2020.07.09 |
최근댓글