2021년 회고

2021년 회고

오늘은 2022년 1월 1일이다. 벌써 직장에 다닌지 8년차가 되는 해이다. 2021년에는 개인적인 성장을 위해 많이 노력했다. 학창시절부터 현재까지 개발하고 있는 Embedded S/W 말고 웹 백엔드 기술을 공부하기 위해서 많은 시간을 투자했다.

1월

2020년 12월에 처음으로 백엔드 기술을 공부하고자 결심했고, 인프런에서 파이썬 플라스크 강의로 시작했다. 서버 프레임워크 종류가 많았지만 플라스크로 정한 이유는 강사님의 강의 로드맵이 좋아서 선택했다. 무엇보다 1인 개발로 프로토타입을 빠르게 구현할 수 있다고해서 마음에 들었다. 파이썬을 미리 공부하긴 했지만 프레임워크, HTTP, 웹 기술에 대한 전반적인 이해가 부족해 강의를 완벽히 이해하기보다 따라가기에 급급했던 것 같다. 그래도 강사님의 설명이 좋아서 포기하지 않고 잘 따라갈 수 있었다.

2월

플라스크 강의에 이어서 같은 강사님의 프론트엔드 부트캠프 강의를 들었다. HTML, CSS, JavaScript에 대한 강의였다. 플라스크도 내용이 많았지만 프론트엔드는 일단 공부해야 할 양 자체가 너무 많은것 같다고 느껴졌다. HTML, CSS, JavaScirpt 모두 전혀 지식이 없어서 더 그랬던 것 같았다. 이 강의도 일단 따라하는데 의의를 두고 들었다.

3월

프론트엔드 강의까지 듣고 이제 뭘 해야하나라고 생각하고 있었는데, 인프런에서 김영한님의 스프링 강의를 발견했다. 플라스크와 달리 스프링은 많은 대기업에서 사용하고 특히 우리나라에서 많이 사용한다는 것을 알게되었다. 대규모 서비스에서 파이썬과 플라스크보다 스프링이 좀 더 많이 선호되는 것 같고, 범용적인 기술을 배우는 것이 더 좋을 것 같아서 스프링을 공부하자 결심하고 무료로 공개되어있는 스프링 입문 강의를 들었다. 입문 강의 특성상 양은 많지 않았지만 굉장히 신기하고 충격적인 내용들을 배울 수 있었다. Dependency Injection의 개념, 프레임 워크의 개념, AOP 등 C 위주의 프로그램만 개발하던 나에게는 많은 충격을 주었고 정말 나는 지금까지 뭘 했나라는 생각이 들었다. 스프링 입문 강의를 듣고 바로 스프링 핵심 원리 기본편 강의를 수강했다.

4월

스프링 핵심 원리 기본편 강의를 들었다. 주로 스프링의 DI 프레임워크와 스프링 빈에 관련된 내용이었다. Dependency Injection 이라는 개념을 듣고 정말 감탄했다. 간간히 디자인 패턴을 공부하면서 느꼈던 가려운 부분을 해결해주는 느낌이었다. 디자인 패턴에서 Concrete Class에 의존하는 부분이 어디선가는 필요한데 이를 프레임워크에서 해결해주는 부분이 정말 좋았다. 이 강의를 듣고 바로 다음 강의인 HTTP 강의를 들었다. 사실 HTTP 완벽 가이드책을 먼저 사서 보고있었는데 너무 기본이 없어서 그런지 효율이 나지 않았다. 학생이라면 그래도 시간을 투자해서 공부했을텐데 퇴근하고 공부하려니까 시간과 체력이 너무 부족했다. 최대한 효율을 살리기 위해 강의를 들었다. 확실히 중요한 내용 위주로 빠르게 배울 수 있었다.

5월

스프링 핵심 원리 강의를 듣고나서보니 스프링의 정석이라고 불리우는 토비의 스프링 책을 보고싶어져서 책을 보기 시작했다. 확실히 엄청나게 설명이 디테일하고 많았다. 사실 강의로 빠르게 배우다가 책을 보려니까 글자가 너무 많아서 처음에는 적응하기가 어려웠다. 하지만 진정하고 찬찬히 읽어보니 강의에서 배웠던 개념들을 조금 더 자세하게 배울 수 있었다. 맨 처음 DAO를 만드는 것에서부터 시작하는데 여기에 여러 가지 시나리오를 적용하면서 Dependency Injection, 디자인 패턴 적용, 트랜잭션, AOP 등의 개념들을 도입해서 빌드업 하는 과정이 정말 한 편의 소설을 보는 것 처럼 자연스럽게 이어졌다. 일단 정말 많은 개념들을 매우 디테일하게 배울 수 있어서 좋았다. 하지만 그만큼 보는데 많은 시간이 걸렸다. 거의 1권을 보는데 두 달 가까이 걸렸던 것 같다. 1권을 보고 2권을 바로 보려고 했으나 2권은 꽤 많이 내용이 심화되어서 다음으로 미루었다.

