인프런 커뮤니티 질문&답변
41 번 강좌 이미 있는 가입자 존재하는 경우에서..
해결된 질문
작성
·
29
·
수정됨
0
화면에 수정사항에 "register" ==>"/users/register" 로 되어 있는데 저는 그렇게 하면 error 화면이 뜹니다.
하단 수업 노트에는
return res.status(400).send("User already exists");이렇게 되어 있습니다.
제 코드에서 아래와 같이 수정하니까 동작하긴 하는데....
return res.render("users/register",{error:"User already exists"});이렇게 "users/register"로 앞에 "/" 없이 "users/register"로 하니까 동작하는데 제가 어디선가 잘못한 것일까요?
답변 2
0
안녕하세요 Edwards 님, 답변이 조금 늦었습니다. 기다려 주셔서 감사합니다!
공유해주신 내용을 보니 "/"를 제외한 "users/register" 방식으로 해결하셨는데, 사실 이 방식이 Express.js의 Best Practice가 맞습니다. 강의와 다른 부분에서 혼선을 드려 죄송하며, 실무적인 관점에서 왜 이 코드가 더 정확한지 핵심만 짚어드릴게요.
1. res.render는 'URL'이 아니라 '파일'을 찾습니다
res.render("users/register"): Express는 설정된views폴더 내에서 해당 파일을 찾습니다. 이때 앞에/가 없어야 "현재 views 디렉토리 기준"으로 안전하게 탐색합니다.res.render("/users/register"): 경로 앞에/가 붙으면 운영체제에 따라 시스템 루트(최상위) 경로로 오해할 소지가 있어 에러가 발생하곤 합니다.
2. 실무 팁: status(400)를 함께 활용해 보세요
현재 작성하신 res.render(..., { error: "..." }) 코드는 아주 훌륭합니다. 여기에 실무적인 디테일을 한 뼘만 더하자면, 상태 코드를 명시해 주는 것이 좋습니다.
return res.status(400).render("users/register", { error: "..." });이렇게 하면 브라우저나 개발자 도구에서도 이 요청이 '실패(Bad Request)'했음을 명확히 알 수 있어 디버깅과 협업에 큰 도움이 됩니다.
3. 헷갈리지 않는 명확한 기준
render: 파일을 그려낼 때 사용 →/생략 (View Engine 기준)redirect: 주소를 옮길 때 사용 →/포함 (브라우저 주소창 기준)
강의 자료보다 Edwards 님이 직접 수정하신 코드가 더 견고한 방식이니, 그대로 믿고 진행하셔도 좋습니다. 덕분에 저도 강의 노트를 다시 점검해 볼 수 있었습니다. 감사합니다!
또 진행하시다가 막히는 부분이 생기면 언제든 말씀해 주세요.
0
안녕하세요, 인프런 AI 인턴입니다. Edwards님.
회원 가입 처리 시 특정 화면 경로 설정 문제로 어려움을 겪고 계신 것 같습니다. 이 상황은 템플릿 엔진을 사용하여 페이지를 렌더링하는 과정에서 경로를 어떻게 구성했는지와 관련이 있습니다.
템플릿 렌더링 경로에 대한 설명
템플릿 엔진 사용 시 경로 설정:
- Express에서
res.render()메서드는 기본적으로 설정된 뷰 디렉토리 내의 파일을 찾습니다. 대개 설정된 디렉토리 경로는views로 많이 사용됩니다.
/users/register처럼 앞에/를 포함하지 않는 경우, 템플릿 경로가 상대적으로 해석됩니다. 따라서,views디렉토리 안에users폴더가 있으며, 그 안의register템플릿을 찾게 됩니다.
- Express에서
에러와 경로의 차이:
res.status(400).send("User already exists"): 이 방식은 HTTP 상태 코드 400을 반환하고, 간단한 에러 메시지를 브라우저에 보냅니다. 일반적으로 JSON API나 단순 텍스트 응답이 필요한 경우에 사용됩니다.
res.render(): 반대로, 클라이언트에게 전체 템플릿 HTML을 렌더링하여 브라우저에 표시합니다. 이 경우 사용자가 더 나은 사용자 경험을 얻을 수 있습니다.
“User already exists” 문제 해결:
- 여러분의 코드에서는 등록 실패 시
register템플릿을 다시 렌더링하면서 해당 에러 메시지를 템플릿으로 넘겨주는 방법을 사용하고 있습니다. 이는 사용자에게 특정한 에러 메시지를 표시하고 더 나은 인터페이스를 제공하기 위해 많이 사용됩니다.
- 여러분의 코드에서는 등록 실패 시
문의주신 "users/register" 대 “/users/register"의 차이는 명시적인 경로 지정 방법에 따라 사용된 것으로 보입니다. 설정한 뷰 디렉토리 구조에 따라 적절한 경로를 사용하면 에러 없이 동작할 수 있습니다.
관련하여 도움이 될 수 있는 자료는 다음과 같습니다:
- Express 뷰 렌더링
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





헷갈리고 있었는데 모호했던 제 개념이 명확해 지네요.. 집에선 윈도우즈로 작성하고 회사에선 우분투에서 작업하다 보니 언제는되고 언제는 안되고 헷갈렸는데 설명을 명확하게 해주셔서 감사합니다.