Skip to content

JY-Dev/mind-share-api

Repository files navigation

프로젝트 실행 방법

  • 도커 desktop 설치
  • 루트 폴더의 run.sh 실행

요구사항

프로젝트 구조

  • 멀티 모듈로 프로젝트를 구성해주세요.
  • Gradle을 사용하여 빌드 환경을 구성해주세요.

사용자 관리 API 구현

  • 사용자 등록, 로그인, 정보 수정 API를 구현해주세요.
  • Spring Security를 활용해 인증 로직을 구현해주세요.

게시글 관리 API 구현

  • 게시글 작성, 조회, 수정, 삭제 API를 구현해주세요.
  • 게시글에는 조회수 정보가 포함되어야 합니다.
  • 게시글 목록 조회 API를 구현해주세요.
  • 게시글 검색 API를 구현해주세요.
  • 특정 게시글에서 잦은 조회가 발생하더라도 조회수의 정확한 업데이트 처리를 구현해주세요.

API 엔드포인트

  • API 엔드포인트는 Openapi를 통해 Swagger UI로 제공합니다.
  • 프로젝트 실행후 아래의 엔드포인트를 통해 API 목록을 확인할 수 있습니다.
  • http://localhost:8080/swagger-ui/index.html
  • api/mind-share-api/http 경로에 있는 http 파일을 통해서 실행할 수 있습니다.

고민한 점이나 아쉬운 점

게시글 검색 API 구현

처음에는 전문적인 검색 기능을 제공하기 위해 검색 엔진의 도입을 고려했습니다. 그러나 검색 엔진에 대한 지식이 부족하고, 7일이라는 제한된 기간 내에 검색 엔진을 학습하고 적용하는 것은 현실적으로 어렵다고 판단했습니다.

대안으로 MySQL의 Full-Text Index를 활용하기로 결정했습니다. MySQL은 기본적으로 Full-Text Search 기능을 제공하며, 이를 통해 비교적 간단하게 검색 기능을 구현할 수 있을 것으로 예상했습니다. 하지만 구현 과정에서 몇 가지 문제에 직면했습니다:

Native Query의 사용 필요성: MySQL의 Full-Text Search를 사용하려면 MATCH ... AGAINST 구문을 사용해야 하는데, 이는 JPA나 QueryDSL에서 직접 지원하지 않습니다. 따라서 Native Query를 사용해야 했습니다.

동적 쿼리 작성의 복잡성: 게시글 검색에는 페이징 처리가 필수적이었고, 이는 커서 기반 페이징을 통해 구현되었습니다. 하지만 Native Query와 커서 기반 페이징 로직을 함께 사용하려니 동적 쿼리 작성이 복잡해지고, 유지보수성에도 문제가 생길 수 있었습니다.

이러한 이유로 최종적으로 LIKE 연산자를 사용하는 방법을 선택했습니다. LIKE 연산자를 사용하면 QueryDSL에서 간단하게 구현할 수 있고, Native Query를 피할 수 있기 때문입니다. 비록 LIKE 방식이 Full-Text Search에 비해 검색 성능이나 정확도 면에서 떨어질 수 있지만, 현재 프로젝트의 규모와 요구사항을 고려했을 때 적절한 선택이라고 판단했습니다.

결론적으로, 제한된 시간 내에 안정적이고 유지보수 가능한 코드를 작성하기 위해 LIKE 방식을 채택하여 검색 기능을 구현했습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages