액티비티

[위코드 x 원티드] 프리온보딩 백엔드 - 세번 째 기업과제 후기

yjs3819 2021. 11. 10. 15:27
728x90

과제 선정

우리 팀은 자바스크립트에 익숙한 팀이다. 프레임워크도 당연히 express와 nestJS에 익숙하다. 그런데 이번엔 우린 엄청 큰 도전을 해보았다. 파이썬과, flask 프레임워크를 이용해보기로!!!! 검색어 자동완성 기능을 해보고 싶었기 때문이다. 유튜브나 구글을 보면 'ㅁ'하나만 쳐도 마음, 마술, 매직, 마음의 소리 등등 매우 많은 자동완성 기능이 된다. 이러한 기능을 실제로 해볼 좋은 기회라 생각하였기에 도전해보기로 결정하였다.!!

다사 다난한 과정

일단 파이썬 환경에 대해서도 잘모르기에 환경 세팅하는것부터 애를 먹었다. 무슨 '가상 환경'?을 먼저 세팅하고 하는게 너무 익숙치 않았다.
그런데 기본적인 플라스크 프레임워크의 로직은 nestJs라던지, 스프링과 매우 유사했다. controller에서 request를 받고 service에서 비즈니스로직을 처리하며 DAO인 repository에서 DB에 접근해 데이터를 빼온다는 것은... 지금까지 이 프로그램을 진행하며 매우 다양한 프레임워크를 사용해 보았지만 이런 기본적인 틀은 변하지 않는것 같다는 걸 느꼈다.

  • 기본은 매우 유사하다!!!

나는 파이썬을 알고리즘 공부할 때 잠시 공부해본 경험 말곤 없다.(지금은 알고리즘을 자바로 하는중)

그렇기에 백엔드 프레임워크에 파이썬을 쓴다는게 너무 어색했다. 특히 타입이 없어서 너무 힘들었다.(실제론 리턴값과, 인자에 타입을 줄수 있다곤한다.. 그러나 우린 모르는 상태로 개발을 했다.)

단순히 request오는 데이터를 정제하는 것부터 reponse데이터 (dto 형식)을 맞추는 것까지 모두 쉽지 않았다.

그래도 계속 디버깅해가며 (콘솔에 로그를 찍어가며) 개발하였다.
결국 모든 요구사항을 구현하긴 했다!!@!@!@ (역시 우린 대단해)

나는 개발자라면 새로운 기술을 받아들이는데 있어 매우 개방적이어야 한다 생각한다. 항상 개발 상황에 따라서 사용하는 언어와 프레임워크는 달라질 수있다. 단순히 개발자들 간의 소통 언어라고 생각한다. 그렇기에 개발자는 항상 새로운 기술을 받아들일 준비를 해야하고 두려움이 없어야 한다고 생각한다.

이런 측면에서 나는 굉장히 성장 했다 생각한다. 새로운 기술에 대한 습득력도 꽤나 빠르다는 칭찬도 팀원들에게 들었다. 모두 팀원들이 서로 믿고 신뢰하며 개발을 하기에 가능한거라 생각한다!!

항상 팀원을 믿고 새로운 기술을 받아들이는데 개방적이자!!

이번에도 블로그에 적는 내용이지만! 좋은 사람과 함께라면 어떠한 힘든 프로젝트도 진행할 수 있다는 걸 느꼈다. 좋은 사람이 내게 다가오기 까지 기다리지 말자. 내가 좋은 사람이 된다면 내 주변엔 좋은 사람만 가득할 것이다. 내가 열정적이고 노력하는 사람이 된다면 주변에는 나와 같은 사람만이 있을 것이다.

새로운 기술의 도입

이번에 새로운 기술을 도입한건 위에서 말한 파이썬과, 플라스크 이외에도 두가지가 더 있다.

  1. 도커의 도입
  2. 레디스의 도입

도커의 도입

