묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
nginx, gunicorn, daphne 기반 배포 관련하여 질문 좀 드릴게요
안녕하세요~현재까지 공개된 강의 내용과 무관한 질문이지만, 도통 문제 해결 방향을 잡지 못하고 있어 글 남겨 봅니다. ><DRF, Channels, React로 만든 앱을 nginx, gunicorn, daphne 기반으로 배포하려는데, 막힌 지점에서 벗어나질 못하고 있습니다 ㅜnginx, gunicorn, daphne 모두 정상적으로 동작하고 있는 것 같은데, nginx 설정 파일에 등록한 127.0.0.1로 접속하면 "사이트에 연결할 수 없음, 127.0.0.1에서 연결을 거부했습니다"라는 화면이 나옵니다.문제 해결을 위해 추가적으로 살펴봐야 부분에 관해 조언을 해주신다면 너무 감사드리겠습니다!한 가지 찝찝한 부분은, react오 django 프로젝트 폴더를 담고 있는 폴더의 경로는 home/kiwitter인데 home/ubuntu/kiwitter/처럼 현재 제 우분투 환경의 사용자를 중간에 추가해야 진행 시 오류가 발생하지 않더라고요. 가상환경 사용과 관련있는 것 같은데, 어쨌든 그래서 경로 입력 시 home/ubuntu/kiwitter/처럼 중간에 사용자명을 추가하는 방식을 사용하고 있는데, 혹시 지금 문제가 이것과 관련이 있을까 싶어 말씀드립니다.배포 시 React와 Django 프로젝트가 정상적으로 동작하는지 각각 따로 확인하는 방법이 있을까요? Django도 지금처럼 http와 웹소켓으로 클라이언트 요청이 들어오는 경우에 각각의 동작 여부를 개별적으로 살펴볼 수 있는 방법이 있나요? 배포 관련 지식이 없는 데다 하나씩 단계적으로 정상 동작 여부를 점검하지도 못하니 배포의 늪에서 벗어나는 게 더 힘드네요,,파이썬 사랑방에는 모든 게시물이 관리자의 승인을 받아야 되나요? 아니면 가령 일정 등급 이상이 되면 승인 없이 게시물을 자유롭게 올릴 수 있나요? 여기서 질문 드린 부분을 처음에는 페북 파이썬 사랑방 그룹에 질문했었는데 관리자의 검토가 필요하다는 안내를 보고 궁금해서 여쭤봅니다. ✔ 프로젝트 폴더 구조(venv) ubuntu@Ubuntu:~/kiwitter$ ├── kiwitter_backend │ ├── chats │ ├── db.sqlite3 │ ├── kiwitter_backend │ ├── kiwitter.sock │ ├── log │ ├── manage.py │ ├── secrets.json │ ├── staticfiles │ ├── tweets │ └── users ├── kiwitter_frontend │ ├── build │ ├── node_modules │ ├── package.json │ ├── package-lock.json │ ├── public │ ├── README.md │ └── src ├── requirements.txt └── venv ├── bin ├── include ├── lib ├── lib64 -> lib └── pyvenv.cfg ✔ nginx, gunicorn, daphne 동작 상태<sudo systemctl status nginx 명령어 출력 결과><ps aux | grep gunicorn의 출력 결과><ps aux | grep daphne의 출력 결과>✔ nginx, gunicorn, daphne 관련 설정 파일</etc/nginx/sites-available/kiwitter>upstream django_server { server unix:/home/ubuntu/kiwitter/kiwitter_backend/kiwitter.sock; # Gunicorn 소켓 파일 위치 } upstream channels_layer { server localhost:6379; # Daphne 서버 주소 및 포트 } server { listen 80; server_name 127.0.0.1; # 실제 도메인 또는 공용 IP 주소로 변경 # React 앱이 위치한 경로 location / { root /home/ubuntu/kiwitter/kiwitter_frontend/build/; try_files $uri $uri/ /index.html; } location = /favicon.ico { access_log off; log_not_found off; } location /static/ { alias /home/ubuntu/kiwitter/kiwitter_backend/staticfiles/; # STATIC_ROOT 경로 } location /media/ { alias /home/ubuntu/kiwitter/kiwitter_backend/media/; # MEDIA_ROOT 경로 } # API 요청을 Django로 프록시 location /api/ { proxy_pass http://django_server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Django admin 페이지 및 기타 Django 경로 location /admin/ { proxy_pass http://django_server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket 요청 처리를 위한 설정 location /ws/ { proxy_pass http://channels_layer; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }</etc/systemd/system/gunicorn.service>[Unit] Description=gunicorn daemon After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/kiwitter/kiwitter_backend ExecStart=/home/ubuntu/kiwitter/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/kiwitter/kiwitter_backend/kiwitter.sock kiwitter_backend.wsgi:application [Install] WantedBy=multi-user.target</etc/supervisor/conf.d/channels.conf>[fcgi-program:asgi] socket=tcp://localhost:8000 directory=/home/ubuntu/kiwitter/kiwitter_backend command=/home/ubuntu/kiwitter/venv/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers kiwitter_backend.asgi:application numprocs=2 process_name=asgi%(process_num)d autostart=true autorestart=true stdout_logfile=/home/ubuntu/kiwitter/kiwitter_backend/log/asgi.log redirect_stderr=true✔ Django settings.py... 생략 ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',') # .env 관련 부분 -> ALLOWED_HOSTS=127.0.0.1,localhost ... 생략 CSRF_TRUSTED_ORIGINS = [ 'http://127.0.0.1:8000', 'http://127.0.0.1', 'http://localhost:8000', 'http://localhost', ] ... 생략 CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { "hosts": [('127.0.0.1', 6379)], # Redis 서버 주소 }, }, }
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
영상 중에 intercept redirect 질문
안녕하세요! 진석님 강의 잘듣고 있습니다.intercept redirect 강의 파트에서 도중에 끊긴 것 같은데 다음 회차에서 이어지는건가요? 확인 부탁드립니다!늘 좋은 강의 감사합니다:)
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
복습
이제 section 3 까지 학습완료했습니다.이제까지 만들어본걸 강의나 제공된 소스코드 없이 다시 만드는 방식으로 복습하려고 하는데 혹시 추천하는 복습 방법이 있으신가요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
channels with uvicorn
안녕하세요 선생님강의도 둘러보고, 질문게시판도 찾아보고 며칠동안 시도를 해보다 개발 중 풀리지 않는 부분이 있어 질문을 드리려합니다.(강의와 연관성이 있을지 모르겠습니다만 질문드려봅니다) 일단 현재 gunicorn의 worker로 uvicorn을 사용하는 환경을 구성하였고, 이에 따라 병렬 + 비동기 처리가 가능해진 상황에서 websocket을 활용해보려는 시도 중에 있습니다. session time이 만료되면 웹소켓을 활용하여 브라우저에 시그널을 주려고 하는데요,session관리는 redis로 구성하였고channels와 uvicorn을 조합하여 웹소켓을 관리하려 시도해보고 있습니다. 나름 uvicorn을 활용하여 디버깅 환경도 맞춰 놓았고, whitenoise를 활용하여 static 파일의 서빙도 해결해놓은 상태입니다. 기존 선생님의 웹소켓 강의가 daphne으로 구축되어있는 것으로 파악이 되어 별도로 강의를 수강하진 않았습니다만, 채팅이 아닌 양방향 통신을 위한 웹소켓의 활용에 channels + redis + uvicorn 조합이 어떤지에 대한 견해를 여쭙고 싶습니다. 그리고 로그인 이후 home 앱에 들어왔을때 웹소켓을 최초로 열려고 하는데 (세션은 그 전에 생성됩니다) socket 경로인 ws://127.0.0.1:8000/ws/session_expiry/ 경로를 찾을 수 없다는 문제가 계속 되고 있습니다.이에 대한 해결 법도 궁급합니다. 대략적인 셋팅 화면 캡쳐해서 올립니다. settings 구조config.local (테스트 과정이라 local에만 있습니다, WSGI_APPLICATION은 base에 선언되어있습니다)config.asgi 앱/routing 파일앱/consumers 파일웹소켓 관련 js파이참에서는 NotImplementedError: subclasses of LazyObject must provide a _setup() methodINFO: connection openINFO: connection closed요렇게 에러가 뜹니다. 혹 channels 강의를 들으면 알 수있는 부분이라면 알려주시면 수강할 수 있도록 하겠습니다! 항상 감사드립니다 선생님!
-
해결됨파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
포트원 결제 payment_detail 이전 과정 문제
원래 잘 안올리고 다른 질문부터 확인하긴하는데, 몇 사례가 없어 찾아보기 힘들어 이렇게 요청드려요. 밑에 글이랑 비슷한데, order_check를 했을 때, 404(포트원에서 결제내역을 찾을 수 없습니다) 에러가 보입니다. 밑의 질문 답변처럼 order_pay.html에서 console.log를 찍어 확인해보려 해도, 콘솔창에 보이지 않네요... 어떻게 해결해야할까요?코드도 공유드립니다.order_pay.html {% block extra-script %} {{ payment_props|json_script:"payment-props" }} <script src="https://cdn.iamport.kr/v1/iamport.js"></script> <script> (function() { const IMP = window.IMP; const next_url = "{{ next_url }}"; IMP.init("{{ portone_shop_id }}"); const json_string = document.querySelector("#payment-props").textContent; const props = JSON.parse(json_string); IMP.request_pay(props, function(response) { // location.href = next_url; console.log(response); console.log(props); }); })(); </script> {% endblock %}views.py @login_required def order_pay(request, pk): order = get_object_or_404(Order, pk=pk, user=request.user) if not order.can_pay(): messages.error(request, "현재 결제를 할 수 없는 주문입니다.") return redirect("membership:order_detail", order.pk) # TODO: order_detail 구현 payment = OrderPayment.create_by_order(order) payment_props = { "pg": "uplus", "merchant_uid": payment.merchant_uid, "name": payment.name, "amount": payment.desired_valuation, "buyer_name": payment.buyer_name, "buyer_email": payment.buyer_email, "buyer_tel": str(request.user.phone_number), "buyer_addr": "성수이로 20길 16", "buyer_postcode": "04783", } return render( request, 'membership/order_pay.html', { 'portone_shop_id': settings.PORTONE_SHOP_ID, 'payment_props': payment_props, 'next_url': reverse('membership:order_check', args=[order.pk, payment.pk]), } )
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
mac에서 파이참 파이썬 인터프리터 설정 질문입니다.
안녕하세요 항상 좋은 강의 감사드립니다.현재 저는 아나콘다 가상환경을 사용중이고강의와 첨부 드린 사진 처럼 환경 세팅하였습니다.문제는 설정 후 코드 나 파이참 내에 아이콘을 확인해보면django를 찾을 수 없다고 표시되어 있어서요..이유를 알수있을까요? 혹은 인터프리터 설정의 문제가 아닌걸까요?인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Vue-Django-Bootstrap 뚝딱 블로그
따단?
따단이 뭔가요?import 하는건 알겠는데 제가 파이참을 안 써서 vscode에서는 뭔지 알려주시면 감사하겠습니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
헷갈려서 질문드립니다.
장고 채널스의 튜토리얼의 보고 도커 컴포즈로 레디스와 장고 서버를 연결 시켜주었습니다. 그런데 도커 환경에서도 redis 환경 변수 설정을 해주어야 하나요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
검색어로 노래 목록 필터링이 안되는 문제
안녕하세요, 진석 님. '01-03 검색 지원' 강의를 듣다가 문제가 생겨 질문을 올립니다. 검색어 입력폼을 구현한 후,검색어로 '악뮤'를 입력하고 검색하면 필터링이 되지 않고 song_list 전체 목록이 뜹니다. 쿼리 값을 사용해서 song_list 필터링을 못하는 것 같은데... 원인을 파악하지 못한채 진석 님 코드로 덮어 쓰기에는 제가 너무 답답해서, 진석 님 코드랑 제 코드도 비교를 해보았는데 코드 까막눈이라 어디서 잘못된지 못 찾겠습니다... 우선 제 코드들과 검색 창을 캡처한 이미지를 같이 첨부했습니다. 도움 부탁 드립니다! <mydjango.py># mydjango.py import sys import django import requests from django.conf import settings from django.core.management import execute_from_command_line # from django.http import HttpResponse from django.shortcuts import render from django.urls import path settings.configure( ROOT_URLCONF=__name__, DEBUG=True, SECRET_KEY="secret", TEMPLATES=[ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": ["templates"], } ], ) django.setup() def index(request): # qurery 있으면 가져오고, 없으면 빈 문자열로 가져오기 # => 사전에 지정 키가 없더라도 KeyError 예외를 발생시키지 않고 디폴트값 반환 query = request.GET.get("query", "").strip() # 검색어 json_url = "https://raw.githubusercontent.com/pyhub-kr/dump-data/main/melon/melon-20230906.json" response = requests.get(json_url) ''' #예외 발생 처리 코드 .ok 속성이 내부에서 raise_for status 함수를 사용하지만. 예외 발생이 아닌 True/False를 반환 - True: 서버 응답의 상태코드가 400 미만일 경우 - False: 서버 응답 상태코드가 400 이상, 600 미만일 경우 ''' if response.ok: song_list = response.json() else: song_list = [] if query: song_list = filter( lambda song: query in song["가수"], song_list, ) response.raise_for_status() song_list = response.json() return render(request, "index.html", {"song_list": song_list}) urlpatterns = [ path("", index), ] execute_from_command_line(sys.argv) <index.html>{# 장고 템플릿 엔진 주석 문법 : templates/index.html 경로의 파일 #} <!doctype html> <html lang="ko"> <head> <meta charset="UTF-8" /> <title>Melon List</title> <style> body { width: 400px; margin: 0 auto; } table { width: 100%; border-collapse: collapse; } table, th, td { border: 1px solid black; } form { margin-bottom: 10px; } form input { width: 100% } </style> </head> <body> <h1>Melon List</h1> <form action="" method="get" autocomplete="off"> <input type="text" name = "query" placeholder="검색어를 입력해주세요." autofocus/> </form> <table> <thead> <tr><th>곡명</th><th>가수</th></tr> </thead> <tbody> {% for song in song_list %} <tr> <td>{{ song.곡명 }}</td> <td>{{ song.가수 }}</td> </tr> {% endfor %} </tbody> </table> </body> </html> <main01.py># 더 많은 노래를 보여주고 싶어요. import requests # pip install requests from pprint import pprint # 가독성좋게 출력하기 위한 모듈 json_url = "https://raw.githubusercontent.com/pyhub-kr/dump-data/main/melon/melon-20230906.json" response = requests.get(json_url) response.raise_for_status() # 비정상 응답을 받았다면, HTTPError를 발생시킵니다. song_list = response.json() print(type(song_list), len(song_list), type(song_list[0])) pprint(song_list) <검색어에 '악뮤' 입력 시, 나오는 화면>
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
온라인 ide
The terminal process failed to launch: Access was denied to the path containing your executable "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe". Manage and change your permissions to get this to work.방금 vs code를 이용하여 터미널을 이용하려고 했는데 다음과 같은 오류가 나와 터미널 실행이 안되는 것 같습니다 오류를 보니 군대 보안특성상 powershell에서 사용을 막은 것 같습니다.그래서 이런 온라인 ide를 이용하려고 하는데 괜찮을까요?? 가상환경은 설치 만들 수 있는걸로 알고 있습니다.레플릿: https://replit.com/구름: https://ide.goorm.io/?_gl=1*1oawf9g*_ga*ODI1MzYwNDc5LjE3MDc4Mjg2MTg.*_ga_7BMX792Y7W*MTcwNzgyODYxOC4xLjEuMTcwNzgyOTc4Mi42MC4wLjA.&_ga=2.209210519.446475569.1707828619-825360479.1707828618
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
accounts/url 질의
화면과같이 include 부분 강좌와 다르게 저절로 세팅이 되고 서버 실행하면 계속 오류가나는데 어떻게해야하나요ㅜㅜ
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
vs code
안녕하세요 강사님 제가 지금 군복무중이고 부대 내 컴퓨터 이용중이라 제어판이나 명령 프롬프트 이용이 불가능 합니다. 그래서 일단은 vs code로 수업을 들으려고 하는데 괜찮을까요??
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
자막(자동자막?) 오류
영상에 자막 기능이 생겨셔 켜놓고 보다보니대부분읜 괜찮은데 가끔 버전 등 숫자가 다르게 나온다던가 하는 부분이 보이더군요.이 자막은 자동자막으로 만들어진건가요?만약 상이한 부분이 있으면 피드백을 드려야 할지, 아니면 자동 자막이라 어쩔 수 없는 것인지문의드립니다~
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
00-02 맥 개발환경 설치 영상 잘못 업로드?
00-02 맥 개발환경 설치 영상이 3분3초로 되어있고실행하면 00-05 PyCharm Professional 체험계정 활성화 영상이 나옵니다.영상이 잘못 업로드 된 것 같다는 생각이 듭니다. 확인 부탁드려요~
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
21강 CreateView를 통한 회원가입 구현 질문
class AccountCreateView(CreateView): model = User form_class = UserCreationForm success_url = reverse_lazy('accountapp:hello_world') template_name = 'accountapp/create.html' 위 부분에서 User, UserCreationForm은 왜 User(), UserCreationForm() 처럼 괄호 붙혀서 선언안하는 건가요?
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
6개월 리딤코드 신청 방법
안녕하세요, 진석님.즐거운 설 보내세요 ^^ '00-05 Pycharm Professional 체험계정 활성화' 강의를 듣다가 수강생 혜택으로 6개월 리딤코드를 받을 수 있다는 점을 알게 되었습니다. 하지만 어디서 신청하는지 모르겠습니다 ㅠㅠ 강의 설명을 참고하여 신청해달라고 하셔서 강의 중에 하시는 말씀도 들어보고, 강의안에 링크가 있는지도 보았지만 어디서 신청하는지 못 찾겠습니다 ㅠㅠ 혹시나 영상 하단에 있는 수업 노트를 말씀하시는 것인가 하여 봤지만 해당 강의에는 수업 노트가 없는 것 같고, 또 '새소식' 게시판을 봤는데도 결국 찾지 못해 도움을 요청드립니다 ㅜㅜ 부족한 질문이라도 언제나 성심성의껏 답변해주시는 진석 님께 늘 감사드립니다. ^^ 행복한 설 연휴 보내시길 바랍니다. 😀
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
기존 강의 진행중이던 사람은 다 듣고 복습용으로 듣는게 좋을까요?
기존 강의랑 맥락은 비슷하지만 새롭게 추가된게 많아보여서요기존강의 30%밖에 안되긴 했는데 새로운 강의를 처음부터 보는게 나을지..추천하는 방법이 있을까용??
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
리뉴얼 복습용 쿠폰 감사합니다.
지난번 듣고 있던 django 강의의 리뉴얼 강의 쿠폰 잘 받았습니다. 쿠폰 다운로드용 이메일 조회 잘되는것 같아요. 다시 복습 시작합니다. 감사합니다!!!
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
pyenv local 3.11.6을 실행했음에도 버전 확인 시, python 3.11.7로 뜨는 문제
안녕하세요, 진석 님.이전 질문들에 친절하고, 쉽게 해답을 주셔서 감사합니다.덕분에 빠르게 원인을 파악하고 문제들을 해결할 수 있었습니다. 감사합니다 :-) '00-2 맥 개발환경 설치' 강의에서 'pyenv global 3.11.6으로 파이썬 기본 버전 설정을 하였음에도, python3 --version으로 버전 체크해보면 python 3.11.7 버전이 뜹니다. 이리저리 찾아봤는데도(구글, chatgpt) 명확한 해답을 못 찾겠어서 진석 님께 도움을 요청 드립니다. <진행 내용>'pyenv install 3.11.6' 버전 파이썬 설치 완료'pyenv global 3.11.6'로 파이썬 기본 버전 3.11.6으로 세팅'python3 --version' 실행 시, python 3.11.6이 아닌 python 3.11.7 출력'python --version' 명령어로 실행 했는데 not found가 떠서 찾아보니, 파이썬 3.x 버전을 쓰면 뒤에 3을 붙인 python3로 실행하라고 해서 'python3 --version' 명령어로 실행 <질문 사항>python --version과 python3 --version 명령어의 차이가 무엇인지? (구글 및 chatgpt에서는 python 버전에 따라 뒤에 3을 붙여야 한다고 하지만, 진석 님께서도 마찬가지로 파이썬 3.x버전을 쓰시는데 3을 안 붙인 "python --version" 명령어 자체로도 실행이 잘 되길래 제가 알아본 내용과는 달라서 두 명령어의 차이를 명확히 이해하고 넘어가고 싶습니다!) => 왜 뒤에 3을 붙여야 하는지조차 제대로 이해 못한 상태 pyenv global 3.11.6으로 기본 버전을 세팅하였음에도 파이썬 버전 체크 시, 3.11.7이 뜨는 이유 이렇게 두 가지 질문 드립니다. 더불어, 즐거운 설날 되세요! 😀
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
nvm --version 실행 시, not found
안녕하세요, 진석 님.이전에 발생한 문제는 덕분에 수월하게 해결했습니다! 하지만 ''nvm --version" 명령어 실행 시, not found가 뜹니다 ㅠㅠ<진행과정>brew 명령어로 5가지 팩키지 다운로드 완료(iterm2, ..., nvm)'ls -a ~' 명령어로 nvm 존재 여부 확인 혹시나 해서 mkdir ~/.nvm 명령어 입력했으나, 'File exist' 확인code ~/.zshrc 명령어 실행 후, vscode로 명령행 붙여넣기 하고, 저장 완료vim ~/.zshrc로도 실행하려 했으나, 붙여 넣은 후 어떤 단축키를 눌러야 하는지 모르겠어서 vscode에 붙여넣기 함.(어떤 단축키를 입력해야 명령행이 반영되는지 모르겠습니다 ㅠㅠ) 터미널에서 새 창열고, nvm --version 명령어 입력하였으나 'command not found'가 뜸 vscode에 있는 .zshrc를 재저장하고 nvm 명령어 실행했는데 같은 문제 발생 vscode에 있는 .zshrc 파일을 닫아서 그러는 건가 싶어서 파일을 열어 놓은 채로 nvm -version 실행했는데도 같은 결과 발생영상을 계속 보면서 반복적으로 재시도를 하였으나 계속 같은 결과(not found)가 나와 질문 올립니다! 감사합니다!