집에서는 토비의 스프링을 보고 회사에서는 점심시간마다 JPA 활용편 강의를 들었다. 활용편 강의는 JPA를 사용해서 웹 애플리케이션을 개발하는 프로젝트 위주의 강의였다. 일단 강사님의 로드맵 대로 따라가기위해 JPA는 스프링이랑 다른건가? JPA는 뭐지? 라는 아무것도 모르는 상태에서 일단 강의를 들었는데 역시 이해는 잘 가지 않았다. 그래서 자바 ORM 표준 JPA 프로그래밍 책을 중간에 사서 같이 읽으면서 강의를 들었다. 데이터베이스에 대한 지식도 없어서 일단 SQL 기본 문법을 구글에서 찾아가며 JPA에서 필요한 내용들을 습득했다. 토비의 스프링 책에서는 JDBC API로 데이터베이스를 다루는데 강의에서 JPA로 데이터베이스를 다루는 부분이 정말 엄청나게 차이가 나는구나 라는 것을 느꼈다. JPA 기술이 데이터베이스의 테이블 기반 데이터를 애플리케이션에서 객체로 변환해주고 반대로 애플리케이션의 객체를 SQL 없이 단순히 API를 통해 데이터베이스에 저장해주는 기술이라는 것을 배웠다.

6월

JPA 활용 강의를 듣고 로드맵 대로 JPA 기본 강의를 들었다. 기본 강의는 JPA 책의 핵심 요약본 이라고 느껴졌다. 책의 방대한 내용에서 실무에 가장 필요한 내용들만 뽑아서 설명해주는 강의였던것 같았다. 아마 이 때쯤에 인프런에서 온라인 스터디 모임을 지원해주는 이벤트가 있어서 JPA 스터디 모임도 하게 되었다. JPA 책을 한 주에 한 챕터씩 공부하고 발표하고 토론하는 형식의 스터디를 하게 되었다. 기본 편 강의는 거의 회사와 집에서 각각 1번씩 들어 2번은 들은 것 같다. 그만큼 내용이 생소하기도 했고 데이터베이스와 ORM 프레임워크 두 개의 개념을 한 번에 배우려니까 쉽지 않았다.

7월

JPA 기본 강의를 듣고나서 다시 JPA 활용 강의를 들었다. 확실히 기본 개념을 공부하고나서 다시 들으니까 이해가 잘 되었다. 간단한 상품 주문 관리 어플리케이션을 따라하며 개발했다. 개발하면서 JPA에 대한 내용은 어느정도 이해가 갔지만 또 스프링 MVC에 대한 이해가 부족해서 바로 스프링 MVC 1편 강의를 들었다. 서블릿부터 시작해서 직접 MVC 프레임워크를 만들어보면서 최종적으로 애노테이션 기반의 스프링 MVC까지 빌드업하는 과정이 예술이었다. 학교에서 자바를 배울때는 애노테이션이 없었던 것 같은데, 스프링에서 애노테이션을 이용해서 기능을 확장하는 부분이 정말 편리하다고 느꼈다.

8월

다시 JPA로 돌아와서 JPA 활용 2편인 API 개발 강의를 들었다. 기존의 활용 1편에서 개발한 애플리케이션에서 클라이언트의 요청에 HTML을 렌더링해서 응답해줬다면, HTTP API는 클라이언트 요청에 JSON형식의 데이터를 응답해주는 방식이었다. DTO가 매우 중요하다는 것을 알게되었고 N + 1 문제를 포함해서 실전에서 데이터베이스 조회시 성능을 최적화 할 수 있는 여러 기법들을 배울 수 있었다. 그리고 바로 이어서 MVC 2편 강의를 들었다. MVC 2편은 활용 강의로 타임리프, Validation, 예외처리, 쿠키, 세션, 필터 등 스프링에서 제공하는 많은 기능들을 배울 수 있었다.

9월

