ERC-20의 구조적 한계와 ERC-20 Permit(EIP-2612)
·
👨‍💻 Programming/ethereum
ERC-20의 구조적 한계스마트 컨트랙트에서 ERC-20 토큰을 사용하려면 일반적으로 다음 과정을 거칩니다.사용자가 approve()를 호출하여 컨트랙트에 토큰 사용 권한을 위임컨트랙트에서 transferFrom()을 호출하여 실제 토큰을 전송즉, 한 번의 거래를 위해 최소 2개의 트랜잭션이 필요하며, 이로 인해 가스 비용이 불필요하게 증가하게 됩니다.또한, 많은 서비스에서는 편의성을 위해 사용자가 "무제한 승인" (approve(uint256.max))을 하는 경우가 많은데, 이 방식은 잠재적인 보안 취약점을 유발할 수 있습니다.컨트랙트가 해킹되거나 악의적으로 변경될 경우, 승인된 한도 내에서 사용자의 지갑에서 토큰이 무제한으로 인출될 수 있습니다.요약하면ERC-20은 컨트랙트 기반 거래 시 appro..
[AWS-CLI] 람다 함수 실행, 실시간 로그 추적, 피지컬 리소스 ID 조회
·
⚙️ Tool/AWS
AWS로 개발을 진행하면서, 콘솔을 사용하기 번거로울 때, 프로필을 등록해 CLI로 개발 및 디버깅을 하면 편리합니다.오늘은 개발 하면서 자주 사용했던 람다 실행, 실시간 로그 추적 cli에 대해서 정리하려고 합니다.람다를 실행하거나 실시간 로그를 추적하기 위해서는 우선 람다의 피지컬 리소스를 알아야합니다.피지컬 리소스 ID 조회aws cloudformation describe-stack-resources --stack-name test-api-dev \ --query "StackResources[?LogicalResourceId=='TestScheduler'].PhysicalResourceId" --output text --profile profile-test--stack-name 뒤에, 조회할 스택..
[Docker] Docker로 MySQL 띄우기
·
⚙️ Tool/Docker
Docker로 MySQL 실행하기docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:latest--name : 컨테이너 이름 설정-e : 환경변수를 설정-e MYSQL_ROOT_PASSWORD= : MySQL의 root 권한의 패스워드 설정-d : detach 모드로 컨테이너가 실행됩니다. 컨테이너가 백그라운드로 실행된다고 보면 됩니다.-p : 호스트와 컨테이너의 포트를 연결합니다.mysql:latest : 컨테이너에 사용할 이미지 버전을 설정합니다.Docker Compose프로젝트 루트에 docker-compose.yaml을 생성 후, 아래와 같이 작성version: '3.8' # 파일 포맷 버전 지정..
[DynamoDB] DynamoDB 로컬 연결
·
💻 CS/Database
1. NoSQL Workbench로 로컬 연결NoSQL Workbench 설치하기Download NoSQL Workbench for DynamoDB NoSQL Workbench 설치 후, DDB local 실행하기 8000포트로 DynamoDB 로컬 실행하기실행 후, 로컬 다이나모디비가 실행중인지 명령어로 확인lsof -i :8000실행후, 테스트 테이블 만들기테이블 생성 후로컬 다이나모디비에 생성된 테이블 리스트 확인aws dynamodb list-tables --endpoint-url --profile profile.id 로컬 다이나모디비에 아이템 넣기aws dynamodb put-item \ --endpoint-url http://localhost:8000 \ --table-name Test..
[DynamoDB] 키 디자인 패턴
·
💻 CS/Database
DynamoDB 테이블 구조아이템(보통 RDBMS에서는 로우라고 부름)어트리뷰트(보통 RDBMS에서는 컬럼이라고 부름)파티션키(PK) : PK가 있기때문에 테이블의 크기가 아무리 크더라도 동일한 시간에 특정 아이템을 검색할 수 있음.정렬키(SK) : SK를 통해서 1:N 관계 모델링을 할 수 있음.데이터베이스 스케일링트래픽이 증가할 때, 높은 성능이 필요한 경우 RDBMS는 스케일 업을 선택함. 하지만 NoSQL은 처음부터 대규모 트래픽을 목적으로 만들어졌기때문에 스케일 아웃 전략을 선택함.그렇다면 기본 전제는 수평으로 확장 가능한 데이터를 어떻게 설계할 것인가임.각 머신들을 골고루 잘 사용할 수 있도록 설계해야함.여러 개의 파티션이 골고루 사용될 수 있도록 키 디자인 하는 것이 중요함.제약 조건RCU ..
[JS] 데이터타입 / 원시 값과 객체의 비교
·
👨‍💻 Programming/JavaScript
데이터 타입 분류자바스크립트의 데이터 타입은 크게 두 가지로 분류됩니다.Primitive Type : String, Number, boolean, null, undefined, SymbolReference Type : Object - Array, function RegExp, Set, Map ...참고로 자바스크립트 메모리는 스택과 힙 영역으로 구분되어 있는데, Primitive Type은 스택 영역에 Reference Type은 힙 영역에 저장됩니다.
[AWS] SAM local 실행 중 오류 Address already in usePort 3000 is in use by another program.
·
⚙️ Tool/AWS
SAM 람다 함수를 테스트 하기 위해 로컬로 실행 시, 아래와 같은 메세지를 자주 봤습니다.Address already in usePort 3000 is in use by another program.3000 포트를 다른 프로그램이 사용하고 있다는 말이기 때문에 3000 포트 PID를 찾아 종료해주면 됩니다.❯ lsof -i :3000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsam 88428 jin 2314u IPv4 0xab2efde4a0974aa1 0t0 TCP localhost:hbci (LISTEN)❯ kill 88428혹은 다른 포트를 사용하면 됩니다.sam local start-api --po..
[AWS] AWS CLI 프로파일 목록 확인 및 삭제
·
⚙️ Tool/AWS
계정 확인 방법❯ aws configure list-profilesdefaultjinjin2jin3삭제 방법터미널에서 아래 명령어로 AWS 설정 파일을 엽니다.nano ~/.aws/credentials또는code ~/.aws/credentials # VS Code로 여는 경우삭제하고 싶은 프로파일의 항목을 찾고 아래와 같이 제거합니다[jin3]aws_access_key_id = AKIAXXXXXXXXXXXXXaws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX같은 방식으로 ~/.aws/config 파일도 열어서 해당 프로파일 항목이 있으면 삭제합니다:nano ~/.aws/config[profile jin3]region = ap-northeast-2outp..
[Next.js] Rendering
·
👨‍💻 Programming/Next.js
What is Rendering?Rendering is the process of transforming the component code you write into UI that users can see and interact withIn Next.js, the tricky part to building a performant application is figuring out when and where this transformation should happen.CSR, SSR and RSCs?Rendering in React → Rendering in Next.jsHow rendering works in React - CSRClient Side RenderingThis whole approach - ..