2025/02 15

[python,Flask]Flask의 @after_this_request 데코레이터 사용법

1. @after_this_request란?Flask에서 @after_this_request 데코레이터는 특정 뷰 함수가 실행된 후, 응답을 반환하기 직전에 추가적인 처리를 할 수 있도록 해주는 기능입니다.이는 요청이 끝난 후 임시 파일을 삭제하거나, 특정 로그를 남기는 등의 작업을 수행할 때 유용하게 사용할 수 있습니다.2. 기본 사용법@after_this_request는 뷰 함수 내에서 정의되어야 하며, 하나의 인자로 응답 객체 (response)를 받는 내부 함수를 필요로 합니다.from flask import Flask, request, jsonify, send_file, after_this_requestimport osimport tempfileapp = Flask(__name__)@app.ro..

개발공부 2025.02.10

[python]자바스크립트와 파이썬의 비동기 처리 방식 비교

비동기 프로그래밍은 프로그램이 블로킹 없이 여러 작업을 동시에 실행할 수 있도록 하는 중요한 개념입니다. 자바스크립트와 파이썬 모두 비동기 처리를 지원하지만, 방식이 다릅니다. 이번 글에서는 자바스크립트와 파이썬의 비동기 처리 방식의 차이점을 비교해보겠습니다.1. 자바스크립트의 비동기 처리자바스크립트는 싱글 스레드 이벤트 루프(Event Loop) 기반의 비동기 모델을 사용합니다. 이는 비동기적으로 실행되는 코드가 별도의 스레드에서 실행되지 않고, 이벤트 루프를 통해 관리된다는 것을 의미합니다.1.1 콜백 함수 (Callback)가장 기본적인 비동기 처리 방식은 콜백 함수입니다.console.log("Start");setTimeout(() => { console.log("Async Task Done..

개발공부 2025.02.10

[개발 고민]프레임워크를 사용할 것인가, 라이브러리를 조합할 것인가?

🚀 고민의 시작: 프레임워크가 항상 최선인가?웹 개발을 할 때, 우리는 흔히 프레임워크(Framework) 를 사용할지, 아니면 필요한 라이브러리(Library)를 조합해서 직접 설계할지 고민하게 된다.나는 처음에 프레임워크가 빠르고 편리한 해결책이라고 생각했지만, 점점 의문이 들기 시작했다. "꼭 이 방식을 따라야만 할까?" "필요한 기능만 쓰고 싶은데, 왜 강제적인 구조를 따라야 하지?" 라는 고민이 생겼다.프레임워크는 개발 속도를 높여주고, 팀원들이 일관된 방식으로 개발하도록 도와주지만, 때로는 불필요한 기능까지 강제하고 개발의 자유도를 제한하기도 한다.반면, 라이브러리 기반 접근법은 더 유연한 개발이 가능하지만, 직접 모든 것을 구성해야 하는 부담이 있다. 그렇다면, 어떤 경우에 프레임워크를 사..

개발공부 2025.02.10

[fabricjs]"Trying to initialize a canvas that has already been initialized"

개요Fabric.js를 React 환경에서 사용하다 보면 fabric: Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas? 오류를 만날 수 있습니다. 이 오류는 Fabric.js에서 동일한 Canvas를 여러 번 초기화하려고 할 때 발생합니다. 본 글에서는 해당 오류가 발생하는 원인과 해결 방법을 정리합니다.오류 발생 원인Fabric.js는 캔버스를 생성하고 관리하는 라이브러리로, React의 StrictMode에서 두 번 렌더링되는 경우가 있습니다. 이에 따라 useEffect 훅 내부에서 new fabric.Canvas()를 실행하면 두 번 생성되면서 위 오류가 발생할 ..

개인프로젝트 2025.02.08

try catch finally 는 항상 비동기를 기다리지 않는다

개요JavaScript의 try...catch...finally 구문을 사용할 때, finally 블록이 항상 비동기 코드가 끝날 때 실행된다고 착각하는 경우가 많다. 하지만 finally 블록은 try가 종료되면 즉시 실행되며, 내부의 비동기 코드가 완료되길 기다리지 않는다. 이를 이해하지 못하면 로딩 상태 관리나 비동기 작업의 순서를 제어하는 데에서 문제가 발생할 수 있다.문제 상황아래의 슈도코드를 살펴보자. 이 코드는 네트워크 요청을 수행한 후, 데이터를 다운로드하는 동안 로딩 상태를 표시하려는 의도로 작성되었다.function downloadFile() { setLoading(true); // 로딩 시작 try { fetchDataFromServer() // 비동기 요청 .the..