전체 글

전체 글

    [트러블슈팅] fast api 에서 ValidationError 발생 시 500 에러가 발생& payload가 맞는데도 validation error 뜸

    문제 상황 spring-boot 프로젝트에서 fast api 프로젝트 서버로 요청을 보냈는데 500 에러가 발생 디버깅 결과 요청 바디 값 일부가 누락되어서 아예 안들어왔음. spring-boot 에서는 제대로 보내고 있는 상황 원인 요청 보낼 때의 바디와 서버(fast-api 서버)에서 받고자 하는 요청 바디가 안맞아 발생하는 422 unprocessable entity 가 아닌 500 Internal Server Error으로 반환된 이유: fast api 에서 ValidationError가 발생하는 경우 코드 내부의 큰 버그라고 간주하기 때문에 클라이언트(spring-boot 프로젝트)에게는 500으로 알린다. It should be this way because if you have a Pydan..

    [Kotlin] Collection 의 크기가 작은 경우 Sequence 가 성능이 더 떨어질 수 있는 이유

    Sequence는 다음과 같은 특징이 있어 컬렉션의 크기가 큰 경우 성능면에서 적합하다. 컬렉션의 계산 결과를 저장하는 과정에서 중간 리스트가 만들어지지 않음. --> 많은 메모리를 차지하게 될 수 있음 lazy 연산 방식으로 step-by-step 연산 방식으로 이루어 지지 않음. --> 최소한의 operation 이 이루어짐 infinite sequence가 가능하다. (

    누적합 알고리즘 (2022 카카오 - 파괴되지 않은 건물)

    누적합 알고리즘 (2022 카카오 - 파괴되지 않은 건물)

    해당 문제는 정확성과 효율성을 모두 고려해야하는 문제이기 때문에 매 스킬마다 해당하는 구간을 계산하면 O(KNM)의 시간 복잡도가 나오게 되어 실패한다. 그래서 처음 생각했던 방법은 큐를 만들어 치유인 경우에는 큐에 더하고 파괴 스킬일 때 큐를 먼저 차례대로 실행 후 파괴하면 어떨까 했는데 효율성에서 1개 빼고 모두 시간초과가 떴다.. 혼자서는 방법을 못찾겠어서 찾은 방법이 누적합 알고리즘 누적합 알고리즘은 알고리즘 이름대로 나열된 수(구간)의 합을 구하는 알고리즘이다. 다만, 이전처럼 매번 모든 구간에 합을 적용하는 방식이 아니다. 문제는 2차원이지만 1차원에서부터 시작한다면.. 방식은 간단하다. 구간 [i..j] 까지 n을 더하면 arr[i] = n, arr[j+1] = -n 값을 넣는 방식으로 계산..

    Airflow: 외부 시스템과 통신 | 시스템 간 데이터 이동

    Airflow: 외부 시스템과 통신 | 시스템 간 데이터 이동

    요약 Airflow 오퍼레이터로 외부 시스템에서 태스크 수행 오퍼레이터를 구현하여 A-to-B 작업(시스템 간 데이터 이동) 구현 외부 시스템에 연결하는 태스크 테스트 1. 클라우드 서비스에 연결하기 에어플로우에서는 클라우드 서비스에 요청을 보낼 수 있도록 오퍼레이터를 제공함. 내부적으로 클라우드의 sdk를 사용해서 호출 1.1 추가 의존성 패키지 설치하기 서비스 연결을 위해서는 패키지 설치가 필요함. aws pip install apache-airflow-providers-amazon gcp pip install apache-airflow-providers-google Azure pip install apache-airflow-providers-microsoft-azure 이외 다른 외부 서비스도 해당..

    pandas 통해서 csv 파일로 mysql에 테이블 생성하기

    csv_to_mysql.py: import time import pandas as pd import pymysql from sqlalchemy import create\_engine import configparser # pandas에서 read\_csv할 때 'utf-8'으로 인코딩 하는 경우 에러가 날 수도 있음. -> 'cp949' 인코딩 사용 df = pd.read\_csv("./qa\_sample.csv", encoding='cp949') # 설정 파일 경로 config\_path = "./settings.ini" # 설정 파일 읽기 config = configparser.ConfigParser(interpolation = None) config.read(config\_path) # params..

    [Kotlin] 제네릭스

    [Kotlin] 제네릭스

    🌟 화면을 넓게 하시면 오른쪽에서 목차를 확인하실 수 있습니다. :) 제네릭 타입 파라미터 제네릭 타입 파라미터를 사용하여 제네릭 함수, 프로퍼티, 클래스를 선언하는 방식은 자바와 비슷하다. 제네릭스를 사용하여 타입 파라미터를 받는 타입을 정의할 수 있고, 타입 인자로 치환하여 인스턴스를 만들 수 있다. 타입 인자(type argument)는 프로그래머가 직정 타입 인자를 정의하거나 컴파일 과정에서 타입 추론에 의해 타입 인자가 추론될 수 있어야한다. List // 타입 파라미터로 String을 받고 있는 리스트 제네릭 함수와 프로퍼티 리스트를 다루는 함수를 작성할 때, 모든 리스트를 다룰 수 있는 함수를 만들고 싶을 때 제네릭 함수를 작성한다. 제네릭 확장 프로퍼티도 마찬가지로 타입 마라미터를 선언하여..