반응형 기술적인 이야기/기타 개발37 Python의 URL 매개변수 16진수 인코딩 및 디코딩 가끔 URL의 GET 매개변수를 전달하기 위해 16진수 인코딩(HEX Encoding)이나 디코딩이 필요할 때가 있지만 자주 까먹는다. 그래서 글로 박제를 해보려고 한다. 참고로 파이썬에서는 이 인코딩을 인용(quote)이라고 부르는 모양이다.인코딩특정 문자열을 16진수로 인코딩할 때는 urllib.parse 모듈의 quote 혹은 quote_plus 함수를 사용할 수 있다.>>> import urllib.parse>>> urllib.parse.quote('10==2다')'10%3D%3D2%EB%8B%A4'>>> urllib.parse.quote_plus('10==2다')'10%3D%3D2%EB%8B%A4'quote와 quote_plus 함수는 차이는 공백(space)을 어떻게 처리하느냐는 특징으로 갈라.. 2024. 12. 23. PostgreSQL에서 로컬 한정 패스워드 없이 로그인 하기 이번 글은 로컬에서 PostgreSQL 서버로 접속할 경우 패스워드 없이 접속 가능하게 설정하는 방법에 대한 것이다. 로컬에서 접속하는 경우는 패스워드가 굳이 필요하지 않은 경우가 있을 수 있는데 특히 코드에서 패스워드를 생략시킬 수도 있어서 어떤 면에선 보안적 이점이 있을 수도 있다. 일단은 패스워드 없이 사용자를 생성해 보자.패스워드 없이 PostgreSQL 사용자 생성하기기존 방법과는 조금 다르게, 패스워드 없이 사용자를 생성하기 위해 createuser 커맨드를 셸에서 사용해 보자.createuser [username]혹시나 사용자가 제대로 생성되었는지 궁금하다면 콘솔에 접속해서 확인해 보자.psql postgres여기서 \du 명령으로 사용자 목록 확인이 가능하다.슈퍼유저 권한 주기 (옵션)필요.. 2024. 9. 25. PostgreSQL에서 사용자 및 DB 생성하기 PostgreSQL을 정상적으로 설치하고 초기 설정했더라도 사용자와 DB를 생성하지 않으면 실질적으로 아무 작업도 시작할 수 없다. 그래서 이번에는 PostgreSQL에서 사용자 및 DB를 생성하는 방법을 정리해 보자.PostgreSQL 사용자 생성하기기본적으로 PostgreSQL 셸은 psql이라는 명령으로 시작한다. 이 명령을 이용해 아래와 같은 커맨드를 작성해서 관리 콘솔에 접속할 수 있다.psql postgres 이 관리 콘솔에서 아래와 같은 SQL 구문을 통해 사용자를 생성할 수 있다.CREATE ROLE username WITH LOGIN PASSWORD 'password' 당연하지만 username과 password는 원하는 것으로 적절히 바꿔주면 된다.사용자 생성 방법은 이 외에도 몇몇.. 2024. 9. 24. macOS에서 PostgreSQL 설치 및 초기 설정 어쩌다 PostgreSQL을 취미 삼아 써보면서 알게 된 지식들을 하나씩 정리하려고 한다. 이 글은 첫 글로 간단하게 설치하고 초기 설정을 하는 법을 정리한다.설치하기 (Homebrew)설치 방법은 여러 가지가 있겠지만 여기서는 macOS를 가정하고 있으므로 가장 자주 쓰이는 듯한(?) Homebrew를 통해 설치한다. 물론 이 패키지 매니저를 쓸 때는 아래와 같이 아주 간단히 설치할 수 있다.brew install postgresql다만 이 커맨드로 설치할 경우 최신 버전이 아닌 가장 최근 메이저 버전의 formula로 설치된다는 특징이 있다. 개인적인 경험으로는 postgresql@14 버전이 설치되었는데 시점에 따라 다른 버전이 설치될 수 있다. 어쨌든 최신 버전이 아닌 14 버전으로 픽스되어서 설.. 2024. 9. 23. uv - Python의 대안 패키지 및 프로젝트 관리자 어쩌다가 파이썬에 uv라는 또 다른 패키지 매니저가 있는 것을 알게 되었다. 새롭다고 하기엔 나온 지 좀 된 것 같지만 그래도 새롭게 알게 되었으니 이 uv에 관해서 간단히 정리해 보자.uv - An extremely fast Python package and project manager, written in Rustuv는 대놓고 속도를 가장 중요시하는 패키지 및 프로젝트 매니저임을 강조하고 있다. 심지어 Rust로 쓰여서 상대적으로 Python에 비해 가볍고 빠를 수밖에 없어 보인다. 물론 Python용 도구가 Python으로 쓰이지 않은 것에 의아함이 있을 수도 있겠지만 아무렴 어떨까.설치 방법은 다채롭다. 공식 저장소에서 소개한 내용과 개인적으로 시험해 본 내용을 정리하면 이렇다.# macOS 및 .. 2024. 9. 3. Flutter 앱 빌드 때 만난 Unsupported class file major version 어쩌구 저쩌구 에러 오랜만에 Flutter 앱 프로젝트를 새로 빌드할 일이 생겨서 빌드 명령을 입력했는데 전에 보지 못하던 에러가 발생했다. 아래와 같은 오류다.* What went wrong:Could not open settings generic class cache for settings file '/Users/seorenn/developments/myproject/android/settings.gradle' (/Users/seorenn/.gradle/caches/7.2/scripts/foobarsomeidentifier).> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major vers.. 2024. 3. 15. macOS 터미널에서 안드로이드 에뮬레이터 실행시키기 일반적인 안드로이드 앱 개발자들이야 Android Studio를 쓸 테고 거기서 에뮬레이터를 띄우면 되니 무의미한 주제의 글일 수도 있겠지만, 그게 아니라 Flutter 등 다른 기반으로 안드로이드를 지원하는 경우라면 굳이 무거운 Android Studio를 띄우지 않고 에뮬레이터를 띄우길 원할 수도 있다. 그래서 이번 글의 주제는 터미널에서 셸 커맨드로 안드로이드 에뮬레이터를 띄우는 방법에 관한 것이다.준비 작업만약 Android Studio를 막 설치한 상태라면 에뮬레이터를 설치하고 AVD(Android Virtual Device)를 생성해야 한다. 당연하게도 이미 설치되어 있고 AVD도 생성된 상태라면 건너뛰고 바로 다음 항목으로 넘어가도 된다.우선 에뮬레이터를 설치해 보자. Android Stud.. 2024. 3. 13. 또다시 나타난 libarclite_iphoneos.a 오류 (Flutter) 회사 업무용 Flutter 프로젝트를 오랜만에 빌드했더니 지난번에 글을 썼던 적이 있었던 libarclite_iphoneos.a 문제가 또다시 나타났다. 대충 축약해서 아래와 같은 동일한 오류다.Error (Xcode): File not found: /Applications/Xcode.app/Contents/ ... /lib/arc/libarclite_iphoneos.a다시 나타난 이유야 명백하다. Xcode 버전이 업그레이드되는 바람에 이전에 풀어놨던 파일들이 다 사라져 버렸기 때문이다.그렇다면 원천적으로 이 문제를 해결하지 못하는 한 Xcode가 업그레이드될 때마다 이 문제를 계속 마주치게 될 것이 분명해 보인다. 상당히 귀찮다. 원천적으로 해결할 방법이 없는 것일까?그나마 최근에는 정보가 생겼다구글.. 2023. 6. 14. Flutter 앱 빌드 시 libarclite_iphoneos.a 및 아카이브 실패 문제 회사 Flutter 앱 프로젝트를 iOS 용으로 빌드하던 도중 문제가 발생했다. 이 글 주제의 시작은 아래 오류 메시지로부터 출발한다. Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 빌드하는데 필요한 libarclite_iphoneos.a 파일이 없다는 오류다. Xcode 14.3으로 올린 이후에 이런 문제를 겪었기 때문에 아마도 이 버전의 Xcode 문제라고 생각된다. 위 메시지를 통해 두 가지 문제가 나왔고 이 두 가지 문제 해결의 과정을 정리해 보자. 명확한 해답이라고 하기엔 아직 지식이 부.. 2023. 4. 23. Flutter에서 Debug 혹은 Release 모드 판단하기 Flutter에서 Debug 모드로 실행 중인지 아니면 Release 모드로 실행 중인지 파악하기 위해서는 우선 foundation 모듈이 필요하다. import 'package:flutter/foundation.dart'; 이후 kReleaseMode 혹은 kDebugMode 심볼을 이용할 수 있으니 용도에 맞게 사용하면 된다. if (kReleaseMode) { // 릴리즈 모드에서 할 일 ... } else if (kDebugMode) { // 디버그 모드에서 할 일 ... } 엄청나게 단순한 내용이지만 개인적인 기억력의 한계로 메모를 남긴다. 2022. 4. 24. Flutter의 Widget에서 앱 활성화 여부 파악하기 앱이 활성화될 때, 즉 백그라운드 상태에서 포그라운드 상태로 앱이 다시 올라왔을 때 위젯이 이 상태를 직접 파악하는 방법은 기존적으로 제공되지 않습니다. 앱 단위에선 onResume이나 onPause가 제공되는 것과는 다르게 말이죠. 제 경우 iOS 앱에서 백그라운드 태스크 앱이 백그라운드 상태에서 동작하다 포그라운드로 활성화될 때 UI 갱신이 누락되는 현상이 있어서 앱 활성화 여부를 알아낼 수 있어야 했습니다.이와 관련해 정보를 찾아보던 도중 다행히도 제가 원하는 기능을 제공하는 Widget Bindings Observer라는 것을 발견할 수 있었습니다.아래 예제는 특정 StatefulWidget에서 WidgetBindingsObserver를 사용해 앱의 상태 변화를 추적하는 코드를 구현한 예제입니다... 2020. 11. 13. Rust의 Generics 맛보기 제네릭(Generics)은 많은 언어에서 지원하는 다형 타입 지원 기능입니다. 동일한 기능을 여러 타입으로 사용하려는 경우 각 타입 별로 비슷한 코드를 중복해서 코딩해야 할 수도 있는데, 제네릭은 타입과 코드를 분리시켜서 하나의 코드로 다양한 타입을 사용해서 동작시킬 수 있게 만들어 주기 때문에 매우 효율적인 코딩이 가능합니다. 러스트(Rust)도 이런 제네릭을 지원합니다. 이 글에서는 러스트의 제네릭 기능을 살짝 살펴보며 깊게는 안 들어가고 간단히 맛만 보고자 합니다. 벡터 구경 제네릭은 여러 코드에 구현되어 있는데 그중 가장 가깝게(?) 찾아볼 수 있는 예제는 아마도 벡터(Vector) 일 것 같습니다. 다른 언어에는 리스트나 배열이라고 부를만한 그 자료구조지요. 벡터는 구조체로 구현된 자료구조이지만.. 2020. 11. 1. Rust로 객체지향 프로그래밍 흉내내기 러스트(Rust)는 객체 지향 프로그래밍(OOP - Object Oriented Programming) 언어가 아닙니다. 애초에 클래스(class) 문법 조차 없고 따라서 상속(inheritance) 개념도 없습니다. 그저 구조체에 메서드를 구현할 수 있을 뿐입니다. OOP에서 정말 중요한 개념이 없는데 과연 러스트는 OOP 패러다임으로 코딩하는 것이 가능할지를 그냥 맛만 봅시다.트레잇(trait)러스트에는 트레잇(trait)이라는 개념이 있습니다. 이 기능은 인터페이스를 설계하는 기능입니다. 이를 이용해 특정 타입에 인터페이스에 맞는 메서드를 구현하도록 강제하기 위해서 사용할 수 있습니다. 이런 면에서 비교하자면 스위프트(Swift)의 프로토콜(Protocols)과 상당히 닮아 있습니다.다짜고짜 트레잇.. 2020. 10. 26. Flutter에서 애플 앱스토어 업로드 시 최소 버전 표기 문제 Flutter를 업그레이드한 이후인지, 아니면 Xcode 12로 업그레이드 이후인지는 명확하지 않지만, 어느 날 fastlane 연동으로 앱스토어 업로드를 진행하는 도중에 아래와 같은 오류 메시지를 만났습니다.ERROR ITMS-90208: "Invalid Bundle. The bundle Runner.app/Frameworks/App.framework does not support the minimum OS Version specified in the Info.plist."이 문제를 해결해봅시다.약간 삽질을 하긴 했지만 이 문제의 해결은 생각보다 간단했습니다. 프로젝트와 타겟 그리고 앱 프레임워크의 최소 요구 버전(MinimumOSVersion)을 동일하게 맞춰주니 해결되었습니다.우선 Xcode로 io.. 2020. 10. 13. Python Exceptions 간략 정리 이 글은 파이썬(Python)의 예외 처리(Exception Handling)를 간단히 정리합니다. 개인적인 용도로 메모했던 내용을 글로 작성하는 거라 원하시는 내용이 없을 수도 있다는 점 양해 부탁드립니다. 문법은 3.x 기준이며 2.x에서는 약간의 수정이 필요할 수 있습니다만 웬만하면 3.x 쓰세요.예외(Exceptions)가 뭐냐고요? 뭐 그냥 에러 혹은 오류라고 치죠. 성공이 아닌 나머지 모든 명확한 경우를 예외사항으로 취급할 수 있습니다.예외 처리하기파이썬의 예외 처리 방식은 try 블록 내에서만 가능합니다. 여기 안에 예외가 발생할지도 모를 코드를 실행시키고 여기서 예외가 발생하면 여기에 연결된 except 블록에서 해당 예외를 처리할 수 있습니다.try: do_what()except: .. 2020. 10. 9. Python 3.9 변경사항 간단 정리 파이썬(Python) 3.9 버전이 공식 릴리즈 되었기에 이에 관해 간단히 살펴보는 글입니다. 다만 이 글은 문법적으로 변경되는 사항만 정리합니다. 파서가 바뀌는 등의 변화는 저 같은 사람에겐 체감이 잘 안 되기도 하니깐요.사전형 합치기 및 수정 연산자 추가사전형(dict)끼리 합치기를 지원하는 | 오퍼레이터가 추가되었습니다.>>> {'a': 1, 'b': 2} | {'c': 3, 'd': 4}{'a': 1, 'b': 2, 'c': 3, 'd': 4}합쳐질 때 중복되는 키는 업데이트 되는 형태 같습니다. 따라서 아래와 같이 |= 오퍼레이터를 이용해 사전형의 값을 업데이트 할 수도 있습니다.>>> d = {'a': 111, 'b': 2}>>> d |= {'a': 1, 'c': 3}>>> d{'a': 1, .. 2020. 10. 6. 러스트의 열거형(Enums) 살펴보기 열거형은 일반적으로 상태(state)를 정의하기 위한 타입입니다. 하나의 타입에 여러 선택 가능한 값을 정의해두고 이 값들 중 하나를 선택할 수 있게 하기 위한 특수한 타입이지요. 러스트(Rust)도 열거형 타입을 지원하며 그 목적도 비슷합니다. 다만 각 값에 별도로 가질 수 있는 독립된 추가 값을 정의할 수 있다는 점이 독특한데 스위프트(Swift)의 열거형과도 비슷한 느낌을 받았습니다. 열거형(Enums) 러스트의 열거형은 아래와 같은 형식으로 정의할 수 있습니다. enum Gender { Male, Female, Other, } 위 코드는 세 가지 값 즉 Male, Female, Other라는 세 가지 값 중 하나를 가질 수 있는 Gender라는 타입을 정의하는 예제입니다. 다른 언어에 비해 약간 .. 2020. 10. 4. flutter: 당신의 Xcode는 너무 구버전이예요! 이 글은 팁이라기보다는 그저 로그에 가깝습니다.어느 날 flutter run 커맨드로 개발 중인 프로젝트를 실행시켜 보다 아래와 같은 메시지를 보게 되었습니다.Your Xcode version may be too old for your iOS version.네. 바로 제목의 그 내용이지요.스크린샷으로 보면 빨갛게 아주 기분 나쁜(?) 뭔가 해결해야 할 문제로 보입니다.그런데 문제는 이 메시지의 내용이었습니다. 왜냐하면 제가 당시 사용하던 Xcode는 12 버전으로 정식 릴리즈 된 지 하루 정도 지난, 당시 가장 최신 버전이었기 때문이었죠.구글은 검색엔진 빼고는 뭔가 나사가 빠진 것 같다는 느낌을 종종 받는데 flutter도 비슷한 느낌을 자주 받습니다.물론 사람이 만드는 거니 실수는 없을 수가 없겠지요... 2020. 9. 18. 이전 1 2 3 다음 728x90 반응형