Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[하신혜] Sprint 3 #45

Open
wants to merge 1 commit into
base: basic-하신혜
Choose a base branch
from

Conversation

Aventurine91
Copy link
Collaborator

@Aventurine91 Aventurine91 commented Oct 6, 2024

기본 요구사항

공통

  • Github에 스프린트 미션 PR을 만들어 주세요.
  • 로그인, 회원가입 페이지 공통
  • 로그인 및 회원가입 페이지의 이메일, 비밀번호, 비밀번호 확인 input에 필요한 유효성 검증 함수를 만들고 적용해 주세요.
  • 이메일 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “이메일을 입력해주세요.” 빨강색 에러 메세지를 보입니다.
  • 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 경우 input에 빨강색 테두리와 아래에 “잘못된 이메일 형식입니다” 빨강색 에러 메세지를 보입니다.
  • 비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해주세요.” 에러 메세지를 보입니다
  • - [ ]비밀번호 input에서 focus out 할 때, 값이 8자 미만일 경우 아래에 “비밀번호를 8자 이상 입력해주세요.” 에러 메세지를 보입니다.
  • input 에 빈 값이 있거나 에러 메세지가 있으면 ‘로그인’ 버튼은 비활성화 됩니다.
  • Input 에 유효한 값을 입력하면 ‘로그인' 버튼이 활성화 됩니다.
  • 활성화된 ‘로그인’ 버튼을 누르면 “/items” 로 이동합니다
    const USER_DATA = [
    { email: '[email protected]', password: "codeit101!" },
    { email: '[email protected]', password: "codeit202!" },
    { email: '[email protected]', password: "codeit303!" },
    { email: '[email protected]', password: "codeit404!" },
    { email: '[email protected]', password: "codeit505!" },
    { email: '[email protected]', password: "codeit606!" },
    ];

로그인 페이지

  • 이메일과 비밀번호를 입력하고 로그인 버튼을 누른 후, 다음 조건을 참조하여 로그인 성공 여부를 alert 메시지로 출력합니다.
  • 만약 입력한 이메일이 데이터베이스(USER_DATA)에 없거나, 이메일은 일치하지만 비밀번호가 틀린 경우, '비밀번호가 일치하지 않습니다.'라는 메시지를 alert로 표시합니다
  • 만약 입력한 이메일이 데이터베이스에 존재하고, 비밀번호도 일치할 경우, “/items”로 이동합니다.
    회원가입
  • 회원가입을 위해 이메일, 닉네임, 비밀번호, 비밀번호 확인을 입력한 뒤, 회원가입 버튼을 클릭하세요. 그 후에는 다음 조건에 따라 회원가입 가능 여부를 alert로 알려주세요.
  • 입력한 이메일이 이미 데이터베이스(USER_DATA)에 존재하는 경우, '사용 중인 이메일입니다'라는 메시지를 alert로 표시합니다.
  • 입력한 이메일이 데이터베이스(USER_DATA)에 없는 경우, 회원가입이 성공적으로 처리되었으므로 로그인 페이지(”/login”)로 이동합니다.

심화 요구사항

공통

  • 페이스북, 카카오톡, 디스코드, 트위터 등 SNS에서 판다마켓 랜딩 페이지(“/”) 공유 시 미리보기를 볼 수 있도록 랜딩 페이지 메타 태그를 설정합니다.
  • 미리보기에서 제목은 “판다마켓”, 설명은 “일상에서 모든 물건을 거래해보세요”로 설정합니다.
  • 주소와 이미지는 자유롭게 설정하세요.
  • 로그인, 회원가입 페이지에 공통으로 사용하는 로직이 있다면, 반복하지 않고 공통된 로직을 모듈로 분리해 사용해 주세요.

