728x90
반응형

깃 레파지토리를 옮길때, 두가지 방법이 있다.

1.commit  유지하지않는방법

2.commit / branch 를 유지하는 방법

 

당연히 2번이 훨씬더 편한다.

해당 레파지토리의 .git 파일을 삭제하고, 

 

git init 으로 새로 등록하여 git push 를 하면 끝나기때문이다.

 

하지만, 후임자와 팀원들을 위해 commit 내용을 공유해주어야 할 필요가 있다.

 

만약 해당깃에 

 

100mb 가 넘는 파일이 없는 경우

 

터미널에서

1. git clone --bare {복사하고자하는저장소의 git 주소, 원래 소스코드가 있는 레파지토리}

2. cd {복사하고자하는저장소의git 주소}
3. git push --mirror {붙여놓을저장소의git주소}

 

만 하면 끝난다.

 

하지만, 100mb 가 넘는경우, 해당 프로세스를 진행하면 100mb 가 넘는 파일이 있기때문에 에러가 난다.

 

해결하기 위해서는

1. 100mb 이상의 파일처리

brew install git-lfs  

brew install bfg        

를 먼저깔아주고

 

1. git clone --bare {복사하고자하는저장소의 git 주소, 원래 소스코드가 있는 레파지토리}

2. cd {복사하고자하는저장소의git 주소}

3. git filter-branch --tree-filter 'git lfs track "*.{zip,jar}"' -- --all  

4. brew install bfg 로 깔지않고 jar 파일을 받았을때,  bfg의 위치를 넣은 path 

 

java -jar {bfg의 위치를 넣은 path } --convert-to-git-lfs '*.zip'

java -jar {bfg의 위치를 넣은 path } --convert-to-git-lfs '*.jar'

 

5. git push --mirror {붙여놓을저장소의git주소}

 

하면 끝

728x90
반응형
728x90
반응형

매주 1번에서 2번정도 앱업데이트를 하는데,

app store connect 에서 처음보는 메세지가 떴다

 

'애플 개발자계정 비지니스 들어가서 대한민국 세금양식 업데이트디지털 서비스법에 따라 계정에 관한 정보를 제공하고 확인해야 합니다. 준수하지 않을 경우 결제 지연이 발생하거나 특정 국가 또는 지역에서 해당 콘텐츠의 판매가 중단될 수 있습니다'

 

판매가 중단된다는 의미는 앱이 내려간다는 의미라서

최우선으로 해결하려고 검색을 해봤다.

 

그런데 검색결과가 많지 않은 것을 보고, 'IOS 정책이 업데이트 되었구나' 라고 생각했다.

 

 

애플 센터에 가보니 EU 에서 디지털 서비스 관련하여, 추가 정보를 요청한 것으로 확인했다.

 

다시 앱 센터로 로그인해서

 

 

해당 정보를 채우니,

 

가 나오고, 나머지 회사 정보를 입력하니 해결됐습니다.

 

기사를 읽어보니, 내년(2025)까지 해결하면 된다.

728x90
반응형
728x90
반응형

이번에 국내 / 해외 배송 메모

728x90
반응형
728x90
반응형

깃랩에 있는 레퍼지토리를 깃허브로 옮길일이 생겼다.

미러링을 걸어놔서 신경을 안쓰고있었는데,

이틀전부터 미러링이 안되고있었다.

 

원인을 찾아보니, 100mb 이상의 커밋이 발생하여 해당 미러링이 안된것으로 보였다.

 

일단 github 에 새로운 레파지토리를 만들고

 

git clone --mirror [클론할 레포지토리]

 

로 커밋메세지등을 클론했다.

 

그 후에, 

 

https://rtyley.github.io/bfg-repo-cleaner/

 

BFG Repo-Cleaner by rtyley

$ bfg --strip-blobs-bigger-than 100M --replace-text banned.txt repo.git an alternative to git-filter-branch The BFG is a simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history: Removing Crazy Big Files Re

rtyley.github.io

 

링크에서 우측

을 통해 커밋로그를 삭제하는 파일을 받아준다.

 

해당 파일을 클론한 레포지토리의 루트에 위치 시켜주고

 

 

 java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M [클론한 레퍼지토리.git]

 

를 통해 100M 이상의 커밋 로그를 삭제해준뒤

 

