티스토리 뷰

스마일게이트 서버 개발 캠프 활동이 일주일이 되지 않았던 때, 캠프장님(차장님)께서 개인 과제를 내주셨다. 과제의 주제는 바로 'short url'. 자세한 조건들은 다음과 같았다.

url 입력 폼을 제공하여 입력 받은 url을 단축하여 결과를 제공한다.
동일한 url의 결과로는 당연히 동일한 url을 출력해야한다.
결과 값은 8문자 이내로 생성한다.
브라우저에서 단축된 url을 입력하면 원래 url로 리다이렉트 시킨다.

내가 과제를 해결한 방법과 개발환경은 이러했다.

Backend: Node.js
Frontend: Android
DB: MySQL
기타: Retrofit을 통한 서버 통신
 long url 전달 받았을 시 (body->long_url)
 받은 long url과 동일한 url 있나 확인
 없을시 -> long url과 변환된 short url db에 저장 & short url 전달
 있을시 -> db에 있는 short url 전달
 예외 1. 같은 short url 있을 시 처리
 예외 2. www.naver.com같이 앞에 http:// 안붙은것 붙여서 db에 저장 
 추가로 url 목록 조회, 삭제 구현

나는 웹 개발 경험이 없어서 안드로이드 앱으로 대체했다. 단순히 long url을 사용자에게 입력받고 단축시켜서 출력하는 것만을 생각했었다. 나름 생각한 예외는 url로 리다이렉트를 해주어야하기때문에 입력한 url에 http:// 가 입력되지 않은 것을 정규식으로 비교한 뒤 붙여주는 것 뿐이였다. 심지어 shortening해주는 방법은 base62기반으로 변환해주었는데, 설상가상으로 어떤 url을 입력받던지 간에 랜덤함수를 통해 변환해주었다. (엄청난 확률로 다른url을 입력했어도 같은 short url이 출력될 수도 있음. 정말 엄청난 확률로) 

첫 개인과제에, 남들은 빠르게 무언가 하고 있는 걸 보니 마음이 너무 조급해져서 일단 완성이라도 해서 리뷰라도 받아야하지 않겠나... 하는 생각이 들었다. 그래서 해결방법에 대해 많은 예외들을 고려하지 못한 것 같다. 하지만 나름대로 url 목록 조회나 삭제 기능을 추가해보았다. 


그렇게 완성된 코드를 가지고 차장님과 1:1 코드리뷰 및 멘토링을 받았다. 멘토링을 받는 내내 고개만 몇번이나 끄덕인지 모르겠다. 생각하지도 못한, 혹은 생각했지만 대수롭지 않게 여겼던 점들을 콕콕 찝어주셨고 한마디로 나의 해결방법은 망했다고 하셨다! 먼저 망한 나의 해결방법에 대한 피드백은 다음과 같다.

1. short url은 8자로 고정인데 굳이 varchar(200)으로 DB 설계?
2. long url로 변환하는게 아니라 unique 한 id로 변환해야한다. (각기 다른 url들이니까) -> 그럼 id 1로 변환하게 되면 한글자가 나온다. -> id를 10000000부터 시작하면 해결 완료! -> 이렇게 hashing하면 decoding을 해도 그대로 나오니까 short url을 따로 저장할 필요도 없음
3. 앱에서 url입력 시, url 주소 유효성 체크

약간 와..... 하는 생각이 들었다. 심지어 이렇게 완벽히 구현한 분이 계셨다고 말씀하셨다.. 약간 현실 자각 타임이 오기도 했다..^^.. 도대체 어떻게 하면 저런 생각을 하는거지? 랜덤함수를 통해 변환해주면서도 '아.. 뭔가 중복문제가 있을 수 있으니까 유니크한 것으로 변환해주어야하지 않나?' 라는 생각은 했었지만 실천도 하지 않았고 심지어 unique한 table coulmn index로 변환할 생각은 0.1만큼도 해보지 못했다. (어떤 분은 현재 시간 timestamp로 변환해주었다고 한다. 이 방법도 생각하지 못했다.) 역시 개발을 하면서 많은 생각들을 홀로 해보아야한다고 생각했다.


이외에도 캠프장님은 나에게 칭찬도 해주셨다. 캠프원들 중 이렇게 앱과 서버 통신을 하고 하나의 앱을 완성 시켜온 사람은 나 혼자뿐이라고 하셨다. (레이아웃은 진짜 별로라고하셨다. ^^,,) 또한 코드가 정말 아름답다고 하시면서 평소 정리를 잘하냐고 물어보셨다. (집 책상은 엉망이지만 평소 정리정돈을 잘 하긴 한다.) 코드 정리가 정말 깔끔하다고 극찬해주셨다. 스크린에 띄우고  캠프원들에게 이렇게 코드를 짜라고 말해주고싶을만큼이라고 하셨다! 다만, 명시적으로 이게 어떤 변수인지, 어떤 함수인지 알만한 것들에 대한 주석은 굳이 쓸 필요 없다고 덧붙여 말씀해주셨다. 정리에 대해 말씀하시다가 이제 취업준비를하냐고 물어보셨고 취업이 잘 될 것같다고 극찬을 해주셨다.... 캠프를 시작하기 전부터 나는 개발에 대한 자신감이 전혀 없었다. 그런데 캠프장님께서 이런 칭찬을 해주셔서 자신감이 조금 붙은 것같다. 비록 개발적인 칭찬을 해주신건 아니였지만, 그 때 나에게 필요한건 '그래도 잘하고 있다'는 인정? 스스로의 격려? 가 아니었나 싶다. 

나는 진로에 대한 몇가지 질문을 드렸다. 평소 나는 백엔드와 프론트엔드 개발자 중 무엇이 더 적성에 맞는지 고민이 많았다. 둘 다 재미있고 각각의 장단점이 존재하기 때문에 더 생각이 많았다. 지금까지 내가 개발했던 것들을 물어보셨고 개인적인 조언들을 많이 해주셨다. 캠프가 끝나고 어떤 방향을 잡아야하는지도 말씀해주셨다. 현업에서 오래 일해오신 캠프장님께서 개발적인 피드백과 앞으로의 진로에 대해서 말씀해주셔서 정말 좋은 시간을 보낼 수 있었다. 또 1:1 멘토링 시간이 있었으면 좋겠다고 생각했다. 말씀해주신 것들 모두 다 잊지않고 간직하여 멋진 개발자로 성장하고싶고 엄청나게 성장한 개발자가 될 것이다!

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크