랜딩 페이지

  • 브라우저에 현재 보이는 화면의 영역(viewport) 너비를 기준으로 분기되는 반응형 디자인을 적용합니다.
  • PC: 1200px 이상
  • Tablet: 744px 이상 ~ 1199px 이하
  • Mobile: 375px 이상 ~ 743px 이하
  • 375px 미만 사이즈의 디자인은 고려하지 않습니다
  • [ ] Tablet 사이즈로 작아질 때 최소 좌우 여백이 “판다마켓” 로고의 왼쪽에 여백 24px, “로그인” 버튼 오른쪽 여백 24px을 유지할 수 있도록 “판다마켓” 로고와 “로그인" 버튼의 간격이 가까워집니다.
  • [ ] Mobile 사이즈로 작아질 때 최소 좌우 여백이 “판다마켓” 로고의 왼쪽에 여백 16px, “로그인” 버튼 오른쪽 여백 16px을 유지할 수 있도록 “판다마켓” 로고와 “로그인" 버튼의 간격이 가까워집니다.
  • [ ] PC, Tablet 사이즈의 이미지 크기는 고정값을 사용합니다.
  • [ ] Mobile 사이즈의 이미지는 좌우 여백 32px을 제외하고 이미지 영역이 꽉 차게 구현합니다. (이때 가로가 커지는 비율에 맞춰 세로도 커져야 합니다.)
  • [ ] Mobile 사이즈 너비가 커지면, “Privacy Policy”, “FAQ”, “codeit-2023”이 있는 영역과 SNS 아이콘들이 있는 영역의 사이 간격이 커집니다.

로그인, 회원가입 페이지 공통

  • Tablet 사이즈에서 내부 디자인은 PC사이즈와 동일합니다.
  • Mobile 사이즈에서 좌우 여백 16px 제외하고 내부 요소들이 너비를 모두 차지합니다.
  • Mobile 사이즈에서 내부 요소들의 너비는 기기의 너비가 커지는 만큼 커지지만 400px을 넘지 않습니다.
  • 오류 메시지 모달을 구현합니다. 모달 내 내용은 alert 메시지와 동일합니다.
  • 비밀번호 및 비밀번호 확인 입력란에 눈 모양 아이콘 클릭 시 비밀번호 표시/숨기기 토글이 가능합니다. 기본 상태는 비밀번호 숨김으로 설정합니다.

멘토에게

안녕하세요 존경하는 멘토님.. 심화 부분이 텅텅 빈 것을 보고 상심하셨을거같습니다.. 죄송합니다 😫

  1. 시도해 본 방향 또는 계획
    기본적으로 기본 요구사항에 시간 할애를 많이 했습니다.
    저번 스프린트 1/2 과제때 멘션하셨던 부분 간단하게는 수정해보았는데 기존에 작업하던 내용인 만큼 이제와서 클래스 명 바꾸기가 쉽지않아서 이번에는 그대로 작업해보았습니다. 새로 작성한 클래스명은 조금 신경써보았습니다!
  2. 막힌 부분
    모달 버튼 관련해서 이해하지 못하고 중도에 포기했습니다 ㅠㅠ 미디어쿼리 관련해서는 관련 강의를 보긴하였으나 적용해보진 못하였습니다. 다음 주에 다 못한 심화과정 시간 날때마다 틈틈히 진행해 볼 예정입니다.
  3. 궁금한 점 등
    실업무에서도 이렇게 일일히 손으로 다 써야하나요 어흑... 이번 과제때 많이 힘들었습니다 ㅠㅠ
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@Aventurine91 Aventurine91 added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 최종 제출 스프린트미션 최종 제출본입니다. labels Oct 6, 2024
Copy link
Collaborator

@coldplay126 coldplay126 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR 요청 시 작업 결과물을 확인할 수 있는 url 을 첨부해 주시면 감사하겠습니다.
기존 url로 확인 시 배포가 되어있지 않은 것 같아 코드로만 리뷰 진행하였습니다

Copy link
Collaborator

@coldplay126 coldplay126 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지난번에 리뷰 드린 내용 반영해 주셔서 감사합니다.

코드를 작성하실 때 구현체를 바로 만들기 보단 먼저 수도코드(의사코드)를 작성해 보시는걸 추천드립니다. 코드를 먼저 작성하시게 되는 경우 전체적인 그림을 보지 못하고 지엽적인 부분에만 매몰되는 경우가 발생할 수 있습니다. 먼저 지도를 그리신 후 작업을 해 보시길 권해봅니다.

