PKSelect
  • Document
  • 프로젝트 개요
  • 프로젝트 준비
    • 개발환경 및 팀구성
    • 워크플로우
    • 사전조사 & 의사결정
      • 사전조사
      • 의사결정
        • 기능적 의사결정
        • 비기능적 의사결정
  • 프로젝트 설계
    • FRONTEND 설계 개요
      • FRONTEND 화면 흐름 및 동작
      • 콘텐츠 구성
        • Mainpage
        • Secondpage
      • 디자인 설계 의사결정
        • 디자인 컨셉 및 기능 정의
        • 컴포넌트 디자인
          • PC version
          • Mobile version
        • 로고결정
    • 시스템 구조 설계 개요
      • 시스템 흐름도 및 구조도
    • API Document
  • issue
    • FrontEnd
      • FrontEnd/Device classification issue
      • FrontEnd/cross browsing issue
    • BackEnd
      • BackEnd/lms_login_pw_issue
      • BackEnd/Circular Imports
    • Memo
  • 프로젝트 개발
    • FrontEnd
      • 페이지 UI
        • Mainpage
        • Loading page
        • SPA
        • Secondpage
          • Calendar
          • Table
            • 데이터 정렬
            • table
            • Button
              • 마감기한 지난 항목 삭제 <-> 확인 button
              • 과목 <-> 강의, 과제, 시험 button
              • 종강 D-day button
          • 피드백 이후 추가된 기능
      • 향후 개발 계획
    • BackEnd
      • Flask
        • PKSelecter/
        • controller/
        • app/
        • tests/
      • Server
        • AWS
        • Nginx + wsgi + Flask
        • (Sercurity) HTTPS
    • Prototype
  • 프로젝트 결과
    • 결과 보고
      • 개요
      • FrontEnd
      • BackEnd
      • PKSelect, Beta Service
      • 베타 서비스 설문조사
        • 서비스 사용성 평가
        • 베타 서비스 피드백
      • Google analytics 적용
      • 중간 발표 질문 정리
      • 최종 결과 보고
        • 피드백 적용 기능
Powered by GitBook
On this page
  • 순환참조 이슈가 있었다.
  • 해결방법
  • 프로젝트에서는 .....

Was this helpful?

  1. issue
  2. BackEnd

BackEnd/Circular Imports

PreviousBackEnd/lms_login_pw_issueNextMemo

Last updated 2 years ago

Was this helpful?

순환참조 이슈가 있었다.

다음 코드를 보자.

이는 a.py를 실행하면 circular import 에러가 발생하는 것을 알 수 있다.

그 이유는 import time에는 .py 모듈에 들어 있는 소스 코드를 위에서 부터 순서대로 한 번 파싱하고, 실행을 위한 바이트 코드를 생성한다. 그 결과로 .pyc 파일이 생성되며 Syntax Error 또한 코드를 파싱하는 과정에서 발생한다. 또한 함수 본문과 클래스의 메소드 본문을 제외한 대부분의 코드가 import time에 실행이 되기 때문이다.

고로 위 사진에서 a.py를 실행하면

  1. b.py를 import하고, import a를 만나 다시 a.py를 import하게 된다.

  2. 그럼 functiona()를 만나는데, functiona()내부에서 반환하는 function_b()는 아직 부르지 않았기 떄문에 순환참조 오류가 발생하게 된다.

반면에 b.py를 실행하면 정상출력이 되는

이는 import a를 만나, a.py를 부름과 동시에 import b를 만나 function_b()가 선언되었기에 정상출력이 되는 것이다.

해결방법

그래서 보통 해결방법으로 import time을 고려해, import 위치를 바꿔준다.

해당 코드에서는 b.py에서 import a를 함수안으로 넣어주었다.

_init__.py와 login_api.py 사이에 순환 참조가 일어났는데, 나는 import를 옮겨주기 보다는 login_api.py를 함수로 묶어주었다.

왜냐하면, 순환참조가 코드가 잘 실행된다고 가정해도 한 파일이 두번씩 실행되기 때문에 이러한 점이 비효율적이다 생각하여 함수로 묶어주었다.

내가 찾아봤을 때 보통은 아래와 같이 import 순서를 바꾼다.

프로젝트에서는 .....