Skip to content

Latest commit

 

History

History
222 lines (165 loc) · 10.6 KB

README.md

File metadata and controls

222 lines (165 loc) · 10.6 KB

22-5-team2-server

Memo with tags Server

📝 MemoWithTags


About our Project

MemoWithTags는 기존의 디렉터리 기반 메모 관리 방식을 탈피하여, 태그 기반의 유연한 메모 관리AI 기반 태그 추천 기능을 통해 사용자가 더욱 효율적으로 정보를 분류하고 검색할 수 있도록 도와주는 혁신적인 메모 앱입니다.

✨ 주요 특징

  • 태그 기반 메모 관리
    기존의 폴더나 디렉터리 방식과 달리, 메모마다 자유롭게 태그를 부여할 수 있어 다양한 관점에서 메모를 분류하고 검색할 수 있습니다.

  • AI 자동 태그 추천
    메모 작성 시 AI가 핵심 내용을 분석하여 적절한 태그를 자동으로 추천해줍니다. 덕분에 사용자는 더욱 빠르게 메모를 정리하고, 중요한 정보를 놓치지 않을 수 있습니다.

  • 직관적 인터페이스
    사용자 경험을 극대화한 디자인과 간편한 인터페이스를 제공하여 복잡한 분류 체계 없이도 원하는 메모를 즉시 찾을 수 있습니다.

  • 효율적인 검색 기능
    태그 기반 검색과 키워드 필터링 기능을 통해 수많은 메모 속에서도 원하는 정보를 빠르게 조회할 수 있습니다.

  • 태그 관리의 개인화
    개인의 업무 스타일에 맞게 태그를 커스터마이징하고, 메모를 자유롭게 연결할 수 있어 창의적인 아이디어 정리에 최적화되어 있습니다.


📱 화면 구성

회원가입 및 비밀번호 찾기 로그인 및 메인 기능 검색 및 사용자 페이지


💪 우리 서비스의 강점


🚀 기획부터 완성까지

치밀한 기획을 바탕으로 실제 서비스로 이용 가능할 정도의 높은 완성도의 앱을 개발하였습니다..

🤖 AI 접목으로 서비스 혁신

단순 앱 개발을 넘어 AI 기술을 융합하여, 서비스의 질을 한층 더 향상시켰습니다.

🗂 효율적인 디렉터리 구조

체계적인 디렉터리 설계를 통해, 향후 서비스 확장 시 유지 보수 및 확장성이 뛰어나도록 준비했습니다.

우리 조의 강점 💪

🚀 신속한 기획 및 개발

팀원들이 모여 빠르게 기획을 마무리하고, 즉시 개발에 착수할 수 있었습니다.

🛠️ 높은 개발 완성도

단기간 내에 실제 서비스로 제공할 수 있을 만큼 안정적이고 완성도 높은 앱을 개발하였습니다. 특히, iOS 최진모 님이 방학 동안 막대한 시간을 투자하여 훌륭한 결과물을 만들어낼 수 있었습니다.

🎨 세련된 디자인

디자이너 한수정 님은 Android 사용자인데도 불구하고 iOS 팀원들과 원활하게 소통하며 성공적으로 디자인을 구현하였습니다.

🤖 AI 기술 적용

백엔드 김용범 님이 서비스 개발뿐만 아니라 AI 연구에도 힘써, 앱의 기능과 완성도를 더욱 높이는 데 기여하였습니다.

🛡️ 끈기와 문제 해결력

백엔드 김인호 님은 소셜 로그인 기능 구현 과정에서 수많은 장애물과 어려움을 극복하며 결국 성공해냈습니다.

🔥 묵묵하지만 강한 실행력

백엔드이자 막내 이종호 님은 다양한 업무를 맡아 차질 없이 모두 해결하며 안정적인 개발을 이끌었습니다.

🚫 No Free Rider!

우리 팀에는 프리라이더가 단 한 명도 없습니다. 모든 팀원이 각자의 역할을 충실히 수행하며 프로젝트를 완성했습니다.

🤝 적극적인 협업 문화

프론트엔드 팀원도 백엔드에 적극적으로 피드백을 주었고, 백엔드 팀원도 프론트엔드에 의견을 전달하며 각자의 역할을 넘어서 책임감 있게 협업하였습니다.


📌 주요 기능

MemoWithTags는 태그 기반 메모 관리와 AI 자동 태그 추천을 통해 효율적인 메모 정리를 지원하는 서비스입니다.
아래는 제공되는 주요 기능과 API 엔드포인트입니다.


🔐 인증 (Auth)

  • 회원가입POST /auth/register
  • 이메일 인증POST /auth/verify-email
  • 로그인POST /auth/login
  • 비밀번호 재설정POST /auth/reset-password
  • 비밀번호 변경PUT /auth/password
  • 닉네임 수정PUT /auth/nickname
  • 토큰 재발급POST /auth/refresh-token
  • 사용자 정보 조회GET /auth/me
  • 회원 탈퇴DELETE /auth/withdrawal

📝 메모 (Memo)

  • 메모 생성POST /memo
  • 메모 수정PUT /memo/{memoId}
  • 메모 삭제DELETE /memo/{memoId}
  • 메모 검색GET /search-memo
  • 메모에 태그 추가POST /memo/{memo-id}/tag
  • 메모에서 태그 삭제DELETE /memo/{memo-id}/tag

🏷 태그 (Tag)

  • 전체 태그 가져오기GET /tag
  • 태그 생성POST /tag
  • 태그 수정PUT /tag/{tagId}
  • 태그 삭제DELETE /tag/{tagId}

🔗 소셜 로그인 (Social)

  • 카카오 로그인GET /auth/login/kakao
  • 네이버 로그인GET /oauth/naver
  • 구글 로그인GET /oauth/google

⚙️ 관리자 기능 (Admin)

  • 유저 목록 조회GET /admin/user
  • 유저 계정 생성POST /admin/user

이 API 목록을 통해 MemoWithTags의 주요 기능을 한눈에 확인할 수 있습니다.
더욱 직관적인 태그 기반 메모 관리와 AI 자동 태그 추천 기능을 통해 생산성을 높여보세요! 🚀

👉🏻 API 바로보기

🧑‍💻 Development

⚙ 기술 스택

Back-end

AI

Tools

🛢️ ERD

🤔 기술적 이슈와 해결 과정

  • 메일 인증 시스템
  • 소셜 로그인
    • 카카오, 네이버, 구글 세 가지 서비스를 통해 로그인할 수 있도록 각각의 서비스에서 제공하는 API를 활용하였습니다.
    • Java의 라이브러리를 Kotlin에서 사용하며 발생한 오류와, API 요청과 응답으로 쓰이는 JSON 파싱 중 여러 발생한 오류들을 해결하였습니다.
  • 내용이 긴 메모
    • 내용이 긴 메모를 보낼 때, MySQL에서 정해진 content 필드의 크기 한계로 인해 오류가 발생하여 500 에러가 발생하였습니다.
    • JPA Entity를 정의할 때 @Lob, @Column의 columnDefinition 지정 등으로 content 필드를 TEXT 타입으로 지정하여 해결하였습니다.
  • 태그와 메모의 임베딩 벡터 저장 문제
    • Spring 서버에서 태그(TagEntity)와 메모(MemoEntity)의 임베딩 벡터(List<Float>)를 효율적으로 저장하는 과정에서 여러 어려움을 겪었습니다.
    • AttributeConverter를 활용하여 List 타입을 문자열(Text)로 변환하여 저장하여 데이터 조회 시 문자열을 다시 List로 변환하는 방식 적용하였습니다.
    • 이를 통해 JPA에서 List 타입을 유지하면서도 데이터베이스에 저장 가능하도록 처리하도록 해결하였습니다.

💁‍♂️ 프로젝트 팀원

iOS + PM iOS Design Backend Backend Backend
류수영 최진모 한수정 김용범 김인호 이종호