SSAFY 12기 2학기 특화 프로젝트
⌛ 프로젝트 기간 : 2025.03.03 ~ 2025.04.12 (6주)
📆 상세 기간 : 기획 1주 + 공부 2주 + 개발 3주
🔗 노션 링크
📲 배포 URL
✨ 더 이상 고민하지 마세요!
나만의 커스텀 키보드를 자랑하고, 다양한 키보드 상품을 한눈에 보고, 전문 조립자와 함께 맞춤 견적을 받아보세요.
키보드의 모든 것, 한 곳에서 즐기세요!
🖥️ 이런 분들을 위한 커스텀 키보드 플랫폼이에요
멋진 커스텀 키보드를 갖고 싶지만 어디서부터 시작해야 할지 모르는 분
키보드 조립 전문가의 도움을 받아 완벽한 키보드를 만들고 싶은 분
키보드 커뮤니티에서 정보를 얻고 자신의 작품을 자랑하고 싶은 분
안전하고 신뢰할 수 있는 거래로 키보드를 구매하고 싶은 분
🥝 키위만의 특별한 기능
최근 검색어 기반 맞춤 추천 검색 (피드, 사용자, 상품 통합 검색)
전문가와 실시간 채팅으로 진행되는 1:1 맞춤 견적 서비스
안전한 거래를 보장하는 에스크로 결제 시스템
나만의 커스텀 키보드를 자랑할 수 있는 SNS 스타일 피드
👨🏻💻 이렇게 사용해보세요!
1️⃣ 원하는 키보드 스타일을 피드에서 보고 아이디어를 얻어보세요
2️⃣ 전문 조립자와 1:1 채팅으로 맞춤 견적을 받아보세요
3️⃣ 안전한 에스크로 시스템으로 결제하고 나만의 맞춤 키보드를 받아보세요
4️⃣ 완성된 나만의 키보드를 SNS 피드에 자랑해보세요
이수환 @getbravelee |
권규리 @rnjs010 |
김주찬 @PoloCeleste |
박혜원 @hyeOOO |
서성우 @bamtol2 |
이혜령 @hyerongii |
백엔드 개발 (팀장) |
프론트 개발 | 인프라 개발 | 백엔드 개발 | 백엔드 개발 | 프론트 개발 |
검색/페이 서버, 금융 api 연결, MSA 설계 | 견적 게시판/계좌 연결/채팅/결제 개발 및 UX/UI 디자인 | 인프라 구축/관리, 상품 풀스택, 크롤링, CI/CD, MSA 설계 | 피드 서버, 인프라 구축, MSA 설계 | 인증/채팅 서버, 견적 게시판 서버, MSA 설계 | 로그인/홈 피드/검색/마이페이지 개발 및 UX/UI 디자인 |
회원가입/로그인, 마이페이지
홈 페이지 (피드)
조립/견적 요청 게시판
상품/검색 페이지
검색 결과 화면 (피드) | 검색 결과 화면 (상품) | 검색 결과 화면 (계정) |
---|---|---|
검색어가 들어간 피드가 나타나며, 피드 선택 시 세로 스와이프를 통해 전후 피드로 이동할 수 있습니다. | 검색어가 들어간 상품 리스트가 출력됩니다. | 검색어가 들어간 계정 리스트가 출력됩니다. |
계좌 연결
계좌 입력 | 계좌 인증 | 간편 비밀번호 설정 |
---|---|---|
계좌 번호 입력, 은행 선택, 약관 동의 시 버튼이 활성화됩니다. | 입력한 계좌로 1원 송금을 진행하여 인증코드를 확인 후 입력합니다. | 인증이 완료되면 랜덤 키패드를 통해 간편 비밀번호를 설정할 수 있습니다. 마지막 숫자 입력시 재입력받고 일치하면 계좌 연결이 완료됩니다. |
채팅 페이지
채팅 목록 페이지 | 채팅방 페이지 | 사진 보내기 |
---|---|---|
전체 채팅 목록을 확인할 수 있습니다. | 상단의 게시글을 터치하면, 해당 게시글 상세 페이지로 이동합니다. 하단의 + 버튼을 터치하면, 사진 보내기 및 거래 요청을 할 수 있습니다. |
사진 첨부하기를 누르면 갤러리에서 한 장 선택할 수 있습니다. |
거래 요청(조립자)
거래 수락(구매자)
거래 내역 | 최종 금액 및 계좌 확인 | 간편 비밀번호 입력 |
---|---|---|
거래 수락 버튼 터치 시, 조립자가 작성한 거래 내역을 확인할 수 있습니다. | 안심결제를 위한 수수료가 포함된 최종 금액 및 계좌를 확인할 수 있습니다. | 계좌 연결 시 설정한 간편 비밀번호와 일치한다면 계좌에서 출금됩니다. |
은행 화면 (출금) | 거래 수락 채팅 (구매자) | 거래 수락 채팅 (조립자) |
---|---|---|
거래 수락 시 구매자 은행 화면입닌다. | 거래 수락 시 구매자 채팅 화면입니다. | 거래 수락 시 조립자 채팅 화면입니다. (거래 완료 요청 버튼을 터치하면, 요청 메시지가 전송됩니다.) |
거래 완료(구매자)
거래 확정 모달 | 거래 완료 채팅 (구매자) | 거래 완료 채팅 (조립자) | 은행 화면 (입금) |
---|---|---|---|
거래 완료하기 버튼 터치 시 나타나는 모달입니다. | 거래 완료 시 구매자 채팅 화면입니다. | 거래 완료 시 조립자 채팅 화면입니다. | 거래 완료 시 조립자 은행 화면입니다. |
피드-홈 기능 영상 | 피드-작성 기능 영상 | 피드-태그상품 기능 영상 |
---|---|---|
상품페이지 기능 영상 | 견적게시판-작성 기능 영상 | 견적게시판-채팅 기능 영상 |
---|---|---|
마이페이지 기능 영상 |
---|
MSA
- 서비스별 독립 배포: 특정 서비스만 업데이트하더라도 다른 서비스에 영향 없음
- 기술 스택 유연성: 각 서비스에 최적화된 기술 선택 가능
- 장애 격리: 한 서비스의 장애가 전체 시스템으로 확산되지 않음
- 탄력적 확장: 트래픽이 많은 피드 서비스만 선택적으로 확장 가능
- 중앙 집중식 구성 관리: 모든 마이크로서비스의 설정을 한 곳에서 관리하여 일관성 유지
- 동적 설정 변경: 서비스 재시작 없이 설정 변경 적용 가능 (Spring Cloud Config + Spring Cloud Bus)
- 환경별 설정 분리: 개발/테스트/프로덕션 환경별 설정 용이
- 버전 관리: Git 등과 연동하여 설정 이력 관리 가능
SNS
- 비동기 처리: 사용자 활동 로깅이 메인 서비스의 응답 시간에 영향을 주지 않음
- 높은 처리량: Kafka의 높은 처리량으로 대량의 사용자 활동을 빠르게 처리
- 내구성: 데이터 유실 없이 사용자 활동 로그 보존
- 서비스 분리: 로깅 처리 실패가 핵심 서비스에 영향을 주지 않음
- 확장성: 데이터 처리 파이프라인 구축 용이(Kafka Connect, Kafka Streams 등 활용)
- 개인화: 사용자별 관심사와 활동 패턴에 맞는 콘텐츠 제공
- 데이터 기반 의사결정: 사용자 행동 데이터를 활용한 알고리즘 개선 가능
- 사용자 경험 향상: 관련성 높은 콘텐츠로 참여도와 체류 시간 증가
- 콜드 스타트 문제 해결: 다단계 추천 전략(팔로우->활동 기반->인기)으로 신규 사용자에게도 관련 콘텐츠 제공 가능
채팅
- 메시지 형식 정의: 메시지 구조화로 개발 복잡성 감소
- 간편한 라우팅: @Controller와 @MessageMapping으로 메시지 처리 단순화
- 효율적인 세션 관리: 채팅방별 연결 관리 자동화
- 표준화된 통신: 다양한 클라이언트와 서버 간 호환성 확보
- 발행/구독 모델: 유연한 메시지 전달 구조로 확장성 향상
- 높은 확장성: 브로커 추가와 파티셔닝을 통한 효율적인 병렬 처리
- 데이터 안정성: 디스크 저장 및 복제를 통한 메시지 유실 방지
- 대용량 처리: 대규모 실시간 메시징에 최적화된 아키텍처
- 장애 대응: 장애 발생 시에도 메시지 보존 및 복구 가능
- 비동기 처리: 채팅 서비스와 데이터 처리 로직의 분리로 응답성 향상
- 비정형 데이터 처리: 이모티콘 등 다양한 형식의 채팅 내용 수용
- 고성능 읽기/쓰기: 실시간 채팅에 필수적인 빠른 응답성 확보
- 확장성: 샤딩을 통한 대용량 데이터 처리 지원
- 유연한 스키마: 향후 기능 확장 시 스키마 변경 용이
- 인덱싱: 효율적인 채팅 내역 검색 및 조회 가능
- 리소스 효율성: 폴링 방식 대비 서버 부하 감소
- 실시간 전달: 즉각적인 알림으로 사용자 경험 향상
- 구현 단순성: WebSocket 대비 간편한 구현 및 유지보수
- 브라우저 호환성: 대부분의 모던 브라우저에서 지원
- 단방향 최적화: 알림 특성에 맞는 서버→클라이언트 전용 통신 채널
검색
- 역 인덱스 기반 고속 검색: Elasticsearch의 역 인덱스 구조를 활용하여 대량의 문서에서도 밀리초 단위의 빠른 검색 결과를 제공합니다
- 한글 초성 검색: 사용자가 "ㅋㅂㄷ"만 입력해도 "키보드"와 같은 결과를 찾을 수 있도록 jaso_tokenizer를 활용합니다.
- 자소 분리 분석: "키보드"를 "ㅋㅣㅂㅗㄷㅡ"로 분석하여 부분 일치 검색이 가능하게 합니다.
- 오타 교정: "zlqhem"(키보드의 영타)로 입력해도 "키보드"를 찾을 수 있는 fuzzy 검색을 지원합니다.
- 중간 일치 검색: ngram 필터를 사용하여 단어의 중간부터 시작하는 검색어도 자동완성에 포함시킵니다
- 동의어 처리: 동의어 사전을 구축하여 "스위치"와 "축"을 동일한 개념으로 인식하되, 정확한 용어에 더 높은 가중치를 부여합니다.
- 필드 부스팅: 제목, 태그 등 중요 필드에 더 높은 가중치를 부여하여 검색 관련성을 향상시킵니다.
- 인덱스 별칭 활용: 인덱스 별칭(alias)을 사용하여 데이터 재인덱싱 없이 검색 최적화가 가능하게 합니다.
- 쿼리 최적화: 필터 컨텍스트를 활용하고 적절한 쿼리 타입(term, match)을 선택하여 검색 성능을 향상시킵니다.
- 실시간 동기화: Logstash를 사용하여 MySQL 데이터를 10초 간격으로 Elasticsearch에 색인합니다.
- 증분 업데이트: 변경된 데이터만 선별적으로 업데이트하여 시스템 부하를 최소화합니다.
- 배치 처리: 전체 데이터는 Spring Batch를 활용하여 일 단위로 전체 재색인합니다.
- 최근 검색어 관리: Redis를 활용하여 사용자별 최근 검색어를 저장하고 빠르게 조회합니다.
- 검색어 추천: 사용자의 검색 패턴과 행동 데이터를 분석하여 개인화된 검색어를 추천합니다.
- 인기 검색어: 3시간 간격으로 집계된 상위 10개 인기 검색어를 제공하고, 순위 변동(상승/하락/유지/신규)을 표시합니다.
- 자동완성: 사용자 입력에 따라 실시간으로 관련 검색어를 제안하여 검색 편의성을 높입니다.
Back 폴더 구조 보기
📦BE ┣ 📂auth ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂auth ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RedisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestTemplateConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜S3Config.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SecurityConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileUploadController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SocialLoginController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂oauth ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KakaoLoginDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂request ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberProfileUpdateRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SignUpRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂response ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KakaoUserInfoResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoginResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜NicknameCheckResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UploadResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂token ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜JwtTokens.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂userinfo ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KakaoUserInfoResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Member.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂exception ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileDeleteException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileUploadException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidFileException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TokenRefreshException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂jwt ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂filter ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜JwtAuthenticationFilter.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenGenerator.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜JwtTokenProvider.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RefreshTokenRedisRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KakaoService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜S3Service.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AuthApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂auth ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AuthApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂board ┃ ┣ 📂src ┃ ┃ ┗ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂board ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceClient.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EurekaClientConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MyBatisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜S3Config.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜StaticResourceConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EstimateBoardController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardImageDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EstimateBoardDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜MemberResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂exception ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ApiExceptionHandler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardImageMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EstimateBoardMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardImage.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProduct.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EstimateBoard.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EstimateBoardService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EstimateBoardServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileUploadService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalFileUploadServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜S3FileUploadServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardImageMapper.xml ┃ ┃ ┃ ┃ ┃ ┗ 📜EstimateBoardMapper.xml ┃ ┃ ┃ ┃ ┣ 📜bootstrap.yml ┃ ┃ ┃ ┃ ┗ 📜schema.sql ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┗ 📜pom.xml ┣ 📂chat ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂board ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceClient.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜S3Config.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜MemberResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProduct.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalFileUploadServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜S3FileUploadServiceImpl.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductMapper.xml ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂chat ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ChatApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂config ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ConfigApplication.java ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ConfigApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂crawling ┃ ┣ 📂data ┃ ┃ ┣ 📜category.sql ┃ ┃ ┣ 📜geon_product.json ┃ ┃ ┣ 📜products.sql ┃ ┃ ┣ 📜products_descriptions.json ┃ ┃ ┣ 📜products_descriptions.sql ┃ ┃ ┗ 📜swegkey_product.json ┃ ┣ 📜.gitignore ┃ ┣ 📜analysis.md ┃ ┣ 📜base.py ┃ ┣ 📜dbctl.py ┃ ┣ 📜detail.py ┃ ┣ 📜driver.py ┃ ┣ 📜mj.py ┃ ┣ 📜product_crawler.py ┃ ┣ 📜product_detail.py ┃ ┣ 📜product_main.py ┃ ┣ 📜product_og.py ┃ ┗ 📜requirements.txt ┣ 📂eureka ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂eureka ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EurekaApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂eureka ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EurekaApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂feed ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂feed ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductServiceClient.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductServiceClientFallbackFactory.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserServiceClient.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceClientFallbackFactory.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeignConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JsonTypeHandler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KafkaConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalDateTimeTypeHandler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MyBatisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RedisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜S3Config.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂consumer ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BookmarkEventConsumer.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LikeEventConsumer.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂request ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommentRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedCreateRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProductRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductCreateRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductIdRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂response ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BookmarkResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DeleteFeedResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedPageResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FollowResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LikeResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductFavoriteResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommentDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedDetailDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedImageDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜HashtagDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MemberResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductDescriptionDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductResponseDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserDTO.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommentMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedHashtagMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedImageMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProductMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedReadMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FollowUserMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜HashtagMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserActivityMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserHashtagPreferenceMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Comment.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommentMention.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Feed.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedBookmark.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedHashtag.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedImage.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedLike.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProduct.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedRead.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FollowUser.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Hashtag.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserActivity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserHashtagPreference.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BookmarkService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileStorageService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜HashtagService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LikeService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductServiceAdapter.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserActivityService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceAdapter.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂mappers ┃ ┃ ┃ ┃ ┃ ┗ 📂feed ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommentMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedHashtagMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedImageMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProductMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedReadMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FollowUserMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜HashtagMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserActivityMapper.xml ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserHashtagPreferenceMapper.xml ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂feed ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂financial ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂financial ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EscrowAccountProperties.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialApiConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestTemplateConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SecurityConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜PayController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂request ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialRequestHeader.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FinancialUserInfo.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountBalanceRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountCheckRequestDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountTransferRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CreateAccountRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CreateUserRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DemandDepositProductRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EscrowTransactionAcceptRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EscrowTransactionCompleteRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OneWonTransferRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OneWonVerifyRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SetSimplePasswordRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SimplePasswordVerifyRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TransactionHistoryListRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂response ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialResponseHeader.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜OpenApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountBalanceResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountTransferResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CreateAccountResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CreateUserResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DemandDepositProductResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MyAccountCheckResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OneWonTransferInitResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OneWonTransferResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OneWonVerifyResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SimplePasswordVerifyResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TransactionHistoryListResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EscrowTransactionEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialUserEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RegisterProductEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SimplePasswordEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserAccountConnectionEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UsersEntity.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂handler ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ApiException.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜GlobalExceptionHandler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AccountRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EscrowTransactionRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialUserRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RegisterProductRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SimplePasswordRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserAccountConnectionRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UsersRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommonService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialApiService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜PayService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂util ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BankCodeMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ErrorCode.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FinancialHeaderUtil.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ResponseUtil.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TransactionStatus.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FinancialApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂financial ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FinancialApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂gateway ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂gateway ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FilterConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SecurityConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂filter ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜JwtAuthFilter.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜GatewayApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂gateway ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜GatewayApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂Logstash ┃ ┣ 📜feeds.conf ┃ ┣ 📜products.conf ┃ ┗ 📜users.conf ┣ 📂mypage ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂mypage ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂profile ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfileController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProfileDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜StatusMessageUpdateDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProfileService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfileServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂rating ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RatingController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RatingRequestDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RatingMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RatingService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RatingServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜MypageApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┣ 📜RatingMapper.xml ┃ ┃ ┃ ┃ ┃ ┗ 📜UserMapper.xml ┃ ┃ ┃ ┃ ┗ 📜bootstrap.yml ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂mypage ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜MypageApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂pay ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pay ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜PayApplication.java ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pay ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜PayApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂product ┃ ┣ 📂.mvn ┃ ┃ ┗ 📂wrapper ┃ ┃ ┃ ┗ 📜maven-wrapper.properties ┃ ┣ 📂src ┃ ┃ ┣ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂product ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂common ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApiResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EurekaClientConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MyBatisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SecurityConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂request ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductIdRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WishRequest.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OpenGraphDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductDescriptionDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂exception ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApiExceptionHandler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductDescriptionMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductWishMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WishMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserServiceClient.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WishService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂util ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SortUtil.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂old ┃ ┃ ┃ ┃ ┃ ┣ 📜products.sql ┃ ┃ ┃ ┃ ┃ ┗ 📜products_descriptions.sql ┃ ┃ ┃ ┃ ┣ 📜bootstrap.yml ┃ ┃ ┃ ┃ ┣ 📜category.sql ┃ ┃ ┃ ┃ ┣ 📜old_products.sql ┃ ┃ ┃ ┃ ┣ 📜products.sql ┃ ┃ ┃ ┃ ┣ 📜products_descriptions.sql ┃ ┃ ┃ ┃ ┗ 📜schema.sql ┃ ┃ ┗ 📂test ┃ ┃ ┃ ┗ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂product ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductApplicationTests.java ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┗ 📜pom.xml ┣ 📂search ┃ ┣ 📂src ┃ ┃ ┗ 📂main ┃ ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┃ ┗ 📂ssafy ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂search ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂autocomplete ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AutocompleteController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂document ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SuggestKeywordDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AutocompleteRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AutocompleteRepositoryImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AutocompleteService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AutocompleteServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂board ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductSearchController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂document ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductSearchResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductSearchRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductSearchRepositoryCustom.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductSearchRepositoryImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BoardProductSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BoardProductSearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ElasticsearchConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KeywordRankingJobConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RedisConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WebConfig.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂feed ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedProductSearchController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂document ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedProductDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedProductSearchResponse.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProductSearchRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedProductSearchRepositoryImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedProductSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FeedProductSearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂integratedSearch ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SearchController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂document ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SuggestDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserDocument.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedSearchResultDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductSearchResultDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SearchRequestDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserSearchResultDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SearchRepository.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SearchRepositoryImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FeedSearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductSearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserSearchServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂keywordRanking ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KeywordDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankDto.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankMapper.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂processor ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KeywordRankProcessor.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KeywordRankReader.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankWriter.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂scheduler ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BatchJobScheduler.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜KeywordRankService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankServiceImpl.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂recentSearch ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RecentSearchController.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RecentSearchService.java ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SearchApplication.java ┃ ┃ ┃ ┗ 📂resources ┃ ┃ ┃ ┃ ┣ 📂mapper ┃ ┃ ┃ ┃ ┃ ┗ 📜KeywordRankMapper.xml ┃ ┃ ┃ ┃ ┣ 📜bootstrap.yml ┃ ┃ ┃ ┃ ┣ 📜dummy.sql ┃ ┃ ┃ ┃ ┣ 📜elasticsearch-settings.json ┃ ┃ ┃ ┃ ┣ 📜keywi_schema.sql ┃ ┃ ┃ ┃ ┗ 📜schema.sql ┃ ┣ 📜.gitattributes ┃ ┣ 📜.gitignore ┃ ┣ 📜Dockerfile ┃ ┣ 📜mvnw ┃ ┣ 📜mvnw.cmd ┃ ┣ 📜pom.xml ┃ ┗ 📜README.md ┗ 📜.gitignore
Front 폴더 구조 보기
📦src ┣ 📂components ┃ ┣ 📂message ┃ ┃ ┣ 📜ErrorMessage.tsx ┃ ┃ ┣ 📜LoadingMessage.tsx ┃ ┃ ┗ 📜NoDataMessage.tsx ┃ ┣ 📂ui ┃ ┃ ┣ 📜button.tsx ┃ ┃ ┣ 📜carousel.tsx ┃ ┃ ┣ 📜dialog-noX.tsx ┃ ┃ ┣ 📜dialog.tsx ┃ ┃ ┣ 📜drawer.tsx ┃ ┃ ┣ 📜dropdown-menu.tsx ┃ ┃ ┣ 📜input-otp.tsx ┃ ┃ ┣ 📜skeleton.tsx ┃ ┃ ┣ 📜tabs.tsx ┃ ┃ ┗ 📜toaster.tsx ┃ ┣ 📜AuthRedirect.tsx ┃ ┣ 📜Badge.tsx ┃ ┣ 📜DetailHeader.tsx ┃ ┣ 📜FeedWriteButton.tsx ┃ ┣ 📜HeaderIcons.tsx ┃ ┣ 📜HeaderSearch.tsx ┃ ┣ 📜InfiniteScroll.tsx ┃ ┣ 📜MainButton.tsx ┃ ┣ 📜NavBar.tsx ┃ ┣ 📜NextHeader.tsx ┃ ┣ 📜ProtectedRoute.tsx ┃ ┣ 📜PulltoRefresh.tsx ┃ ┣ 📜StyledTabs.tsx ┃ ┣ 📜StyleTab.tsx ┃ ┣ 📜SubHeader.tsx ┃ ┗ 📜TwoBtnModal.tsx ┣ 📂features ┃ ┣ 📂board ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📜BoardCard.tsx ┃ ┃ ┃ ┣ 📜BoardCardList.tsx ┃ ┃ ┃ ┣ 📜BoardDetailMain.tsx ┃ ┃ ┃ ┣ 📜BoardDetailTop.tsx ┃ ┃ ┃ ┣ 📜BoardProductCard.tsx ┃ ┃ ┃ ┣ 📜BoardWriteBtn.tsx ┃ ┃ ┃ ┣ 📜ProductForm.tsx ┃ ┃ ┃ ┣ 📜ProductModal.tsx ┃ ┃ ┃ ┣ 📜ProductSelector.tsx ┃ ┃ ┃ ┣ 📜WriteForm.tsx ┃ ┃ ┃ ┗ 📜WriteImage.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜useBoardDetail.ts ┃ ┃ ┃ ┣ 📜useBoardList.ts ┃ ┃ ┃ ┣ 📜useBoardWrite.ts ┃ ┃ ┃ ┣ 📜useFavoriteProducts.ts ┃ ┃ ┃ ┗ 📜useProductSearch.ts ┃ ┃ ┗ 📂services ┃ ┃ ┃ ┗ 📜boardService.ts ┃ ┣ 📂chat ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📂DealAccept ┃ ┃ ┃ ┃ ┣ 📜AcceptCompleteScreen.tsx ┃ ┃ ┃ ┃ ┣ 📜CommissionInfoModal.tsx ┃ ┃ ┃ ┃ ┣ 📜DealListScreen.tsx ┃ ┃ ┃ ┃ ┣ 📜PasswordScreen.tsx ┃ ┃ ┃ ┃ ┗ 📜SafePaymentScreen.tsx ┃ ┃ ┃ ┣ 📂DealRequest ┃ ┃ ┃ ┃ ┣ 📜AddMethodModal.tsx ┃ ┃ ┃ ┃ ┣ 📜DealReqConfirmScreen.tsx ┃ ┃ ┃ ┃ ┣ 📜DealReqFormScreen.tsx ┃ ┃ ┃ ┃ ┣ 📜ProductCard.tsx ┃ ┃ ┃ ┃ ┣ 📜ProductDirectModal.tsx ┃ ┃ ┃ ┃ ┣ 📜ProductForm.tsx ┃ ┃ ┃ ┃ ┣ 📜ProductSearchModal.tsx ┃ ┃ ┃ ┃ ┗ 📜ProductSelector.tsx ┃ ┃ ┃ ┣ 📂MessageBox ┃ ┃ ┃ ┃ ┣ 📜DealMessage.tsx ┃ ┃ ┃ ┃ ┣ 📜MyMessage.tsx ┃ ┃ ┃ ┃ ┗ 📜OpponentMessage.tsx ┃ ┃ ┃ ┣ 📜ChatCard.tsx ┃ ┃ ┃ ┣ 📜ChatRoomHeader.tsx ┃ ┃ ┃ ┣ 📜ChatRoomPostInfo.tsx ┃ ┃ ┃ ┣ 📜ChatRoomSendBox.tsx ┃ ┃ ┃ ┗ 📜ImageInputScreen.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📂trades ┃ ┃ ┃ ┃ ┣ 📜useAcceptTrade.ts ┃ ┃ ┃ ┃ ┗ 📜useCompleteTrade.ts ┃ ┃ ┃ ┣ 📜useAccount.ts ┃ ┃ ┃ ┣ 📜useChatHistory.ts ┃ ┃ ┃ ┣ 📜useChatList.ts ┃ ┃ ┃ ┣ 📜useChatRoomInfo.ts ┃ ┃ ┃ ┣ 📜useChatSub.ts ┃ ┃ ┃ ┣ 📜useDealReceipt.ts ┃ ┃ ┃ ┣ 📜useImageUpload.ts ┃ ┃ ┃ ┣ 📜useProductsAllDeal.ts ┃ ┃ ┃ ┣ 📜useProductsSearchDeal.ts ┃ ┃ ┃ ┗ 📜useVerifyPassword.ts ┃ ┃ ┗ 📂sevices ┃ ┃ ┃ ┣ 📜chatService.ts ┃ ┃ ┃ ┣ 📜dealService.ts ┃ ┃ ┃ ┗ 📜tradeService.ts ┃ ┣ 📂home ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📂comment ┃ ┃ ┃ ┃ ┣ 📜CommentInput.tsx ┃ ┃ ┃ ┃ ┣ 📜CommentItem.tsx ┃ ┃ ┃ ┃ ┗ 📜CommentList.tsx ┃ ┃ ┃ ┣ 📂feed ┃ ┃ ┃ ┃ ┣ 📜HomeFeed.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedImg.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedInteraction.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedList.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedProfile.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedSkeleton.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedTag.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedTagBtn.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeFeedText.tsx ┃ ┃ ┃ ┃ ┣ 📜HomeHeader.tsx ┃ ┃ ┃ ┃ ┗ 📜HomeTagListModal.tsx ┃ ┃ ┃ ┣ 📂navbar ┃ ┃ ┃ ┃ ┣ 📜BookmarkedFeedGrid.tsx ┃ ┃ ┃ ┃ ┗ 📜FavoriteProductList.tsx ┃ ┃ ┃ ┗ 📂write ┃ ┃ ┃ ┃ ┣ 📜HashtagSelector.tsx ┃ ┃ ┃ ┃ ┣ 📜SelectDndWrapper.tsx ┃ ┃ ┃ ┃ ┣ 📜SelectDraggableImage.tsx ┃ ┃ ┃ ┃ ┣ 📜SelectImage.tsx ┃ ┃ ┃ ┃ ┣ 📜TagPointInfo.tsx ┃ ┃ ┃ ┃ ┣ 📜TagProductImg.tsx ┃ ┃ ┃ ┃ ┣ 📜TagProductList.tsx ┃ ┃ ┃ ┃ ┣ 📜TagProductModal.tsx ┃ ┃ ┃ ┃ ┣ 📜TagWriteModal.tsx ┃ ┃ ┃ ┃ ┣ 📜WriteShowImg.tsx ┃ ┃ ┃ ┃ ┗ 📜WriteText.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜useBookmarkedFeedsQuery.ts ┃ ┃ ┃ ┣ 📜useComments.ts ┃ ┃ ┃ ┣ 📜useFavoriteProducts.ts ┃ ┃ ┃ ┣ 📜useFeedInteractions.ts ┃ ┃ ┃ ┣ 📜useFeedMutation.ts ┃ ┃ ┃ ┣ 📜useFeedProductSearch.ts ┃ ┃ ┃ ┣ 📜useFeedQuery.ts ┃ ┃ ┃ ┣ 📜useHashtags.ts ┃ ┃ ┃ ┣ 📜useImageDragDrop.ts ┃ ┃ ┃ ┣ 📜useProductFavorite.ts ┃ ┃ ┃ ┣ 📜useProductTag.ts ┃ ┃ ┃ ┗ 📜useTagDragDrop.ts ┃ ┃ ┣ 📂services ┃ ┃ ┃ ┣ 📜commentService.ts ┃ ┃ ┃ ┣ 📜feedInteractionService.ts ┃ ┃ ┃ ┣ 📜feedProductService.ts ┃ ┃ ┃ ┗ 📜feedService.ts ┃ ┃ ┗ 📂utils ┃ ┃ ┃ ┗ 📜FeedDataConverter.ts ┃ ┣ 📂login ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📜CompleteBtn.tsx ┃ ┃ ┃ ┣ 📜CompleteContent.tsx ┃ ┃ ┃ ┣ 📜MainLoginBtn.tsx ┃ ┃ ┃ ┣ 📜MainTopSection.tsx ┃ ┃ ┃ ┣ 📜ProfileForm.tsx ┃ ┃ ┃ ┣ 📜ProfileHeaderText.tsx ┃ ┃ ┃ ┣ 📜ProfileImageInput.tsx ┃ ┃ ┃ ┣ 📜ProfileNameInput.tsx ┃ ┃ ┃ ┣ 📜ProfileNextBtn.tsx ┃ ┃ ┃ ┗ 📜ProfileStatusInput.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜handleViewPortResize.ts ┃ ┃ ┃ ┣ 📜KakaoHandler.tsx ┃ ┃ ┃ ┣ 📜useAuth.ts ┃ ┃ ┃ ┗ 📜useUserInfo.ts ┃ ┃ ┗ 📂services ┃ ┃ ┃ ┗ 📜authServices.ts ┃ ┣ 📂mypage ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📜MypageBoard.tsx ┃ ┃ ┃ ┣ 📜MypageBoardCard.tsx ┃ ┃ ┃ ┣ 📜MypageFeed.tsx ┃ ┃ ┃ ┣ 📜MypageHeader.tsx ┃ ┃ ┃ ┣ 📜MypageProfile.tsx ┃ ┃ ┃ ┣ 📜ProfileEditModal.tsx ┃ ┃ ┃ ┗ 📜ReviewStars.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜useMypageBoard.ts ┃ ┃ ┃ ┣ 📜useMypageFeedQuery.ts ┃ ┃ ┃ ┣ 📜useMypageProfile.ts ┃ ┃ ┃ ┗ 📜useProfileEdit.ts ┃ ┃ ┗ 📂services ┃ ┃ ┃ ┣ 📜mypageBoardService.ts ┃ ┃ ┃ ┣ 📜mypageFeedService.ts ┃ ┃ ┃ ┗ 📜mypageProfileService.ts ┃ ┣ 📂pay ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📜AuthAccount.tsx ┃ ┃ ┃ ┣ 📜BankModal.tsx ┃ ┃ ┃ ┣ 📜Complete.tsx ┃ ┃ ┃ ┣ 📜InputAccount.tsx ┃ ┃ ┃ ┣ 📜Intro.tsx ┃ ┃ ┃ ┣ 📜RandomKeyPad.tsx ┃ ┃ ┃ ┗ 📜RegistPassword.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜useConnectAccount.ts ┃ ┃ ┃ ┣ 📜useInitiateTransfer.ts ┃ ┃ ┃ ┗ 📜useVerifyCode.ts ┃ ┃ ┗ 📂services ┃ ┃ ┃ ┗ 📜payService.ts ┃ ┣ 📂product ┃ ┃ ┣ 📂component ┃ ┃ ┃ ┣ 📜LinkPreview.tsx ┃ ┃ ┃ ┣ 📜ProductDescription.tsx ┃ ┃ ┃ ┗ 📜ProductList.tsx ┃ ┃ ┗ 📂hooks ┃ ┃ ┃ ┗ 📜useFavorite.ts ┃ ┗ 📂search ┃ ┃ ┣ 📂components ┃ ┃ ┃ ┣ 📜SearchFeed.tsx ┃ ┃ ┃ ┣ 📜SearchHeader.tsx ┃ ┃ ┃ ┣ 📜SearchPopular.tsx ┃ ┃ ┃ ┣ 📜SearchProduct.tsx ┃ ┃ ┃ ┣ 📜SearchRecent.tsx ┃ ┃ ┃ ┣ 📜SearchRecommend.tsx ┃ ┃ ┃ ┣ 📜SearchSuggestions.tsx ┃ ┃ ┃ ┗ 📜SearchUser.tsx ┃ ┃ ┣ 📂hooks ┃ ┃ ┃ ┣ 📜useAutocomplete.ts ┃ ┃ ┃ ┣ 📜usePopular.ts ┃ ┃ ┃ ┣ 📜useRecent.ts ┃ ┃ ┃ ┗ 📜useSearchResults.ts ┃ ┃ ┗ 📂services ┃ ┃ ┃ ┗ 📜searchService.ts ┣ 📂fonts ┃ ┣ 📜Pretendard-Regular.woff ┃ ┗ 📜Pretendard-SemiBold.woff ┣ 📂hooks ┃ ┣ 📜useCookieAuth.ts ┃ ┗ 📜useIntersectionObserver.ts ┣ 📂interfaces ┃ ┣ 📜ApiResponse.ts ┃ ┣ 📜BoardInterface.ts ┃ ┣ 📜ChatInterfaces.ts ┃ ┣ 📜HomeInterfaces.ts ┃ ┣ 📜LoginInterfaces.ts ┃ ┣ 📜MypageInterface.ts ┃ ┣ 📜OpenGraphData.ts ┃ ┣ 📜ProductInterface.ts ┃ ┗ 📜SearchInterface.ts ┣ 📂lib ┃ ┗ 📜utils.ts ┣ 📂pages ┃ ┣ 📂board ┃ ┃ ┣ 📜BoardDetailPage.tsx ┃ ┃ ┣ 📜BoardPage.tsx ┃ ┃ ┗ 📜BoardWritePage.tsx ┃ ┣ 📂chat ┃ ┃ ┣ 📜ChatListPage.tsx ┃ ┃ ┣ 📜ChatRoomPage.tsx ┃ ┃ ┣ 📜DealAcceptPage.tsx ┃ ┃ ┗ 📜DealRequestPage.tsx ┃ ┣ 📂home ┃ ┃ ┣ 📜AlarmListPage.tsx ┃ ┃ ┣ 📜BookmarkFeedFullscreenPage.tsx ┃ ┃ ┣ 📜BookmarkListPage.tsx ┃ ┃ ┣ 📜HomeCommentPage.tsx ┃ ┃ ┣ 📜HomeImgSelectPage.tsx ┃ ┃ ┣ 📜HomePage.tsx ┃ ┃ ┣ 📜HomeTagPage.tsx ┃ ┃ ┣ 📜HomeWritePage.tsx ┃ ┃ ┗ 📜ZzimListPage.tsx ┃ ┣ 📂login ┃ ┃ ┣ 📜LoginCompletePage.tsx ┃ ┃ ┣ 📜LoginPage.tsx ┃ ┃ ┗ 📜MainPage.tsx ┃ ┣ 📂mypage ┃ ┃ ┣ 📜MyPage.tsx ┃ ┃ ┣ 📜MypageFeedFullscreenPage.tsx ┃ ┃ ┣ 📜SettingAccountPage.tsx ┃ ┃ ┗ 📜SettingPage.tsx ┃ ┣ 📂pay ┃ ┃ ┗ 📜PayPage.tsx ┃ ┣ 📂product ┃ ┃ ┣ 📜ProductDetailPage.tsx ┃ ┃ ┗ 📜ProductPage.tsx ┃ ┗ 📂search ┃ ┃ ┣ 📜AfterSearchPage.tsx ┃ ┃ ┗ 📜SearchingPage.tsx ┣ 📂services ┃ ┣ 📜api.ts ┃ ┣ 📜userIdService.ts ┃ ┗ 📜WebSocketProvider.tsx ┣ 📂stores ┃ ┣ 📜authStore.ts ┃ ┣ 📜boardStore.ts ┃ ┣ 📜chatStore.ts ┃ ┣ 📜homeStore.ts ┃ ┣ 📜payStore.ts ┃ ┣ 📜searchStore.ts ┃ ┣ 📜signupStore.ts ┃ ┣ 📜stompContext.ts ┃ ┗ 📜userStore.ts ┣ 📂styles ┃ ┣ 📜colors.ts ┃ ┣ 📜fonts.tsx ┃ ┗ 📜typography.ts ┣ 📂utils ┃ ┣ 📜bankCodeMapper.ts ┃ ┣ 📜formatChatTime.ts ┃ ┣ 📜formatDateTime.ts ┃ ┣ 📜getBadgeData.ts ┃ ┣ 📜getCurrentKoreanHour.ts ┃ ┣ 📜getDandoBadgeData.ts ┃ ┣ 📜getTimeDiff.ts ┃ ┣ 📜highlightMentions.tsx ┃ ┣ 📜highlightSearchTerm.tsx ┃ ┣ 📜imageCompression.ts ┃ ┣ 📜parseOpenGraph.ts ┃ ┣ 📜scrollManager.ts ┃ ┗ 📜truncateText.tsx ┣ 📜App.tsx ┣ 📜config.ts ┣ 📜index.css ┣ 📜main.tsx ┗ 📜vite-env.d.ts