본문으로 건너뛰기
Elmi Tech Note Logo Elmi Tech Note Logo Elmi Tech Note

마비노기 모바일 해외 접속 & 윈도우 난민을 위한 리눅스 가이드

Elmi Tech Note Logo Elmi Tech Note Logo Elmi Tech Note

마비노기 모바일 해외 접속 & 윈도우 난민을 위한 리눅스 가이드

  • 홈
  • 🔰먼저 여기부터 클릭! [정리글] 해외에서 마비노기 모바일 VPN 접속
  • 홈
  • 🔰먼저 여기부터 클릭! [정리글] 해외에서 마비노기 모바일 VPN 접속
닫기

검색

Golang

Golang Postgresql 접속시 jdbc URI 사용할 때 이스케이프

By 엘미타
2020년 04월 25일 2 Min Read
0

Golang 에서 Postgresql 접속시 익숙한 JDBC URI 방식으로 접속 정보를 쓰고 싶었는데, 패스워드에 특수문자가 있어서 제대로 접속이 안된다. 패스워드의 특수문자는 이스케이프 해서 사용하는 방법을 설명한다.

Go 에서 Postgresql 접속하기

Go 에서 Postgresql 접속하는 방법을 검색하면 DB 접속 정보를 넣는 방법을 아래처럼 쓰고 있다.

1
2
db, err := sql.Open("postgres",
    fmt.Sprintf("user=%s password=%s dbname=%s", "postuser", "8e3#*jXq_p,E", "postdb"))

위 코드에서는 호스트, 포트를 지정하지 않는데, 기본값인 localhost, 5432를 사용할 때는 지정하지 않아도 된다. 아래 lib/pq 문서를 보면 기본값이 나와있다.

lib/pq 문서 – https://pkg.go.dev/github.com/lib/pq?tab=doc

하지만, 고 어플리케이션을 항상 DB가 있는 서버에서 돌릴 것도 아니고, 호스트랑 포트만 써도 아래처럼 길어지게 된다.

