안녕하세요. 2024년도에 처음으로 Node.js를 학습해 보기 위해 해당 강의를 수강 중 입니다. 물론 Mongodb 관련(mongoose) callback 함수 등 변경점이 많아서 구글링과 인프런 질문 게시판을 활용하며 저만의 코드로 변경하는 중입니다. 그러던 중, token에 대한 궁금증이 생겨서 질문을 올립니다. 강의에서는 mongoose의 DB에 저장된 인스턴스를 찾은 후, 해당 인스턴스의 속성 값을 변경하는 findOneAndUpdate를 활용하려 하고 있습니다. 하지만, 저희는 기존에cookie에 x_auth라는 속성명으로 토큰값을 저장하고 있었습니다. 문서들을 찾아보니, 토큰 정보 등은 서버가 아닌 클라이언트가 저장하고 있는 것이 편리하기 때문에, DB의 보안성 때문에, DB 접근 시간보다 세션 또는 쿠키 접근이 빨라서 등 여러 이유가 있는 것 같습니다. 그렇다면, 저희가 만든 userSchema에서 token과 관련된 속성들의 존재 이유는 무엇인가요? 저희는 token을 login 과정에서도 cookie의 x_auth에 저장하고, db 갱신을 해주지는 않는데, 왜 굳이 logout 라우트에서는 findOneAndUpdate를 사용하는 것인가요? 그냥 쿠키의 x_auth 값을 비워주는 것은 안되는 것인가요?? 긴 글 읽어주셔서 감사합니다.
질문 남겨주셔서 감사합니다. 막히면 언제든 무엇이든 자주 질문 던져주세요. 수학/과학이나 알고리즘과는 달리 업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다. 다시 말씀드리지만, 질문을 자주자주 남겨주세요. 저도 최대한 빠르게 회신 드리겠습니다. 당부드릴 두 가지가 있습니다. ① 가급적 구체적으로 설명해주세요. ② 특정 챕터 관련 질문 남겨주실 때는, 어느 챕터인지 알려주세요ㅜ ==================================== 안녕하세요~ 막히는 부분이 있을 때마다 항상 많은 도움을 받고 있습니다. 예전에 누름틀의 메모를 가져오는 방법에 문의하고 잘 활용하고 있는데 누름틀의 개수가 많아지면 생각보다 조회하는 시간이 오래 걸려서 다시 질문을 합니다. 누름틀 필드로 커서를 이동한 후 내용을 추출하는 방법 말고 다른 방법이 없을까요?? 누름틀의 필드이름을 알면 누름틀 안의 안내문, 메모 내용을 추출하는 방법이 궁금합니다.
현재 일기 관리 기능 구현하기2 부분의 강의를 보고 있는데 강의에서 const DiaryStateContext = createContext(); const DiaryDispatchContext = createContext(); 이렇게 createContext를 두번 작성이 되었고 또 DiaryStateContext는 value로 data를 DiaryDispatchContext는 value로 onCreate, onUpdate, onDelete 이렇게 각각 보내는데 왜 이렇게 두번작성을 하는 것인지 그리고 그냥 DiaryStateContext 이 부분에 value로 data와 onCreate, onUpdate, onDelete 이걸 같이 보내면 안되는건가요?
안녕하세요 공부를 하다가 index.css 파일과 App.css 이 두개가 조금 헷갈리더라구요. 예를 들어 App.css도 폰트를 적용하면 전부다 적용이 되고 index.css도 똑같이 되는데 그럼 index.css는 어떤부분일때 작성이 되고 App.css는 어떤부분일 때 작성이 되는것인지 궁금합니다
질문 남겨주셔서 감사합니다. 막히면 언제든 무엇이든 자주 질문 던져주세요. 수학/과학이나 알고리즘과는 달리 업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다. 다시 말씀드리지만, 질문을 자주자주 남겨주세요. 저도 최대한 빠르게 회신 드리겠습니다. 당부드릴 두 가지가 있습니다. ① 가급적 구체적으로 설명해주세요. ② 특정 챕터 관련 질문 남겨주실 때는, 어느 챕터인지 알려주세요ㅜ ==================================== 안녕하세요, 오랜만입니다. 저번에도 한번 여쭤본 적이 있는데, 해결 못하고 방치해두고 있다가 다시 시간이 나서 재도전중인 문제입니다. 제가 만든 코드는 pyhwpx를 이용해 페이지를 자동으로 매기는 프로그램입니다. 코드 자체는 정상적으로 작동하는 것을 확인했습니다. 문제는 제가 이걸 회사 사람들과 공유해서 쓰기 위해 별도의 독립형 프로그램으로 추출할 때 생깁니다. 제 목표는 컴퓨터에 파이썬도, pyhwpx도 설치되어 있지 않은 그런 사람들의 컴퓨터에서 실행을 해도 정상 작동하는 것인데요. 그런데 그런 사람의 컴퓨터에서 실행을 하면 아래와 같은 오류가 뜨고 오류를 구체적으로 확인해보려 해도 파이썬이 없는 컴퓨터라 확인할 수가 없네요. chatGPT한테 물어보니 다른 사람 컴퓨터에서 pyhwpx가 한글 파일을 찾지 못하는 문제라고 하는데 제가 Hwp.exe의 경로를 찾아서 넣어주기까지 했는데도 같은 오류가 발생하네요. 뭐가 문제인지 알 수 있을까요? 꼭 좀 부탁드립니다 ㅠㅠ. 제가 작성한 코드는 다음과 같습니다. import tkinter as tk from tkinter import filedialog, messagebox from pyhwpx import Hwp import os # 한글 경로 탐색 함수 def find_hwp_path(): # 명시적인 경로 설정 possible_paths = [ r"C:\\Program Files (x86)\\Hnc\\Office 2022\\HOffice120\\Bin\\Hwp.exe", # Office 2022 기본 경로 r"C:\\Program Files\\Hnc\\Office 2020\\Hwp.exe", # Office 2020 r"C:\\Program Files (x86)\\Hancom\\Office 2018\\Hwp.exe", # Office 2018 r"C:\\Program Files (x86)\\HWP\\Bin\\Hwp.exe" # 과거 한글 ] # 경로 확인 for path in possible_paths: if os.path.exists(path): return path # 경로를 찾지 못하면 None 반환 return None # 한글 연동 함수 def set_page_numbers(file_paths, odd_files): try: hwp_path = find_hwp_path() if not hwp_path: messagebox.showerror("오류", "한글 경로를 찾을 수 없습니다.") return # 한글 프로그램 객체 생성 hwp = Hwp(hwp_path) hwp.XHwpWindows.Item(0).Visible = False # 한글 창 숨기기 j = 1 # 페이지 번호 초기값 for file_path in file_paths: hwp.Open(file_path) # 첫 페이지 이동 hwp.HAction.Run("MoveTopLevelBegin") # 홀수 페이지로 시작하지 않는 파일 처리 if file_path in odd_files: hwp.PageNumPos(j) else: if j % 2 == 0: # 기본적으로 홀수 페이지 시작 j += 1 hwp.PageNumPos(j) # 페이지 수 증가 (현재 문서 페이지 수만큼 더함) j += hwp.PageCount hwp.Clear(2) hwp.XHwpWindows.Item(0).Visible = True # 작업 후 한글 창 보이기 hwp.Clear(3) hwp.Quit() messagebox.showinfo("완료", "페이지 번호 작업이 완료되었습니다!") except Exception as e: import traceback error_message = traceback.format_exc() messagebox.showerror("오류", f"작업 중 오류가 발생했습니다:\n{error_message}") # 파일 이동 함수 def move_up(listbox): selected_items = listbox.curselection() if not selected_items: return for index in selected_items: if index > 0: # 첫 번째 항목이 아닌 경우에만 이동 가능 value = listbox.get(index) listbox.delete(index) listbox.insert(index - 1, value) listbox.selection_set(index - 1) def move_down(listbox): selected_items = listbox.curselection() if not selected_items: return for index in reversed(selected_items): if index < listbox.size() - 1: # 마지막 항목이 아닌 경우에만 이동 가능 value = listbox.get(index) listbox.delete(index) listbox.insert(index + 1, value) listbox.selection_set(index + 1) # 파일 추가 및 제거 함수 def add_file_to_list(listbox): files = filedialog.askopenfilenames( title="파일을 선택하세요", filetypes=[("HWP/HWPX 파일", "*.hwp;*.hwpx"), ("HWP 파일", "*.hwp"), ("HWPX 파일", "*.hwpx"), ("모든 파일", "*.*")] ) for file in files: listbox.insert(tk.END, file) def remove_selected_file(listbox): selected_items = listbox.curselection() for item in reversed(selected_items): listbox.delete(item) # 실행 함수 def execute_task(): all_files = list(listbox_all_files.get(0, tk.END)) odd_files = list(listbox_odd_files.get(0, tk.END)) if not all_files: messagebox.showerror("오류", "전체 파일 목록이 비어 있습니다.") return set_page_numbers(all_files, odd_files) # GUI 설정 root = tk.Tk() root.title("페이지 번호 매기기 프로그램") root.geometry("800x650") root.resizable(False, False) # 전체 파일 프레임 frame_all_files = tk.Frame(root, relief="solid", bd=1) frame_all_files.place(x=10, y=10, width=600, height=250) label_all_files = tk.Label(frame_all_files, text="전체 파일", font=("맑은 고딕", 12, "bold")) label_all_files.pack(anchor="nw", padx=5, pady=5) listbox_all_files = tk.Listbox(frame_all_files, selectmode="extended") listbox_all_files.pack(fill="both", expand=True, padx=5, pady=5) btn_frame_all_files = tk.Frame(root) btn_frame_all_files.place(x=620, y=10, width=160, height=250) btn_add_file = tk.Button(btn_frame_all_files, text="파일 추가", command=lambda: add_file_to_list(listbox_all_files)) btn_add_file.pack(fill="x", padx=5, pady=5) btn_remove_file = tk.Button(btn_frame_all_files, text="선택파일 삭제", command=lambda: remove_selected_file(listbox_all_files)) btn_remove_file.pack(fill="x", padx=5, pady=5) btn_move_up = tk.Button(btn_frame_all_files, text="위로 이동", command=lambda: move_up(listbox_all_files)) btn_move_up.pack(fill="x", padx=5, pady=5) btn_move_down = tk.Button(btn_frame_all_files, text="아래로 이동", command=lambda: move_down(listbox_all_files)) btn_move_down.pack(fill="x", padx=5, pady=5) # 홀수 페이지로 시작하지 않는 파일 프레임 frame_odd_files = tk.Frame(root, relief="solid", bd=1) frame_odd_files.place(x=10, y=280, width=600, height=250) label_odd_files = tk.Label(frame_odd_files, text="홀수 페이지로 시작하지 않는 파일", font=("맑은 고딕", 12, "bold")) label_odd_files.pack(anchor="nw", padx=5, pady=5) listbox_odd_files = tk.Listbox(frame_odd_files, selectmode="extended") listbox_odd_files.pack(fill="both", expand=True, padx=5, pady=5) btn_frame_odd_files = tk.Frame(root) btn_frame_odd_files.place(x=620, y=280, width=160, height=250) btn_add_odd_file = tk.Button(btn_frame_odd_files, text="파일 추가", command=lambda: add_file_to_list(listbox_odd_files)) btn_add_odd_file.pack(fill="x", padx=5, pady=5) btn_remove_odd_file = tk.Button(btn_frame_odd_files, text="선택파일 삭제", command=lambda: remove_selected_file(listbox_odd_files)) btn_remove_odd_file.pack(fill="x", padx=5, pady=5) btn_move_up_odd = tk.Button(btn_frame_odd_files, text="위로 이동", command=lambda: move_up(listbox_odd_files)) btn_move_up_odd.pack(fill="x", padx=5, pady=5) btn_move_down_odd = tk.Button(btn_frame_odd_files, text="아래로 이동", command=lambda: move_down(listbox_odd_files)) btn_move_down_odd.pack(fill="x", padx=5, pady=5) # 실행 버튼 btn_execute = tk.Button(root, text="실행", command=execute_task, font=("맑은 고딕", 14, "bold"), bg="#00484D", fg="white") btn_execute.place(x=10, y=550, width=770, height=40) root.mainloop() 그리고 제가 추출하는데 사용한 것은 pyinstaller --onefile --noconsole --icon="C:\\Users\\user\\Desktop\\@공유\\JINA\\0__exe\\페이지 자동 맞춤 프로그램\\icon.ico" --hidden-import=pyhwpx --hidden-import=subprocess page_numbering_v2.py 이거에요. 뭐가 문제일까요? 따뜻한 연말 되시기 바라며, 감사합니다.
pipenv shell 환경에서 maturin develop 을 하면 아래와 같이 오류가 뜹니다 (pyo3-9vp6XEz5) D:\D\Work\study\Rust\inflean\easy-rust\pyo3>maturin develop 🔗 Found pyo3 bindings 🐍 Found CPython 3.12 at C:\Users\INNO-A-1328\.virtualenvs\pyo3-9vp6XEz5\Scripts\python.exe 📡 Using build options features from pyproject.toml Compiling once_cell v1.20.2 Compiling unindent v0.2.3 Compiling cfg-if v1.0.0 Compiling libc v0.2.169 Compiling pyo3-build-config v0.23.3 Compiling memoffset v0.9.1 Compiling pyo3-ffi v0.23.3 Compiling pyo3-macros-backend v0.23.3 Compiling pyo3 v0.23.3 Compiling pyo3-macros v0.23.3 Compiling fibonacci v0.1.0 (D:\D\Work\study\Rust\inflean\easy-rust\pyo3) error[E0599]: no method named add_function found for reference &pyo3::types::PyModule in the current scope --> src\lib.rs:17:7 | 17 | m.add_function(wrap_pyfunction!(run, m)?)?; | ^^^^^^^^^^^^ method not found in &PyModule error[E0277]: the trait bound &pyo3::types::PyModule: WrapPyFunctionArg<'_, _> is not satisfied --> src\lib.rs:17:42 | 17 | m.add_function(wrap_pyfunction!(run, m)?)?; | ----------------------^- | | | | | the trait WrapPyFunctionArg<'_, _> is not implemented for &pyo3::types::PyModule | required by a bound introduced by this call | = help: the following other types implement trait WrapPyFunctionArg<'py, T> : &pyo3::Borrowed<'_, 'py, pyo3::types::PyModule> &pyo3::Bound<'py, pyo3::types::PyModule> pyo3::Borrowed<'_, 'py, pyo3::types::PyModule> pyo3::Bound<'py, pyo3::types::PyModule> pyo3::Python<'py> error[E0277]: the trait bound &pyo3::types::PyModule: From<BoundRef<'_, '_, pyo3::types::PyModule>> is not satisfied --> src\lib.rs:15:1 | 15 | #[pymodule] | ^^^^^^^^^^^ the trait From<BoundRef<'_, '_, pyo3::types::PyModule>> is not implemented for &pyo3::types::PyModule , which is required by BoundRef<'_, '_, pyo3::types::PyModule>: Into<_> | = note: required for BoundRef<'_, '_, pyo3::types::PyModule> to implement Into<&pyo3::types::PyModule> = note: this error originates in the attribute macro pymodule (in Nightly builds, run with -Z macro-backtrace for more info) Some errors have detailed explanations: E0277, E0599. For more information about an error, try rustc --explain E0277 . error: could not compile fibonacci (lib) due to 3 previous errors 💥 maturin failed #[pymodule] 이하 부분을 주석처리하면 아래 에러는 해결되나 python main.py 실행하면 fibonacci 를 찾을 수 없다는 에러가 발생합니다
안녕하세요 맥으로 수강중인 사람입니다. 다름이아니라 네이버지식인gui를 vscode에서 코드 실행 후 저장버튼을 누르면 엑셀파일로 저장이 잘되었는데 실행파일로 만들고 추출한다음 저장버튼을 누르면 저장이 되지않습니다 이유를 알수있을가요? 코드를 다시봐도 문제는 없는데 이유를 못찾겠습니다ㅠㅠ
안녕하세요 오늘 네이버지식인GUI.exe를 만드는데 성공하였습니다. 그런데 처음에는 실패했습니다. 그이유는 커널이 이미지에서 위에 것(★Python 3.12.8 ~~~ 맞춤)으로 되어 있었습니다. pip install pyinstaller 해도 설치가 안된것으로 나왔습니다.(pip --version으로 확인) 그런데 아래것(Python 3.12.8 ~~~Global Env) 선택하니 모든것이 잘 되었습니다. [문의사항] 위에것 아래것 모두 버전이 Python3.12.8로 동일한데 이 두개가 서로 다른것인가요? 만약 다르다면 저는 python을 오늘 삭제하고 Python3.12.8을 1번만 설치했습니다. 이렇게 두개가 보이는 이유는 무엇일까요? 감사합니다.
어느 파트 이분 탐색 알고리즘[문제풀이] :BOJ 3020 자신은 어떻게 이해했는지 이분탐색을 통해 top 과 bottom을 따로 나눠서 탐색하는 것 까지는 이해했습니다. 어떤 부분이 궁금한지 get_idx(bots, h - 1) + 1 과 get_idx(tops, h) + 1 이 부분에서 구하려고 하는 높이의 직전 index를 구하는 것 까지는 이해하였으나, 왜 1을 더하는 지는 이해가 잘 되질 않습니다. 해당 부분에 대해서 좀더 자세한 설명 부탁드리겠습니다.
새 강의도 쿠폰 받아서 잘 구매 하였습니다. 궁금한 것은 기존 강의를 다 듣고 새 강의를 수강해야 하는 것인지 기존 강의의 진도와 새 강의의 진도가 어느 부분인지 어떻게 바뀐 것 인지에 대해 이해가 안 가서 어떻게 해야하는지 알려주는 공지 또는 간단 영상이 필요할 것 같습니다. 기존 강의의 커리큘럼과 비슷하나 좀 바뀐 부분이 있을 것 같아서요. 기존 강의를 다 수강 후 복습 + 새로운 기술을 익힐 겸 새 강의를 수강하는 것이 맞는지, 아니면 기존 강의는 수강을 멈추고 새로운 강의를 다시 수강하면 되는 것인지 알려주시면 감사하겠습니다.
index.html에서 다룬 코드입니다. 경로를 바꿀때마다 vercel --prod로 프로젝트 갱신해서 배포했습니다. meta 태그에서 썸네일 이미지를 표현하는 og:image 프로퍼티와 컨텐츠에 썸네일을 하고 싶은 이미지를 src / assets 파일에 todayfeeling.png 로 저장해놨습니다. 탭 아이콘 표현은 절대 경로로 표현했을 때 비로소 적용이 되었습니다. (강의에서는 href="/favicon.ico"로 표현했지만 저는 강의랑 똑같이 했을 경우에 아이콘이 나타나지않아서 아래 코드와 같이 경로를 추가해서 아이콘을 띄웠습니다.) 썸네일 이미지 때문에 content ="/todayfeeling.png" content ="src/assets/todayfeeling.png" content ="/src/assets/todayfeeling.png" (블로그에 올린 이미지 주소) content ="https://velog.velcdn.com/images/foreveryejin/post/65845dd4-a999-4344-9fb4-3710b07f5a3d/image.png" content ="./src/assets/todayfeeling.png" 여러 경로를 바꿔가면서 해봤는데 안되더라구요. 그래서 다른 포털사이트에서 실제로 사용하는 meta 태그를 긁어와서 사용해봤는데 안되네요... 다른 기능들은 잘 작동하는데 이것만 말썽입니다..! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="src/assets/icon.ico" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>오늘 하루 감정</title> <meta property="og:title" content="오늘의 감정" /> <meta property="og:image" content="/todayfeeling.png" /> <meta property="og:description" content="예진이의 오늘의 감정 일기장" /> </head> <body> <div id="root"></div> <script type="module" src="/src/main.jsx"></script> </body> </html> pc : 모바일 : 저의 깃헙 링크입니다! 확인 부탁드립니다. https://github.com/yyejin00/diary-with-emotions 감사합니다.
강사님, 안녕하세요. 다중 스케줄러 실행 시 정상적으로 동작하고 있는지 확인할 수 있는 방법에 대해 문의드립니다. 현재 Worker와 Scheduler를 다중으로 실행하여 고가용성 테스트를 진행 중입니다. Worker의 경우 Celery Flower를 통해 정상적으로 Sync가 이뤄지는 것을 확인하였습니다. 다만 Scheduler의 경우 뭔가 정확하게 확인이 안되는 것 같습니다. 우선 제가 찾은 방법으로는 메타 테이블 조회와 커맨드가 있습니다. 메타 테이블 조회 아래와 같이 조회하면 running인 상태의 host가 Scheduler 수만큼 조회됩니다. hostname도 모두 일치합니다. select * from job where job_type = 'SchedulerJob' and state = 'running'; 커맨드 아래와 같이 커맨드 실행 시 'Found one alive job.'이 출력됩니다. $ airflow jobs check --job-type SchedulerJob Found one alive job. Scheduler 로그 확인 시 모두 heartbeat은 계속 요청하고 있습니다. 혹시 Worker와 같이 명확하게 다중 스케줄러 환경인지 확인하는 방법이 있을까요?
variables 를 추가하는 강의에서 variables 추가하고, dags_bash_with_variable.py를 생성후, git push 하고 나중에 봣더니 그 많던 dag(examples + 강의때 따라한 dag) 들중에 딸랑 3개만 보이고 안보여요.. dags 폴더 하위를 찾아가보니 파일은 그대로 존재하는데.. 왜 3개만보이는건지 .. 혹시 확인해볼만한 로그들이나... 이유에 대해서 아실까요..? docker exec -it {스케줄러노드ID} bash 로 들어가서 dags도 확인해봤습니다.
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요. - 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요! - 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요. - 논리적이고 구체적인 질문은 학습 효과를 올립니다 :)
안녕하세요 ! 해당 리액트 강의에서 했던 실습에서는 기능위주? 로 진행해서 궁금증이 생겼습니다 ! 만약 리액트를 사용해서 간단한 정보 공유 웹 사이트를 만든다면 텍스트의 양이 많아지는데 이런 경우에는 파일 내부에 내용을 작성하면 코드가 길어지니, 직접 api 제작하고, 연동하는 게 맞는 거겠죠!?