본문 바로가기

전체 글66

[SQLD] SQL 코딩테스트에 자주 출제했던 함수들 데이터 가공 문제 날짜-시간 데이터 1. 날짜 형식 변경 먼저 해당 필드명의 형식을 바꾸는 문제이다. 만약 `2023-12-25 00:00:00`의 날짜 형식을 바꾸고 싶으면 `DATE_FORMAT` 함수를 이용해 날짜 형식을 변경할 수 있다. # DATE_FORMAT(필드명, 형식) DATE_FORMAT(CREATED_DATE, "%Y-%m-%d") 2. 날짜 차이 계산 두 날짜 필드간의 차이를 계산하고 싶은 경우 `DATEDIFF(필드명1, 필드명2)`함수로 계산할 수 있다. 여기서 `CASE ~ END` 구문은 프로그래밍 언어에 조건문과 같은 의미이다. 해당 조건이 맞으면(`WHEN`) `THEN`을 반환하고 틀리면 `ELSE`를 반환한다. # 30일을 기준으로 장기대여/단기대여 분류해 RENT_T.. 2024. 1. 7.
[코테스터디] 다이나믹 프로그래밍(DP) 다이나믹 프로그래밍(동적 계획법) 보통 알고리즘 문제를 풀 때 시간과 메모리를 절약하면서 효율적인 알고리즘을 작성한다. 다만, 어떤 문제는 메모리 공간을 좀 사용해서 푸는 문제가 있는데 그 문제가 다이나믹 프로그래밍(DP) 문제이다. 다이나믹 프로그래밍 문제는 한번에 해결하는 문제가 아니라 조금씩 점차적으로 풀어가는 문제이므로 점화식을 생각하면서 풀어야 한다.다이나믹 프로그래밍 문제를 푸는 유형에는 탑다운(Top-down)과 보텀업(Bottom-up)이 있다. 개인적으로 선호하는 방식을 택하면서 풀면 된다. 물론, 연습할 때 두가지를 이용해 풀어보면 좋을 것이다. 탑다운, 하향식(Top-down) 재귀 함수를 이용해 큰 문제를 해결하기 위해 작은 문제를 호출하는 방식이다. 메모이제이션을 이용해 재귀함수를.. 2024. 1. 4.
[코테스터디] 그리디(Greedy) 그리디 문제는 현재 상황에서 가장 좋은 것만 고르는 방법 즉, 탐욕적으로 문제 푸는 방법을 의미한다. 부분적으로 구한 해를 통해 전체 해를 구하면 된다. 보통 정렬이나 우선순위 큐(`heapq`)를 이용해 푸는 문제들이 많다. 사실 그리디 문제는 유형이 없는 것 같다. 간단한 문제들도 있지만 복잡한 문제들도 많으니 많이 풀어봐야 한다. 더보기 그리디 문제에서 나오는 우선순위 큐 우선순위 큐를 구현하기 위해 힙(Heap)이라는 자료구조를 사용한다. 우선순위 큐는 스택이나 큐와 다르게 우선순위가 높은 데이터를 가장 먼저 처리한다.대표적으로 아래 먹방 라이브 문제가 우선 순위 큐를 사용하는 그리디 문제이다. `import heapq`를 통해 최소 힙 모듈을 불러와 사용할 수 있다. 데이터가 회전 초밥처럼 돌아.. 2024. 1. 3.
파이썬 패키지와 모듈 Modulemodule(모듈)은 Python 코드를 포함하는 하나의 파일을 말합니다.이 모듈을 다른 프로그램에서 불러와 사용할 수 있습니다. 파이썬에서 이식성이 좋은 이유는 모듈이 `.py`라는 확장자로 이루어져 있기 때문입니다. 자주 사용하는 모듈로는 `os, sys, math, datetime, random, JSON`등이 있습니다. 파이썬은 어떻게 모듈을 가져올까?파이썬의 모듈은 `.py`으로 이루어진 하나의 파일이라고 했습니다. 그럼 우리가 프로그램을 만들 때 어떻게 파이썬 파일을 가져오게 되는 것일까요? 파이썬에서 모듈을 `import` 할 때 PYTHONPATH를 조회하게 됩니다. PYTHONPATH은 다음 코드로 확인할 수 있습니다.import syssys.path 모듈이 담겨진 경로를 리스.. 2024. 1. 2.
Django Rest Framework - (1 : API 테스트 해보기) DRF Django에서 RestAPI를 쉽게 구축할 수 있게 도와주는 프레임워크이다. 그렇다면 왜 Django가 아니라 REST한 프레임워크인 DRF를 사용하게 된 것일까? 예전에는 브라우저만으로 웹 서비스를 접근할 수 있었지만 스마트폰, 태블릿 PC등이 생기면서 여러가지 플랫폼에서도 웹/앱 서비스를 접근할 수 있어야한다는 중요성이 생기게 되었다. 그래서 Django Rest Framework가 필요해지게 된 것이다. Restful한 API를 개발할 수 있다는 이야기는 한마디로 사용자가 원하는 것을 잘 찾을 수 있게 정리해놓은 것을 말한다. 예를 들어, 클라이언트가 커피를 주문하면 `order/1` 이런식으로 찾아 줄 수 있는 것이다. DRF의 자세한 내용은 공식 문서를 참고하면 된다. DRF 설치하기 .. 2023. 12. 25.
[Django] DB 쿼리 최적화를 다양한 방법들을 정리해보았다. 지난 쿼리셋 포스팅에 이어서 최적화를 하는 다양한 방법에 대해 적어보려한다. 데이터 성능을 개선시키는 메서드들 `only()`메서드를 활용하자. 기본적으로 우리가 어떠한 데이터들을 가져온다고 가정했을 때 `Track.objects.all()`와 같은 식으로 쿼리한다. 해당 쿼리는 track 데이터의 모든 필드를 가져오는 명령어로 만약 우리가 전체 컬럼이 아닌 특정한 필드를 가져오고 싶다면 위와 같이 사용하지 않아도 된다. `only()`메서드를 이용하면 지정된 필드만 가져올 수 있게 설정할 수 있다. 만약 같은 `title`이란 필드만 조회한다고 가정하면 쿼리에 사용할 수 있는 메모리를 줄여 DB 부하를 줄여줄 수 있지 않을까 한다. 하지만 장점만 가지고 있는 것은 아니다. 만약 다음 코드와 같이 지정해.. 2023. 12. 20.
[Django] 쿼리셋으로 데이터 조회하기 먼저 이전에 예시 프로젝트를 생성하여 가상의 음원플랫폼으로 Spotify Developer 사이트에서 앨범, 트랙, 아티스트 API 요청으로 데이터를 가져와 DB에 넣었다. 쿼리셋(QuerySet) 먼저 쿼리셋은 무엇일까? 쿼리셋은 일반적으로 데이터베이스를 조회하기 위한 기능을 제공하는 개념을 의미한다. ORM을 통해 DB와 상호작용하는 인터페이스를 제공한다. ORM에 대한 개념은 이전에 작성했던 글을 참조하면 된다. 아래 그림을 보면 데이터를 조회하기 위해 필터링하는 구간까지가 쿼리셋을 의미하고 [0] 인덱싱으로 인스턴스를 얻을 수 있다. READ 먼저, 기본적으로 쿼리셋을 통해 데이터를 가져오는 실습을 진행해보자. 데이터를 가져올 때는 `all(), get(), filter(), exclude(), .. 2023. 12. 20.
[프리온보딩] Docker Compose Docker Compose 도커 컴포즈(Docker Compose)는 단일 서버에서 여러 개의 컨테이너를 하나의 서버스로 묶어 관리할 수 있는 환경을 제공한다. 예를들어, Django을 Docker에 띄우기 위해선 SQL 서버와 같이 띄어야한다는 것이다. 지난 포스팅에서는 도커 네트워크를 통해 워드프레스를 띄우는 연습을 진행했다. 작업을 해본 결과 순서에 맞게 올리지 않으면 오류가 발생되는 문제가 있었다. 이번에는 Docker Compose를 통해 워드프레스를 올려보기로 했다. Docker Compose는 컴포즈 파일을 Docker CLI로 번역하여 올리게 된다. 그럼, 컴포즈 파일을 어떻게 만들까? 컴포즈 파일은 `yaml`파일을 통해 만들 수 있다. 먼저 Docker와 연결할 위치에 `docker-c.. 2023. 12. 14.
전반적인 웹 통신 과정 이번 포스팅에서는 인터넷 브라우저에 www.google.com을 입력하면 어떤 일이 발생하는지 과정을 알아보려고 한다. 즉, 웹의 전반적인 HTTP 통신에 대해 알아보는 것이다. 이와 관련된 포스트들은 다른 블로그에도 충분히 많기 때문에 참고하면서 작성하였다. 더보기 웹 브라우저에 URL을 입력한다. 브라우저와 로컬에서 DNS 기록이 있는지 확인하고 없으면 ISP에서 DNS 쿼리를 통해 IP 주소를 찾는다. IP 주소를 찾았으면 라우터를 통해 경로를 설정하고 ARP 패킷을 보내 MAC 주소를 찾아내 통신할 준비를 한다. 웹 브라우저와 서버는 TCP 커넥션을 통해 연결을 수립한다. 웹 브라우저는 서버에 HTTP 요청을 보내고 서버는 이에 응답 메세지를 작성한다. 서버는 클라이언트와 TCP 커넥션을 맺고 응.. 2023. 12. 10.