같은 루트에서 cd [클론한 레퍼지토리.git]

 

을 한후, 

 

git push [옮길 레퍼지토리] -f --mirror

 

를 통해 레퍼지토리로 옮겨줬다.

 

후에 다시 gitlab에서 웹훅을 걸어주었다.

728x90
반응형
728x90
반응형

맥을 껐다 켜니 갑자기 gitlab에 push가 해당 에러를 내며 거부되었다.

 

access token 값을 변경하고나서 vscode에 저장을 하지 않아서 발생한 문제였다.

 

git config --system --unset credential.helper

 

명령어로 초기화후( permission 관련 에러가나면 sudo git config --system --unset credential.helper ) 

 

다시 git push를 하면 아이디 / pwd 입력칸이 나온다.

 

이메일로 아이디를 넣어주고, 발급받은 token값을 비밀번호로 입력하면 정상작동한다.

 

해당 정보를 저장하기위해서 

 

git config credential.helper store

명령어 입력해줬다.

728x90
반응형
728x90
반응형

mac 기준

 

option + shift + O 누르면 정리됨

728x90
반응형
728x90
반응형

1. React에서 클래스형 컴포넌트를 지양하는 이유

React에서 클래스형 컴포넌트를 사용하지 않는 이유는 다음과 같습니다:

  1. 복잡한 문법과 생명주기 관리: 클래스형 컴포넌트는 상속 구조를 사용하고, 복잡한 생명주기 메서드를 포함합니다. 이로 인해 컴포넌트의 이해와 유지보수가 어려울 수 있습니다.
  2. 코드의 가독성과 간결성: 클래스형 컴포넌트는 constructor, render 메서드 등의 추가적인 문법을 요구하며, this 키워드를 사용해야 합니다. 이는 코드의 가독성과 간결성을 저하시킬 수 있습니다.
  3. 성능 이슈: 클래스형 컴포넌트는 더 많은 메모리를 사용하고, 인스턴스를 생성할 때 추가적인 비용이 발생합니다. 또한, 클래스형 컴포넌트는 바인딩과 메서드 호출에 대한 오버헤드가 있을 수 있습니다.
  4. 함수형 컴포넌트와 훅의 도입: React 16.8 버전 이후부터 함수형 컴포넌트와 훅(Hook)이 도입되었습니다. 함수형 컴포넌트는 클래스형 컴포넌트와 비교하여 간단하고 명확한 문법을 가지며, 훅을 통해 상태 관리와 생명주기 기능을 활용할 수 있습니다. 이로 인해 개발자들은 함수형 컴포넌트와 훅을 선호하게 되었습니다.
  5. 더 나은 추상화와 컴포넌트 재사용성: 함수형 컴포넌트는 순수 함수처럼 동작하고, 렌더링 결과를 반환하는 형태로 작성됩니다. 이로 인해 함수형 컴포넌트는 더 나은 추상화를 제공하며, 컴포넌트의 재사용성을 높일 수 있습니다.

따라서, React에서는 클래스형 컴포넌트보다 함수형 컴포넌트와 훅을 주로 사용하고, 함수형 프로그래밍의 개념과 원칙에 따라 개발하는 것을 권장합니다.

 

2.Redux toolkit이란

Redux Toolkit은 Redux를 사용할 때 개발자들에게 편의성을 제공하고 생산성을 향상시키기 위한 공식적인 도구 세트입니다. Redux Toolkit은 Redux의 핵심 기능을 간소화하고 보일러플레이트 코드를 최소화하여 개발자들이 더 간편하게 상태 관리를 할 수 있도록 도와줍니다.

Redux Toolkit이 제공하는 기능과 도구는 다음과 같습니다:

  1. configureStore(): Redux store를 설정하는 함수입니다. Redux Toolkit에서 제공하는 configureStore 함수를 사용하면 Redux store를 초기화하고 필요한 미들웨어와 Redux DevTools를 설정할 수 있습니다.
  2. createAction(): 액션을 생성하는 함수입니다. createAction 함수를 사용하면 액션 생성자 함수를 직접 작성할 필요 없이 간단하게 액션을 생성할 수 있습니다.
  3. createReducer(): 리듀서를 생성하는 함수입니다. createReducer 함수를 사용하면 보일러플레이트 코드 없이 간단하게 리듀서를 작성할 수 있습니다. createReducer 함수는 immer 라이브러리를 내부적으로 사용하여 불변성을 유지하면서 상태를 업데이트할 수 있습니다.
  4. createSlice(): 리듀서와 액션들을 함께 정의하는 함수입니다. createSlice 함수를 사용하면 리듀서와 액션들을 한 곳에서 정의하고 Redux Toolkit이 자동으로 액션 생성자 함수와 리듀서를 생성해줍니다.
  5. createAsyncThunk(): 비동기 작업을 처리하는 액션 생성자 함수를 생성하는 함수입니다. createAsyncThunk 함수를 사용하면 비동기 작업을 처리하는 액션을 간단하게 작성할 수 있습니다. Redux Toolkit은 Promise 기반의 비동기 작업을 처리하기 위해 createAsyncThunk를 제공합니다.
  6. createSelector(): 메모이제이션된 셀렉터 함수를 생성하는 함수입니다. createSelector 함수를 사용하면 상태의 변화가 없는 경우 이전 결과를 재사용하여 성능을 최적화할 수 있습니다.

Redux Toolkit은 Redux를 사용하는 개발자들에게 더욱 편리한 개발 경험을 제공하고, 보일러플레이트 코드를 최소화하여 코드의 가독성과 유지보수성을 향상시킵니다.

 

3.React의 생명주기

 

React 컴포넌트의 생명주기는 컴포넌트가 생성되고 소멸될 때까지의 단계를 의미합니다. React 16.3 버전 이전에는 클래스형 컴포넌트에서 생명주기 메서드를 사용하여 이러한 단계를 제어했지만, 함수형 컴포넌트에서는 React Hook을 사용하여 생명주기와 관련된 작업을 수행합니다. 

React 컴포넌트의 주요 생명주기 메서드는 다음과 같습니다:

1. Mounting (생성 단계)
- constructor(): 컴포넌트가 생성될 때 호출되며, 초기 상태(state)를 설정하고 이벤트 핸들러를 바인딩합니다.
- static getDerivedStateFromProps(): props를 기반으로 state를 설정하거나 업데이트합니다. (React 16.3 이후 추가된 메서드)
- render(): 컴포넌트의 UI를 렌더링합니다.
- componentDidMount(): 컴포넌트가 DOM에 삽입된 후 호출되며, 비동기 작업이나 외부 데이터 로딩과 같은 초기화 작업을 수행합니다.

2. Updating (업데이트 단계)
- static getDerivedStateFromProps(): props를 기반으로 state를 업데이트합니다.
- shouldComponentUpdate(): 컴포넌트의 업데이트 여부를 결정합니다. 성능 최적화를 위해 사용될 수 있습니다.
- render(): 컴포넌트의 UI를 업데이트하여 다시 렌더링합니다.
- componentDidUpdate(): 컴포넌트의 업데이트가 DOM에 반영된 후 호출되며, 비동기 작업이나 상태 변경에 따른 추가 작업을 수행합니다.

3. Unmounting (소멸 단계)
- componentWillUnmount(): 컴포넌트가 DOM에서 제거되기 전에 호출되며, 이벤트 핸들러 해제, 타이머 정리 등의 클린업 작업을 수행합니다.

React Hook을 사용하는 함수형 컴포넌트에서는 useEffect Hook을 통해 생명주기와 관련된 작업을 수행합니다. useEffect는 컴포넌트가 생성, 업데이트, 소멸될 때 특정 작업을 수행할 수 있도록 도와줍니다. useEffect를 사용하여 componentDidMount, componentDidUpdate, componentWillUnmount와 같은 동작을 대체할 수 있습니다.

React 17 버전 이후에는 더 세부적인 생명주기 단계로 분리된 리액트 생명주기를 사용할 수 있는 Concurrent Mode와 함께 useTransition Hook도 도입되었습니다. 이를 통해 렌더링 우선

 순위를 조절하고 부드러운 사용자 경험을 제공할 수 있습니다.

참고로, 클래스형 컴포넌트와 함수형 컴포넌트의 생명주기는 서로 다르기 때문에, React를 사용할 때에는 해당 버전의 문서와 리액트 훅의 사용법을 참조하여 정확한 생명주기를 이해하고 활용하는 것이 중요합니다.

 

4.Mobx

