분류 전체보기 52

[Git] fatal: refusing to merge unrelated histories

문제 상황 우선 로컬에서 프로젝트를 생성하여 작업을 수행하였습니다. Github 상으로 README를 추가하여 원격 저장소를 생성하였고, 곧바로 README를 수정하는 커밋을 남겼습니다. Git remote add 후 git pull을 시도하였으나 실패하였습니다. 원격 저장소를 생성할 때에 독자적으로 README를 추가하고 수정하는 커밋을 남김으로써 로컬 저장소와는 별개의 커밋 이력을 가지게 되었습니다. ※ 두 Initial 커밋은 서로 다른 커밋입니다. 해결 git pull을 사용할 때에 --allow-unrelated-histories 옵션을 사용하여 강제로 커밋을 공유합니다. 해당 옵션을 사용하면 완전히 별개의 커밋 이력을 가진 저장소 간의 커밋을 공유할 수 있게 됩니다. 위의 방법 이외에도 pul..

[TypeScript] 배열 요소에 대한 타입 추론

문제 React를 사용하면서 API 요청을 처리하는 훅을 정의하였습니다. 요청 함수로부터 얻은 데이터를 두 개의 state로 분리하여 배열 형태로 반환하고자 하였습니다. 함수 내부에서는 타입이 변수별로 정상적으로 추론되었지만, 실제 사용하고자 할 때 유니온 타입으로 추론되었습니다. 해결 함수 반환 타입을 명시하였습니다. // const 함수명 = (인자): 반환 타입 => {...} export const useGetPerformances = (...): [pageInfo: PageInfo | undefined, data: PerformanceType[]] => { const [pageInfo, setPageInfo] = useState(); // undefined로 할당됩니다. const [data, ..

[React] JavaScript로 작성된 카카오 지도를 TypeScript로 포팅하기

상황 카카오 지도 API를 활용함에 있어 우선 JavaScript 코드로 작성하여 구현하였습니다. 다음에서 제공하는 주소 검색 서비스와 카카오 지도 서비스 모두 동일하게 daum이라는 네임스페이스를 사용하여 서비스를 이용하고 있었고, 타입을 선언하기 곤란했습니다. '24. 02. 05. - 당장 타입이 필요하신 분은 이쪽으로 https://github.com/JaeSeoKim/kakao.maps.d.ts 변경 - any의 사용 kakao, daum 분리 지도 API를 활용할 때, kakao를 네임스페이스로 하여 타입을 선언한 글을 발견하여 any를 사용해서라도 타입을 정의하고 TypeScript 파일로 변환하고자 했습니다. 빠르게 기능을 완성해야 하는 현실과 타협하여 외부 라이브러리에 대하여 any 타입..

[PWA] mainfest.webmanifest를 가져오지 못하는 문제

문제 원인 분명 CRA 초기 구성할 때 index.html에 manifest.json으로 링크되는데 어떤 이유에서인지 스스로 manifest.webmanifest로 바꾸어 프로젝트 초기 설정을 해버렸습니다. 확장자가 잘못되었으니 파일이 정상적으로 불러와질 리가 없습니다. 해결 저의 경우, 처음 프로젝트를 세팅할 때 어떤 글을 보고 확장자를 바꾼지는 모르겠습니다만 일단 프로젝트 public 폴더에 작성된 manifest 파일의 확장자를 확인하여 다시 올바르게 작성합니다. 저의 경우엔 json을 그대로 사용하니 webmanifest 확장자 대신 json 확장자로 변경하였습니다. 이제 잘 됩니다. 아플 땐 무리하지 말고 쉽시다.

[npm] nvm으로 node.js 버전을 설치하였으나 다시 켤 때마다 npm을 찾지 못하는 오류

상황 nvm install 옵션 중 lts 옵션을 사용해 보고자 nvm -ls로 확인된 lts 버전 중 lts/Gallium(v16.20.1)을 아래의 명령어로 설치 # 잘못된 명령어입니다. Gallium -> gallium nvm install --lts=Gallium 설치 후 lts 중 Gallium은 없다는 식의 오류가 발생하였으나 대수롭지 않게 넘기고 직접 v16.20.1 버전을 명시하여 다시 설치하였습니다. 하지만 처음 입력된 lts/Gallium이라는 버전이 default로 이미 지정되었고, 터미널을 다시 실행할 때마다 이것을 기본으로 실행하였습니다. 원인 대문자로 시작하는 Gallium이 아니라 gallium으로 입력했어야 옳습니다. 해결 nvm alias default default 버전을..

테스트 파일 확장자 실수

문제 다른 페이지에 대한 테스트케이스를 추가하고자 기존의 테스트를 복사하여 붙여넣기 하였습니다. eslint에서 불만을 토로하는 것을 확인하고 stash, pop, 브랜치 작업을 하는 과정에서 eslint 설정이 바뀌었나 싶어서 설정 확인 결과 jest 관련된 설정 모두 이상 없음을 확인했습니다. 초기 설정부터 들어있던 jest가 사라졌나 싶었지만 그것도 아닙니다. 그 순간 JavaScript 아이콘이 눈에 들어왔습니다. 아차... 해결 QuestionItemPage.test copy.js → QuestionPage.test.js 로 파일명을 변경하니 말끔히 해결되었습니다.

[node.js] 백준 문제풀이 시간초과(console.log)

문제 상황 로직 자체는 간결하게 작성한 것 같으나 제출한 코드가 시간 초과로 통과되지 않았습니다. 글 읽기 - [node.js] 10828번 - 스택 / 시간초과 댓글을 작성하려면 로그인해야 합니다. www.acmicpc.net console.log를 호출하는 횟수가 늘어날 수록 프로그램 실행 시간이 급격하게 늘어납니다. 따라서, 배열에 모든 결과를 저장해 두었다가 배열을 join하여 하나의 문자열로 만든 뒤, console.log를 한 번만 호출하여 해결하는 것이 핵심입니다. const result = []; // ... result.push()로 결과 저장 console.log(result.join('\n')); console.log 호출 횟수에 따라 실행 시간에 큰 차이가 발생한다는 사실만 보면 되..

[node.js] Github Actions로 테스트 수행 중 replaceAll 함수 오류

오류 // TypeError: input.replaceAll is not a function 해결 오류 메시지 중 replaceAll 부분에 눈을 돌렸습니다. 검색하자마자 node 환경에서 replaceAll을 지원하지 않으므로 replace 메서드를 활용하여야 한다는 내용을 접하였습니다. 이전에 Array의 at 메서드 같은 경우 특정 환경에서 사용할 수 없었던 경험이 있어서 빠르게 의심할 수 있었습니다. // before replaceAll(" ", "") // after replace(/\s/g, "") 위와 같이 수정한 후 정상적으로 실행되었습니다.