본문 바로가기
Development/Toy Projects

[계획] 안써본거 위주로 써보기 위한 토이 프로젝트

by Nahwasa 2021. 12. 17.

  아무래도 자신있게 쓸 수 있는걸 많이 쓰게되기 마련이니, 언젠가부터 쓰던것만 계속 쓰는 것 같다. 매너리즘에 빠진게 분명하기에 무지성으로 안써본것들 위주로 써보는 토이프로젝트를 해보려 한다. 또 좋았던 부분들은 실제 프로젝트에도 적용해보려 한다.

 

  일단은 계획 + 공부 단계이긴 하지만 의욕이 식기전에 몇일 내로 시작할꺼다. 내 블로그에 글 적어도 아무도 안볼테지만 글을 적어두면 스스로 반성하며 꾸준히 하지 않을까 싶다.

 

 

1. MacOS에서 개발해보기

 

  그동안 윈도우로만 개발을 해봤었다. 이전에 테스트용 웹앱 만든게 iOS에서도 제대로 동작하는지 확인하기 위해 테스트 어플을 만들려고 맥북을 빌려 잠시 건드려보긴 했지만, 로그인부터 어플 실행까지 빌려준 분이 해준거라ㅋㅋ 그냥 뭐가 뭔지도 모르고 단축키도 모르는 상태에서 대체 왜 창 닫는 버튼이 좌측위에 있는지만 생각하며(?) Xcode에서 Swift만 좀 만져본거라(심지어 swift도 처음이라 정신이 없었다.) 맥을 써봤다고 보긴 힘들다.

 

  개발자들이 많이들 쓴다고 하니 무슨 장점이 있길래 많이들 쓰는건지 경험해보기 위해 이번 토이프로젝트 개발에 맥을 써보려 한다. 다만 맥 기기는 없으므로 윈도우에 올려서 가상OS로 써볼꺼다. 일단 맥에 대해 공부해보며 어느정도 세팅을 해보고 있는데 딱히 버벅이지도 않는 것 같아 가상으로도 맥을 체험해 보기에 무리는 없을 것 같다. 당장 느낀점은 프로그램 설치가 윈도우에 비해 너무 편하다 ㅋㅋ 이번에 써보고 좋으면 맥북 사볼까? 생각은 했는데 가격보니 엄청 당황스럽다. 맥북 쓰는 분들 부자분들이였어..

 

  인터넷으로 배우고, 직접 써보면서 왜 개발자들이 맥을 많이 쓰는지 알아볼 예정이다.

현재 세팅해보는중!

 

 

 

2. 프론트엔드(웹)를 React로 해보기

 

  백엔드쪽을 더 좋아하긴하지만, 변화가 빠른 프론트엔드도 나름의 재미가 있다. 그동안은 스프링에 올려둔 JSP에  jQuery, js 위주로 프론트엔드를 만들어봤었다. 이번엔 유명한 react, vue, angular 중 가장 끌리는 리액트로 한번 해보려 한다. 리액트 중에서도 함수형보다는 클래스형으로 진행해보려 한다. 타겟은 일단은 리액트 네이티브가 아니라 웹이다.

 

  이건 책으로 리액트를 배우면서 진행해볼 예정이다. (근데 한글책이 별로 없네ㅠ)

 

 

 

3. Decoupled Architecture로 구성해보기

 

  기존엔 서버와 프론트가 하나로 합쳐진 형태의 프로젝트로 해봤었다. 이번엔 백엔드와 프론트를 완전히 나눠서 별도의 프로젝트로 생각하고 해보려 한다. 서버는 REST API를 통해 인터페이스를 제공하고, 클라이언트는 API를 호출해 서버의 자원을 사용하게 한다. 토이프로젝트에 어울릴 아키텍쳐는 아니지만, 어차피 내 프로젝트인 이상 명분이야 어떻게든 찾을 수 있다 ㅋㅋ. 차후 토이프로젝트와 동일한 기능을 하는 앱을 리액트 네이티브로 만들어본다면 독립적인 서버의 장점을 찾아볼 수 있을 것 같다.

 

  둘을 서로 다른 서버에 배포해서 동작하도록 해볼 예정이다.

 

 

