11/4
npm vs pnpm
npm과 pnpm은 JavaScript 패키지 관리 도구로, 둘 다 Node.js 환경에서 패키지를 설치하고 관리하는 데 사용됩니다.
1. 설치 방식
•
npm (Node Package Manager):
◦
기본적으로 Node.js와 함께 설치됩니다.
◦
패키지를 설치할 때, 각 프로젝트의 node_modules 폴더에 패키지를 각각 다운로드합니다.
◦
동일한 패키지를 여러 프로젝트에서 사용하면 각각의 프로젝트에 별도로 설치되므로 디스크 공간을 낭비할 수 있습니다.
•
pnpm:
◦
패키지를 설치할 때, 패키지를 전역적으로 한 번만 다운로드하고, 각 프로젝트는 이 패키지에 대한 심볼릭 링크를 생성합니다.
◦
이 방식으로 인해 디스크 공간을 절약할 수 있으며, 설치 속도가 더 빠를 수 있습니다.
2. 속도
•
npm:
◦
각 패키지를 매번 다운로드해야 하므로, 상대적으로 설치 속도가 느릴 수 있습니다.
•
pnpm:
◦
전역 캐시를 이용하여 설치 속도를 빠르게 하고, 중복 패키지를 피할 수 있습니다.
3. 의존성 관리
•
npm:
◦
의존성 트리를 평평하게(flat) 구성하여, 모든 패키지가 동일한 위치에 설치됩니다. 이로 인해 의존성 충돌이 발생할 수 있습니다.
•
pnpm:
◦
패키지를 각각의 의존성에 따라 격리하여 설치합니다. 이를 통해 의존성 충돌을 줄이고, 각 패키지가 자신이 필요로 하는 특정 버전을 사용할 수 있습니다.
4. 사용법
•
npm:
◦
기본 명령어: npm install, npm update, npm uninstall 등.
◦
일반적으로 package.json 파일을 기반으로 작업합니다.
•
pnpm:
◦
기본 명령어: pnpm add, pnpm update, pnpm remove 등.
◦
pnpm은 package.json을 사용하지만, pnpm-lock.yaml 파일을 생성하여 의존성 버전을 관리합니다.
npm은 기본적으로 널리 사용되는 패키지 관리 도구이지만, pnpm은 성능과 효율성을 중시하는 개발자들에게 인기가 높습니다. 선택은 프로젝트의 필요에 따라 다를 수 있으며, 특히 대규모 프로젝트에서는 pnpm이 더 유리할 수 있습니다.
npx
npm과 npx의 차이에 대해서글로벌 모듈을 설치하지 않기 위한 몸부림
글로벌 모듈은 혼란스럽습니다.
npm 을 통해서 모듈을 설치할 때, 한 가지 옵션을 주게 되면 매 프로젝트마다 모듈을 설치해 줄 필요가 없고 그저 내 컴퓨터 안에 글로벌한 공간에 모듈을 설치해 프로젝트마다 같은 모듈을 공유해서 사용할 수 있습니다.
바로 -g 옵션인데요, 사용 방법도 꽤 간단합니다.
global
Copy
npm install 모듈이름 -g
Plain Text
복사
•
g를 붙여주기만 하면 글로벌 모듈을 설치할 수 있습니다.
그러나 이는 좋은 방법이 아닙니다.
개발자 입장에서는 귀찮게 여러 번 설치할 필요도 없고 한 번 설치면 끝나는데 왜 좋은 방법이 아닐까 라고 생각하시는 분들이 있을지도 모르겠습니다. 그 이유에는 대표적으로 3가지가 있습니다.
모듈이 업데이트 되었는지 안되었는지 확인이 불가능 합니다.
모든 프로젝트마다 모듈을 재설치 하는것이 아닌, 한 번 설치한 모듈을 그대로 사용하기 때문에 프로그래머가 의식해서 글로벌 모듈을 최신 버전으로 재 설치하지 않으면 확인 자체가 불가능 합니다.
업데이트를 진행했을 때 변동사항이 생겨 다른 프로젝트에도 영향을 끼칠 수 있습니다.
프로젝트를 3개를 운영하는데, 같은 모듈의 각각 다른 버전이 필요한 상황이 있을 수 있습니다. 이럴 때 글로벌 모듈의 버전은 당연히 한 개이기 때문에 문제가 발생하게 됩니다.
create-react-app 같은 보일러플레이트에는 치명적입니다.
리액트 프로젝트 생성 도구인 create-react-app 같은 모듈의 경우, 변경사항이 꽤나 잦은 모듈입니다. 그렇기 때문에 매 설치 전마다 npm으로 재 설치를 하지 않는 경우에는 이전 버전을 사용할 여지가 꽤 있습니다. 이런 프로젝트 생성 모듈은 매 업데이트마다 새로운 기능과 다양한 버그들이 고쳐집니다. 그리고 이런 보일러플레이트 같은 경우에는, 항상 최신 버전을 유지해 주는 것이 좋은데, 매번 설치하는 것이 꽤나 귀찮은 일입니다.
해결책, npx
npm 5.2버전부터, npx가 기본 패키지로 제공되기 시작했습니다. npx도 모듈의 일종입니다. 이 모듈은 npm을 통해 모듈을 로컬에 설치했어야만 실행시킬 수 있었던 기존 문제점의 해결책이 되었습니다. 모듈을 로컬에 저장하지 않고, 매번 최신 버전의 파일만을 임시로 불러와 실행 시킨 후에, 다시 그 파일은 없어지는 방식으로 모듈이 돌아가고 있습니다.
npx는 어디에 효과적일까?
create-react-app같은 보일러 플레이트 모듈에 효과적 입니다. npx를 통해 create-react-app을 설치할 경우에는 매번 최신 버전만을 가져와서 설치해 주기 때문에 지금 어떤 버전을 사용하고 있는 지 신경쓸 필요가 없어집니다. 어짜피 최신 버전만을 사용할 테니까요.
11/5
회사다닐 때 사용했던 개발 프로세스
개발 프로세스
1. 요구사항 분석
- 요구사항 명세서 작성
- 기능 명세서 작성 (엑셀 혹은 노션)
- API 명세서 작성
2. 설계
- 디자인: Figma를 이용해 UI/UX 디자인
- API 문서화: Swagger를 통해 API 명세 작성
3. 개발
- 프론트엔드 작업: API 명세 및 디자인을 기반으로 개발
- 커뮤니케이션: Slack을 통해 팀원들과 소통
- 일정 관리: Notion에서 대시보드 운영
4. 버전 관리
- GitHub 활용:
- Milestone 및 Issue 관리
- 라벨 및 템플릿 지정
- Pull Request(PR) 작성 및 코드 리뷰 진행
- Commit Message 형식 정의
- 브랜치 전략:
- main, dev 및 기능별 브랜치 생성
- 개발 완료 후 dev에 merge, 테스트 후 main에 merge
5. 코드 품질 관리
- 코드 스타일 통일: ESLint 및 Prettier 사용
6. QA 및 유지보수
- QA 리스트 운영: Notion에서 버그 및 개선 사항 기록
- 문제 해결: 하나씩 적용하여 개선
추가할만한 사항
- CI/CD 자동화: GitHub Actions를 활용하여 배포 자동화
- 스토리북 활용: 디자인 컴포넌트 문서화
- 테스트 추가: 유닛 테스트 및 통합 테스트 진행
11/8
Flask에서 SQLite를 사용하면 기본적으로 SQLite 데이터베이스 파일이 파일 형태로 프로젝트 폴더 아래에 저장됩니다. 보통 SQLite 데이터베이스 파일은 Flask 설정에서 지정한 경로에 생성되며, 경로는 상대 경로나 절대 경로로 지정할 수 있습니다.
예를 들어, app.py 파일에 Flask 애플리케이션을 설정하면서 데이터베이스 URI를 다음과 같이 지정했다면:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
Python
복사
이 경우 mydatabase.db라는 파일이 Flask 애플리케이션이 실행되는 루트 폴더 아래에 생성됩니다. sqlite:///는 현재 디렉토리의 경로를 기준으로 파일을 생성하라는 의미입니다.
또는, 하위 폴더에 저장하고 싶다면 경로를 더 상세히 지정할 수 있습니다:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data/mydatabase.db'
Python
복사
이 경우 data라는 폴더 아래에 mydatabase.db 파일이 저장됩니다.
11/10
docker-compose.yml 파일을 작성할 때 별도로 네트워크를 정의하지 않으면, docker-compose가 자동으로 기본 네트워크를 생성하여 모든 서비스가 이 네트워크를 공유하도록 설정됩니다. 따라서 frontend와 backend는 기본 네트워크에서 서로를 서비스 이름(frontend, backend)으로 참조할 수 있습니다.
위 파일에서 backend를 호출할 때 http://backend:5001로 요청하면 frontend에서 backend 컨테이너로 접근할 수 있습니다. docker-compose가 기본적으로 제공하는 네트워크 기능을 활용하고 있기 때문에 별도의 네트워크 설정이 필요 없습니다.
11/18
Ethereum vs Solana
polygon은 이더리움 layer2이다. 이더리움은 사용자가 많이 없더라도 비용이 상당히 많이 발생한다. solana같은 덜 탈중앙화된 블록체인 사용하는게 더 나을수도 있다 몇천배의 비용차이가 난다. 아니면 이더리움 layer2 사용하면 됨.
솔라나는 c++같은 범용 프로그래밍 언어 사용한다. 오늘 기준 블록체인 중에서 2등이다. kaia도 38등으로 꽤 높다. 생각보다 유명하네..
블록체인은 데이터를 못보게 하기 위한 기술이 아니다. 데이터를 투명하게 공개하기 위한 기술이다.
솔라나는 빠르고 저렴한 트랜잭션 처리라는 강력한 장점을 가지고 있지만, 탈중앙화와 신뢰성 측면에서 단점이 두드러집니다. 이러한 이유로, 솔라나는 특정 사용 사례(게임, NFT, 고빈도 트랜잭션)에 적합하지만, 더 광범위한 금융 서비스나 고도의 안정성을 요구하는 애플리케이션에서는 경쟁 블록체인에 비해 신뢰가 떨어질 수 있습니다.
Cursor
11/25
AI followup 해야하는 이유
오픈소스로 풀리는 AI도 많고 내가 AI만드는게 아니더라도 ai가 뭘 할수 있는지 안다면 새로운 프로덕트를 만들어보는데 도움이 되고 현재 마주한 문제를 해결할 수 있는 툴이 될 수 있다. AI를 만드는 사람도 돈을 벌지만 그걸 사용하는 사람도 돈을 번다
Canary Test
소프트웨어를 테스팅을 할 때, 프로그래밍 코드가 조금 바뀐 소프트웨어를 작은 유저 집단에 제공하는 것을 말 합니다.
하지만 그 소프트웨어를 받은 유저 집단은 자신들이, 바뀐 소프트웨어를 받았는지 모르고 그냥 사용합니다.
예를 들어 제가 만든 앱을 사용하는 유저가 100명이라고 가정할 때
95명에게는 안정적인 버전의 앱을 제공하고 나머지 5명에게는 조금 실험적인 코드가 담긴 앱을 제공하는 겁니다.
이 카나리 테스트는 바뀐 코드가 어떤 버그를 유발하는지 빨리 잡아낼 수 있게 해주고 코드 업데이트를 할 때의 경고등이 되어줍니다.
이 카나리 테스트는 대개 sandbox 환경에서의 테스트가 끝나면 시행됩니다.
k8s
workload = 작업량
Kubernetes라는 이름은 조타수 또는 조종사를 의미하는 그리스어에서 유래했습니다. K8s라는 약어는 "K"와 "s" 사이의 8글자를 세어서 만들어졌습니다. Google은 2014년에 Kubernetes 프로젝트를 오픈소스화했습니다.
minikube도 컨테이너다
쿠버네티스 클러스터 ⇒ 노드와 control plane으로 구성됨
control plane은 클러스터의 상태를 모니터링하고 원하는 상태(pod 수 등)을 유지하기 위해서 controller를 실행시킴. control plane은 또한 pod이 실행될 노드를 workload를 확인하여 결정함.
노드는 서버이며 kubelet이 실행되고 있으며 control plane의 지시를 받아 pod을 관리함. kube-proxy로 서비스의 트래픽을 자신에서 실행중인 특정 pod으로 라우팅
kubectl을 통해서 클러스터와 상호작용할 수 있고 api를 통해 control plane과 통신하는 인터페이스이다.
블록체인 프로젝트 개요
SW중심대학사업단 사이트에 있는 마일리지 신청 페이지를 블록체인을 사용해서 따로 구현하는것
마일리지 쌓으면 해외인턴이나 교육프로그램 등 우선선발되고 장학금도 준다.
계획
프로젝트 기한12/21
11/16 까지 기능개발 마치고 17일부터 배포
할일
1.
kaikas wallet을 kaia wallet으로 update
2.
관리자 회원가입 페이지 개발. 승인과정 없이 회원가입과 동일하게 구현하기
3.
마일리지 랭킹을 50개 단위로 pagination해서 보여주는 페이지 개발.
4.
토큰 관리 페이지에 지갑 주소 잃어버렸을때를 대비해서 예비 지갑을 추가할 수 있는 기능 추가.
5.
회원가입 api연결하기
6.
마일리지 랭킹 받아오는 api연결
7.
지갑 추가 api연결
10/5 회의
1.
contract repository를 분리해야한다.
2.
마일리지 랭킹 50개씩 요청해서 받도록 한다.
3.
admin등록할 때 로컬 서버에서 admin테이블에 wallet address를 관리하고 있음.
4.
root admin과 admin에 권한 차이는 없고 root admin에 승인 받았을 때
admin계정 생성할 수 있도록 한다. admin계정도 다른 admin계정 승인할 수 있다.
5.
로컬에서 저장하는 형식으로 바꾸기 때문에 aws s3버킷은 필요없다
Klayton
카카오의 블록체인 플랫폼. 네이티브 암호화폐 KLAY토큰을 사용
지갑을 kaikas에서 kaia로 migration했다.
클레이튼은 독립적인 메인넷을 가진 블록체인이지만 EVM을 기반으로 하고 있기 때문에 Solidity를 통해서 Smart Contract을 개발함.
Kaikas
Kaikas는 클레이튼(Klaytn) 블록체인 플랫폼을 위한 웹 브라우저 기반의 암호화폐 지갑입니다. 이 지갑은 사용자에게 클레이튼 생태계에서 원활하게 암호화폐를 송수신하고, DApp(탈중앙화 애플리케이션)에 접근할 수 있는 기능을 제공합니다.
caver-js
SW마일리지 프로젝트에서는 Web3.js가 아닌 caver.js를 통해 연결을 구현한다
Web3.js, Ethers.js, 그리고 Caver.js는 모두 블록체인과 상호작용하기 위한 JavaScript 라이브러리입니다.
•
역할: Klaytn 블록체인과 상호작용하기 위한 JavaScript 라이브러리입니다.
•
기능:
◦
Klaytn의 스마트 계약, 트랜잭션, 계정 관리 등을 지원합니다.
◦
Klaytn의 고유한 기능과 API를 활용하여 DApp을 개발할 수 있습니다.
•
caver-js를 통해 컴파일한 smart contract을 klayton블록체인에 배포하고 블록체인과 상호작용한다. caver-js를 통해서 내가 연결할 게이트웨이는 지갑인 kaia이다.
트랜잭션
블록체인 플랫폼에서 트랜잭션은 노드 간에 전송되는 메시지로, 블록체인의 상태를 변경합니다. 예를 들어 앨리스의 계정에서 밥의 계정으로 10 KLAY를 전송하는 트랜잭션이 실행되면 앨리스의 잔액은 10 KLAY 감소하고 밥의 잔액은 10 KLAY 증가합니다. 트랜잭션은 원자 연산이므로 다른 트랜잭션에 끼워 넣을 수 없다는 점에 유의하시기
바랍니다.
KCT
KCT (Klaytn Compatible Token)는 Klaytn의 호환 토큰을 뜻하며, 특정 기술 스펙을 구현한 특별한 타입의 Klaytn 스마트 컨트랙트 입니다. Klaytn의 토큰 표준은 KIP-7과 KIP-17으로 정의되어 있습니다.
KIP-7은 대체 가능한 토큰(Fungible Token)에 대한 표준입니다. 대체 가능한 토큰은 각 토큰 단위가 동일한 가치를 지니며 모든 가용 토큰끼리 서로 호환이 가능합니다. KIP-7의 표준 인터페이스를 통해 클레이튼에 모든 토큰들이 지갑에서 탈중앙 거래소에 이르기까지 다른 어플리케이션에서 재사용 할 수 있습니다.
KIP-17은 대체 불가능한 토큰 (Non-fungible Token)에 대한 표준입니다. 따라서 고유한 가치를 가지고 있으며각 토큰 간의 호환이 불가능합니다. KIP-17의 표준 인터페이스를 통해 wallet/ broker/ auction 어플리케이션들은 클레이튼에 NFT와 함께 작동될 수 있습니다. 또한, 클레이튼은 간단한 KIP-17 스마트 컨트랙트와 임의의 많은 양의 NFT들을 추척하는 컨트랙트를 제공합니다.
klatnscope
klatyn거래 모니터링하는 사이트
진행사항
프론트엔드에서 ABI를 통해서 블록체인과 상호작용하고 있지 않다면 caver-js나 솔리디티 파일이 프론트에 있을 이유가 있을까? caver-js는 kaia와 연결하기 위해 쓰이고 있는건가?
현재 문제점
react-app-rewired는 뭔가
Javascript createObjectURL, revokeObjectURL
script가 없는데 어떻게 window객체에klaytn이 존재하지?
11/7
마일리지 랭킹 API 구현 완료
프론트에 ABI직접 호출하는 코드가 정말 없나?
일단 학생 페이지에는 sol파일이 없는것을 확인했는데
admin페이지에서는 sol파일이 하나 있다
caver를 디렉토리 전체에서 찾아보면 kip7을 사용하는게 여러번 보이고 딱히 직접 ABI호출해서 받아오는건 없는거같은데??
hardhat같은게 있는것도 아니고
KIP7은 토큰 생성 관련 프로토콜
11/30
컨트랙 생성해서 토큰 생성하는 경우에도 fee는 kaia의 화폐인 klay로 내야함 이더리움도 eth로 내야하는건 마찬가지
대부분의 NFT는 uri만 블록체인에 저장함 실제 컨텐츠 내용은 서버상에 올라간것
기본적으로 dynamic한건 언제든지 서버에서 수정가능하기때문에.
실제 민팅했을때 당시의 정보랑 다른지 확인하려면 이미지 해시값을 같이 저장해두면 서버에서 바꾸는건 못막아도 민팅한 이미지가 맞는지는 확인할 수 있다
민팅은 블록체인상에서 토큰이나 NFT를 발행하는것
NFT는 대체 불가능 토큰 민팅 = 토큰발행
토큰발행은 컨트랙을 생성하는것 돈을 받으면 토큰을 보내준다는 smart contract
딱 한개의 토큰만 발행하는 컨트랙을 만든다면? 그리고 그 데이터에 이미지 등을 넣는다면 NFT가 된다.
이미지, 영상 등의 해시값을 통해서 마켓에서 이미지의 유일성을 보장할 수 있으나 조금이라도 변경된 이미지는 다른 이미지가 되는것이 맞다
그리고 다른 블록체인에서 NFT를 발행해서 이미지를 저장하는것은 막을 수 없다
kaia online toolkit, kaia scan, kaiai contract wizard
swapscanner
swap이란 DEX에서 다른 종류의 코인을 구매하는것. 즉 한 토큰을 다른 토큰으로 교환할 수 있다
즉 서로 다른 암호화폐를 교환하는 행위
CEX와 달리 스마트 ㅋ계약을 통해서 실행된다. 사용자는 특정 암호화폐를 유동성 풀에 예치하고 교환할 암호화폐를 받는다. 유니스왑 팬케이크스왑 등의 플랫폼이 있음
유동성 풀이란 두가지 암호화폐를 한쌍으로 묶어서 예치해둔 자산 저장소. 유동성 제공자는 예치 자산에 대한 보상으로 거래 수수료의 일부를 받음
탈중앙화 거래소는 블록체인 기술과 스마트 계약을 통해서 중앙기관 없이 거래를 가능하게 하는 플랫폼
거래소 운영자가 없고 스마트 계약을 통해서 거래가 이루어짐
window.klaytn이 존재하는 이유는 extension을 다운받았기 때문!!
11/20
vscode는 소개를 보면 알듯 에디터이지 ide가 아님 xcode는 ide이다. ide의 기준은 또 project관리파일이 있냐이다 프로젝트를 ide는 직접 관리해준다.
하드웨어 드라이버, 게임엔진같은거 짠다고 하면 visual studio를 사용하는게 거의 필수라고 한다
C++은 visual studio를 많이 사용한다 visual studio가 IDE로서 더 기능이 많다 훨씬 무겁고 이제는 윈도우에서만 지원함 방대한 양의 코드가 들어가는 큰 프로젝트관리에 유리하고 vscode는 웹개발에 더 적합함