161 프론트엔드 정리 1
source: categories/study/vue-experiance/vue-experiance_9-99_62.md
161 프론트엔드 정리 1
웹팩 (Webpack) 모듈 번들링 툴
(정리중..)
컴포넌트간 통신 기법
- 컴포넌트간 통신 기법을 지켜야하는 이유
- 지키지 않아도 기능엔 문제가 없다.
- 하지만 프로젝트 규모가 커질수록, 복잡도가 증가할 수록 데이터의 흐름을 파악하기 어려워 디버깅이 어려워진다.
- 유지보수, 디버깅 용이성을 위해 통신 기법은 반드시 지키는 것이 좋다.
- 컴포넌트간 통신 기법
- props & event emit
- 상위 컴포넌트 -> 하위 컴포넌트 : props
- 하위 컴포넌트 -> 상위 컴포넌트 : event emit
- 단점 : 컴포넌트 계층이 깊어질수록 여러 단계를 거쳐서 통신해야되기 때문에 복잡해진다.
<!-- 상위 컴포넌트 --> <template> <custom-component :props-data="'프롭스'"></custom-component> </template> <script> import CustomComponent from './CustomComponent'; export default { components: { CustomComponent, } } </script>
<!-- 하위 컴포넌트 --> <template> <div>{{ propsData }}</div> </template> <script> export default { props: { propsData: { type: String, } } } </script>
- provide & inject
- 상위 컴포넌트에서 provide로 하위 컴포넌트에 제공할 데이터를 명시한다.
- 하위 컴포넌트에서 inject로 상위 컴포넌트에서 provide한 데이터를 받아올 수 있다.
- 장점 : 계층이 깊던 안깊던 상관없이 상위 컴포넌트 데이터를 받아서 사용할 수 있다.
-
단점 : 어느 상위 컴포넌트에서 provide한 데이터인지 파악하기 어려울 수도 있다.
<!-- 상위 컴포넌트 --> <template> <div></div> </template> <script> export default { data() { return { send: '전달', } }, provide() { // computed 처럼 반응성(reactivity) 주입 const obj = {}; Object.defineProperty(obj, 'send', { enumerable: true, get: () => this.send, }) return { obj, } } } </script>
<!-- 하위 컴포넌트 --> <template> <div></div> </template> <script> export default { inject: ['obj'], } </script>
- store (vuex)
- 데이터를 따로 보관해주는 라이브러리이다.
- 상위 컴포넌트를 통해 데이터를 받아오는 것이 아니기 때문에 계층에 상관없이 바로 데이터를 store에서 받아서 사용할 수 있다.
- 참고 URL : 링크
- props & event emit
컴포넌트 라이프사이클
- new Vue(); 인스턴스 생성
- 이벤트 및 라이프사이클 초기화
- beforeCreate
- 화면에 반응성(reactivity) 주입
- created
- el, template 속성 확인
- template 속성 내용을 render 함수로 변환
- beforeMount
- vm.$el 생성 후 el 속성 값을 대입
- mounted
- 인스턴스를 화면에 부착
- 인스턴스의 데이터 변경
- beforeUpdate
- 화면 재랜더링 및 데이터 갱신
- updated
- 인스턴스 내용 갱신
- 인스턴스 접근 가능
- beforeDestroy
- 컴포넌트, 인스턴스, 디렉티브 등 모두 해제
- destroyed
- 인스턴스 소멸
http 통신 라이브러리
유효성 검사 방법
- vee-validate 라이브러리 사용 링크
- vue2 사용시 vee-validate 3점대 버전 사용
- vue3 사용시 vee-validate 최신(4점대) 버전 사용
스토어 라이브러리
- Vuex 링크
- vue2 사용시 vuex 3점대 버전 사용
- vue3 사용시 vuex 최신(4점대) 버전 사용
날짜 제어 라이브러리
- moment.js 링크
유용한 데이터 가공 함수 및 함수형 프로그래밍 지원 라이브러리
- lodash 링크 - CommonJS require 메소드로 작성된 라이브러리 - 트리쉐이킹 불가능
- lodash-es (ES6 module 기법으로 작성된 lodash 라이브러리) - 트리쉐이킹 가능
- lodash-es 라이브러리 사용 권장
프론트엔드 개발 절차
- 각자 담당한 부분 개발
- 커밋 후 Pull Request
- storybook UI 단위테스트 진행 (with ngrok)
- Jest (or Mocha) 테스트 코드 작성
- 개발자간 서로 리뷰 (댓글)
- 리뷰 후 수정사항 없으면 메인(master) 브랜치로 merge
- 수정사항 있으면 수정 후 메인(master) 브랜치로 merge
깃 풀리퀘스트
(정리예정)
스토리북(storybook) UI 단위 테스트 도구 (with ngrok)
(정리예정)
Jest 단위 테스트 도구
(정리예정)
카카오 로그인 처리
- 카카오톡 인앱 채널이라면, 카카오 로그인 처리 하기 전에 -> 해당 채널에 대한 전용 카카오 앱 키를 발행받아야 된다.
- 해당 채널이 등록되어있는 계정이 아마 있을 것이다.
- 없으면 요청해야될 것이다.
- 자바스크립트 SDK 초기화 링크
- 자바스크립트 앱 키 초기화 방법에 대해 설명되어있다.
- 해당 채널이 등록되어있는 계정으로 로그인 후, 해당 채널에 대한 자바스크립트 앱 키를 발급받는다.
위와 같이 발급받은 자바스크립트 키를
.env
파일에 명시한다.
.env 파일이란?
.env.developmentlocal
-
보안상 외부 노출이 되면 안되는 것들을 명시하는 파일이다. (ex. key 값)
VUE_APP_KEY_KAKAO=cfe0882ca22f7d42a35b759ca10c2639
-
그리고 아래처럼 JavaScript에서 해당 Key를 불러와서 사용한다.
const apiKey = process.env.VUE_APP_KEY_KAKAO; window.Kakao.init(apiKey);
- 카카오 앱 키 초기화 링크
- 카카오 채널 추가 항목 동의 받기 링크
- 카카오 로그인 참고 코드 링크
- 카카오 로그인 참고 코드2 링크
(정리중..)
고민해봐야될 문제
- 현재 API 호출 코드 정리 방식, (vuex, axios) 이대로 괜찮은지?
- vuex store 처리가 불필요한 API 호출들도 있지 않을까?
- 만약 그럴때 코드 공통화 방식은?
- 현재 로딩 컴포넌트 제어 방식, 이대로 괜찮은지?
- axios interceptor로 제어하는데, 사용성에 좋은 방법일까?
- axios interceptor로 제어 안한다면, 어떤식으로 제어하는게 좋을까? 코드 공통화 방법이 있을까?
- 현재 뒤로가기 제어 방식, 이대로 괜찮은지?
- axios interceptor로 제어하는데, 이대로 괜찮을지?
- 뒤로가기시 로딩 컴포넌트가 안떴으면 좋겠는데.. 안뜨게 하는게 맞는지 혹은 또다른 좋은 방법이 있는지
- 현재 코드 작성 방식 이대로 괜찮을까?
- 함수형 프로그래밍 도입 적극적으로 생각해봐야함
- 현재와 같은 명령, 선언형 프로그래밍은 프로젝트 규모가 커지고 복잡해짐에따라 디버깅이 너무 어려움
- 제너레이터, 이터레이터 적극 도입
앞으로 꾸준하게 추구해야될 프론트엔드 개발 스택
- 타입스크립트
- 이번 어깨동무M 프로젝트 때 도입했지만 VUE2 한계도 있고 러닝 커브 문제도 있어 완벽하게 사용하진 못함
- Jest (or Mocha) 테스트 라이브러리 사용
- Vue 3
- 함수형 프로그래밍
- 제너레이터, 이터레이터
- Vite (모듈 번들링 툴 - 웹팩에 비해 속도가 많이 빠름)
- …
(정리중..)