Wecode -기업협업 인턴 (부트캠프)/기업협업 인턴(프로젝트)

기업협업 2번째 프로젝트: short url 통신 성공

JBS 12 2023. 11. 13. 17:59

 

<create> 

api는

urlController. 

 

전체 url.controller 

body 값은 

 

 

urlService

 

short url 생성 전에, 확인해야 할 작업이 있다. 

에러 핸들링 :  user ip 로 하루 30회 short url 변환 가능 

 

횟수 확인

- userIp와 일치하는 거를 가져와라 

 

 

const today = new Date();
today.setHours(0, 0, 0, 0);

 

 

if 30회 이상이면, 에러 

nest js exception filter로 바꾸어야 하는 부분

 

 

실제로 에러를 내보면, 

 

 

아래 postman을 보면, userIp : r234로 

 

 

30회 이상 만들었기에 

 

아래와 같은 메세지가 뜬다 

 

만약 위 단계를 통과했다면, 이제 create short url 가능 

 

우리는 short url 에 디폴트 값으로 http://localhost:3000/를 도메인 부분으로 만들고, 뒷부분에 우리가 만든 shorturl을 붙여줄 것이다.

 

- 앞부분 도메인을 baseUrl로 문자열로 넣어준다 (디폴트 값) 

- 뒷부분 hash를 난수라는 뜻으로, 우리가 만들 그 shortUrl 을 일컫는다

 

그런데, hash( short url)은 절대 중복되지 않는 영대소문자 +  숫자 여야 한다.  

그래서 generateUniqueShortUrl라는 함수를 hash 변수에 넣는다.

- 중복되지 않는 영대소문자를 만들어주는 함수식은 따로 빼서 만들고. 

 

 

데이터베이스에, 받은 정보 'Original url, userIp' 와 생성한 'hash'를 저장한다. 

그럼 db에 다음과 같이 저장된다. 

 

 

위에서 말했던, 

- 중복되지 않는 영대소문자를 만들어주는 함수식은 따로 빼서 만들고. 


< redirect> 

redirect api는 http://localhost:3000/a1VNq74h [GET]

app.controller

아래 내용은 service에 있으면 안 된다. redirect니까 controller로 가야 한다. 

그런데 app.controller로 

 

urlService. 

shorturl 로 접속했을 때,

해당하는 original url 로 가게 만드는 것 

 

 

아래 주소창은 original url이다. 

short url을 쳤는데 original url로 나온다

아래 사진처럼 데이터베이스에 저장된 거 처럼. 


 

<controller 전체 >

 

 

 

- hash로 뒷 부분 난수만 저장 

- local host 빼주기

- https로 했더니 api에서는 사용하지 않아서 http로 변경

- postman body에 찍을 떄부터 http/ https 프로토콜 다 기입 

(그거 아니라면, 프로토콜 칼럼을 추가해서, 아예 같이 넣어주고 

controller에도 그런게 같이 붙어서 되게) 

 

가령 이런 형식으로 

 

 

-> 그래야 originalUrl 변수만 딱 가져와짐 

 

return response.redirect(originalUrl, 302) 

 

 

 

<service 전체 >