전체 글(85)
-
그룹채팅 - Part2 채팅방 입장 (처음 참여하는 채팅방, 이미 참여중인 채팅방)
사용자가 새로운 채팅방에 입장하거나 이미 참여 중인 채팅방에 다시 입장하는 기능을 구현하는 방법에 대해 알아보겠습니다. 이 기능은 사용자가 채팅방에 참여할 수 있도록 하며, 이미 참여 중인 채팅방이면 바로 입장하고 처음 참여하는 채팅방이면 모달을 띄워 참여 확인을 받습니다. 데이터베이스 스키마 chatroom_members 테이블model chatroom_members { id Int @id @default(autoincrement()) chatroom_id Int user_id Int joined_at DateTime @default(now()) chatroom chatrooms @relation(fields: [chatroom_id], referenc..
-
그룹채팅 - Part1 채팅방 생성
새로운 그룹 채팅방을 만드는 방법에 대해 설명하겠습니다. 데이터베이스 스키마 chatrooms 테이블model chatrooms { id Int @id @default(autoincrement()) name String tags String image_url String? max_members Int created_at DateTime @default(now()) updated_at DateTime @updatedAt owner_id Int user users @relation(fields: [owner_id], references: [user_id], onDelete: Cascade, onU..
-
그룹채팅 - Part0 웹소켓
웹소켓(WebSocket)이란?클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜입니다.웹 페이지를 새로고침하지 않고도 서버와 데이터를 주고받을 수 있어, 실시간 기능을 필요로 하는 애플리케이션에 매우 유용합니다.예를 들어, 채팅, 실시간 알림 등이 웹소켓을 사용하여 데이를 주고받습니다.※ 프로토콜 : 네트워크에서 데이터를 주고받기 위한 규칙과 절차의 집합 웹소켓의 특징 양방향 통신- 클라이언트와 서버가 서로 데이터를 주고받을 수 있습니다. 저지연성 - 데이터를 주고받을 때 생기는 지연 시간이 매우 짧습니다.(연결이 한 번 설정되면 그 연결을 유지하기 때문)효율성- 웹소켓은 한 번 연결을 설정하면 계속해서 그 연결을 유지하기 때문에 효율적입니다.- 이렇게 오버헤드(작업을 수행하기 위해 추가적으로..
-
오늘의 식단 및 운동 목록 패치하기
이 글에서는 Kiloflow 프로젝트에서 메인 페이지에 오늘의 식단과 운동 목록을 패치하고 표시하는 기능을 구현하는 방법을 다룹니다. 프론트엔드 1. 메인페이지 컴포넌트 (index.tsx) 1-1 상태값 정의const [currentUser, setCurrentUser] = useState(null); // 현재 사용자 상태const [currentTab, setCurrentTab] = useState('week'); // 현재 탭 상태const [selectedDate, setSelectedDate] = useState(dayjs().toDate()); // 선택된 날짜 상태const [todayList, setTodayList] = useState('food'); // 오늘의 목록 상태const [..
-
운동관리 - todayExercise 등록
이 글에서는 사용자가 오늘의 운동을 등록하는 기능을 구현합니다. 데이터베이스 users 테이블model users { user_id Int @id @default(autoincrement()) email String @unique password String nickname String profile_image String @default("default_image_url") isInitialSetupComplete Boolean @default(false) created_at ..
-
식단 관리 - Part 4 todayFood 등록 기능
이 글에서는 사용자가 오늘 먹은 음식을 등록하는 기능을 구현합니다. 데이터베이스 스키마 users 테이블model users { user_id Int @id @default(autoincrement()) email String @unique password String nickname String profile_image String @default("default_image_url") isInitialSetupComplete Boolean @default(false) created_at ..