MobX는 JavaScript 상태 관리 라이브러리로, React와 함께 사용되는 경우 많이 애용됩니다. MobX는 간단하고 직관적인 API를 제공하여 복잡한 상태 관리를 간소화하고, 애플리케이션의 반응성과 성능을 향상시키는 데 도움을 줍니다.

MobX의 주요 특징은 다음과 같습니다:

  1. Observable 상태: MobX는 상태를 Observable 객체로 변환하여 관찰 가능하게 만듭니다. 이러한 Observable 상태는 애플리케이션에서 변화가 발생할 때 자동으로 추적되고 업데이트됩니다.
  2. 자동적인 리액트: MobX는 자동으로 상태 변경을 감지하고, 변경된 상태에 따라 관련된 컴포넌트를 자동으로 업데이트합니다. 이는 React 컴포넌트를 작성할 때 명시적인 업데이트 로직을 작성하지 않아도 되는 장점을 제공합니다.
  3. 간단한 문법: MobX는 단순하고 직관적인 문법을 제공하여 상태 관리를 쉽게 할 수 있습니다. 상태 변경에 대한 액션을 작성하고, 이를 실행하여 상태를 변경할 수 있습니다.
  4. 컴퓨티드 값: MobX는 컴퓨티드 값(Computed Value)를 제공하여 상태에 기반한 파생된 값들을 효율적으로 계산하고 캐싱할 수 있습니다. 이는 성능 개선과 코드 가독성을 향상시키는 데 도움을 줍니다.
  5. 액션과 리액션: MobX는 액션(Action)과 리액션(Reaction)의 개념을 제공하여 상태 변경을 관리하고, 관련된 작업을 수행할 수 있습니다. 액션은 상태를 변경하는 함수를 의미하며, 리액션은 상태 변경에 대한 반응으로 추가 작업을 수행하는 함수를 의미합니다.

MobX는 React 외에도 Angular, Vue 등 다양한 프레임워크와 함께 사용할 수 있으며, React와 함께 사용하는 경우 MobX React와의 통합을 통해 더욱 효율적인 상태 관리를 구현할 수 있습니다.

 

5.상태관리 라이브러리

React 애플리케이션에서 사용할 수 있는 주요 상태 관리 라이브러리는 다음과 같습니다:

  1. React Context: React에 기본적으로 내장된 상태 관리 기능입니다. Context를 사용하면 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달할 수 있습니다. 하지만 복잡한 상태 관리나 전역 상태 관리에는 다소 제한적일 수 있습니다.
  2. Redux: 가장 인기 있는 상태 관리 라이브러리로, 전역 상태를 관리하는데 사용됩니다. Redux는 단방향 데이터 흐름을 따르며, 상태 변경을 예측 가능한 방식으로 관리합니다. Redux는 액션(Action), 리듀서(Reducer), 스토어(Store) 등의 개념을 사용하여 상태를 업데이트하고, 컴포넌트 간에 상태를 공유합니다. Redux Toolkit과 함께 사용하면 보일러플레이트 코드를 최소화하고 개발 생산성을 향상시킬 수 있습니다.
  3. MobX: 간단하고 직관적인 API를 제공하는 상태 관리 라이브러리로, React와 함께 사용될 때 주로 선택되는 라이브러리입니다. MobX는 Observable 상태를 사용하여 상태의 변화를 감지하고, 관련된 컴포넌트를 자동으로 업데이트합니다. MobX는 리액트 컴포넌트를 작성할 때 상태 변경에 대한 명시적인 업데이트 로직을 작성하지 않아도 되는 장점을 가지고 있습니다.
  4. Zustand: 간단하고 가벼운 상태 관리 라이브러리로, Hook 기반으로 동작합니다. Zustand는 React의 내장 상태 Hook(useState)과 유사한 API를 제공하며, 전역 상태를 관리하는데 사용됩니다. Zustand는 Redux와 MobX에 비해 보일러플레이트 코드가 적으며, 간단한 상태 관리에 적합한 선택지입니다.
  5. Recoil: 페이스북에서 개발한 상태 관리 라이브러리로, React 애플리케이션에서 전역 상태를 효율적으로 관리하기 위해 사용됩니다. Recoil은 React의 특징인 컴포넌트 계층 구조를 활용하여 상태를 관리하며, 선택적인 지연 로딩과 코드 스플리팅을 지원합니다.