4. 백엔드는 원래쓰던 스프링부트 + 대신 테스트 위주로 해보기

 

  백엔드는 주로 스프링 부트를 사용했었다. 하지만 별도의 테스트 코드를 구성해본적은 없다. 물론 뭐 PostMan으로 API를 테스트해본다던지, Swagger로 테스트를 해본다던지 정도는 했었지만 이런게 흔히 개발자들이 말하는 단위테스트라던지 하는 테스트코드에 속하진 않는다. 자바를 사용한 백엔드는 내게 어느정도 자신 있는 부분이고, 그동안 별다른 테스트코드가 없었어도 문제가 된적은 없었다. 애초에 개발 시에 예외코드를 최대한 생각해 넣어두는 편이고, 알고리즘을 좋아하기에 안정적인 로직 작성도 문제가 없었다(맞왜틀을 하도 많이 하다보니ㅠ). 그러다보니 매너리즘에 빠졌지 않나 싶다. 사실 테스트코드 작성이 오히려 개발에 비효율적인게 아닐까 생각하고 있었다. 하지만 대부분의 글들이 테스트 위주로 개발하는 것이 더 효율적이고 빠르다고 말한다. 그러니 경험해보려 한다.

 

  이번엔 적극적으로 테스트 위주로 개발을 해볼꺼다. 일단 단위테스트는 무조건 진행할 생각이고, 이건 아직은 좀 고민중이긴 한데 TDD 방법론으로 토이프로젝트를 진행해보려 한다. 일단 단위테스트부터 맛보고 다음에 TDD를 할지, 아싸리 TDD 방법론으로 개발해볼지 주말에 고민해봐야겠다.

 

  그래서 백엔드는 원래 하던거에 테스트 위주로 개발을 해보면 어떤 장점이 있는지 확인하기 위해 안써본거 위주로 해보는 프로젝트지만 그대로 스프링부트로 진행할꺼다. 대신 테스트를 적극적으로 곁들여서 해볼꺼다.

 

 

5. 도커 + 젠킨스로 배포 + 서버는 AWS로 해보기

 

  프로젝트마다 독립적인 시스템으로 작업하는걸 좋아한다. 그래서 매번 OS를 가상화해서 사용하는건 좋아하면서, 아이러니 하게도 도커를 써본적이 없다 ㅋㅋ. 이건 매너리즘이고 자시고 그냥 스스로 반성을 할 수 밖에 없다. 이번엔 도커를 활용해 개발 및 운영 환경에 대한 이미지를 구성하고, 레이어를 나누어 개발 시 변경되는 부분을 효율적으로 변경해볼꺼다. 그리고 젠킨스를 통한 자동배포까지 해보려 한다.

 

  그동안 서버는 그냥 단순히 로컬이라던지, 물리서버라던지, NHN Cloud 정도를 썼었다. 뭐 NHN Cloud도 AWS처럼 만든거니 클라우드야 써본거긴 한데, 정작 더 유명한 AWS를 안써봤다. AWS EC2 리눅스 서버에 도커와 젠킨스로 배포를 해보려 한다.

 

 

6. 그 이외 계획들

  

  계획을 너무 거창하게 잡으면 중간에 지칠 수 있을 것 같아 일단 이정도만 해보려 한다. 하지만 안해본것들을 해보며 장점을 많이 느낀다면 추가로 해볼 것들도 생각해봤다. 1~5까지 성공적으로 해보고, 6까지 해보게 되면 내게 도움이 많이 될 것 같긴하다.

 

- 리액트 네이티브

  기존엔 안드로이드는 안드로이드 스튜디오로 작업했다. iOS쪽은 아주 살짝 맛만 보긴 했지만, 아무튼 Xcode에 Swift로 해봤다. 리액트 네이티브로는 네이티브한 기능들은 다소 약하지만 웹앱을 통해 안드로이드와 iOS 모두에서 쓸 수 있는 앱을 만들 수 있다고 한다. 추가로 Decoupled Architecture의 장점도 더 알아볼 수 있을테니 리액트 네이티브도 경험해보면 좋을 것 같다.

 

- 마이크로서비스(MSA) + go

  사실 주변에 딱히 go를 쓰는경우를 못보긴 했는데, 장점이야 꽤 듣긴 했다. 그렇다고 go를 메인으로 서버를 다시 작성하고 싶진 않고 마이크로서비스도 경험해볼겸 토이프로젝트에 별도의 로직을 별도의 서버로 go로 작성해볼까 한다. 적극적으로 해볼 생각이 없는 이유는 그냥 개인적으로 ';'가 없는 언어는 별로 안좋아한다 ㅋㅋ 뭔가 한줄한줄 쓰고나서 마지막에 마무리로 ';' 찍고 엔터찍는게 타격감이 좋은데 ';'가 없는 파이썬은 좀 끝맛이 아쉬웠다. go는 다르려나?

 

 

용두사미가 되지 않고 용두용미(?)가 되도록 일단 공부부터 해야겠다. 알고리즘 하나만 풀고..

 

댓글