• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

안녕하세요 몇가지 질문이 있습니다.

24.01.08 20:04 작성 24.01.08 20:04 수정 조회수 125

0

안녕하세요 좋은 강의 잘 듣고있습니다. 몇가지 질문이 있어 문의드립니다.

  1. 데코레이터로 감싸진 함수 호출

강의를 다볼때쯤 되어 코드를 보니 blog_abtest.py와 blog.py에서 데코레이터로 감싸진 함수들의 호출은 @login_manager.user_loader -> 해당 데코레이터 부분에서 된다고 보면 될까요??

수업시간에 말씀해주셨을텐데 제가 잘 이해를 못한것 같네요...

예를들어, 아래 이미지의 함수들의 경우 선언과 동시에 호출을 하는 것일까요?

2. C++, C#으로 구현된 서비스 SDK와의 연계

제가 타전공으로서 웹은 처음으로 강사님을 통해 배우고 있는데 실무에서 C++ 혹은 C#으로 구현된 SDK에서 제공하는 '지도(map)'을 가시화하는 웹서버를 개발해야 됩니다. 본 강의에서 학습한 FLASK에 해당 SDK를 연동해서 홈페이지에서 지도를 불러올 방법이 있을까요??

 

  1. 마지막으로, 정부쪽 웹개발은 FLASK를 사용하지 못하나요??

국가 과제를 수행하고 있는데 정부에서 쓰는 웹 프레임워크가 따로 있다고 들었습니다.(자바와 유사한 전자정부~)

국가기관에 웹서비스를 배포하고자 할때는 파이썬 기반의 FLASK를 사용하지는 못할까요??

 

 

 

 

 

 

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변 도우미입니다.

1번 질문

Python에서 데코레이터는 함수를 감싸는 함수입니다. 이것은 감싼 함수에 추가적인 기능을 주입할 수 있게 해줍니다. 데코레이터로 감싸진 함수는 데코레이터가 정의된 후에 호출되는 것이 아니라, 감싼 함수가 호출될 때 데코레이터의 로직이 실행되고 난 후에 해당 함수가 실행됩니다.

예를 들어, @login_manager.user_loader 데코레이터는 load_user 함수를 Flask-Login의 사용자 로드 메커니즘에 연결합니다. 이것은 Flask-Login이 사용자의 ID를 받았을 때, 해당 ID로 사용자 객체를 로드하는 방법을 알 수 있게 해줍니다. 이 함수는 사용자가 로그인할 때와 사용자의 세션을 복원할 때 Flask-Login에 의해 호출됩니다.

@app.before_request 데코레이터는 Flask가 요청을 받기 전에 실행되어야 하는 함수를 정의하는 데 사용됩니다. 이는 요청이 라우트 핸들러에 도달하기 전에 실행되는데, 예를 들면 사용자의 IP 주소를 세션에 저장하는 데 사용됩니다.

@blog_abtest.route('/blog_fullstack1') 데코레이터는 Flask에게 어떤 URL 경로가 blog_fullstack1 함수에 매핑되어야 하는지 알려줍니다. 그래서 사용자가 웹 브라우저에서 해당 경로로 요청을 보낼 때, 이 함수가 호출되어 페이지를 렌더링합니다.

따라서, 이 함수들은 선언과 동시에 자동으로 호출되는 것이 아니라, 특정 이벤트(사용자 로그인, 요청 처리, URL 접근 등)에 의해 트리거되어 호출됩니다.

2번 질문

우선 다른 언어로 만든 SDK 와 통신은 가능할 수는 있지만, 일반적인 경우가 아니기 때문에, 이 경우에는 컴퓨터공학에 대한 깊은 이해와 오랜 경험이 필요한 것은 사실입니다. 관련하여 참고할만한 방법은 다음과 같습니다.

  1. HTTP 기반 API 서비스 구축: C++ 또는 C#으로 작성된 서비스에 HTTP 기반의 API를 구축하고, Flask에서는 이 API를 호출하여 데이터를 받아옵니다. 이 방법은 두 언어 간의 직접적인 통신 대신, HTTP 프로토콜을 통해 간접적으로 데이터를 교환합니다.

  2. 외부 프로그램 호출: Flask 애플리케이션에서 Python의 subprocess 모듈을 사용하여 C++ 또는 C# 프로그램을 직접 호출하고 그 출력을 활용할 수 있습니다. 이 경우, C++ 또는 C# 프로그램은 커맨드라인 도구로 동작해야 합니다.

  3. SWIG 또는 Ctypes 사용: C++ 코드를 파이썬 모듈로 래핑하여 직접적으로 사용할 수 있도록 합니다. SWIG(Simplified Wrapper and Interface Generator)는 C/C++ 코드를 다양한 프로그래밍 언어로 확장할 수 있는 도구입니다. 또한, Python의 ctypes 라이브러리를 사용하여 컴파일된 C/C++ 코드를 직접 호출할 수 있습니다.

  4. gRPC 사용: gRPC는 다양한 언어를 지원하는 고성능, 범용 RPC 프레임워크입니다. C++ 또는 C# 서비스를 gRPC 서버로 만들고, Flask에서는 gRPC 클라이언트로 통신하여 데이터를 주고받을 수 있습니다.

  5. 공유 라이브러리 생성: C++ 코드를 공유 라이브러리(DLL 또는 so 파일)로 컴파일하고, Python 코드에서 직접 호출할 수 있도록 합니다.

이러한 방법들을 사용할 때, C++ 또는 C#에서 제공하는 '지도(map)' 데이터는 적절한 형태로 변환되어야 합니다. 예를 들어, 지도 데이터가 JSON, XML 또는 다른 웹에서 사용 가능한 형식으로 변환되어야 Flask 서버에서 쉽게 처리하고 클라이언트 사이드의 JavaScript와 함께 사용할 수 있습니다.

3번 질문

관련해서는 국가기관에 따라 제한조건이 다를 것으로 이해가 됩니다. 그래서, 이 부분은 케이스와 국가기관에서 제시한 조건에 따라 다른 것으로 보여집니다.

감사합니다.