모든 팀원들 간 개발 환경이 다르고 버전도 다르다.. 즉 개발환경 세팅에 너무 많은 시간을 팀원들이 소비할 수도 있고, 팀원의 개발환경에서 되던 시스템이 내 개발 환경에선 안 될 수도 있다.

그래서 이번엔 도커를 이용했다.
우리가 사용한 도커는 도커 컴포즈 파일을 통해서, 필요한 이미지를 도커허브에서 땡겨와 컨테이너를 생성해 실행하는 흐름으로 진행된다.

우리는 mysql이미지, 레디스 이미지를 이용했고 컨테이너에 두개의 컨테이너를 넣어 실행했다.

즉, 이렇게 도커를 이용하니 개발할 때 환경 세팅을 매우 간단하게 하였고 우리는 '개발'에 좀더 시간을 쏟을 수 있게 되었다.

레디스의 도입

말로만 듣던 레디스를 사용해 보았다.

왜 사용할까?

  1. key - value형태로 데이터가 존재하여 해당 데이터 인덱싱(look up)이 매우 빠르다.
  2. mysql과 같은 DB와 다르게 메모리에 존재하여 데이터에 접근하는 오버헤드가 적다.(즉 더 빠르다)

위 두 가지 장점이 있다 생각한다. 대신 메모리에 존재하니 레디스의 데이터 크기만큼 메모리를 잡아먹으니 이는 유의해야 할거라 생각한다.

우리는 '회사명 자동 완성'기능을 구현해야한다. 클라이언트에서 키보드에 타자를 칠때마다 서버로 api요청 할 텐데, 그럼 그 수많은 api마다 db(디스크에 존재하는)에 쿼리를 날려서 데이터를 뽑아와야할까? - No,, 너무 느릴거라 생각함.

그래서 우리는 레디스를 도입했다.

사용해본 후기로는 일단 생각보다 쉽다.

레디스라는 이름에 살짝 겁이 났었는데 생각보다 사용법이 간단해서 어렵지 않게 사용했다.

역시 말로만 들을 땐 어려운데 직접 해보면 별거 아니다!!라는 것을 느꼈다.

즉, 무조건 직접 손으로 해보자. 항상 책만읽고 구글링만 하지말고 직접 손으로 코딩해가며 확인하는 것이 100배 1000배 도움이 될 거라 생각한다.

이렇게 다양한 새로운 기술을 도입하여 개발해 보았다. 역시 직접 해보지 않아서 무서웠던 거지 해보닌까 어렵지 않았다!!! 무조건 들이박자!! 들이박은다음 고민하자. 들이 박기전에 고민하는 것만큼 멍청한게 있을까?

배포의 늪

개발 다 끝나고, 이제 aws ec2에 배포하려했는데 이게 왠걸??????????????
connection refused란다...

난 당연히 보안규칙 문제라 생각했다.

그런데도 계속
connection refused.....

이것 때문에 우리는 모두 세시간 정도 삽질을 했다.

결국 찾은 이유로는 플라스크는 서버를 실행할 때 접속할수 있는 호스트 이름을 적을 수 있는데 flask run --host=0.0.0.0으로 실행한다면 외부에서 접속할수 있다고 한다.

이를 몰라서 계속 flask run만 하니 계속 접속이 안되었던 것이다...

결국 해결하고 배포 성공.. ㅠㅠ

너무 신나서 팀원들이 새벽에 좋아했던 것이 기억에 남는다.(난 욕까지 했다.)

결론

  • 새로운 기술을 배우는 것은 행복하고 즐거운일, 두려워하지 마라!
  • 무조건 직접 해보자. 직접 해보기 전에 지레 겁먹으면 아무것도 못한다. 무조건 직접 환경을 세팅해보고, 직접 해당 기술을 사용해 봐야한다.
  • 끝까지 포기하지말자!! 안되면 천천히 처음부터 확인해나가자.
  • 좋은 팀원을 기대하지 말고 내가 먼저 좋은 팀원인지 생각해보자. 내가 좋은 팀원이라면 다른 팀원들도 좋은 팀원이 될 것이다.
728x90