Skip to content

seongbinko/afterwork

Repository files navigation

Build Status

AFTER WORK - BACKEND SERVER REPOSITORY

AFTER WORK 서비스 소개

  • 넘쳐나는 취미 플랫폼 클래스들을 한 번에 모아볼 수 있는 사이트

  • 유명 플랫폼 7개사 클래스 인기, 가격 한 번에 비교

  • 구글/네이버/카톡 아이디로 간편하게 소셜 로그인

  • 사용자별 관심 지역, 분야 설정을 통한 맞춤 추천

🎯 Target

  • 퇴근 후 뭐하지? 고민하는 직장인
  • 직장인 58% 재택근무 경험…90% “증가된 여가시간에 새 취미생활 하고파”
    ('20.03 직장인 소셜미디어 블라인드 설문조사 결과)
  • 넘쳐나는 취미 플랫폼과 클래스 정보들로 혼란스러운 이들

AFTER WORK - FRONTEND REPOSITORY

AFTER WORK - BACKEND SCHEDULER REPOSITORY

개요

  • 명칭 : AFTER WORK - SERVER
  • 개발 인원 : 프론트(React) 3명, 백엔드(Spring) 3명, 디자이너 1명
  • 개발 기간 : 2021.04.25 ~ 2021.05.12
  • 운영 기간 : 2021.05.13 ~ 진행중 (의견을 바탕으로 서비스 개선)
  • 담당 업무 :
    • 고성빈
      • 인프라 구축
      • 테이블 설계
      • 소셜 로그인(Google, Kakao, Naver), 회원정보 조회 api 구현
      • Http -> Https 전환
      • 빌드 자동화 및 서비스 무중단 배포 구현
    • 김남석
      • 클래스톡, 하비인더박스, 마이비스킷, 클래스101 웹사이트 자동 크롤링 구현
      • 카테고리 별 리스트, 검색, 카테고리별 추천 리스트, 온라인 추천 리스트, 오프라인 추천 리스트 api 구현
      • 카테고리 조회 api 구현
      • 회원정보 수정 / 탈퇴 api 구현
    • 최재성
      • 하비풀, 모카클래스, 탈잉 웹사이트 자동 크롤링 구현
      • 찜 항목 저장, 개별 및 전체 삭제, 조회 api 구현
      • 지역별 추천 상품 api 구현
  • 개발 환경 : Springboot 2.4.5, Jdk 1.8, Spring Security, Spring JPA, Junit5
  • 배포 환경 : Gradle, Travis CI, AWS S3, AWS CodeDeploy, AWS EC2
  • 웹 서버 : Nginx, Tomcat 9.0
  • 데이터베이스 : MariaDB 10.4 (AWS RDS)
  • 협업 도구 : Git, Notion, Slack
  • 코드 분석 도구 : SonarLint, JaCoCo
  • 간단 소개 : 퇴근하고 뭐할지 고민하는 사람들을 위한, 모든 플랫폼들의 취미들을 한 곳에서 비교가능한 서비스
    사용자는 관심 지역, 관심 카테고리에 따라 클래스를 추천받을 수 있다
  • 주요 기능 : 소셜 로그인(Google, Kakao, Naver), 검색기능, 찜 기능, 사용자 관심지역, 카테고리별 추천 기능
  • 특징 : 서비스의 데이터를 정기적으로 최신화 (Afterwork-Scheduler-Repository)
    빌드 자동화를 통한 서비스 무중단 배포 구현

테이블 설계

스크린샷 2021-05-17 오후 2 06 13

API 설계

기능 Method URL Request Params / Body
카테고리 목록 GET /api/categorys
카테고리 별 리스트 GET /api/categorys/{categoryId} page, size, sort, direction, filter, sitename
찜 목록 불러오기 GET /api/collects
찜 등록 POST /api/collects productId
찜 목록 전체 삭제 DELETE /api/collects
찜 목록 개별 삭제 DELETE /api/collects/{collectId}
위치별 추천 리스트 GET /api/recommend
관심카테고리 별 추천 리스트 GET /api/recommend/categorys
온라인 추천 리스트 GET /api/recommend/online
오프라인 추천 리스트 GET /api/recommend/offline
검색 GET /api/search page, size, sort, direction,filter
회원정보 수정 POST /api/user offtime, locations, categorys
회원정보 탈퇴 DELETE /api/user
로그인 회원정보 조회 GET /api/user/me

무중단 배포 전체 구조

스크린샷 2021-05-26 오후 1 29 54

테스트 코드 개선

  • Api 관련 테스트 코드 End to End 방식으로 작성

  • 2021.05.24

    • 테스트 코드 커버리지 90%
    • 관련 이미지
      테스트 커버리지 5 24
  • 2021.05.26

    • 테스트 코드 커버리지 100%
    • 관련 이미지
      스크린샷 2021-05-26 오후 1 20 49

타임라인

일자 진행 목록
2021.04.25 프로젝트 메인 및 테스트 디렉토리 생성, Gradle Dependencies 설정 - [고성빈]
2021.04.26 Entity 디렉토리 생성, 와이어 프레임 대로 Category/Collect/FeedBack/Interest/Product/User 및 상속 받을 BaseEntity 구현 - [고성빈]
Spring security, JsonWebToken 추가, 시큐리 configuration 구현, 실행앱 yaml 설정 - [고성빈]
Social login 기본 구조 구현 (Auth, OAuth2), UserPrinciple 구현 - [고성빈]
2021.04.27 Product price 데이터 타입 변경, Price info, Site name 변수명 변경, Site URL 컬럼 추가, Popularity 컬럼 수정 - [고성빈]
Gradle 설정 수정, Profile Controller api 구현 - [고성빈]
h2-console 및 test 확인, 상황별 데이터 베이스를 사용하기 간편하게 각종 Yaml 객체 구현 - [고성빈]
2021.04.28 Category repository, CategoryResponseDto, Product controller, Category controller 및 api 구현 - [김남석]
Security 허용 범위 설정 - [김남석]
Category 별 리스트 api 구현, 페이지 요청 구현 (Pageable) - [김남석]
2021.04.29 Category 별 리스트를 페이지 요청시 오름차순, 내림차순으로 정렬하여 반환될 수 있게끔 구현, 대문자 소문자 구분 조건 추가 - [김남석]
User 정보 조회, 수정, 삭제 controller 및 api 구현 - [김남석]
FeedBack controller api, FeedbackRequestDto, FeedbackRepository 구현 - [김남석]
Search 기능 api 구현 - [김남석]
상품에 대한 찜 등록, 전체 삭제, 개별 삭제 controller 및 api, Service, Repository 구현 - [최재성]
2021.04.30 BaseEntity를 상속받은 Entity 클래스 모두 BaseTimeEntity 상속으로 변경 - [고성빈]
Collect 항목 전체 조회 api 구현 - [최재성]
2021.05.01 Collect 항목 전체 조회시 반환 될 값이 Collect 가 아닌 Product 항목으로 fix - [최재성]
2021.05.03 Feedback controller 를 위한 valid 검사 추가 - [고성빈]
Product repository 에 query 어노테이션 추가 (중복 검색을 위한 방지) - [김남석]
Recommend 리스트 controller 및 api 구현 - [최재성]
2021.05.04 LocationResponseDto 클래스 어노테이션 추가, User controller 에 Authorize 어노테이션 추가 - [고성빈]
2021.05.05 Product repository 에 검색 조건 추가 (중복 검색 제거), User 삭제시 연결된 Location, Interest, Collect 가 삭제되어야 가능하도록 fix - [김남석]
Collect 상품에 대한 중복 fix - [최재성]
2021.05.06 User 관련된 테스트 코드 작성 및 fix - [고성빈]
Category 관련된 테스트 코드 작성 - [김남석]
2021.05.07 Category api 에 filter 기능 추가 - [김남석]
Recommend 상품에 대한 랜덤 12개를 status = 'Y' 만 반환 되게끔 수정 - [최재성]
2021.05.08 로그인 오류 메세지 수정, 크롤링 기능 및 업데이트 클래스 전부 삭제 -> 새로운 Afterwork-Scheduler 에 옮김 - [고성빈]
2021.05.10 Category 별 추천 기능, Authorize 어노테이션 추가 - [김남석]
Product Repository 에 Native query 를 JPQL 로 변경, group by 추가 - [김남석]
Search 관련된 테스트 코드 작성 - [김남석]
2021.05.11 Recommend Category 리스트 관련된 테스트 코드 작성 - [김남석]
Recommend 상품, Collect 관련된 테스트코드 작성 - [최재성]
2021.05.12 Controller 에 구현한 api 를 service 로 refactoring - [김남석] [고성빈]
Collect, Recommend api 에 예외 처리 추가 - [최재성]
프로젝트 성능 개선을 위해 불필요한 import , 주석, 출력 모두 제거 - [고성빈]
License 구현 - [고성빈]
2021.05.13 SecurityConfig /api/** permit 에서 사용하는 api만 permit 으로 fit - [김남석]
검색 필터 오류(online,offline 둘다 되는 경우 total일 경우에만 나타나는 현상) fit - [김남석]
start.sh log파일 생성하도록 변경 - [고성빈]
2021.05.15 Recommend service, Recommend category 중복 값 제거 메소드 추가 - [김남석] [최재성]
2021.05.17 오늘의 오프라인 클래스, 온라인 클래스 추천을 위한 컬럼 추가 (is_recommend_offline, is_recommend_online) - [고성빈]
정확한 로그 확인을 위한 application.yml 정보 수정 - [고성빈]
온라인/오프라인 랜덤추천 기능 추가 - [김남석]
2021.05.18 온라인/오프라인 랜덤추천 기능 테스트코드 추가 - [김남석]
2021.05.19 사이트이름 별 필터 기능, 테스트코드 추가 - [김남석]
정렬 오류 수정 (sort에 title도 추가) - [김남석]
토큰 만료시간 30분으로 변경 - [고성빈]
2021.05.20 검색, 카테고리별 리스트, 회원 정보수정 Valid 추가 - [김남석]
전반적인 코드 리팩토링 (model -> entity) 잘못된 import 변경 - [고성빈]
계정당 찜 상품 50개로 제한, 각 api에 맞는 예외 처리로 수정 및 테스트 코드 작성 - [최재성]
2021.05.20 cors origin 도메인 제한 - [고성빈]
2021.05.21 sql log 제거 - [고성빈]
2021.05.24 코드 분석 도구 SonarLint, JaCoCo 추가 [고성빈]
검색, category 지역필터 추가 [김남석]
2021.05.25 찜 상품 등록 test code coverage 100%로 수정 - [최재성]
RecommendCategory 코드 리팩토링 [김남석]
Recommend 코드 리팩토링 - [최재성]
2021.05.26 Controller, Service 코드 리펙토링 - [김남석]
ProfileController 제거 readme 추가, Api 관련 테스트 코드 커버리지 100% 달성 [고성빈]

About

애프터워크 서비스의 서버 프로젝트

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published