질문에 대한 답변을 드리자면... 네. 현업에선 코드보다 문서를 더 많이 만드시게 될 겁니다. 더 많이요 ㅎㅎ. 모든 코드에 대한 주석을 다는 정도로는 아니더라도 전반적인 흐름과 컨셉을 글로 남겨야 동료 개발자나 다른 파트의 분들과 이야기를 할 수 있기 때문입니다. 기억은 휘발성이 강하기 때문에 이러한 설명 없이 코드만 보면 당시의 작업 내용을 떠올리는데 많은 시간이 들 수 밖에 없습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파일 이름에 2가 붙은 이유가 있을까요? register.js 는 없는 것 같은데 2를 붙이신 이유가 궁금합니다

</p>
</form>
</div>
<div id="modal" class="modal">
<div class="modal-content">
<p id="modalMessage" class="modalmessage">모달 내용</p>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클래스 이름은 하이픈 인데 id는 카멜 케이스인 이유가 있을까요? 그리고 id 를 사용하신 이유가 유일 요소로 사용하기 위해서가 맞을까요? css 를 적용을 위해서라면 범용으로 적용할 방법은 없는지 고민해 보시는 것도 좋을 것 같습니다

const emailError = document.getElementById('emailError');
const passwordError = document.getElementById('passwordError');

const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사소한 정보를 전달드리자면 정규 표현식은 정규 표현식이라 바로 알 수 있도록 regex 를 붙여주시면 좋습니다.

Comment on lines +67 to +97
// 이메일 유효성 검사
if (emailValue === "") {
emailInput.classList.add('error');
emailError.textContent = '이메일을 입력해주세요.';
emailError.style.visibility = 'visible';
isValid = false;
} else if (!emailPattern.test(emailValue)) {
emailInput.classList.add('error');
emailError.textContent = '잘못된 이메일 형식입니다.';
emailError.style.visibility = 'visible';
isValid = false;
} else {
emailInput.classList.remove('error');
emailError.style.visibility = 'hidden';
}

// 비밀번호 유효성 검사
if (passwordValue === "") {
passwordInput.classList.add('error');
passwordError.textContent = '비밀번호를 입력해주세요.';
passwordError.style.visibility = 'visible';
isValid = false;
} else if (passwordValue.length < 8) {
passwordInput.classList.add('error');
passwordError.textContent = '비밀번호를 8자 이상 입력해주세요.';
passwordError.style.visibility = 'visible';
isValid = false;
} else {
passwordInput.classList.remove('error');
passwordError.style.visibility = 'hidden';
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

보시면 이메일, 패스워드 정보를 가져와서 검사를 합니다.
이 때 validateForm 내부에서는 이메일인지, 비밀번호인지 구분하지 않고 한 번에 모두 검사를 진행하고 있습니다.
이는 예측하지 못한 결과를 불러올 수 있습니다. 예컨데 비밀번호 검수를 진행하려고 했는데 이메일 검사 로직을 같이 진행해서 이메일 관련한 오류 문구가 뜰 수 도 있습니다.
이는 공통 로직이 아니기 때문에 분리가 필요한 사안입니다. 개발의 컨셉과 디자인 패턴마다 다르지만 기본적으로 함수는 하나의 일만 하는 걸로 생각하고 코드를 작성해 보시는 연습을 해 보시면 좋을 것 같습니다.
아래는 참고 자료입니다.

Comment on lines +123 to +130
const USER_DATA = [
{ email: '[email protected]', password: 'codeit101!' },
{ email: '[email protected]', password: 'codeit202!' },
{ email: '[email protected]', password: 'codeit303!' },
{ email: '[email protected]', password: 'codeit404!' },
{ email: '[email protected]', password: 'codeit505!' },
{ email: '[email protected]', password: 'codeit606!' }
];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다음에는 상수는 별도의 파일로 분리해서 사용해 보시는 걸 추천드립니다.

Comment on lines +157 to +160
function openModal(message) {
modalMessage.textContent = message;
modal.style.display = 'block'; // 모달을 보이게 설정
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모달의 경우 잘 구현하신것 같습니다. 최근에는 dialog 라는 html 태그가 있어 더욱 쉽게 모달을 구현할 수 있는 방법이 있으니 참고해 보시면 좋을 것 같습니다

});

// 이메일, 비밀번호, 비밀번호 확인 유효성 검사 및 회원가입 버튼 활성화
function validateForm() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

login.js 에 있는 validateForm 함수와 동일한 것으로 보입니다. 공통 로직을 분리해 볼 수 있을 것 같습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 최종 제출 스프린트미션 최종 제출본입니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants