diff --git a/README.md b/README.md
index 90542066..9520f67e 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# 03. 스프린트 미션 3
+# 03. 스프린트 미션 4
## 요구사항
-### 스프린트 미션 3 시안
+### 스프린트 미션 4 시안
-- [실습 과제 디자인 Figma](https://www.figma.com/design/IVkRlYWHY74QlgmxqA99Ym/%EC%8A%A4%ED%94%84%EB%A6%B0%ED%8A%B8-%EB%AF%B8%EC%85%98?node-id=63-3453)
+- [실습 과제 디자인 Figma](https://www.figma.com/design/IVkRlYWHY74QlgmxqA99Ym/%EC%8A%A4%ED%94%84%EB%A6%B0%ED%8A%B8-%EB%AF%B8%EC%85%98?node-id=63-3454)
### 기본 요구사항
@@ -14,31 +14,29 @@
### 체크리스트 [기본]
-#### 공통
-- [x] 브라우저에 현재 보이는 화면의 영역(viewport) 너비를 기준으로 분기되는 반응형 디자인을 적용합니다.
- - PC: 1200px ~
- - Tablet: 768px ~ 1199px
- - Mobile: 375px ~ 767px
+#### 로그인
-#### 랜딩 페이지
-- [x] 헤더 좌우 여백 수정
- - Tablet: 24px
- - Mobile: 16px
-- [x] 화면 영역이 줄어들면 “Privacy Policy”, “FAQ”, “codeit-2024”이 있는 영역과 SNS 아이콘들이 있는 영역의 간격이 줄어듭니다.
+- [x] 이메일 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “이메일을 입력해주세요.” 빨강색 에러 메세지를 보입니다.
+- [x] 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 경우 input에 빨강색 테두리와 아래에 “잘못된 이메일 형식입니다” 빨강색 에러 메세지를 보입니다.
-#### 로그인, 회원가입 페이지
-- [x] Tablet: 내부 디자인은 PC사이즈와 동일
-- [x] Mobile: 좌우 여백 16px, 내부 요소들이 너비를 모두 차지
-- [x] Mobile: 내부 요소 `max-width: 400px`
+- [x] 비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해주세요.” 에러 메세지를 보입니다
+- [x] 비밀번호 input에서 focus out 할 때, 값이 8자 미만일 경우 아래에 “비밀번호를 8자 이상 입력해주세요.” 에러 메세지를 보입니다.
+
+- [x] input 에 빈 값이 있거나 에러 메세지가 있으면 ‘로그인’ 버튼은 비활성화 됩니다.
+- [x] Input 에 유효한 값을 입력하면 ‘로그인' 버튼이 활성화 됩니다.
+- [x] 활성화된 ‘로그인’ 버튼을 누르면 “/items” 로 이동합니다
+
+
+#### 회원가입
### 체크리스트 [심화]
-- [x] SNS에 랜딩 페이지(“/”) 공유 시 미리보기를 볼 수 있도록 메타 태그 설정
-- [x] 미리보기 제목은 “판다 마켓”, 설명은 “일상의 모든 물건을 거래해보세요”로 설정
+- [x] 눈 모양 아이콘 클릭시 비밀번호의 문자열이 보이기도 하고, 가려지기도 합니다.
+- [x] 비밀번호의 문자열이 가려질 때는 눈 모양 아이콘에는 사선이 그어져있고, 비밀번호의 문자열이 보일 때는 사선이 없는 눈 모양 아이콘이 보이도록 합니다.
## 주요 변경사항
-### 스프린트 미션 2 리뷰 반영
+### 스프린트 미션 3 리뷰 반영
- [login.js](./scripts/login.js), [signup.js](./scripts/signup.js)
- 변수 지정 및 함수명 변경을 통한 가독성 확보
- [login.html](./login.html), [signup.html](./signup.html)
@@ -47,26 +45,21 @@
- [login.css](./styles/login.css), [signup.css](./styles/signup.css)
- `signup.css`의 중복되는 스타일 제거
-### 스프린트 미션 3
--
+### 스프린트 미션 4
+- [members.js](./scripts/common/members.js) 추가를 통한 공통 함수 분리
## 스크린샷
-### 랜딩 페이지 헤더 - Tablet
-
-
-### 랜딩 페이지 헤더 - Mobile
-
-
-### 로그인 - Tablet
-
-
-### 회원가입 - Mobile
-
+### 로그인
+- 에러문구 표시, 비밀번호 입력 보기, 로그인 버튼 활성화, 페이지 이동
+
-### 랜딩 페이지 공유
-
+### 회원가입
+- 에러문구 표시, 회원가입 버튼 활성화, 페이지 이동
+
## 멘토에게
--
\ No newline at end of file
+- ``과 같이 `type="module"` 속성을 주어야만 `login.js` 파일에서 `/common/members.js` 파일을 불러올 수 있는 것으로 보입니다. 해당 속성을 사용해야만 하는 이유가 궁금합니다.
+- 공통함수 [members.js](./scripts/common/members.js)가 코드량이 많다보니, 더 효율적이고 가독성 좋게 바꿀 수 있는 방법이 있을지 궁금합니다.
+- [login.js](/scripts/login.js), [signup.js](./scripts/signup.js) 두 파일이 비슷하게 생긴 점, `signup.html`에서 두 스크립트 파일을 불러오는 점에 개선점이 있을지 궁금합니다.
\ No newline at end of file
diff --git a/assets/screenshot/login-page-desktop.gif b/assets/screenshot/login-page-desktop.gif
new file mode 100644
index 00000000..1a850a83
Binary files /dev/null and b/assets/screenshot/login-page-desktop.gif differ
diff --git a/assets/screenshot/signup-page-desktop.gif b/assets/screenshot/signup-page-desktop.gif
new file mode 100644
index 00000000..2dccd98b
Binary files /dev/null and b/assets/screenshot/signup-page-desktop.gif differ
diff --git a/login.html b/login.html
index c13877f1..4607d0df 100644
--- a/login.html
+++ b/login.html
@@ -19,18 +19,18 @@
-