1기부터 시작한 블로그 스터디가 어느덧 5기까지 와버렸다.
놀랍게도 블로그 스터디를 안할때마다 어떻게든 글을 작성안하며 게으름을 부리는 나를 발견할 수 있었다.
다시 기본으로
지금까지 JPA나, 자바 최신문법, 노드, 디노, swift, webRTC, flutter 등등 이런저런 많은 기술에 대해 공부하고 포스팅도하고 실무에서 적용하면서 취업후 시간이 흘렀다.
그렇게 이런저런 많은 키워드들에 대해 알게되고 개발적으로도 회사일에 익숙해지니 나도 이제 좀 1인분은 하는건가? 이직도알아봐야할까? 라는 생각이 들었다. 여기에는 최근 최근까지 진행한 TDD, ATDD도 무사히 기간내에 수료하면서 커진 자신감도 한몫을 했다. 그래서 이제 기술면접 준비를 해볼까? 하면서 약간은 가벼운 마음으로 시작한 CS공부 및 스프링 공부.
아는 동생이 최근 기술면접을 보면서 받았던 질문들을 공유받게 되었는데 그 질문은 다음과 같다.
•
스프링에서 컴포넌트 스캔이 무엇이고 어떻게 이뤄지고 어떻게 사용하는가?
•
S3라이브러리를 사용해봤다고 했는데, 사용중 생겼던 문제와 그에 대한 해결방안 그리고 대용량의 이미지의경우 느려지는 속도에 대해서 어떻게 대처를했고, 대처를 못했다면 왜 대처를 못했는가?
•
자바의 Object 에는 Hash와 Equals는 무엇이고 왜 있는가
•
JPA의 N+1 문제에 대해 설명하고 개선하기 위해 어떻게 해야하는가?
•
스프링 빈의 스코프의 종류에 대해 설명해보세요.
이 면접 질문은 콴다라고 하는 간단한 수학문제부터 영어문제까지 각종 문제들에 대해서 풀이를 다루는 솔루션을 제공하는 메소프레소라는 회사 기술면접에서 나온건데, 생각보다 내가 제대로 설명할 수 있는 내용이 얼마 없었다.
기술적으로 실무에서 요구사항을 구현을 할 수 있고, 게시판을 만들 수 있고 영상채팅을 만들 수 있다고 내가 잘하는게 아니고, 두리뭉실한 개념속에서 이걸 제대로 정리하지 못하고있다는걸 깨달았다.
그래서, 다시 인프런에 밀린강의들을 보기 시작했고, 자바의 정석 오프라인 스터디도 가입을해서 이제 3주째 진행을 하고있는데, 도움이 많이 되고 있다. 물론 아직도 기술톡방이나 지인들과 이야기를 하다보면, 나는 아직 기본기로 자바의정석을 다시 보고 스프링을 아예 처음부터 다시 보고있는데 다른 사람들은 카프카를 공부하고 MSA를 공부하고 한다는걸보면 조급해지기도 하지만, 마음을 다잡고 하고 있다.
자바의정석 스터디 모임
매주 일요일 4시간씩 자바의정석 책으로 스터디를 시작했다. 전반부 는 빼고 객체지향 파트부터 시작을 했는데, 한 챕터씩 맡아서 발표를 하기로 했다. 나를 포함해 총 3명 스터디인데, 오프라인에 안산 스터디라 모집하는게 쉽지는 않은 것 같다.
스터디 구성 및 진행방식
•
책: 자바의정석
•
시간 : 4시간
•
스터디원: 3명(만 1년차, 만 1년차, 만 2년차(나))
•
진행방식: 매 주 1챕터씩(+@챕터) 발표준비를 하며 나머지는 해당 챕터에서 질문리스트 작성 및 해당 챕터의 개념이 들어간 코드작성하여 Git push
•
스터디 당일: 발표자는 준비한 자료 발표(대략 1시간), 스터디원과 질의응답, 추가적으로 기술발표나 따로 공부한게 있으면 발표.
보통, 내가 질문을 10~20개정도 작성해서 하는편이다. 그리고 사실 추가 기술 발표도 내가 하는편인데 1~2시간정도 3주간 HTTP 네트워크에 대해서 발표를 하고있다.
지난 주에 내가 질문한 내용은 다음과 같다.
1.
자바에서 포함관계를 사용하면 포함하는 클래스에 대한 의존관계가 생기기에 DIP 원칙과 OCP 원칙이 깨질 수 있는데 그래도 이걸 써야하는가? 그리고 이것을 쓸 때의 장점이 무엇인가?
2.
어째서 자손클래스의 접근제어자는 조상클래스보다 좁은 범위로 변경할 수 없는가?
3.
오버로딩과 오버라이딩를 어째서 사용하고 그 사용의 예를 드시오.
4.
접근제어자의 장점에 대해 설명하시오(getter, setter와 연결지어서 같이 설명)
5.
싱글톤을 어째서 사용하는가?
6.
다형성을 어째서 사용하는가?
7.
다형성에서 캐스팅 여부에따라 어쨰서 사용할 수 있는 멤버 변수가 달라지는가?
8.
다형성의 실제 사용 사례는 무엇이 있는가
9.
추상 클래스 혹은 인터페이스를 클래스를 만들어서 상속 혹은 구현하지않고 로직내에서 바로 사용할 수는 없는가?
10.
인터페이스도 기본메서드나 정적메서드로 로직을 정의할 수 있는데 추상클래스와 어째서 구분을 해야하는가?
11.
인터페이스는 어떻게 개발시간을 단축하고 표준화를 하는가?
12.
인터페이스가 어떻게 서로 관계없는 클래스들에게 관계를 맺어주는가?
13.
상수는 어째서 사용하는가? (static final 상수와 final 상수의 차이점과 구분하는 이유)
단순히 개발적인 얘기뿐아니라 디자인패턴에 대해서도 간간히 소개가 되었다.
발표를 하신 당사자분도 직접 자료를 피피티로 만들어서 발표를 했지만, 그 안에 있는 내용도 다시 물어보면 제대로 답변을 못하는데, 잘 보면 정말 공부를 안하고 몰라서 말을 못한다기보다는 머릿속에는 내용이 있는데, 이걸 말로 풀어내지 못하는 듯 했고, 이게 단순히 혼자 공부만 해서는 될게 아니라 여기저기 발표도 많이 해보고 말하는 습관을 들여야 겠다는 생각도 할 수 있었다.
그리고 남은 시간에는 HTTP 네트워크 기본지식에 대해서 발표를 하고있는데, 전공자는 학교에서 어찌되었던 네트워크를 배우지만, 비전공자는 자바, 스프링, DB는 어떻게 학원에서든 독학으로든 배우지만 네트워크까지 배우기엔 시간도 부족하고 당장 실무에서 몰라도 개발하는데 큰 문제가 없다보니, 모르는 경우가 많다.
그래서 남는시간에 뭘 발표할까 고민할때 스프링 기초와, 네트워크였는데 위와같은 이유로 네트워크를 선택해서 발표를 하고 있다.
나도 사실 학교다닐때는 네트워크시간에는 걍 졸기바빠서 아는게 별로없었고, 그래서 실무를 진행할때 API 요청/응답을 하면서도 제대로 안되거나 할 때 원인분석및 파악을 하는게아니라 기도메타로 구글링하거나 이런저런 방식을 다 써보면서 해결책을 찾는 무식한 방식을 썼었는데, 해당 공부를 진행하며 얼마나 무식하게 개발을 했는지 깨달았다.
김영한님의 백엔드 로드맵
위에서 말했듯이 기초를 다시 공부하고 있는데, 내가 진행중인 로드맵은 우아한형제들 개발팀장 김영한의 스프링 완전정복 이라는 로드맵이다.
강의 자체는 나올때마다 하나씩 쌌지만 맨위의 스프링 입문강의를 제외하면 사실 이런저런 스터디를 한다고 건들지도 못하고 있다가 3월부터 로드맵을 본격적으로 시작을 했다.
스프링 입문- 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술
정말 기본적으로 비전공자가 개발을 해보고싶어서 찾아볼 때 보면 좋은 강의지만, 주니어 개발자들이 봐도 도움이 많이 될 것이다. 간단하게 직접 회원관리 웹 애플리케이션을 서버단부터 개발을 진행하는데, 간단하게나마 AOP도 적용을 해보고 JPA도 사용을 해보면서, 간단하지만 있을껀 다 있는 웹 페이지가 만들어진다.
물론 실습방식에 내부까지 깊게 들어가지는 않지만, 오히려 흥미를 돋구고 성취감을 가지기에는 좋은 강의라 할 수 있다.
스프링 핵심 원리 - 기본편
개인적으로 내게는 최근 가장 큰 인사이트를 준 강의인데, 우리는 다들 기본이 중요하다. 기본에 충실하라 라는 말을 하지만, 나같은 경우 그를 사실 크게 체감하지는 못했다. 머리로는 알지만 가슴으로는 이해를 못한다고 해야하나..그리고 스프링을 겉핥기만 했거나 잘 모를 경우 나조차도 힘들때 늘 했던말이 스프링은 너무 무겁고 너무 기능이 많은데 올드한거같고, 한마디로 먹고살자고 쓰고는 있는데 좀 별론거같다. 차라리 노드가 낫지 않나? 이런저런 불만들을 가지고 내 부족함을 이런저런 핑계로 합리화를 했었는데, 강의를 다 듣고나서는 많은 오해들이 풀리고 모든결과에는 원인이 있고 모든 애노테이션과 패턴들은 다 그러한 이유가 있기에 존재한다는 것이다.
자바진영 대표 프레임워크인 스프링이 어째서 탄생했는지, 장점이 무엇이고 왜 사용하고, 객체지향이라는 개념을 스프링이 어떻게 최대한 활용하는지에 대해서부터 알려준다.
이를 단순히 말로만 설명하는게 아니라 스프링프레임워크를 사용하지 않고 순수 자바로 프로젝트를 구성하고 계층도 나눠보고 FakeObject를 만들어서 DB(를 빙자한 메모리)에 엔티티 저장도해보고 이런 리포지토리를 내부에서 의존하고 있다는 문제점을 해결하기위해 어떻게 해야할지, 스프링에서는 어떻게 하는지도 설명해준다.
관성적으로 스프링을 사용하는 주니어개발자들에게는 적극 권장하며 적어도 한 번은 보기를 권한다.
모든 개발자를 위한 HTTP 웹 기본 지식
내가 얼마나 무식하게 개발을 하고있었는지 깨닫게 한 강의
기본내용이기에 엄청 깊지는 않지만 그래도 실무에 필요한 지식은 거진 다 있다고 볼 수 있다.
옛날옛적에 인터넷이 어떻게 통신을 시작했고, 어떤 문제가 있었기에 이런 기능이 추가되어 현재 사용되는 인터넷 통신 프로토콜이 완성되었는지에 대해서도 설명을 해주고, 우리가 자주보는 상태코드(2XX,3XX,4XX,5XX)에 대해서도 되짚어 주는데 이를 웹브라우저에서 어떻게 받아들이는지, HTTP 요청/응답 메세지의 포맷과 그 포맷의 의미에 대해서도 설명을 해준다.
이 강의를 보기전까지는 Request/Response 에서 내가 보는건 start-line의 상태코드, 메서드, 헤더에서 내가 직접 설정한 임의의 헤더값, 그리고 메세지 바디부분만 봤고 나머지 Content , Accept나 언어 우선순위같은것들은 신경도 안쓰고 있었다.
지금 생각해보면 어이가 없다.
내가 쓰고 내가 개발하면서 내가 사용하는 도구에 대해서 필요한 기능빼고 관심도없고 공부도 안하고있었다니..
예전에 충동적으로 샀던 네트워크 책이있는데 먼지를 훑고 다시 펼쳐봐야 할 것 같다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
이건 아직 다 보진 못했고, 진행중인 강의다.
이 강의는 지금까지 배운 기초적인 지식들을 모두 이용해서 이번에도 스프링을 사용하지 않고 서블릿만을 이용해서 회원관리 웹 애플리케이션을 구성한다.
그리고 불편한 몇몇 부분들을 짚어주며 이런 불편한걸 해결하기 위해 이런 기술이 나왔습니다! 짜잔! 하면서 그 다음에 나온 기술들에 소개하는데, 나부터 직접 코드를 치면서 불편했던 부분들이기에 이게 나옴으로써 개선이 되었다는 체감을 온몸으로 할 수 있었다.
직접 서블릿에서 자바코드에 HTML 코드를 작성하며 오타를 내면서 제대로 페이지 렌더링이 안되는 시점에서 스트레스를 느낄때쯤 JSP라는 뷰 템플릿과 JSTL을 보여주며 내 불편함을 해결해줬고, JSP를 쓰면서 한군데에 너무 몰려있는 여러 코드들이 보기 싫어질쯤 MVC 패턴을 보여주고 MVC2 까지 실제로 만들어보면서
코드 분리에 따른 깔끔함이 내 마음을 평온하게 해줬다.
그리고 이 MVC 패턴의 한계에 대해설명하며 프론트 컨트롤러 패턴을 설명하고 이를 실제로 작성하면서
이게 실제 스프링의 DisaptcherServlet까지 연결되는 상황이되면 뭔가 쾌감이 찾아온다.
정리
인프런에는 많은 강사분들이 계신다. 그중 유명한 분은 조현영님, 백기선님, 김영보님, 김영한님 등등 많은데, 김영한님의 강의는 어떻게보면 지겹게 역사부터 얘기를하지만, 실제로 이런 기능만 소개하는게아니라 이 기능이 없었을 시절에는 어떻게 구현을하는지 라이브코딩을 통해 보여주고 이 불편함이 어떻게 해결되는지를 보여주면서
좀 더 쉽게 와닿게 만드는 이런 강의 방식은 감탄이 나온다. (하긴 그러니까 인기 강사겠지...)
우아한 테크캠프 프로 신청
우테코프로 2기를 신청을 했다.
원래 만 4년차 이상만 모집을 한다고해서 1기 때는 신청을 하지 않았었다.
그리고 사실 만 4년차는 꽤나 먼 이야기이게 신경쓰지않고 있었는데, 같은 학원출신인 동생의 소식을 아는 동생에게 들었다.
"형 XX이 이번에 우아한 테크 프로 들었고 우수 수료자라서 면접도 진행한데요."
"만 4년차만 들을 수 있는 것 아니였어?"
그래서 ATDD과정을 진행하며 마지막주차 리뷰어를 해주신 브라운님에게 DM으로 물어봤더니, 우선순위에서 밀려나기는 하지만, 신청에 제한은 없다고 한다. 학습자체에 목적을 두신다면 이 과정은 취업을 더 중점적으로 둔 과정이기에 공부목적으로 신청하는건 지양하시는게 좋다. 이정도 내용이였다.
이제 현업에서 2년차가 끝나고 3년차가 되는 과정에서 이런저런 새로운 도전에 대한 욕구가 생기는데, 이런 대답은 자연스럽게 나도 도전을 해봐야겠다는 생각을 했고, 금요일이 되자마자 신청서를 작성했다.
근데, 내가 경력이 짧아서 그런지는 모르겠지만 생각보다 작성할 내용이 많지가 않다.
처음에는 발만 담궜던 프로젝트라도 다 작성을하고 최대한 부풀리기를 하였으나, 최근 봤던 유튜브중 조졸두님이 관리하시는 개발바닥 이라는 채널에서는 확실히 알고 참가한 프로젝트만 작성하라고 했던 말이 있어서, 과감하게 애매한 내용들은 다 잘라버리니 너무 텅텅 비어버린다.
나름 꼭 듣고싶다는 사연들을 구구절절 작성을 했지만, 그래도 너무 짧고 내가 현업에서 이런 클린코드 개념을 도입하려 노력한게 있냐는 질문글에는 최근 과정을 들으며 이후 진행한 프로젝트들을 작성했지만, 기간이 짧아 그런지 그렇게 많지가 않았다.
그래서 사실 될꺼라는 기대는 약간 내려놓은편이다. 프리코스는 이전 ATDD과정때 하던만큼만 하면 되실꺼라고해서 되면 열심히 진행할 예정이지만, 안된다고 실망하지는 않고 하던 준비와 공부를 그대로 페이스조절하면서 해야할 것 같다.
1년 반째 주말부부
아내는 원래 게임회사에서 일러스트레이트나 UI/UX 디자이너로 업무를 했었다.
그런데 너무 적은연봉과 정치질 그리고 강남-수원의 긴 출퇴근거리에 지쳐있다가, 어머니가 가게일이나 좀 도우면 돈 많이준다는 말에 혹해서 상의끝에 회사를 그만두고 일식집(미소야)를 하시는 장모님 가게가 있는 전라남도 장성으로 내려갔다. 안산 혹은 수원에서 가는데만 4시간~5시간이 걸리는 거리인지라 가도 되냐고할 때 많은 고민을 했지만, 장모님도 알바들 구하기도 힘들고 딸하고 같이 있고싶고, 일도 잘하니까 부르시는 마음도 이해가 되고 아내도 돈 많이 준다는데 혹한것도 나도 이해가 되서 수락을 했다.
그래서 현재 대략 1년 반이 약간 안되게 주말 혹은 격주부부가되서
토요일에 점심부터 저녁까지 반나절이 약간안되게 시간을 보내고 있다.
불만이 안생길래야 안생길수가 없는상황으로 머리는 이해를 하지만 가슴으로는 가끔 울화가 치밀때도 있다. 신혼인데 어째서 연애할때보다 보기가 더힘들까... 그리고 아내가 늦잠을자거나 하면서 늦게보면 안그래도 반나절도 못보는데 더 못본다는 생각에 또 빈정이 상하기도 한다.
그런데 사실 가장 힘든건 사실 아내다.
가게에서는 일주일에 하루 쉬면서 매일 12시간 이상 일을 해야하고, 금요일 저녁에는 허겁지겁 기차 막차타고 익산역에서 갈아타서 수원역까지 온 다음 수원에 사는 친동생 집에서 하룻밤을 보내고
대기시간도 다 고려하면 더 걸린다.
토요일 아침에 수원에서 안산까지 지하철을 타고와서 점심쯤에나 나를 본다. 그리고 7시쯤이되면 다시 수원역까지 가서 수원역에서 8시 39분 기차를 타고 장성으로 내려간다.
나야 기껏해야 안산-수원만 왔다갔다 하는지라, 크게 힘들것도 없다.
몹시 이과적인 생각으로 이런데서도 감성적인 접근보다 이성적인 접근으로 이러한 안타까운 사태의 원인과 결과를 분석해보자면 결국 문제는 돈이다. 돈때문에 이런 고생을 하고 있는건데, 내가 아내가 내려가지 않아도 될 정도로 많이 벌었으면 해결되는게 아닌가? 하는 생각이 들고, 이는 곧 내가 공부를 더 열심히 해야하는 원인이 된다.
결론은 쉴틈이 없다 공부를 더 하자.