이 외에도 MobX-State-Tree, Effector, Valtio 등의 다양한 상태 관리 라이브러리가 있으며, 선택할 때 프로젝트의 규모, 복잡성, 개발자 선호도 등을 고려해야 합니다. 각 라이브러리는 고유한 특징과 사용 방법을 가지고 있으므로, 문서와 예제를 참고하여 적합한 상태 관리 라이브러리를 선택할 수 있습니다.

 

6.보일러플레이트 코드

보일러플레이트 코드(Boilerplate code)는 어떤 작업을 수행하기 위해 반복적으로 작성되는 일반적이고 표준화된 코드를 말합니다. 이는 특정한 작업이나 패턴을 구현하기 위해 항상 필요한 기본 코드 또는 템플릿으로 생각할 수 있습니다.

보일러플레이트 코드는 주로 프레임워크나 라이브러리의 초기 설정, 구조, 표준 코드 패턴 등을 포함합니다. 예를 들어, React에서 새로운 컴포넌트를 만들 때, 초기 상태 설정, 라이프사이클 메서드의 구현, 이벤트 핸들러의 바인딩 등은 보일러플레이트 코드의 일부입니다.

보일러플레이트 코드는 개발자가 반복적이고 일상적인 작업에 시간을 소비하지 않고 더 쉽게 시작할 수 있도록 도와줍니다. 또한 팀 간의 일관된 코드 작성을 장려하고, 프로젝트의 구조와 표준을 정의하는 데 도움이 됩니다.

보일러플레이트 코드는 일반적으로 템플릿, 스캐폴딩 도구, 코드 생성기 등을 통해 자동으로 생성하거나, 프레임워크와 라이브러리의 문서와 예제에서 참고하여 수동으로 작성할 수 있습니다.

728x90
반응형
728x90
반응형

이번에 안드로이드 os가 업데이트 되면서, 기존에 잘 돌아가던, QR리더기쪽에 문제가 생겼다.

 

회사에 있는 기기의 os를 업데이트하며 테스트를 진행해봤는데, 아무 문제가 없었는데, 지속적으로 특정 유저에게서 문제가 발생한다는

 

QA팀의 연락을 받았다.

 

기기명과 os버전을 받고나서 테스트를 해보려고했는데, 회사에 없는 기기였다.

 

https://developer.samsung.com/remote-test-lab

 

Samsung Developers

The world runs on you.

developer.samsung.com

으로 들어가서 해당 기기를 대여했다.

 

접속하면

 

이 탭에서

 

대여할 기기를 선택해서 대여하면된다.

 

기기의 문제가 아니라, 안드로이드 sdk api 레벨에 따른 문제로 밝혀졌다.

728x90
반응형
728x90
반응형

이번 프로젝트 마무리하면서 프로젝트를 처음 시작할때로 돌아갈수 있다면...

 

꼭 적용할 내용들

 

0.AA시에 꼭 문서를 꼼꼼하게 남겨놓자

 - MVP로 AA를 할경우, initData에 필요한 것들을 view별로 문서화해놓자, 안드로이드면 어느 생활주기에서 initData할지까지 적어놓고,

    RN일 경우에는 어느 Screen에서 initData에 필요한것들을 작성

 

1. 프로젝트 일정이 촉박할때는, 템플릿 코드를 회사측에서 구매해서 수정하는 식으로 개발하도록 회사에 건의해봐야한다.

 - 큰 프로젝트에 맨파워가 부족하면, 다음에 꼭 고려하도록 해야겠다. 안그러면 그만큼 더 많이 고생한다고 느꼈다.

 

2.앱 클라이언트 단에서 사용하는 DB를 먼저 붙여서 써야한다

 - 개인차가 있겠지만, 나는 DB를 먼저 붙여서 쓰는게 내 개발 스타일에 잘 맞고, 에자일 방식에 잘 대응이 된다.

 

3.시간이 아무리 부족해도 UI/UX의 기본틀은 짜주고 주니어에게 부탁하자

  - 나도 주니어지만, 내가 초반에 한두시간 더 일하고 집중하는게 결과적으로 내 일하는 시간을 줄일 수 있다.

 

4.View단을 나눌때, 가로모드, ar rtl등을 미리 고려해서 짜자

  - 가로모드가 가능한지 미리 기획단에서 확인하도록 하자

728x90
반응형

+ Recent posts