"긴 URL을 짧은 URL로 단축시켜주는 애플리케이션"
- Java 17
- Spring Boot 2.7.8
- Spring Data JPA
- Junit5
- Spring REST Docs
- MySQL
- 원본 URL을 DB에 저장하고, PK를 기준으로 BASE62 인코딩을 통해 단축 URL 생성
HTTP/1.1 200 OK
Content-Type: application/json
{
"shortenedUrl" : "shortenedUrl",
"originUrl" : "https://github.com/haero77",
"viewCount" : {
"totalViewCount" : 3,
"viewCountPerDate" : [ {
"date" : "2023-04-28",
"viewCount" : 2
}, {
"date" : "2023-04-29",
"viewCount" : 1
} ],
"viewCountPerReferer" : [ {
"referer" : "GOOGLE",
"viewCount" : 1
}, {
"referer" : "DIRECT",
"viewCount" : 2
} ]
}
}
- 전체 조회수, 최근 7일간의 일자별 조회수, HTTP Referer 별 조회수 조회 기능 제공
(기타 세부 구현사항은 여기서 확인하실 수 있습니다.)
- URL
- 원본 URL, 단축된 URL, 유효기간 등을 기록
- URL_CALL
- 단축 URL이 생성될 때마다 Row가 추가되며, 호출 시간과 HTTP Referer를 기록
레이어드 아키텍처를 적용하고, Presentation to Domain 으로 의존성이 단방향으로 흐르도록 설계.
- 하나의 엔드포인트를 갖는 컨트롤러 객체
- 컨트롤러 객체 하나당 하나의 엔드포인트를 담당하여 SRP를 준수
- 단 하나의 메소드를 제공하는 서비스 객체
- Data Read를 담당하는
UrlReader
를 제외한 서비스 객체는 단 하나의 public 메소드를 갖도록 설계하여 SRP를 준수하고, Command와 Query를 명확히 분리. UrlReader
는 다른 서비스 객체를 의존하지 않게하여 순환참조 문제를 방지
- Data Read를 담당하는
- 캡슐화를 지키는 도메인 객체
- 비즈니스 로직을 최대한 도메인 객체가 수행하게 설계하고, 상태와 기능을 묶음으로써
캡슐화
를 준수
- 비즈니스 로직을 최대한 도메인 객체가 수행하게 설계하고, 상태와 기능을 묶음으로써