저번 한주는 굉장히 힘든 한주였다.
휴가를 갔다오자마자 다시 일상 복귀 & 갑작스런 급성 장염 에 컨디션이 최저를 찍었고 결국에는 국비 시작하고 처음으로 병가를 냈다.
그래도 설정해둔 목표를 완벽히 달성하진 못해도 최대한 달성해보려고 노력했다.
저번 한 주의 큰 목표는
이정도 였지만, 중간에 살짝 바껴서
기존에 구현했던 게시판에 대댓글 기능도 추가해주었다.
알고리즘같은 경우에는 불과 한달 전까지만 해도 꾸준히 하루에 2문제 이상 풀고있었으나, 어느수준부터는 막혀서 접근조차 못했다.
실버 4에서 머물던 내 티어가 실버 3을 찍게됐다.
8일부터 장염걸린 9,10 일은 쉬고.. 약속이 껴있던 주말 하루 빼고 꾸준히 2~3문제씩 풀었다.
이때 참고했던 자료는 보초 개발자님의 알고리즘 자료집이었는데, 주변에서 굉장히 많은 추천을 받았고 또한 보초님께서 직접 추천을 해주셨었다.
https://github.com/VSFe/Algorithm_Study
자료집 링크인데, 해당 레포지토리 목차대로 추천 문제들을 풀었다.
자료구조를 사용해 풀이하는 문제들부터 오랜만에 풀어보았다.
보초님 자료가 정말 좋았던게 정말 핵심부분만 짚어서 자료구조에 대해 굉장히 잘 설명해주신 자료가 모여있었고, 해당 파트마다 추천문제가 있어서 내가 직접 문제를 선정해 풀이할 필요가 없었다.
해당 자료집의 자료구조 파트 스택,큐,해쉬 파트 까지 풀어보았다.
놀랐던점은
그동안 알고리즘 문제는 한문제도 풀지 않았는데 단순 프로젝트 기능구현도 도움이 많이 되었던거같다.
전까지는 실버 5 이상 문제들도 굉장히 어려웠는데, 추천문제들이 대부분 실버 4~2 문제였고 골드 문제도 껴있었다. 풀이 복붙 말고 내 손으로 직접 푼 문제들이 실버레벨이었다는게 굉장히 놀랐다.. 사람이 확실히 성장을 하긴 하는구나를 이때 느꼈다.
(보초님 사랑해요..)
스프링 같은 경우에는 기존에 첫 토이 프로젝트를 스프링부트 + JPA + 스프링 시큐리티로 시작해버린 나였기 때문에.. 기본적인 지식이 부족하다 생각하여 시작하기로 맘먹었었다.
그렇게 시작했던게 토비의 스프링이었다.
토비의 스프링 스터디 -1 리팩토링/ 템플릿 메소드 패턴
토비의 스프링 스터디 -2 IoC 제어 역전(Inversion of Control)
원래대로라면 3,4 의존성 주입/ 테스트주도개발 까지 작성해야 했지만
책 자체가 굉장히 어려웠고, 중요한 한마디를 하시기 위해 서론을 500줄을 적어두셨다.
또한 스프링 레거시 자체를 지금 당장 배울 필요는 .. 크게 없다고 생각했다. 이미 너무 부트에 적응이 되어버린 나머지...
그래서 루트를 변경해 레거시로 실습을 하진 않고 필요한 기초 지식만 습득해보는 방향으로 바꿨고, 그래서 기존에 이론공부로 꽉 채워보자 했던 한주를 살짝 바꿔 프로젝트도 꾸준히 업데이트 하기로 했다.
리팩토링 같은 경우에는 단순히 인텔리제이에서 이름변경 할때 사용했던게 리팩토링이라 아 그냥 이런거구나.. 하고만 알고있었는데 토비의 스프링을 읽으면서 어느정도 개념을 잡았다.
리팩터링(refactoring) 은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다.
정확하게 정리된 글이라고 생각해 긁어왔다. 마찬가지로 부트로 프로젝트를 진행할떄 우연찮게 사용됐던 디자인 패턴이 있었는데 템플릿 메소드 패턴이었다.
이렇게 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 오버라이딩이 가능한 메소드 등으로 만든 뒤 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법을 디자인 패턴에서 템플릿 메소드 패턴 이라고 한다 . -> 템플릿 메소드 패턴은 스프링에서 애용되는 디자인 패턴이다.
이런식으로 스프링 부트 프로젝트 내에서 굉장히 많이 사용되는 패턴이다.
IoC같은 경우에도 스프링을 완전 처음 접했을때 굉장히 어렵게 다가왔던 부분이었는데, 이번에 살짝 정리가 된거같았다.
모든 종류의 작업을 사용하는 쪽에서 제어하는 구조로 제어 흐름의 개념을 거꾸로 뒤집는 것이다.
마찬가지로 빈이 무엇인지도 이해가 안갔었는데.. 이번에 정리가 되었다.
내 프로젝트에서도 IoC를 볼 수 있었다.
이렇게 정말 말 그대로 사용하는 쪽 (나) 에서 제어하는 구조로 제어 흐름의 개념을 거꾸로 뒤집는 아주 좋은 예가 있었다.
아무래도 단순 이론만 가지고 계속 머릿속에 저장해두는거 보다는 실습을 나한테 좀더 도움이 되는 방향으로 진행해보기로 했다.
저번주와 똑같이 만들어둔 게시판에 대댓글 기능을 구현해보고 싶었고, 순조롭게 진행됐다.
스프링부트 + JPA + 타임리프로 대댓글 구현하기 -1
스프링부트 + JPA + 타임리프로 대댓글 구현하기 -2
이번 기능 구현에서는 타임리프를 생각보다 많이 사용했었고, 단순히 이전에 사용하지 않았던 문법을 새로 사용해 구현했다기 보다는 로직을 짜는데 시간이 많이 소요되었다.
구현하면서 느꼈던거는 이렇게 하는게 맞는지, 단순히 동작이 되는걸로 확인하고 끝내도 되는건지 모르겠다는 것이었고, 최적화 부분에서 좀더 신경써야 할 것들이 있을거같은데 조언을 얻을 사람이 주변에 없다는게 아쉬웠다.
이게 맞을까 ....?.....
알고리즘 문제 풀이가 다시 일상에 자리잡히고 있는것 같았다. 그리고 확실히 문제를 풀면서 예전에 비해서 성장한 내 모습을 보며 더 자극을 받는다. 알고리즘을 왜 익혀야할까? 라는 생각을 전에 가졌었는데 , 알고리즘 하나도 안풀다가 다시 풀었는데.. 이번 기회에 왜인지 이유을 알게 된것같다.
몸상태가 크게 좋지 않았던 한주임에도 불구하고 정신력으로 버텼다. 나름 선방한것 같았고 겉으로 봐서는 저번주와 진행상황이 크게 다르지 않았던것처럼 보이게 잘 포장한것같다..
스프링 레거시 vs 부트 이 사이에서 굉장히 많은 어려움이 있었다.. 첫 시작을 부트와 타임리프로 시작하다보니 단순 스프링과 jsp 로 하는것에 대해서 생각이 굉장히 많았고, 그에대한 자료들을 찾다보니 낭비된 시간이 많았다. 차라리 다른 언어였다면 아무 생각없이 배웠을텐데... 이래서 편리함이라는게 무섭다.
몸관리가 안되는 느낌이었다. 저번주 한주는 말못할 고통들이 너무 많았고.. 정신건강 악화로 이어졌다. 이래서 건강관리가 중요하다.
저번 한주는 이래저래 방황을 많이 했던 한 주 였다. 그나마 빠르게 결심을 한건,
스프링 레거시로 프로젝트 할 일이 생긴다면, 굳이 지금부터 이래저래 방황하면서 하지 말고 스프링과 부트는 편의성이 다를 뿐이니, 필요한 이론들을 익히고 실무적인건 부트로 레벨업을 시키고 필요할때 레거시 관련 가이드를 챙겨보자
정도로 타협을 했다. 실제로도 어떻게 해야되는건지는 다 알고있으나 설정 자체가 번거로워서 동작이 안되더라 .. 똑같은 구조로 똑같이 실행했는데 레거시만 컨트롤러 진입이 안됐다.
고민할시간에 마음이 가는대로 행동하는게 최대한 효율적으로 공부하는 길이라는걸 매번 느낀다.
앞으로 공부할건 한두가지가 아니니 멀리 생각하며 천천히 나아가야 한다는것도..
다음주는 평소처럼 알고리즘 문제풀이를 일상에 집어넣고, 부트로 개발을 하면서 부족한 부분/이론 은 글로 정리.. +@ 로 개발한 것들을 또 다시 글로 정리하면서 다시 한번 내가 왜 이렇게 구현했는지 되짚어보고 루틴을 정리하는 시간을 가져야겠다.