문제 상황 깃헙 credential이 osxkeychain으로 설정되어 있는데 이를 사용하지 않고자 하는 경우, credential.helper 값을 삭제해줘야 한다. 해결 방법 git config --local credential.helper, git config --global credential.helper, git config --system credential.helper 이 세 명령어를 쳐보면서 어느 스콥에 세팅이 되어있는지 확인한다. 나의 경우에는 시스템에 설정되어 있었다. 위 결과를 토대로 unset해준다. 나의 경우에는 system이었으므로 syatem option과 unset option을 함께 주었다. git config --system --unset credential.helper ..
모노레포를 구축하는 도구에는 yarn, lerna, turborepo, nx, pnpm 등이 있다. 이 중에서도 yarn에 대해 알아보자. yarn의 workspaces 필드를 사용하여 모노레포를 구성할 수 있다. yarn link를 통해 node_modules에 워크스페이스에 대한 심볼릭 링크를 생성할 수 있는데 워크스페이스는 이를 더 선언적인 방식으로 사용하는 방법이다. // in package.json { "workspaces": ["packages/*"] // packages 폴더 내에 있는 모든 폴더들을 전부 워크스페이스로 만든다. }note: 워크스페이스: 패키지, 워크트리: child 워크스페이스를 갖고 있는 워크스페이스 위 예제에서 packages는 워크트리이다. workspace rang..
Ref 커밋을 참조하는 ref에 대해 알아보자. Hash 커밋을 참조하는 가장 직접적인 방식으로, SHA-1 해시를 통해 참조할 수 있다. 이는 각 커밋의 고유한 id이며, git log 명령을 통해 각 커밋의 해시를 확인할 수 있다. Refs 커밋을 참조하는 간접적인 방식이다. 커밋 해시에 붙이는 alias 같은 것이라고 생각하면 된다. .git 폴더에 보면 refs라는 폴더가 있다. 그 안에 보면 heads, remotes, tags 등 또 하위 폴더가 존재한다. heads는 레포의 로컬에 있는 모든 브랜치를 정의하고 있는 폴더이다. heads의 내부를 보면 로컬에 있는 브랜치들이 폴더로 존재하고, 그 안에는 해당 브랜치의 가장 끝에 있는 커밋 해시를 저장하고 있다. cat .git/refs/head..
detached HEAD 브랜치가 아닌 커밋에 체크아웃했을 때 'detached HEAD' 상태에 있다고 한다. 예를 들어 git checkout 이렇게 브랜치로 체크아웃하는 것이 아닌 git checkout 이렇게 특정 커밋으로 체크아웃할 수 있다. git checkout git checkout HEAD~3 // 현재 헤드에서 3번째 전 커밋 HEAD는 해당 브랜치의 가장 최신 버전을 가리키는데, 커밋으로 체크아웃한 상태인 detached HEAD(분리된 HEAD)는 레포의 HEAD를 보고 있지 않다는 뜻이다. detached HEAD 상태에서는 안전하게 해당 커밋에 여러가지 변경을 가할 수 있다. 이 변경을 저장할 수도 있고, 버릴 수도 있는데, 저장하기 위해서는 새로운 브랜치를 만들어야 한다. gi..
글로 정리해서 쓰면 좋은데 일단 자료만 갖고 있는 것들을 여기에 모아뒀다가 시간 날 때 작성할 예정 클린 코드 https://www.youtube.com/watch?v=edWbHp_k_9Y&list=RDCMUCeg5g-vWgtgzQ0cYNV2Cyow&index=4 https://engineering.linecorp.com/ko/blog/line-securities-frontend-3/ https://goongoguma.github.io/2021/06/05/How-to-use-React-Context-effectively/ https://www.npmjs.com/package/react-hook-popup 클린 코드 관련한 좋은 영상을 봐서 회사에 적용해보려고 했던 것을 before/after 형식으로 적..
링크: https://everyanalytics.github.io/web-analytics-handbook/blog/2021/09/04/flutter-fb-analytics-plugin Flutter 플러그인으로 ecommerce 이벤트 보낼 때 생긴 일 | Web Analytics Handbook 이 글은 Flutter 플러그인으로 ecommerce 이벤트를 보내는 방법에 대한 내용이 아닙니다. 제가 겪은 이슈를 공유하는 차원의 글이며 세부적인 구현은 들어있지 않으므로 감안하고 봐주시면 감사하겠 everyanalytics.github.io 이번에 오픈소스 컨트리뷰션 아카데미에서 쓴 글 중 하나. 회사에서 플러터 플러그인으로 구글 애널리틱스에 이벤트를 보내려고 했는데 안드로이드만 누락되는 이슈가 있었던 ..
https://everyanalytics.github.io/web-analytics-handbook/docs/handbook/google-analytics-basics/what-is-the-difference-between-ua-and-ga4 👆 이 글은 2021 오픈소스 컨트리뷰션 아카데미에서 react analytics provider 팀으로 참여하면서, 핸드북에 내가 작성한 글이다. 구글 애널리틱스 관련 글을 찾아보면 UA와 GA4가 혼용돼 있어서 어떤 차이점이 있는지 평소에 궁금했었기에 작성해보았다.
Step In 함수 호출이 있으며, 함수가 호출된 줄로 돌아가서 결과를 리턴할 때까지 호출된 함수 몸통으로 들어가서 한줄 한줄 시행한다. Step over 함수 호출이 있으면 블랙 박스처럼 함수가 어떻게 실행되었는지는 보여주지 않고 리턴된 결과만 보여준다. Step out step in으로 함수 안에 들어간 상태에서 step out을 누르면 함수 몸통의 남은 부분을 실행하는 부분을 보지 않고 함수가 리턴된 부분으로 step out하겠다는 뜻이다.
물리 계층: 데이터를 전기 신호로 변환하기 1계층 물리 계층(Physical Layer): 시스템 간의 물리적 연결과 전기 신호를 변환 및 제어 비트로 된 디지털 데이터를 실제로 네트워크를 통해 전송하려면 전기 신호로 변환이 되어야 한다. 이 작업은 OSI 모델의 최하단 계층이었던 물리 계층에서 일어난다. 비트열을 전기 신호로 변환하는 작업은 랜 카드 가 한다. 즉, 비트열은 랜카드를 통해 전기 신호로 변환되어 전송되고 상대방은 받은 전기 신호를 다시 비트열로 복원하는 것이다. 네트워크의 전송 매체 네트워크의 전송 매체는 데이터가 흐르는 물리적인 선로를 말한다. 종류는 크게 유선, 무선으로 나뉜다. 유선의 예시: 트위스트 페어 케이블(랜 케이블), 광 케이블 등 무선의 예시: 라디오파, 마이크로파, 적외..
패킷 패킷은 네트워크를 통해 전송되는 작은 데이터 조각 단위이다. 큰 데이터가 있더라도 작게 패킷으로 나누어서 보내는 것이 규칙이다. 왜냐하면 큰 데이터를 그대로 보내면 대역폭(bandwidth)을 너무 크게 점유해서 다른 패킷의 흐름을 막을 위험이 있기 때문이다. (대역폭이란) 네트워크에서 이용 가능한 최대 전송 속도로 정보를 전송할 수 있는 단위 시간당 전송량을 말한다. 데이터를 조각내서 패킷으로 보낼 때에는 순서대로 숫자를 붙여서 보낸다. 왜냐하면 네트워크를 통해서 패킷이 전송될 때 순서대로 도착하지 않을 위험이 있기 때문이다. 즉 나누어서 보낸 데이터 패킷을 수신 측에서 다시 조합해서 정상적인 데이터로 만들기 위해서 조립 순서를 적어서 전송하는 것이다. 전기 신호 비트 정보는 전기 신호로 변환되고..
먼저 노드를 구현한다. C에서 구조체(struct)로 node를 정의할 수 있다. 배열처럼 인접한 셀들의 메모리 chunk가 아니라, 떨어진 메모리를 연결하는 것이기 때문에 자신의 값과 다음 노드의 주소를 가리키는 값(포인터)을 가지고 있어야 한다. 이 구조체를 node라고 한다면 다음 노드의 주소를 가리키는 next라는 포인터 변수는 node 타입을 값으로 갖고 있으므로 node *로 선언한다. 그러면 아래처럼 node라는 struct를 구성할 수 있을 것 같다. 하지만 여기서 하나 문제는, 맨 마지막 줄을 읽을 때까지 C는 여기에 node라는 struct가 있음을 알지 못하는데, 이미 그 전에 node *next 를 선언한다는 것이다. typedef struct { int number; node *n..
잘못된 코드 #include void swap(int a, int b); int main(void) { int x = 1; int y = 2; swap(x, y); printf("x: %i, y: %i\n", x, y); // 여전히 x는 1, y는 2 } void swap(int a, int b) { int tmp = a; a = b; b = tmp; } 위 코드는 swap함수 안의 a와 b의 값을 바꾸기는 하지만, main 함수 안에 x와 y는 바꾸지 못한다. 왜냐면 swap함수로 전달되는 값은 복사된 값(pass by value)이기 때문이다. (참고로 C언어는 자바스크립트나 파이썬과 같은 언어와 달리 전부 pass by value로 넘어간다. object랑 비슷하게 생긴 struct도 마찬가지다...
문자열 복사하기 #include #include #include #include int main(void) { char *s = get_string("s: "); // leo char *t = s; t[0] = toupper(t[0]); printf("s: %s\n, s"); // Leo printf("t: %t\n, t"); // Leo } t에 s를 할당하고, t의 첫글자를 uppercase로 바꾸고 난 뒤 t와 s를 출력하면 두 개 모두 첫글자가 대문자로 출력된다. 왜냐하면 t는 s가 갖고 있는 주소를 가리키고 있기 때문이다. 즉 s가 갖는 주소에 있는 값이 변하면, t도 동일한 것을 보고 있으므로 역시 똑같이 변한 값이 출력된다. #include #include #include #include i..
string s = "LEO"; 사실 c에는 string이라는 자료형이 없다. 그 간 string이라는 자료형은 만들어진 것이며, 이를 사용하기 위해 라이브러리에서 불러온다는 것은 알고 있었다. 그렇다면 string 자료형은 내부적으로 어떻게 구현이 되어있는 것일까? 전에도 언급했듯이 string은 단지 char의 배열이다. 내부적으로 보면 메모리에 L, E, O, \0(널 종단문자) 순서대로 저장되어있을 것이다. 그러면 변수 s는 어떤 값을 저장하고 있는 것인가? 변수 s는 char 배열의 가장 첫 번째 글자인 L이 위치한 메모리 주소를 값으로 갖고 있다. 즉, s는 포인터 변수이다. s는 char 배열의 첫 번째 글자의 주소만 알고 있고, 그 주소에서부터 시작해서 널 종단 문자가 나올 때까지 loop..
16진수 16진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 로 숫자를 나타낸다. 0에서 9까지는 10진수와 값이 동일하고, A는 10, B는 11, C는 12, D는 13, E는 14, F는 15를 나타낸다. 즉 16진수에서는 한자리 수로 0에서부터 15까지 표현할 수 있다. 그런데 위에서 보다시피, 0에서부터 9까지는 10진수와 동일한 값이라서 10진수와 헷갈릴 우려가 있다. 그래서 16진수에서는 모든 수 앞에 0x 를 붙인다. 이건 아무런 의미가 없고 그냥 16진수라는 뜻으로 붙인다. 예를 들어 16진수의 0은 0x0 으로 표기한다. 그렇다면 이해를 돕기 위해 2진수를 16진수로 바꾸어보자. 8비트가 나타낼 수 있는 가장 큰 수는 255이다. 2진수로는 1..
- Total
- Today
- Yesterday
- Redux
- react
- Java
- Conflict
- jQuery
- Prefix Sums
- youtube data api
- 리덕스
- Session
- 제네릭스
- 개발 공부
- oracle
- JavaScript
- 포인터 변수
- getter
- rxjs
- Data Structure
- til
- GIT
- 깃
- package.json
- linkedlist
- this
- 자바
- CSS
- 알고리즘
- SQL
- c언어
- 인스턴스
- useEffect
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |