Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
6566b41
first commit: ts+react 설정
Mar 25, 2026
f3b5e5e
chore: tailwind, prettier 초기 설정
Mar 25, 2026
e484c6d
chore: 기본 구성 수정
Mar 26, 2026
2d5f43b
chore: 절대경로 수정
Mar 26, 2026
0490c2c
assets: 채팅방 헤더 아이콘
Mar 26, 2026
7a270d2
feat: 채팅방 구성요소 tsx 생성
Mar 26, 2026
91791fa
feat: 채팅방 해더 구현
Mar 27, 2026
0bbeb09
assets: 채팅방 header 및 input 아이콘 추가
Mar 27, 2026
f6ca39f
feat: 채팅방 메시지 생성 관련
Mar 27, 2026
c377d72
chore: 채팅방 헤더 수정
Mar 27, 2026
145191d
feat: input 생성
Mar 27, 2026
9321943
fix: 스크롤 기능 수정
Mar 27, 2026
802b53a
fix: 타임스탬프 위치 수정
Mar 27, 2026
c6d3f65
chore: 기본 구조 수정
Mar 27, 2026
a544eac
chore: 주석 수정
Mar 28, 2026
eb16b23
feat: date type 추가
Mar 28, 2026
5b7aa2d
feat: 말풍선 조정 및 시간바 추가
Mar 28, 2026
c01d67a
chore: 기본 채팅 내용 추가
Mar 28, 2026
b032801
chore: import 경로 수정
Mar 28, 2026
dd0ea8d
chore: 주석 수정
Mar 28, 2026
98b04bc
fix: unused variable 제거
Mar 28, 2026
f1de7f7
feat: 상대방 메세지창 컴포넌트 분리
Mar 29, 2026
ba494b5
fix: 메세지창 수정
Mar 29, 2026
58d9f39
fix: 관련 Props 수정
Mar 29, 2026
34d4028
refactor: 발신자 나눠서 말풍선 재설정
Mar 30, 2026
9ba3b5d
fix: unuse variable 제거
Mar 30, 2026
6f0e473
fix: 1차 QA 수정 반영
Mar 30, 2026
3393c66
fix: QA 반영 수정
Mar 30, 2026
673a001
fix: 글씨체 굵기 조정
Mar 30, 2026
f89186e
feat: 라우터 설정
Apr 5, 2026
d2c0249
chore: import문 수정
Apr 5, 2026
97ae307
chore: icons svg
Apr 6, 2026
77725e3
chore: svg update
Apr 13, 2026
8860a7f
chore: router 및 svg 관련 수정
Apr 13, 2026
8e491e9
fix: @theme으로 수정
Apr 13, 2026
9661e28
chore: router 및 svg 관련 수정
Apr 13, 2026
42d2817
chore: css 스타일 클래스 변경
Apr 13, 2026
b7b7e35
chore: 친구 data json 추가
Apr 13, 2026
08d2519
feat: 프로필 컴포넌트 추가
Apr 13, 2026
504af39
feat: 친구목록 추가
Apr 13, 2026
036f1ec
feat: 네비바 수정
Apr 13, 2026
bc8ef6a
feat: 공통 레이아웃 지정
Apr 13, 2026
6385133
feat: 친구목록 페이지
Apr 13, 2026
cccc368
chore: baseUrl 설정
Apr 13, 2026
1f10300
chore: svg 추가
Apr 13, 2026
bc9391a
fix: 작업 내용 저장
Apr 13, 2026
278741f
chore: unused variable 수정
Apr 14, 2026
a8551d6
fix: json 파일 위치 수정
Apr 14, 2026
2ef9a33
fix: json 파일 위치 수정2
Apr 14, 2026
e9ad1f0
feat: 채팅방 관련 타입 설정
Apr 14, 2026
a2fc717
feat: 채팅방 json 설정
Apr 14, 2026
4682333
feat: 채팅 목록 컴포넌트 설정
Apr 14, 2026
c5d9caa
chore: tailwind px값 수정
Apr 15, 2026
8ee4a7f
feat: vercel spa 관련 json 생성
Apr 15, 2026
f346b31
fix: 네비바 간격 수정 및 선택 시 아이콘 변경되게 수정
Apr 15, 2026
d5dd180
fix: json 형식 변경
Apr 15, 2026
e0e9692
refactor: 방별로 채팅방 형성 가능하게 확장
Apr 15, 2026
739e4f3
fix: 채팅 목록 프로필 type 수정에 맞게 재구성
Apr 15, 2026
5045da2
fix: 채팅방별 타입 수정
Apr 15, 2026
286b535
chore: 테일윈드 수정
Apr 15, 2026
e162dc7
fix: 채팅방 입력창 하단 고정 수정
Apr 15, 2026
09bde5c
feat: 나머지 페이지 로딩페이지로 연결
Apr 15, 2026
31fb384
chore: tailwind 및 파일 prettier 변경
Apr 15, 2026
6800b65
fix: input -> textarea로 입력창 변경
Apr 15, 2026
a718d36
fix: 상대방 말풍선 프로필 및 닉네임 노출 수정
Apr 15, 2026
7328e3b
fix: 말풍선 최대길이 수정
Apr 15, 2026
9beaef0
chore: 아이콘 여백으로 마진값 수정
Apr 15, 2026
ba5af00
fix: 전체 친구 인원 연동
Apr 15, 2026
9b2a397
feat: context -> 즐겨찾기 기능 페이지별 연동
Apr 17, 2026
9affa91
chore: 타이포그라피 변경
Apr 17, 2026
9cd79fd
chore: 메시지 내용 변경
Apr 17, 2026
82cd9f3
chore: 메시지창 문장 배치 수정
Apr 17, 2026
1a78b16
chore: 메시지 수정
Apr 17, 2026
610c878
feat: 말풍선 최대 높이 설정 및 텍스트 노출 범위 설정
Apr 17, 2026
244e3f9
refactor: 라우터 관련 수정
Apr 17, 2026
9ca2c98
chore: tailwind 및 기본 내용 변경
Apr 18, 2026
141abf2
fix: 즐겨찾기 설정 시 프로필 사진 별 추가
Apr 18, 2026
6b6fc39
fix: 네비바 채팅방목록 아이콘 수정
Apr 18, 2026
26675fe
fix: 친구 목록 선택 바 순서 및 경계선 너비 수정
Apr 18, 2026
4216bf0
chore: icon 파일 저장 형식 변경
Apr 18, 2026
b452ecb
chore: 입력창 아이콘 변경
Apr 22, 2026
0f7544b
chore: tsx -> svg 변경
Apr 22, 2026
8d6673c
fix: 탭 버튼 누르면 해당 채팅방 필터링
Apr 22, 2026
a85884d
fix: 읽지 않음 탭 수정
Apr 22, 2026
af378d4
refactor: context api -> zustand로 변경
Apr 25, 2026
bce2df6
refactor: 날짜 및 읽음 구분 컴포넌트화
Apr 25, 2026
babfd5f
chore: 아이콘 추가 및 정렬 수정
Apr 25, 2026
464881b
chore: json 수정 unreadcount 수정
Apr 25, 2026
c82ee8c
feat: 사진 선택 시 입력창
Apr 25, 2026
4bd0567
feat: 사진 업로드 시 여백, 버튼 등 수정
Apr 25, 2026
a2accc9
feat: readDivider - 날짜divider 수정
Apr 25, 2026
3747508
fix: 하단 네비바 노출 페이지 수정
Apr 25, 2026
0d6518e
chore: chatlist tab 부분 표기 수정
Apr 25, 2026
d16c3ca
chore: chatlist tab 표기 수정2
Apr 25, 2026
39e5af6
chore: chatlist tab 표기 수정3
Apr 25, 2026
c9907cb
chore: 마이프로필 하단 보더 수정
Apr 25, 2026
ac8d09b
chore: 즐겨찾기 하단 보더값 수정
Apr 25, 2026
9d478ef
fix: 채팅목록 프로필 최근 시간 뜨도록 수정
Apr 25, 2026
f7f516a
fix: 채팅목록 미리보기 시간 -> 날짜로 수정
Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
9 changes: 9 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 80,
"singleAttributePerLine": true,
"bracketSameLine": false
}
157 changes: 73 additions & 84 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,84 +1,73 @@
# **서론**

