게시글
질문&답변
2024.04.15
선생님 혹시 SSV 파일을 json으로 변환할 방법이 있을까요?
질문하신 내용을 보아 공부를 재미있게 많이 하신 느낌이 듭니다. 일단 문의하신 SSV 에 대해 저도 검색을 좀 해보았습니다만 안타깝게도 라이브러리 같은건 아직 없는듯 합니다. (이참에 라이브러리를 만들어보는 도전을 해보시는 것도.... ) https://www.macfh.co.uk/JavaJive/ProgScriptWeb/JSSSV2JSON.html 그나마 가장 정보가 있는 쪽은 javascript에서 ssv 를 json으로 변환하는 내용에 대해선 찾을 수 있었습니다. 해당 사이트 같은데서 온라인 버전으로 동작시켜보고 문제없이 컨버팅이 된다면 해당 사이트의 js 파일을 분석해서 파이썬으로 작성해보는것도 좋을듯 합니다만.. 이미 어느정도 코드를 작성하셨고 동작은 하는걸로 보아 나름 고민을 많이 해보신것 같긴합니다. 로직에 정답은 없습니다. 본인이 짜셨으니 계속 사용하다보면 뭐가 아쉬운지 아실테고 그 아쉬운 영역을 고민하다보면 더 좋은 업그레이드된 코드가 나오고.. 뭐 이런 부분의 반복이라 보입니다. 화이팅 하세요!!
- 0
- 2
- 138
질문&답변
2023.04.10
구글 클라우드에서 static 폴더 경로 설정 문제
로컬에서 문제 없던게 gcp에서 동작하지 않는다면 도커 생성시 어떤 차이가 발생했는지를 확인해보셔야 할 듯 합니다. 도커 생성시에 말씀하신 이미지 파일과 동영상 파일이 도커내에 모두 복사 가 되었는지도 확인해보셔야 할듯 합니다. 그리고 어디서 문제가 생겼는지 확인하기 위해서 url_for를 사용하지 않고 직접 절대경로를 입력 해서 영상이나 이미지가 제대로 나오는지 먼저 확인해보시고 한단계씩 의심스러운 부분을 제거해나가면서 원인을 찾아보시는것도 좋은 방법입니다.
- 0
- 2
- 251
질문&답변
2023.04.04
구글 클라우드에서 static 폴더 경로 설정 문제
안녕하세요. 일단 static 폴더에 있는 image file 동영상 파일이 어떤 것을 말씀하시는건지 모르겠습니다. 특별한 설정이 없다면 static 폴더는 그냥 static 이름으로 동작해야 합니다. 어떤 경우의 image file과 동영상 파일을 어떤 목적으로 핸들링하려는지 명확치 않아 답변을 드리기 어렵습니다만 혹은 send_file(), 혹은 send_from_directory() 와 같은 함수를 사용하여 static 폴더 대신 직접 경로로 접근하는 방법을 더 자주 사용하기도 합니다. 확인해보시고 해결되지 않으면 다시 질문주시기 바랍니다. 감사합니다.
- 0
- 2
- 251
질문&답변
2023.03.24
왜 list창으로 넘어가지 않나요?
네, 답답하신 심정 이해갑니다만 현재 강의는 몽고디비 4.x 버전을 기준으로 하지 않습니다. 그래서 되도록 강의 환경과 동일한 환경을 구축하시는걸 강의 초반에 당부드리는 이유기도 합니다. 참고로 몽고디비는 3.9 버전을 기점으로 상당히 많은 내용과 개념이 변경되었습니다. 버전업에는 단순히 어떤 함수명이 변경되는 수준이 아니라 개념 자체가 바뀌는 경우도 많습니다. 그래서 실제 서비스를 운영할때도 프로그램이 버전업 되었다고해서 실제 서비스 중인 프로그램을 절대 쉽게 업그레이드 하지 않습니다. 이런 버전업은 단순히 스마트폰의 펌웨어를 최신버전으로 업그레이드 하는 관점과는 완전 다른 부분입니다. 그러기에 그 모든 버전에 따라 강의 내용을 수정할 수가 없는 부분도 있습니다. 지금 사용중이신 버전에서 단순히 count()함수를 count_documents()로 변경해서 되는 부분이 있고 안되는 부분도 많습니다만 그리고 지금 올려주신 pymongo.errors.ServerSelectionTimeoutError: mongo:27017: [Errno 11001] getaddrinfo failed, Timeout: 30s, T 위 오류의 내용은 count()함수와 count_documents()함수로 인해 발생하는 문제가 아니라 몽고디비 서버가 반응하지 않아 타임아웃이 발생한 오류로 보입니다. getaddrinfo함수가 failed 되었다는 이야기는 이는 서버가 동작하지 않아서 생기는 문제일수도 있고 접속 URI 문자열의 주소 혹은 포트로 접속할 수 없어서 생기는 문제입니다. 물론 안타깝게도 왜 그런 문제가 생겼는지는 제가 환경까지 알 수 없기 때문에 뭐라고 답변을 드릴 수가 없습니다. 이제 공부를 시작하시는 입장에선 모든 오류가 다 답답하고 힘드시겠지만 최대한 강의와 동일한 환경에서 자세한 정보를 주셔야 제가 답변을 해드릴 수 있습니다. 물론 프로그래밍은 수학 문제가 아니기 때문에 문제에 정답을 드릴 수 없을 때가 많습니다. 저로서는 충분히 생각해보고 어떤 가능성에 대한 방향을 제시해 드리지만 때로 제가 드린 답변으로 해결 되지 않을 수도 있습니다.
- 0
- 8
- 296
질문&답변
2023.03.23
왜 list창으로 넘어가지 않나요?
tot_count = board.find(query).count() 위 문제는 이전에 질문하셨던 내용과 동일한 내용입니다. 몽고디비 상위 버전에서 위의 코드에서처럼 count() 함수가 변경되어 발생하는 오류로 보입니다. 이전 답변에서처럼 count()함수 대신 count_documents() 함수를 사용해보시길 바라며, 사용중이신 해당 버전에 대한 공식 문서를 참고하셔서 콜렉션 카운팅에 대한 내용을 확인해보시길 바랍니다.
- 0
- 8
- 296
질문&답변
2023.03.21
로그인 후 list.html 로 전환 안되고 에러
발생한 오류는 강의에서 사용한 몽고디비 버전과 실제 사용하시는 버전이 달라서 생기는 문제입니다. 어떤 버전을 사용하시는지 모르겠지만 # 3.6 cnt = members.find({"email": email}).count() # 3.7 >= cnt = members.count_documents({"email": email}) 위의 내용과 좀 더 자세한 정보는 몽고DB 공식사이트 문서 도 한번 참고해보시면서 사용중이신 몽고 디비 버전에 맞는 함수를 호출하셔야 할 듯 합니다.
- 0
- 1
- 243
질문&답변
2023.03.21
전체 소스 어디서 down 받나요?
무슨 말씀이신지 잘 이해가 가지 않습니다. 소스를 다운 받았는데 어디서 받냐고 물으시면..... 코드는 맨 마지막 강좌의 첨부파일에 전체 코드와 주피터 노트북이 첨부되어있습니다. 확인해보시기 바랍니다~
- 0
- 1
- 251
질문&답변
2023.03.20
search = request.args.get('search', -1, type=int)
request.args.get("파라메터", "기본값", type="자료형") 위의 형태로 사용됩니다. 따라서 -1 은 search 의 파라메터가 존재하지 않을 경우 -1 의 값을 기본값으로 설정하기 위해 사용됩니다. 그래서 search의 값이 존재하지 않는 경우를 판단하기 위해 search의 값이 -1 인지를 확인하면 해당 파라메터에 값이 넘어왔는지 아닌지를 확인하기 위함입니다.
- 0
- 1
- 380
질문&답변
2023.03.03
질문드립니다.
try except 만을 사용해서 작성한다고 한다면 다음과 같이 작성할 수 있습니다. 다만 이때 입력된 값이 숫자 3자리가 아닌경우는 오류를 강제 발생시켜야 하기에 사용자 정의 오류 클래스를 사용해서 처리할 수 있습니다. class NumberLength(Exception): def __init__(self, msg): super().__init__(msg) #세 자리 숫자만 입력할 수 있게 하는 함수 def input_check(msg, casting = int): while True: error = "" try: num = input(msg) # 사용자 입력 if casting(num): return num if len(num) != 3 or (num[0] == "0" and len(num) == 3): error = "세자리 수를 입력하세요" raise NumberLength(error) except ValueError as e: print("숫자만 입력 가능합니다") continue except NumberLength as e: print(e) a = input_check("입력: ") print(a) 위의 코드를 테스트 해보시면 원하는 대로 동작하리라 생각됩니다. (사진) 코드를 실행해보면 위의 이미지 처럼 동작합니다. 그런데, 댓글중에 "일코"님께서 작성하신 것 처럼 조건문을 사용해서 처리하는게 더 깔끔한 코드일 수 있습니다. try except 문은 정말 어떤 예측 가능하지 않은 오류를 처리하기 위한 목적이기에 예외처리의 관점보다는 충분히 예측 가능한 내용은 조건문을 사용해서 작성하시는게 더 좋은 코드라 생각됩니다.
- 1
- 2
- 223
질문&답변
2023.03.03
{% for i in range(block_start, block_last + 1 ) %} 에서
block_last 까지 출력을 하기 위해선 for문의 range에 +1 만큼을 해줘야 block_last까지 반복할 수 있습니다. 다시 얘기하자면.. for i in range(1, 10) 을하면 i 는 1부터 9까지를 반복하게 되고 10은 반복하지 않으니 10까지 반복하려면 10 + 1이 되어야 한다는 이야기 입니다.
- 0
- 2
- 251