JPA의 마지막 강의로 스프링 데이터 JPA와 Querydsl 강의를 들었다. JPA를 좀 더 빠르고 간단하게 사용할 수 있는 기술이었다. 인터페이스를 정의만 해도 구현체를 자동으로 생성해주는 기술, 그리고 자바 코드로 JPQL 쿼리를 생성해주는 기술 등 개발의 효율성을 높여주는 기술이었다. 빠르게 강의를 수강하고 이 때 쯤 스프링 부트와 AWS로 혼자 구현하는 웹 서비스라는 책을 읽었다. 그 유명한 1일 1커밋 유튜브 영상의 주인공이신 개발자 이동욱님의 책이었다. 이 책을 따라하면서 공부하다가 스프링 시큐리티라는 존재를 알게되었고 또 샛길로 빠져서 인프런에서 스프링 시큐리티 강의를 듣게되었다. 다른 강사님의 강의였는데 상당히 신선했던게 스프링 시큐리티 구조를 설명하기 위해서 직접 시큐리티 코드에 브레이크 포인트를 걸어 디버깅 모드로 라인 바이 라인으로 코드의 흐름을 설명하는 부분이 인상적이었다. 스프링 시큐리티는 크게 여러 개의 필터체인으로 구성되어있고 각각의 필터들이 인증, 인가, 세션 등 여러 가지 기능을 구현한 구조였다.

10월 ~ 12월

원래는 스프링 시큐리티 강의를 다 들었어야 했는데 10월부터 회사에서 Associate Architect라는 교육 프로그램에 입과하게되어 다 듣지 못하고 보류하게되었다. S/W 아키텍트 사내 양성과정 프로그램의 첫 입문 과정이었는데 거의 두 달간 빡세게 진행됬던 과정이었다. 크게 OOAD, 디자인패턴, 아키텍쳐 설계(스타일, 택틱 등), 요구공학, 리팩토링 등의 강의를 듣고 가상의 시스템을 설계하여 보고서를 쓰는 과정이었다. 일단 막연하게 알던 디자인 패턴을 다시 정리할 수 있어서 좋았고 품질 요구사항을 만족하기 위한 여러가지 아키텍쳐 스타일, 택틱 등을 배울 수 있어서 좋았다. 기능적인 요구사항을 구현하는건 그냥 기본이고, S/W 품질을 높이는 것이 중요하다는 것을 제대로(?) 배우게 되었다. 보고서는 정말 힘들었다. 교수님의 머신러닝의 중요성에 대한 엄청난 강조로 머신러닝도 배우기 위해 강의를 하나 구매하였지만 도저히 시간이 안나서 아직 다 못들었다. 교육 끝나고 면접도 있어서 객체지향 기본 원리부터 디자인 패턴, UML, 아키텍쳐 스타일, 택틱 등 정말 많은 내용을 정리하느라 시간이 많이 걸렸다. 결과적으로 교육 프로그램 수료 및 인증을 받긴 했지만 딱히 사내에서 혜택은 없는 것 같다. S/W 아키텍트 관점에서 필요한 기본 지식에 이런 것들이 있구나 라는 것을 배웠고, 간소하게나마 설계 문서를 작성하면서(그래도 80장이나 되지만..) 시스템 하나 설계하는데 고려해야 할 부분이 정말 많구나 라는 것을 배웠다. 특히 품질 요구사항을 달성하는 게 꽤 어려웠었다. 머신러닝도.. 아무튼 교수님께 머신러닝, 딥러닝은 필수(!)라는 엄청난 동기부여를 주셔서 올해는 꼭 배워야겠다는 생각이 들었다.

따끈따끈한 신작인 스프링 핵심 원리 고급편 강의를 듣기 시작했다. 결론적으로 AOP를 도입하기 위해 디자인 패턴부터 빌드업 해가는 과정을 강의로 만든 느낌이다. 토비의 스프링에서 DAO에 예외처리를 도입하고, 이를 템플릿 콜백 패턴으로 예외 처리 로직과 데이터베이스 접근 로직을 분리하고, 여기에 트랜잭션 기능을 추가하고 이를 프록시로 분리하고 결국 애노테이션 기반의 트랜잭션까지 가는 과정과 비슷한 빌드업 인 것 같다.

2022년 계획

2021년에는 아무것도 없는 상태에서 쌓아올리기 위해 거의 강의와 책을 보며 배우는 시간이었다. 올해는 그동안 배운 개념들을 활용해서 프로젝트를 진행해야겠다. 배운것을 써먹어봐야 더 빠르게 성장할 수 있을 것 같다. 아 그리고 작년에 중간중간에 객체지향의 사실과 오해라는 책과 동일한 저자의 오브젝트라는 책을 읽었는데 객체지향의 기본 원리를 배우는데 좋았던 책이었다. 물론 아직 한번 읽어서 그런지 완벽하게 이해한 것 같지는 않다. 시간날 때마다 다시 읽어야 할 것 같다. 그리고 지금 듣고있는 스프링 핵심 원리 고급편도 열심히 들어야겠다. DDD, TDD 관련 책도 구매해서 공부해 볼 계획이다.

Leave a comment