본문 바로가기
반응형

전체 글824

Python - Linting, 소스 분석, 코드 최적화 flake8 최선의 성능과 안정성이 있는 코드는 모든 경고를 제거한 코드라 할 수 있다. 여기에서는 flake8를 통해서 간편하게 코드에서 필요한 수정사항등이 무엇이 있는지 알아보도록 하겠다. VSCode에서 많은 오류와 경고로 코드를 잡아주지만, VScode를 사용할 수 없거나, CI/CD 상황에서 사용할 만한 방법으로 flake8를 사용하면 어떨까 한다. 아래는 간단하게 VSCode 기본 상태에서 flake8를 이용해서 테스트를 한 결과이다. VScode와 다르게 현재 3가지 수정 사항이 있는 것으로 확인된다. flake8 이후 특정 파일이나 디렉토리를 통해서 코드를 분석할 수 있다. PS C:\Users\Han\python\flake8> python3 -m flake8 . .\test.py:4:1: F401 '.. 2024. 3. 14.
Python - HTTPConnectionPool 문제 해결, Max retries Python을 하다보면 가장 많은 오류를 볼 수 있는 부분이 Max retries 오류이다. HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /xxx (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused')) 이는 2가지 경우인데 자신의 Connection Pool이 꽉 차서 나타나거나, 반대로 상대방이 요청을 거부하는 경우이다. 보통 HTTPAdapter의 Retry 옵션을 구성해서 사용하는데 세밀하게 설정할 수 있다. Retry 설정 def requests_retry_session(.. 2024. 3. 14.
Python - 동적 리스트(dynamic list) 해결 ValueError: too many values to unpack 아래와 같이 들어오는 값보다 적은 변수를 선언한 경우 ValueError: too many values to unpack (expected 3) 가 발생하는데, 문제는 동적으로 변화하는 리스트인 경우 미리 변수를 선언하기가 어려울 수 있다. 동적 변수 *(아스키 기호) 이경우 쉽게 사용할 수 있는 매직 메소드가 바로 *(아스키 기호)이다. 파이썬은 * 를 통해서 동적으로 변수를 사용할 수 있는데, 선언 시점에 *를 입력하게 되면, 동적으로 동작하여, 부족한 변수만큼 리스트로 값을 받아들이게 된다. 아래와 같이 마지막 변수에, 아스키 기호를 넣어주면 부족한 값을 리스트로 마지막 변수에 넣게 된다. 2024. 3. 14.
Django - Database Migration Command 요약 정리 Django는 풀스택 웹 프레임워크로 사용되어진다. 특히 기본 User Auth 기능을 제공하므로 별도의 User 관리 기능을 개발할 필요가 없다. 토큰 인증도 적용이 가능하며 추가로 필요한 컬럼등을 구성하거나 변경하는 것도 가능하므로 유용하게 활용할 수 있다. 그럼 어떤 명령을 사용할 수 있는지 Migration에 대해서 요약 정리해 본다. * 먼저 명령을 사용전에 마이그레이션을 지원하는 Database는 PostgreSQL, MySQL, SQLite를 지원한다. * 마이그레이션 명령을 사용하기 위해서는 settings.py에서 활성화를 먼저 해야 한다. makemigrations 마이그레이션을 진행하기 위한 사전 파일을 생성하는 명령이다. python3 manage.py makemigrations 명.. 2024. 3. 14.
Django - 메일 주소 표준화, 자동 교정하기 email 사용자 정보를 입력을 받는 경우 보통 개발자의 의도와 다르게 입력되는 경우가 많다. 특히 표준화된 포맷이 있는 경우 사용자의 입력을 믿기 보다는 교정을 해주는 것이 바람직하다. 여기에서는 django 에서 제공하는 기능으로 email address를 표준으로 자동 교정해주는 기능을 사용해보고자 한다. Email 주소의 표준은 도메인 주소를 소문자로 표기하는 것이라고 할 수 있겠다. 본기능은 UserManager에서 사용할 수 있으며, 다음과 같이 사용이 가능하다. """ Database Model """ from django.db import models from django.contrib.auth.models import BaseUserManager class UserManager(BaseUserMan.. 2024. 3. 14.
SQLAlchemy - Database Connection Pool 관리 Python에서 많이 활용하는 SQLAlchemy 기준으로 Database를 관리하는 방안에 대해서 정리해 보고자 한다. Python은 Database를 연결 할때 Connection Pool을 통해서 관리하는데, Connection Pool 은 데이터베이스로의 추가 요청이 필요할 때 기존 연결을 재사용하는 방법으로 연결시 사용되는 리소스를 절약하는 구조라고 할 수 있다. 이유는 TCP 연결은 새로운 연결시 기본적으로 TCP 3 Way-Handshake를 진행하는데 이 부분에 대한 자원 소모는 상당한 편이다. 그리고 요청이 많은 경우 기존 연결된 Connection을 활용하면 상당한 리소스를 절약할 수 있다. 다만, Database에 연결하는 Connection Pool은 연결 관리를 해주지 않을 경우,.. 2024. 3. 14.
Python - Random 정수/소수점/리스트 이해 Random 함수를 통해 숫자 랜덤을 쉽게 구현할 수 있다. 특정 범위 혹은 리스트에서 임의의 값을 선택해야 할 때 유용하므로 자주 사용된다. 여기에서는 가장 많이 사용되는 정수와 소수점, 리스트에 대해 알아보고자 한다. 리스트 - choice >>> import random >>> my_list = ['a', 'b', 'c'] >>> random.choice(my_list) 'c' 정수 - randint >>> import random >>> random.randint(1,10) 10 >>> random.randint(1,10) 5 소수점 - unifrom >>> import random >>> random.uniform(0.2, 0.7) 0.38972597256511843 >>> >>> random... 2024. 3. 14.
Python - Session, HTTPAdapter 효율적인 ConnectionPool 관리 파이썬에서 HTTP Session을 통해 빠르게 연결을 지속 사용할 수 있다. 여기에서는 실제 사용중 발생했던 내용에 대해 정리하여, 추후 HTTP Connection 이해를 하는데 도움이 되고자 한다. Session TCP 연결시 본격적으로 데이터를 요청하기전에 네트워크를 연결하는 작업을 진행하게 된다. 이를 TCP 3-Way Handshake 라고 하며, 매 데이터를 요청할 때 마다 새로 연결 작업을 한다는 것은 데이터 처리에 그만큼 시간이 더 걸리게된다. 이러한 부분을 개선해서 동작할 수 있는 구조가 최초 연결한 Session을 만든이후 만든 세션을 재사용하여 요청을 처리하는 구조이다. 이는 보통 HTTP Keep-alive 와 같은 구조로 Python 코드로는 다음과 같이 이용할 수 있다. imp.. 2024. 3. 14.
Python - 왜 좋을까?, 해야 하는 이유 Python 현재 2022년 직업 구인 공고 기준으로 소프트웨어 언어로 1위를 달리고 있다. 필자 역시 현재 Python을 이용하여 개발을 진행하고 있는데, Python이 왜 좋은지 간단히 정리해 본다. 1. 웹 개발 웹 언어 부분에 대해서 Python을 이용할 경우 다양한 프레임 워크를 제공하고 있어서 용도에 알맞게 개발을 용이하게 진행할 수 있다. 가장 가볍게 개발할 수 있는 Flask 부터 REST API 를 쉽게 개발 할 수 있는 FastAPI, Full-Stack 기반으로 프론트를 포함한 MVC 기반의 개발을 지원해주는 Django까지 본인의 환경에 맞춰서 선택한다면 적은 코드로도 휼륭한 결과를 만들 수 있을 것이다. 성능적인 부분 역시 상당한 부분 과거보다 개선되어 문제없이 사용이 가능하다. .. 2024. 3. 14.
반응형