IT/프로그램

Angular와 Supabase로 채팅앱 만들기

higold 2024. 10. 28. 07:38
반응형

Angular와 Supabase로 채팅앱 만들기

-Angular로 된 예제가 별로 없어서 한번 만들어 봅니다.

프로젝트 개요

"최신 웹 기술을 활용한 실시간 채팅 애플리케이션 구축"

  • Angular 17의 새로운 기능 활용
  • Supabase의 강력한 백엔드 서비스 통합
  • 실시간 데이터 동기화 구현
  • 모던 UI/UX 디자인 적용

기술 스택

Frontend

  • Angular 17
  • TypeScript 5.2
  • TailwindCSS
  • RxJS

Backend

  • Supabase
  • PostgreSQL
  • WebSocket
  • RESTful API

주요 기능 구현

1. 데이터베이스 설계

-- 사용자 테이블
CREATE TABLE users (
  id UUID PRIMARY KEY,
  email VARCHAR NOT NULL,
  name VARCHAR,
  avatar_url VARCHAR,
  created_at TIMESTAMP DEFAULT NOW()
);

-- 채팅 테이블
CREATE TABLE messages (
  id UUID PRIMARY KEY,
  user_id UUID REFERENCES users(id),
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT NOW()
);
```</br></br>

### 2. 인증 시스템 구축

> "안전하고 편리한 사용자 인증 경험 제공"

* Google OAuth 2.0 통합
  - 간편한 로그인/회원가입
  - 프로필 정보 자동 동기화
  - 토큰 기반 인증</br></br>

* 보안 설정
  - JWT 토큰 관리
  - 세션 타임아웃
  - CORS 설정</br></br>

### 3. 실시간 메시징 구현

#### 메시지 처리 로직

```typescript
@Injectable({
  providedIn: 'root'
})
export class ChatService {
  private supabase: SupabaseClient;
  messages$ = signal<Message[]>([]);

  constructor() {
    this.supabase = createClient(environment.supabaseUrl, environment.supabaseKey);
    this.setupRealtimeSubscription();
  }

  private setupRealtimeSubscription() {
    this.supabase
      .channel('messages')
      .on('postgres_changes', { 
        event: '*', 
        schema: 'public', 
        table: 'messages' 
      }, payload => {
        this.handleRealtimeUpdate(payload);
      })
      .subscribe();
  }

  async sendMessage(content: string) {
    const user = await this.supabase.auth.getUser();

    return this.supabase
      .from('messages')
      .insert({
        content,
        user_id: user.data.user?.id
      });
  }
}

4. UI/UX 디자인

"직관적이고 반응성 높은 사용자 인터페이스"

  • 컴포넌트 구조

    • 채팅 목록
    • 메시지 입력
    • 사용자 프로필
    • 알림 시스템
  • 반응형 디자인

    • 모바일 최적화
    • 다크모드 지원
    • 접근성 고려

배포 프로세스

Vercel 배포 단계

  1. GitHub 저장소 연동
  2. 환경 변수 설정
    • SUPABASE_URL
    • SUPABASE_KEY
    • GOOGLE_CLIENT_ID
  3. 빌드 설정
  4. 도메인 설정

성능 최적화

  • 지연 로딩 구현
  • 메모리 누수 방지
  • 캐시 전략 수립

보안 고려사항

데이터 보안

-- Row Level Security 설정
ALTER TABLE messages ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Users can insert their own messages"
ON messages FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Users can read all messages"
ON messages FOR SELECT
TO authenticated
USING (true);

에러 처리

  • 네트워크 오류 대응
  • 인증 실패 처리
  • 메시지 전송 실패 복구

향후 개선사항

  • 파일 공유 기능
  • 그룹 채팅 지원
  • 메시지 검색 기능
  • 푸시 알림 구현

프로젝트 마무리

  • 사용자 피드백 수집
  • 성능 메트릭 분석
  • 버그 리포트 시스템
  • 지속적 업데이트 계획

참고 사항

이 프로젝트는 최신 웹 개발 기술을 활용하여 실용적이고 확장 가능한 채팅 애플리케이션을 구현하는 방법을 보여줍니다. 지속적인 피드백과 개선을 통해 더 나은 사용자 경험을 제공할 수 있습니다.

반응형