야후 파이낸스에 있는 회사의 배당금 정보를 스크랩하여 회사와 배당금 정보를 데이터베이스에 저장하고 조회 및 삭제 기능을 제공하는 API 프로젝트
2024.05.01 ~ 2024.05.13
- SpringBoot 3.2.5
- Java 17
- JPA
- H2
- Redis
- Jsoup
- Docker
- ✅ 웹 페이지를 분석하고 스크래핑 기법을 활용하여 필요한 데이터를 추출/저장 -> 코드로 이동
- ✅ 서비스에서 캐시의 필요성을 이해하고 캐시 서버를 구성 -> redis설정, redis 적용 코드1, redis 적용 코드2
- ✅ Spring Security JWT 토큰을 이용한 로그인 인증/인가 처리 -> security 설정
- ✅ 로그인 인증 Exception 처리 -> 403 에러 핸들러
- ✅ 프로젝트 Docker 이미지화 -> dockerfile
- ✅ ControllerAdvice 에서 에러 처리하기 -> exceptionHandler
├─build
├─gradle
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─jh
│ │ └─dividendpj
│ │ ├─auth
│ │ ├─company
│ │ │ ├─controller
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ ├─exception
│ │ │ ├─repository
│ │ │ └─service
│ │ ├─config
│ │ ├─dividend
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ ├─repository
│ │ │ └─service
│ │ ├─member
│ │ │ ├─controller
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ ├─exception
│ │ │ ├─repository
│ │ │ └─service
│ │ └─scraper
│ │ ├─exception
│ │ └─scheduler
│ └─resources
└─test
- GET - finance/dividend/{companyName} -> service, controller
- 회사 이름을 인풋으로 받아서 해당 회사의 메타 정보와 배당금 정보를 반환
- 잘못된 회사명이 입력으로 들어온 경우 400 status 코드와 에러메시지 반환
- GET - company/autocomplete -> service, controller
- 자동완성 기능을 위한 API
- 검색하고자 하는 prefix 를 입력으로 받고, 해당 prefix 로 검색되는 회사명 리스트 중 10개 반환
- GET - company -> service, controller
- 서비스에서 관리하고 있는 모든 회사 목록을 반환
- 반환 결과는 Page 인터페이스 형태
- POST - company -> companyService, dividendService, controller
- 새로운 회사 정보 추가
- 추가하고자 하는 회사의 ticker 를 입력으로 받아 해당 회사의 정보를 스크래핑하고 저장
- 이미 보유하고 있는 회사의 정보일 경우 400 status 코드와 적절한 에러 메시지 반환
- 존재하지 않는 회사 ticker 일 경우 400 status 코드와 적절한 에러 메시지 반환
- DELETE - company/{ticker} -> service, controller
- ticker 에 해당하는 회사 정보 삭제
- 삭제시 회사의 배당금 정보와 캐시도 모두 삭제함 -> 캐시 삭제
- POST - auth/signup -> service, controller
- 회원가입 API
- 중복 ID 는 허용하지 않음
- 패스워드는 암호화된 형태로 저장됨
- POST - auth/signin -> service, controller
- 로그인 API
- 회원가입이 되어있고, 아이디/패스워드 정보가 옳은 경우 JWT 발급