안녕하세요 😻
23기 프론트엔드 운영진 원채영입니다.

이번 주에는 투두리스트를 넘어, 새로운 프로젝트인 **Messenger** 구현을 진행합니다.

이번 과제는 디자이너와 협업하여 진행되는 프로젝트로,
디자인 파트에서 리디자인한 메신저 화면을 직접 구현해보는 경험을 하게 됩니다.

또한, 이번 주부터는 **TypeScript**와 **Tailwind CSS**를 필수로 적용하여 개발을 진행합니다.

프로젝트 규모가 커질수록 컴포넌트의 props도 점점 복잡해지는데요,
이때 TypeScript를 활용하면 props의 구조와 타입을 명확하게 관리할 수 있고,
자동완성을 통해 개발 생산성을 높일 수 있습니다.

아울러, 이번 과제에서는 **React Hooks**에 더욱 익숙해지는 것을 목표로 합니다.
특히 useState, useEffect, useRef를 중심으로 활용해보며, React에서 자주 사용되는 핵심 개념을 확실히 익혀보시길 바랍니다.

그럼 이번 과제도 파이팅입니다!! 🎉


# **과제**

## **목표**

- TypeScript를 사용해봅시다.
- useState로 컴포넌트의 상태를 관리합니다.
- useEffect와 useRef의 사용법을 이해합니다.
- Tailwind CSS의 사용법에 익숙해집니다.

