Flask의 Hook 정리
Flask에서 FastAPI의 middleware나 Spring의 Filter, Interceptor처럼 애플리케이션의 횡단 관심사에 대한 처리를 일괄적으로 적용해 관점 지향 프로그래밍(Aspect Oriented Programming)을 할 수 있도록 도와주는 Hook에 대해 정리해보았다.
Flask에서 FastAPI의 middleware나 Spring의 Filter, Interceptor처럼 애플리케이션의 횡단 관심사에 대한 처리를 일괄적으로 적용해 관점 지향 프로그래밍(Aspect Oriented Programming)을 할 수 있도록 도와주는 Hook에 대해 정리해보았다.
Spring에서 서버가 시작될 때 자동 실행 되는 기능을 만드는 방법은 여러가지가 있는데 용도에 따라 구별해서 사용하면 된다.
윈도우 서버에 Python 프로그램을 배포하는 용도로 WinPython을 사용중인데, WinPython이 포함된 프로젝트를 구성하면 VS Code에 설치된 Pylance 검사기가 WinPython의 코드 수만줄을 전부 검사하려고 하는 사소한 문제가 있다.
업무 특성상 폐쇄망의 Windows 환경에 소규모 Python 프로그램들을 배포할 경우가 많은데, 매번 Python 환경을 구성하고 패키지들을 설치하기 어려운 상황이라 Portable Python을 사용해서 배포하고 있다.
Spring과 React를 모노레포로 구성할 때 Vite와 Gradle의 설정을 통해 빌드를 쉽게 관리할 수 있다.
MongoDB는 Document 단위로 데이터를 저장하는 NoSQL 데이터베이스로, 하나의 Document가 자신의 데이터에 대해서 완결성을 가지기 때문에 같은 Collection에 속한 Document라고해도 모두 같은 형식을 따를 필요는 없다.
Python 프로그램의 Embedded DB로 많이 사용되는 SQLite를 Spring 앱에서 JPA로 다루는 방법과 주의점
수직선 위에 \(N\)개의 좌표 \(X_{1}, X_{2}, ..., X_{N}\)이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
\(X_{i}\)를 좌표 압축한 결과 \(X'_{i}\)의 값은 \(X_{i} > X_{j}\)를 만족하는 서로 다른 좌표 \(X_{j}\)의 개수와 같아야 한다.
\(X_{1}, X_{2}, ..., X_{N}\)에 좌표 압축을 적용한 결과 \(X'_{1}, X'_{2}, ..., X'_{N}\)를 출력해보자.
바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
앞으로 M번 바구니의 순서를 회전시키려고 만들려고 한다. 바구니의 순서를 회전시킬 때, 순서를 회전시킬 범위를 정하고, 그 범위 안에서 기준이 될 바구니를 선택한다. 도현이가 선택한 바구니의 범위가 begin, end이고, 기준이 되는 바구니를 mid라고 했을 때, begin, begin+1, ..., mid-1, mid, mid+1, ..., end-1, end 순서로 되어있는 바구니의 순서를 mid, mid+1, ..., end-1, end, begin, begin+1, ..., mid-1로 바꾸게 된다.
바구니의 순서를 어떻게 회전시킬지 주어졌을 때, M번 바구니의 순서를 회전시킨 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
HTTP 상태 코드 중 3XX Redirection은 요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요한 경우에 반환되는 코드인데, 표준 스펙의 설명이 헷갈리는 부분이 있어 정리해둔다.
HTTP 표준에서는 HTTP 패킷을 표현(Representation)이라고 규정하며, 표현은 표현 메타데이터와 표현 데이터로 구성되어 있다. 이 중 표현 데이터가 일반적으로 HTTP Body 또는 Payload 라고 부르는 HTTP 메세지의 본문을 뜻하며, 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
macOS에서 생성한 파일을 윈도우에서 확인하면 파일명이 깨져있는 경우가 있는데, Python으로 간단히 인코딩 할 수 있다.
평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값으로, P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
Java 코드를 짤 때 annotation을 사용하면 클래스와 메서드에 메타 데이터를 추가해서 다양한 용도로 활용할 수 있다.
Python 버전 관리, 의존성 관리, 가상환경 관리 등 통합 프로젝트 관리 도구인 uv를 사용하면 Python 프로젝트를 매우 쉽게 관리할 수 있다. 게다가 아래 표에서 확인할 수 있다시피 uv는 의존성 주입 등 환경 구성이 매우 빠르게 수행되는 장점이 있다.