Numble - mybox 챌린지 스터디 회고록

인스타 스토리를 스르륵 넘기다가 넘블 광고를 보고 솔깃해서.. 신청하게 된 넘블. 느슨해진 내 자신에게 긴장을 주려고 신청했으나.. 긴장은 안됐고, 간장 정도 된듯.. (?)


mybox 챌린지는 파일 업로드, 다운로드 로직을 구현해보고, 테스트코드, 배포, CI/CD 까지.. 구현 내용만 간단할 뿐, 2주만에 할 양은 아니라고 생각이 들었다. 하지만 혼자 열심히 여러번 스터디를 해본 사람이라면 또 쉽게 구현할 만한.. 그런 프로젝트였다. 게다가 재직자를 위한 내용이라 그런가 굉장히 간단한 가이드라인.. 나 처럼 누군가 떠먹여주는 사람이 있어야지 하는 사람은 비추이다. 하지만 나이가 3x살이고, 경력도 이제 어디가서 대리에 위치하는 연차니까 어떻게든 혼자 했어야 했다..


기간이 짧고 스스로 공부를 많이 안했기 때문에 시도하지 말았어야 했는데... ㅋ... 첫단추 부터 잘못 끼웠다. 스프링 부트 3.0 을 도전하고 싶어서 열심히 했는데, 스프링부트 3점 이상은 자바 17부터 가능하다는 걸 알게됨. 이때부터 하기 싫었으나.. 꾹 참고 도전했다.


그리고 나의 큰 벽.. 스프링 시큐리티.. 나는 이게 왜이렇게 어렵지. spring security filter chain 나온 뒤로 블로그 참고할 글도 없고.. ChatGPT도 괴롭혀 봤는데 도저히 모르겠어서.. 이건 GG 쳤다. 게다가 부족한 시간이 음 이건 나중에 하자 하게 만듦. 그리고 끝까지 구현하지 못함.


File의 경우 일하면서 S3에서 서버에 저장하는 방법으로 변경한 일이 있어서 회사 소스를 적당히 섞어가며 금방 만들었다. 회사에서 몰래 넘블하기 꿀잼👍


폴더도 회사 분이 트리구조로 테이블 짜두신게 있어서 손 안대고 코 풀었다 흥~


현재 폴더 path를 문자열로 뽑는 query가 필요했는데.. 재귀? .. 모르겠다 하고 ChatGPT 한테 물어봤는데 와 쿼리를 너무 잘 짜줬다.

WITH RECURSIVE folder_path AS (
                SELECT id, folder_name, parent_folder_id, folder_seq
                FROM folder
                WHERE id = :folderId
                UNION ALL
                SELECT f.id, f.folder_name, f.parent_folder_id, f.folder_seq
                FROM folder f
                JOIN folder_path fp ON fp.parent_folder_id = f.id
            )
SELECT GROUP_CONCAT(folder_name ORDER BY folder_seq SEPARATOR '/') as folder_path

물론 늘 생각하는 거지만 이놈 꼭 한 군데가 이상해서 고쳐줘야 하지만, 이걸 짜주는 게 너무 신기했다... 한 두달 전에 이런 스터디 참가했다면 다 검색해서 했을 텐데, 내가 개념을 설명하면, 원하는데로 쿼리를 짜주니까 생산성이 확 오르는 느낌? 좋은 사수를 둔 느낌이였다.
근데, 무리해서 스프링부트 3점대로도 올리고 자바도 17로 올렸는데, 이점을 느낀 거라곤

@Query(value = """
            WITH RECURSIVE folder_path AS (
                SELECT id, folder_name, parent_folder_id, folder_seq
                FROM folder
                WHERE id = :folderId
                UNION ALL
                SELECT f.id, f.folder_name, f.parent_folder_id, f.folder_seq
                FROM folder f
                JOIN folder_path fp ON fp.parent_folder_id = f.id
            )
            SELECT GROUP_CONCAT(folder_name ORDER BY folder_seq SEPARATOR '/') as folder_path
            FROM folder_path
""", nativeQuery = true)

자바 문자열 처리 방식 """ 이거 신기하다😽 정도이니 허탈했다.. 좀 더 여러가지 써보는 건데..


사실 모든 기능을 다 만들진 않았지만.. 전부터 배포를 해보고 싶어서 전에 사뒀던 향로님 책 스프링부트와 AWS로 혼자 구현하는 웹서비스를 폈다. 역시 책이라 그런지 너무 자세하게 배포하는 과정이 나와서 너무 재밌었다. aws란 내게 너무 멀고 먼 벽인 거 같았는데 책 따라서 aws, rds 만들어서 서버가 올라간 거 보니까 개꿀잼.

그리고 대망의 배포! active profile 때문에 좀 애먹었는데 성공했다! 원래 처음엔 docker 로 mysql db 환경을 구성했었는데, 책에서 rds로 maria DB 설정을 해서 따라하다보니 본의 아니게 개발과 운영이 환경이 다른 구성이 되어버렸다. ./deploy.sh로 실행해서 배포해보니 옛날에 전 회사에서 젠킨스 도입하기 전에 배포 하던 것도 생각나고 내 힘으로 해본 적이 첨이라 신기했다. 아직 n년차지만 애긔 백엔드 개발자입니다..

배포된 사이트 보니까 신기했다. 물론 그동안 회사에서 수많은 배포를 했지만 내가 내 손으로 한 적은 첨이라 굉장히 뿌듯하고 재밌었다. 요즘 학원에서는 다 배포까지 해보는 거 같은데, 라떼는 ㅎㅎ localhost:8080 으로 마지막날 발표했단 말이에요.. 그 담엔 회사에선 버튼 하나 누르면 됐었고.. 암튼 이걸 이제서야 해보다니 쪽팔리기도 한데 재밌었다. 이런 경험을 하게 되서 좋았다. 아마 스터디 안했으면 시도도 안했을 거 같다. 왜냐면 맨날 친구들이랑 개발 사이트 하나 만들자~ 하고 적당한 기획도, 설계도 없이 맨땅에 부딪히다가 때려친 기억이 많기 때문이다.


깃헙액션은 하다가.. 때려침. codedeploy 까지 설치했는데.. 배포 스크립트를 어떻게 써야될지 모르겠네..


이거 이외에도 회사에서 api 문서 작성으로 무슨 툴을 써볼까 여러가지 고민이 많었어서 도입 전에 써볼까 하고 이 프로젝트에 gitbook이랑 api blueprint 를 써봤는데, 일단 gitbook은 한글이 잘 안써져서 탈락(UI는 진짜 이뻤는데..)
api blueprint는 적용해봤는데, swagger의 yaml 방식 보단 작성하기 편하긴 한데, md 방식임에도 뭔가 작성하기 까다롭다 생각이 들었다. 역시 swagger 만세.



비록 2주간 이것밖에 못했지만 내 황폐해진 잔디밭에 잔디를 조금이나마 심을 수 있었고, 안해본 것들을 도입해볼 수 있는 좋은 기회였던 거 같다. 하지만.. 결과물이 너무 적어서 처참. 가격이 너무 안비싸서 다행이였다(?)..

시큐리티는 꼭 완성해서 다음에 다른 프로젝트를 참여해도 이 프로젝트를 template으로 쓸 수 있게 좀 다듬고 싶다. 처음으로 배포까지 성공한 귀한 프로젝트니깐😜