## **기한**

- 2026년 3월 28일 토요일 23:59까지

## **Review Questions**

- 디자이너와 협업하며 전달받은 자료
(피그마 링크, 캡처본, 커뮤니케이션 과정 등)

- JSX / JS / TSX / TS의 개념과 각각의 차이점, 사용 이유

- TypeScript를 사용하는 이유

- SSR과 CSR의 개념 및 차이점


## **필수 구현 기능**

- 피그마 **Dev Mode**를 통해, 매칭된 디자인 파트원의 UI를 구현합니다.
- [🔗 예시 1](https://react-messenger-21th-kwondu.vercel.app/)
- [🔗 예시 2](https://react-messenger-21th-nine.vercel.app/)
- 디자인 시스템을 구축합니다.
- tailwind CSS를 사용합니다.
- 메세지를 보내면 채팅방 하단으로 스크롤을 이동시킵니다.
- 메세지에 유저 정보(프로필 사진, 이름)를 표시합니다.
- user와 message 데이터를 json 파일에 저장합니다.
- UI는 **반응형을 제외**하고 피그마파일을 따라서 진행합니다.

### **추가 구현 기능**

- 채팅방 상단의 프로필을 클릭하면 사용자를 변경할 수 있습니다.
- 더블 클릭 하면 감정표현을 추가합니다.
- 그 외 추가하고 싶은 기능이 있다면 마음껏 추가해 주세요!

<br/>

이번 과제는 다음 과제까지 이어지는 만큼, **확장성**을 충분히 고려해 주세요.
4주차 과제에서는 **유저 및 기능 추가**, **Routing 구현**이 진행될 예정입니다.

이를 대비해, [**zustand**](https://zustand-demo.pmnd.rs/)를 활용한 상태 관리도 미리 적용해보시는 것을 추천드립니다!

## **링크 및 참고자료**

- [React docs - Hook](https://ko.reactjs.org/docs/hooks-intro.html)
- [React의 Hooks 완벽 정복하기](https://velog.io/@velopert/react-hooks#1-usestate)
- [useEffect 완벽 가이드](https://overreacted.io/ko/a-complete-guide-to-useeffect/)
- [코딩 컨벤션](https://ui.toast.com/fe-guide/ko_CODING-CONVENTION)
- [타입스크립트 핸드북](https://joshua1988.github.io/ts/intro.html)
- [리액트 프로젝트에서 타입스크립트 사용하기 (시리즈)](https://velog.io/@velopert/series/react-with-typescript)
- [디자인 시스템 구축기](https://yozm.wishket.com/magazine/detail/1830/)
- [[영상] : 컴포넌트에 대한 이해](https://www.youtube.com/watch?v=21eiJc90ggo)
- [Tailwind CSS 장단점, 사용법](https://wonny.space/writing/dev/hello-tailwind-css)
- [ts 절대경로 설정하기](https://tesseractjh.tistory.com/232)
# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)

## React Compiler

The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

```js
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...

// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,

// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```

You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:

```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
23 changes: 23 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
import { defineConfig, globalIgnores } from 'eslint/config'

export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
])
19 changes: 19 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
/>

<title>react-messenger-23rd</title>
</head>
<body>
<div id="root"></div>
<script
type="module"
src="/src/main.tsx"
></script>
</body>
</html>
Loading