1
2
db, err := sql.Open("postgres",
    fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", "192.168.0.4", "5433", "postuser", "8e3#*jXq_p,E", "postdb"))

난 간결한 URI 방식이 좋다. 다행히 lib/pq 문서에 보면 지원한단다. 바꿔서 써보자.

1
2
db, err := sql.Open("postgres",
    "postgres://postuser:8e3#*jXq_p,E@192.168.0.4:5433/postdb")

필요한 정보만 모아서 쓰니까 알아보기가 쉽다. 이게 잘 돌아가면 좋은데 말이지.
딱 보면 패스워드 부분의 특수문자가 문제가 되게 생겼다. 실제로 돌려보면 아래처럼 에러가 나고…

1
panic: parse "postgres://postuser:8e3": invalid port ":8e3" after host

해결방법은 문제가 되는 패스워드를 이스케이프 처리하면 된다.

이스케이프 처리

아래 특수문자를 퍼센트 인코딩하면 된다.

wikipedia percent encoding
Wikipedia Percent-encoding – https://en.wikipedia.org/wiki/Percent-encoding

이스케이프한 패스워드는 아래처럼 된다.

1
2
db, err := sql.Open("postgres",
    "postgres://postuser:8e3%23%2AjXq_p%2CE@192.168.0.4:5433/postdb")

이걸로는 접속 안된다. 콤마는 이스케이프 안해도 되더라. 콤마는 그대로 둔 아래 코드로 접속에 성공했다.

1
2
db, err := sql.Open("postgres",
    "postgres://postuser:8e3%23%2AjXq_p,E@192.168.0.4:5433/postdb")

결론은 파싱에 방해가 되는 특수문자만 이스케이프 처리해 주면 되는듯하다.
 
 
패스워드에 특수문자 넣기 좋아하는 나 같은 사람들이나 생기는 문제라 이 글이 도움될 사람은 별로 없을 것 같은데, 이렇게 써두지 않으면 나중에 내가 또 같은 함정에 걸리게 되니까 포스팅해 둬야한다. ㅋ

여담

자바에서도 같은 문제가 있나해서 해 봤는데 애초에 유저명과 패스워드는 URI 에 포함하지 않고 따로 입력하게 되어 있어서 이스케이프 처리 없이도 잘 접속 되더라.
golang 에 lib/pq 도 같은 방식으로 만들지…
 
 
접속 테스트에 사용한 golang 에서 postgresql 접속해서 select 하는 소스코드
GOLANG POSTGRES 접속해서 필요없는 컬럼은 빼고 가져오기

Tags:

문제 해결Postgresqlgolang
작성자

엘미타

일본에서 일하고 있는 자바 웹 어플리케이션 개발자.

Follow Me
다른 기사
Previous

DBeaver 포터블판 jre를 찾지 못해서 실행 안되는 문제

Next

golang 테이블 쿼리시 필요없는 컬럼은 빼고 가져오기

댓글이 없어요! 첫 댓글을 남겨보세요.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

인기 글

이 카테고리에 속한 글

Golang
  • vcpkg install 에러 Unable to find a valid Visual Studio instance 2025년 03월 13일
  • golang sciter Unhandled sciter event case: 32768 문제해결 2020년 08월 05일
  • golang gui sciter 리뷰? 사용기 2020년 08월 05일
  • golang 테이블 쿼리시 필요없는 컬럼은 빼고 가져오기 2020년 04월 25일
  • Golang Postgresql 접속시 jdbc URI 사용할 때 이스케이프 2020년 04월 25일
  • 윈도우 환경에서 vscode github ssh 공개키 방식으로 연결해서 패스워드 입력 생략 2020년 04월 24일
  • 윈도우10 git 설치와 vscode 에서 github 리파지토리에 파일 올리기 2020년 04월 23일
  • 윈도우10 golang vscode 개발환경 구축 2020년 04월 22일
  • 윈도우10 vscode 에서 golang 프로젝트와 github 연동 리눅스용 실행 파일 빌드 2020년 03월 31일
  • 윈도우에서 golang 1.14 개발 환경 구축 2020년 03월 20일

최신 글

  • 해외에서 마비노기 모바일 VPN 접속 방법 총 정리 (차단 우회, 에러 88 & L.-9 해결)
  • 아치리눅스, 캐시os, 엔데버os 차이
  • 워드프레스 콘솔 에러 addthis.com ERR_NAME_NOT_RESOLVED
  • [칼럼] 리눅스 입문자에게 CachyOS(캐시OS)를 추천하는 이유
  • [칼럼] 구글 SEO가 망치고 있는 인터넷 생태계: 일본의 오늘과 한국의 내일

최신 댓글

  • 국 - 버츄얼 박스에 OpenWrt with 미꾸라지 설치
  • 엘미타 - [모비노기] 일퀘/주간퀘 체크 사이트 오픈
  • 엘미타 - [모비노기] 일퀘/주간퀘 체크 사이트 오픈
  • 익명 - [모비노기] 일퀘/주간퀘 체크 사이트 오픈
  • 익명 - [모비노기] 일퀘/주간퀘 체크 사이트 오픈

카테고리

태그

0x80bd0009 Arch Linux Endeavouros geoip github Go 언어 gui Java KDE Plasma kodi nginx Niri Noctalia Ollama OpenWrt sciter smb Stable Diffusion Swing Troubleshooting wireguard Xbox series x 건틀릿 공유기 루트리스 룬테라 리눅스 게이밍 리눅스 배포판 마비노기 모바일 마인크래프트 명일방주 엔드필드 모바일 게임 사이버 펑크 2077 오즈 리라이트 우분투 데스크탑 24.04 LTS 우분투 서버 20.04 LTS 우분투 서버 22.04 LTS 우분투 서버 24.04 LTS 윈도우11 윈도우 11 칼럼 컵히어로즈 톰캣9 포로덱 프로톤

Copyright 2026 — Elmi Tech Note. All rights reserved. Blogsy WordPress Theme