๋งค์ฐ ๋ฆ์ ํด์ปคํค ํ๊ธฐ์ ๋์ ์ฒซ ๋ฐฑ์๋๋ก์จ ํ๋ก์ ํธ์์ ๋ด ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํด๋ณผ ์๊ฐ์ด๋ค.
์ง๊ธ์ ๊ฐํ์ด๋ ์ ๋ผ๋ฉด ์ด๋๋ ์์ ์์๋ ์๊ธฐ๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋๋ ์ด์ด ์ข์์ ์ด๋ ๊ฒ ์น๊ตฌ๋์ ํด์ปคํค ๊ฒฝํ๋ ํด๋ณด๊ณ ๋๋ฌด ์ข์ ๊ฒฝํ์ด์๋ค. ์ฑ์ฅ ํ ์ ์๋ ๊ณณ์ ๊ฐ์ ๋์ ์ค๋ ฅ์ ๋งค์ฐ ์ฑ์ฅํ๊ณ ์ถ๋ค. ์คํ๋ ค ๋ฆ์ ํ๊ธฐ๊ฐ ์ง๊ธ์ ๋ ์ข์ ๊ฒ ๊ฐ๋ค. ๊ทธ ์ด์ ๋ ๊ทธ๋ ๋ณด๋ค ์ฑ์ฅํ ๋ด๊ฐ ๊ทธ๋ ๋ด๊ฐ ํ๋ ๊ฒ์ ๋ณด๋๊ฑด ์ข์ ๊ฒฝํ์ด ๋ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
ํด์ปคํค์ ์ฒ์ ๊ฐ๋ดค๋๋ฐ ์ฌ๋์ด ์ง์ง ์ง์ง ๋ง์๋ค.. ๋ค๋ฅธ ํ๊ต๋ค ์ฌ๋๋ค๋ ๋ณด๋ฉด์ ๋ด๊ฐ ์ด๋ฐ ๊ฒฝํ๋ ํด๋ณด๋ค๋ ๋๋ฌด ์ข์ ๊ฒฝํ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์น๊ตฌ๋ค์ด๋ ์ด๋ฐ ์ฌ์ง๋ ์ฐ๊ตฌ
๋ ์จ๋ ๋๋ฌด๋๋ฌด ์ข์๋ค~
์ฌ๋ฌ๊ฐ์ง ๋ถ์ค ์ฒดํ๋ ํด๋ณด๊ณ ํ์๋ผ๋ฆฌ ์ด์ผ๊ธฐ๋ ๋๋๋ฉด์ ์๋ฒฝ์ ๋ณด๋ด๊ณ ์ข์ ๊ฒฝํ์ด์๋ค~
๋ด๊ฐ ๋ฐฑ์๋๋ก ๊ฐ๊ณ ์ฒซ ํ๋ก์ ํธ์๋๋ฐ ๊ฐ๋จํ CRUD ๊ตฌํ๊ณผ ๋ค์ด๋ฒ ๋ด์ค API ํ์ฉํ๋ ๋ด๋น์ ๋งก์๋ค.
์์งํ ์ง๊ธ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ ๋๋ ๋ด๊ฐ ํ ์ ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์๋๊ฒ ๊ฐ๋ค.
๊ฐ๋จํ CRUD ๊ตฌํ์กฐ์ฐจ ๊ตฌ๊ธ๋ง๊ณผ gpt์ ๋์์ ๋ฐ๊ณ , ๋ค์ด๋ฒ ๋ด์ค API ํ์ฉํ๋๊ฒ์ ๊ตฌ๊ธ๋ง๊ณผ ๋ค์ด๋ฒ ๊ณต์ ๋ฌธ์ ๋ฐ gpt๋ฅผ ์ฐ๋๋ฐ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด์ ์ฑ์ฅ์ ๋ง์ด ํ๊ฒ ๊ฐ๋ค.
๋ด๊ฐ ๋งก์ ๋ถ๋ถ ์ค 2๊ฐ์ง๋ฅผ ๋ด๋ณผ๊ฑด๋ฐ ์ข์์ ๊ธฐ๋ฅ๊ณผ ๋ค์ด๋ฒ๋ด์ค API๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค.
like/
โโโ common/
โ โโโ ResponseResult.java
โโโ controller/
โ โโโ LikeController.java
โโโ dto/
โ โโโ LikeRequestDTO.java
โโโ entity/
โ โโโ Like.java
โโโ exception/
โ โโโ CustomException.java
โโโ repository/
โ โโโ LikeRepository.java
โโโ service/
ใ โโโ LikeService.java
ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ๊ฐ ๊ณ์ธต๋ณ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์ ์ง๋ณด์์ ํ์ฅ์ ์ฉ์ดํ ๊ตฌ์กฐ๊ฐ ์๋๊น ์๊ฐํ๋ค! (GPT ์ต๊ณ !)
๊ทผ๋ฐ ๋์ค์ ํ๋ก์ ํธํ ๋ ๊ฐ์ด ํ๋ ์ฌ๋๋ง๋ค ๋ค๋ฅด๊ฒ ๋ถ๋ฅํ ์ ๋ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค!
<๊ฐ ํ์ผ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ>
(common)
(controller)
(dto)
(entity)
(exception)
(repository)
(service)
healthnews/
โโโ client/
โ โโโ JsoupCrawling.java
โโโ controller/
โ โโโ HealthNewsController.java
โโโ dto/
โ โโโ HealthNewsResponseDto.java
โ โโโ NewsApiResponseDto.java
โ โโโ NewsSummaryDto.java
โโโ entity/
โ โโโ HealthNews.java
โโโ exception/
โ โโโ NaverApiCallException.java
โ โโโ NewsControllerAdvice.java
โ โโโ NewsNullException.java
โโโ repository/
โ โโโ HealthNewsRepository.java
โ โโโ NewsApiResponseRepository.java
โโโ service/
ใ โโโ HealthNewsService.java
<๊ฐ ํ์ผ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ>
(client)
(controller)
(dto)
HealthNewsResponseDto.java
์ญํ : ๋ด์ค ์๋ต ๋ฐ์ดํฐ(์ ๋ชฉ, ๋งํฌ, ์ค๋ช
, ์ด๋ฏธ์ง URL)๋ฅผ ์บก์ํํ๊ณ ์ด๋ฏธ์ง ๋งํฌ ์ ํจ์ฑ ๊ฒ์ฌ ์ ๊ณต
์์ฌ์ด ์ : ์ถ๊ฐ์ ์ธ ๋ฉํ ์ ๋ณด๋ ํ์ฅ ์ ๊ณ ๋ คํ ํ๋ ๋ถ์กฑ
NewsApiResponseDto.java
์ญํ : ๋ด์ค API ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ , Naver ๋ด์ค๋ง ํํฐ๋ง ๋ฐ HealthNewsResponseDto ๋ณํ ์ ๊ณต
์์ฌ์ด ์ : JsoupCrawling ์ธ์คํด์ค๋ฅผ ์ง์ ์์ฑํ์ฌ DI(์์กด์ฑ ์ฃผ์
) ๋ฏธ์ ์ฉ, ํ
์คํธ ์ฉ์ด์ฑ ์ ํ
NewsSummaryDto.java
์ญํ : ๋ด์ค ์์ฝ ์ ๋ณด๋ฅผ ๋ด๊ณ , ์ด๋ฏธ์ง ํฌ๋กค๋ง์ ํตํด HealthNewsResponseDto๋ก ๋ณํ
์์ฌ์ด ์ : JsoupCrawling ์์กด์ฑ์ ์ธ๋ถ ์ฃผ์
๋์ ๋ด๋ถ ์ฒ๋ฆฌํ์ฌ ์ ์ฐ์ฑ ๋ถ์กฑ
(entiry)
(exception)
NaverApiCallException.java
์ญํ : ๋ค์ด๋ฒ API ํธ์ถ ์คํจ ์ ๋ฐ์ํ๋ ์ปค์คํ
์์ธ ์ ์
์์ฌ์ด ์ : ๋๋ฒ๊น
์ ์ํ ์ถ๊ฐ ์ ๋ณด ์ ๊ณต ๋ฏธํก
NewsControllerAdvice.java
์ญํ : NewsNullException๊ณผ NaverApiCallException์ ๋ํ ์ ์ญ ์์ธ ์ฒ๋ฆฌ
์์ฌ์ด ์ : ์ถ๊ฐ ์์ธ ์ ํ ์ฒ๋ฆฌ ๋ฐ ํต์ผ๋ ์๋ต ํฌ๋งท ์ ์ฉ ํ์
NewsNullException.java
์ญํ : ๋ด์ค ๊ฒฐ๊ณผ๊ฐ ์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ์ปค์คํ
์์ธ ์ ์
์์ฌ์ด ์ : ์์ธ ๋ฉ์์ง ๋ฐ ์์ธ ์ฝ๋ ๋ถ์ฌ ๋ฏธํก
(repository)
HealthNewsRepository.java
์ญํ : HealthNews ์ํฐํฐ์ ๋ํ CRUD ์์
์ ์ํํ๋ Repository
์์ฌ์ด ์ : ๊ธฐ๋ณธ CRUD ์ธ ์ถ๊ฐ ๊ฒ์ ์กฐ๊ฑด ๋ฐ ํ์ด์ง ๊ธฐ๋ฅ ๋ฏธ๊ตฌํ
NewsApiResponseRepository.java
์ญํ : ๋ค์ด๋ฒ ๋ด์ค API ํธ์ถ ๋ฐ ์๋ต ๋ฐ์ดํฐ๋ฅผ Optional ํํ๋ก ๋ฐํ
์์ฌ์ด ์ : RestTemplate ์ฌ์ฉ ์ ์ปค๋ฅ์
ํ์์์, ์๋ฌ ํธ๋ค๋ง ๊ฐ์ ํ์
(service)
์ด๋ฒ ๋ฆฌ๋ทฐ๋ฅผ ํตํด์ ์ข์์ ๊ธฐ๋ฅ๊ณผ ๋ค์ด๋ฒ ๋ด์ค API ๋ชจ๋์์ ์ ์ญ ์์ธ ์ฒ๋ฆฌ, ๋ก๊น , ์์กด์ฑ ๊ด๋ฆฌ ๋ฐ API ํธ์ถ ์ต์ ํ ๋ฑ ๊ฐ์ ํ ๋ถ๋ถ์ด ๋ง์์ ํ์ธํ์ผ๋ ์์ผ๋ก ์ด๋ฌํ ์ ๋ค์ ๋ณด์ํด ๋ ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค์ด๋ณด์์~ ๋์ ์ฝ๋๋ฅผ ๋ณด๋ ๋์ ๋ ํค์ ๋ด ์๋ค!