일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 머신러닝기초
- vue기초
- cloud hsm 사용하기
- ethers v6
- 러스트기초
- 스마트컨트렉트 예약어 함수이름 중복
- Vue.js
- redux toolkit 설명
- SBT표준
- rust 기초
- redux 기초
- 오블완
- ambiguous function description
- 티스토리챌린지
- ethers type
- 체인의정석
- cloud hsm 서명
- erc4337 contract
- 스마트컨트렉트 함수이름 중복 호출
- 스마트 컨트렉트 함수이름 중복
- 러스트 기초 학습
- ethers websocket
- ethers typescript
- 컨트렉트 동일한 함수이름 호출
- 러스트 기초
- Vue
- erc4337
- 계정추상화
- cloud hsm
- git rebase
Archives
- Today
- Total
체인의정석
API에서 블록체인 지갑 주소 받아올 때 해야할 필수 처리 (대소문자 처리 & 공백 제거) 본문
728x90
블록체인 지갑 주소의 경우 대소문자 구분이 존재하지만 db상에는 소문자 기준으로 저장하거나 하는등의 특별한 기준이 필요하다.
이렇게 만들 경우 api에서 지갑 주소에 공백이 들어오거나 대소문자가 들어오게 되면 자동으로 변환해서 검색해주는 부분이 필요하게 된다.
filter["wallet_address"] = bson.M{
"$regex": wallet,
"$options": "i",
}
위와 같이 옵션에 i를 넣게 되면 대소문자 무시를 하게 되기 때문에 지갑 검색에 용이해지게 된다.
- wallet 문자열을 정규표현식으로 검색하되,
- "0xAaBb..."와 "0xaabb..."와 같이 대소문자를 구분하지 않고 비교합니다.
- 예: 사용자가 "0xAabb"라고 입력해도, DB에 "0xaabb", "0XAABB" 등으로 저장된 값도 모두 검색됩니다.
그 외의 option은 다음과 같은 것이 존재한다.
🔧 "$options"에 사용 가능한 값들
옵션의미
"i" | 대소문자 무시 (case-insensitive) ← 현재 사용 중 |
"m" | 멀티라인 모드 (^, $가 각 줄 기준으로 작동) |
"s" | .이 줄바꿈 문자 포함하여 매칭 |
"x" | 공백/주석 허용 (extended mode) |
또한 지갑 주소에는 공백이 있으면 안되기 때문에
bson.M{
"$regex": wallet,
"$options": "ix", // 대소문자 무시 + extended mode
}
위와 같이 쓸 수도있다.
다만 근본적인 해결책은 이를 고려하여서 wallet값을 db처리하는 쪽에 넘기는 것이다.
func LowerCaseWalletAddress(addr string) string {
// 둘 다 소문자로 변환하고 공백도 제거한 후 비교
return strings.ToLower(strings.TrimSpace(addr))
}
따라서 다음과 같은 앞뒤 공백 처리 로직을 넣은 util함수를 정의해서 사용하기로 하였다.
728x90
반응형
'개발 > backend(go)' 카테고리의 다른 글
go 응답 값 타입 any처럼 유연하게 지정하기 interface 사용법 (0) | 2025.06.11 |
---|---|
Go Gin으로 API 만들기: POST/GET 기본 구조 + Swagger 작성법 (1) | 2025.04.25 |
Go) JWT 발급 및 인증 로직 (백엔드) (0) | 2025.04.10 |
Go 언어로 메타 마스크 로그인 로직, Signature 검증 (백엔드) (0) | 2025.04.09 |
MongoDB+Go 에서의 Cursor를 활용한 다중 데이터 조회 (select all) (0) | 2025.04.08 |
Comments