분류 전체보기 29

[Python] DFS에서 리스트 접근 방법

Problem DFS 내에서 리스트를 인덱싱하여 재귀함수의 인자로 넘겨주었는데, 시간초과가 발생하였다. def cal(_list): for num in _list: ... cal(_list[1:]) Solution 이유는 리스트를 슬라이싱 할 때 시간이 걸리기 때문이다. _list[a:b] 면 b-a만큼 시간복잡도가 발생하는데, 이러한 작업이 DFS 내에서 매번 발생하여 시간이 초과되는 것이다. 따라서 DFS내에서 리스트를 접근하려면, 인자로 리스트가 아닌 리스트의 인덱스를 넘겨주는 것이 성능상 더 좋다. _list = [1,2,3,4,5] def cal(start): for i in range(start, len(_list)): ... cal(start+1) URL 삼성그룹 SW, IT취업준비방 내 피드백

Python 2023.10.23

[Python] Python에는 왜 long이 없을까?

Problem 다른 언어에는 존재하는 long이 왜 Python에는 없을까? Solution 기존 Python 2 버전의 경우 int와 long이 구분되어 있었다. int는 C스타일의 고정 정밀도였고, long은 임의 정밀도였다. Python 2.4부터 int가 충분하지 않을 경우 long으로 자동 변환하는 기능이 추가되어 오버플로우가 발생하지 않도록 변경되었다. 이후 Python 3에서 임의 정밀도의 int로 통합되었는데, 임의 정밀도는 무엇일까? 임의 정밀도는 쉽게 말해 무한대의 자릿수를 지원하는 정수형이다. 정수를 숫자의 배열로 취급하기 때문에 가능한데, 말그대로 정수를 자릿수로 쪼개어 2의 30승 진수로 표현한다. ex) 123456789101112131415 (437976919 * 2**(30*..

Python 2022.10.18

[HTTP] GET과 POST의 차이점?

GET 일반적으로 어떠한 리소스로부터 정보를 요청하기 위해 사용하는 메서드 요청을 전송할 때 데이터를 URL 주소 끝에 쿼리 스트링(QueryString)으로 추가시켜 전송 불필요한 요청을 제한하기 위해 같은 요청을 캐시처리 할 수 있음 요청이 브라우저 기록에 기록됨 요청을 북마크에 추가할 수 있음 데이터 길이에 대한 제한이 있음 URL 쿼리 스트링에 내용이 노출되기 때문에 민감한 데이터는 다루지 않는 것을 권장 멱등성을 띔 POST 일반적으로 어떠한 요청을 생성 또는 업데이트 하기 위해 사용하는 메서드 요청을 전송할 때 데이터를 HTTP 메세지의 Body에 담아서 전송, Body Type은 Header의 Content-Type에 따라 결정 HTTP 메세지의 Body는 길이의 제한이 없음 요청이 브라우저..

CS 2022.10.05

[Django] Custom Exception Handler

Problem 예기치 못한 Exception이 발생했을 때, 이를 감지할 수 있는 시스템이 필요했다. 기존에는 Exception Handler View를 만들어 로직을 처리한 후 template을 return 했지만, DRF API로 변환하면서 해당 기능의 수정이 필요해졌다. Exception Handler View 포스트 [Django] 500 Internal server error handler Problem http 500 서버 에러 발생 시의 처리 로직을 구현. Solution 이미 구현되어 있는 django.conf.urls.handler500 을 이용한다. django.conf.urls.handler500 에 view의 함수를 지정해주고, view에서 에러 관.. torimuk.tistory...

Django 2022.09.29

[Python] *args 와 **kwargs 란?

Problem 함수 인자로 *args를 사용하는 것과 **kwargs 를 사용하는 것은 각각 무엇을 의미하는 것일까? Solution *args와 **kwargs는 무엇을 의미할까? *args와 **kwagrs는 가변인자를 핸들링하기 위해 사용된다. 파이썬은 JAVA, C++ 등 다른 언어에서 지원하는 형식의 함수 오버로딩을 지원하지 않는다. def add(a): return a def add(a, b): return a+b def add(a, b, c): return a+b+c # error! 대신 다른 방법으로 오버로딩을 구현할 수 있는데, 그 방법 중 한 가지가 바로 *args와 **kwargs를 사용하는 것이다. *과 **뒤에는 원하는 이름을 사용할 수 있다. 가령 *parameter, **lis..

Python 2022.06.27

[JS] 해당 날짜 주의 일요일을 구하기

Problem 날짜를 선택했을 때, 해당 날짜 주의 일요일(첫 날짜)을 구하고 싶다. Solution 1. Date를 Date객체로 만든다. 2. Date.getDay() 를 통해 요일 인덱스를 구한다. 요일 인덱스 -> (0,1,2,3,4,5,6) 일월화수목금토 3. 결과 Date를 Date 객체로 만든다. 4. 결과 Date.setDate를 통해 Date-요일 인덱스 값을 저장한다. 이 로직을 코드로 변환하면 다음과 같다. let date = new Date(Date.now()); let week_day_cnt = date.getDay(); let target_date = new Date(); target_date.setDate(date.getDate() + (-week_day_cnt));

JavaScript 2022.06.17

[Django] Swagger header에 JWT 추가하기

Problem Swagger 에서 모든 요청의 헤더에 JWT 토큰 값을 넣고자 한다. Solution 해결법은 간단하다. settings.py에 SWAGGER_SETTINGS를 추가하면 된다. SWAGGER_SETTINGS = { 'SECURITY_DEFINITIONS': { 'Access_Token': { 'type': 'apiKey',# 타입 'name': 'Access-Token',# 이름 'in': 'header',# 어디에 추가할 것인지, 헤더이므로 header 'description': 'Authorization',# 설명 } }, } 그 다음 Swagger에서 Authorize를 클릭하면 다음과 같이 출력된다. 해당 Value 값에 JWT 토큰 값을 입력하고 Authorize 한 뒤, 테스트..

Django 2022.04.29

[Django] Function Based View 환경에서 Swagger 사용하기

Problem Swagger를 추가해서 Django API 문서를 만들어보자 FBV(Function Based View) 환경에서 진행한다. FBV 환경에서 진행하는 문서가 부족해 작성하게 되었다. Solution 1. drf-yasg와 djangorestframework를 설치한다. pip install drf_yasg pip install djangorestframework 2. 설치 후 url.py에서 schema_url_patterns를 설정하고, get_schema_view를 정의한다. schema_url_patterns = [ path('루트URL/', include('app.url')), ] schema_view_v1 = get_schema_view( openapi.Info( title="O..

Django 2022.04.28

[Django API] Django + JWT

Problem Django API와 JWT를 연계하여 로그인 시스템 구현하기 Solution 1. djangorestframework-jwt 를 설치한다. pip install djangorestframework-jwt 2. jwt를 import 한 뒤, 로그인과 관련된 로직을 작성한다. 3. 입력한 ID와 PW가 DB의 값과 일치한 경우, 다음과 같이 access_token을 작성하여 response에 포함시켜준다. ALGORITHM = 'HS256'# 알고리즘을 입력. SECRET_KEY = 'secret_key'# 변하지 않는 secret_key를 입력. if match_admin(user_res["user_pw"], admin_info["password"]):# 패스워드가 일치할 경우 access..

Django 2022.04.26

[Python] 딕셔너리의 키와 기본 값을 저장하기

Problem 딕셔너리의 키만 정해져있고 해당 키에 대한 값이 정해져있지 않을 때, 키를 먼저 등록한 다음 이후에 값을 변경하려고 한다. Solution 키가 다음과 같다고 가정하자. keys = [1,2,3,4,5,6,7] 해당 키를 딕셔너리에 등록하고, 값은 추후에 변경하고자 한다. 이럴때 필요한 것이 dict.fromkeys([키], 기본값)이다. keys = [1,2,3,4,5,6,7] keys_dict = dict.fromkeys(keys, "") print(keys_dict) {1:"", 2:"", 3:"", 4:"", 5:"", 6:"", 7:""} 기본 값을 지정하지 않으면 None이 값으로 저장된다. URL

Python 2022.03.24