7개월간의 자바/스프링 독학 회고 (2021.11 ~ 2022.07)

backfox·2022년 7월 24일
21
post-thumbnail

Q. 개발 공부를 왜 시작했나요?

저는 약 4년동안 온라인 가게를 운영하고 있어요.
인스타그램에서 운영하는 플리마켓처럼 SNS 플랫폼 위에서 운영하고 있다보니 사람들이 저희 가게에서 구매할 상품을 고르고 주문하는 방식이 쇼핑몰 플랫폼에 비해 많이 불편했습니다.

그래서 상품을 보는 건 SNS에서 계속 보되, 구매는 쇼핑몰 플랫폼에서 할 수 있도록 만들면 사람들이 좀 더 편하게 쇼핑할 수 있지 않겠느냐는 아이디어가 생겼고 쇼핑몰을 제공해주는 ‘카페24’라는 플랫폼을 만나게 되었어요.

(↑ 카페 24에서 제공해주는 기본 쇼핑몰)

카페24는 쇼핑몰 생성 후 바로 사용할 수 있도록 기본 쇼핑몰 레이아웃을 제공해 주는데, 아 이게 별로 맘에 안 드는 거에요.

그래서 ‘이 레이아웃만 어떻게 내가 원하는 형태로 바꿀 수 없을까’ 고민하다가
HTML,CSS를 공부해서 직접 제가 원하는 레이아웃을 만들기로 했어요.

(↑ 부트스트랩으로 직접 만든 레이아웃)

이 간단한 쇼핑몰 레이아웃을 만들기 위해 몇 달동안 HTML,CSS, 약간의 JS를 가지고 씨름하는 과정에서 프로그래밍 언어를 다루는 것에 큰 매력을 느끼게 됐어요. 으악!
(체크무늬 셔츠를 입은 한 남자가 달려와 여우를 후려친다. 경호원이 달려와 남자를 끌고나가는 문 너머로, ‘HTML은 프로그래밍 언어가 아니다’라는 외침이 들려온다.)

쇼핑몰 레이아웃을 정상적으로 적용하고 운영하면서 코드를 만질 일이 사실상 끝났는데도 계속 코딩을 너무 하고 싶었어요.

그래서 ‘레이아웃 뒤에 있는 깊은 영역은 카페24에서 관리해서 나는 건드릴 수가 없는데, 차라리 쇼핑몰 자체를 내가 만들어버리면 좋겠다’라는 생각으로
백엔드와 관련된 언어를 수소문했고,
자바라는 언어를 공부하기 시작하면서 본격적인 자바/스프링 기반의 백엔드 공부를 시작하게 되었어요.

Q. 그럼 취업이 아니라 본인 쇼핑몰 만드는 게 목적인가요?

그렇..랬..습니다. 코딩 공부에 너무 열중한 나머지 잠자는 시간, 일하는 시간 외에는 밥도 제대로 안 먹고 코드만 만지작거리다,
급기야 주객이 전도되어 운영하고 있는 쇼핑몰이 노잼이 되고 코딩이 더 재밌어지는 지경이 이르렀습니다.

그로 인해 같이 일하는 사람과 여러 차례 갈등을 겪었고, 결국 ‘나는 이 일보다 코딩을 하는 직업을 갖고 살고 싶다’라고 공식 선언했어요.

때문에 지금의 저는 오롯히 개발자 지망생의 길을 걷고 있습니다.

Q. 왜 자바, 스프링인가요?

한국에서 자바스프링을 사용하는 회사가 많대요. 제일 대중적인 언어를 사용하면 개발 관련 커뮤니티에서 모르는 걸 물어봤을 때 답해줄 사람이 많겠구나 생각했습니다. 딱히 진지하게 언어들의 특성을 비교해보고 그러진 않았는데 지금 생각해보니 잘 고른 것 같아요.

Q. 어떻게 공부하셨나요?

긴 이야기가 될 것 같습니다. 쇼핑몰 만드느라 HTML 배운 이야기는 필요가 없어 생략했습니다.

~2021.11.27

HTML 학습할 때 생활코딩 강의가 큰 도움이 됐는데, 감사하게도 자바 입문 강의도 있어 신나게 들었죠.
생활코딩 JAVA 입문 수업 - 생활코딩

생활코딩을 완강한 후에는 도서관에서 자바의 정석 책을 빌려 따라 치면서 학습했어요.
객체지향 프로그래밍 파트와 컬렉션 프레임웍 파트 공부할 때는 ‘대체 이게 뭔가’ 하면서도 ‘지금 어떻게든 배워만 두면 이해는 나중에 되겠지’ 라는 마음으로 편안하고 흐물흐물한 마음가짐으로 공부했습니다. 2권은 너무 대충 해서 다 보지도 않았어요.
자바의 정석 기초편 - YES24

2021.11.27 ~ 2021.12.25

자바라는 언어를 (아주 대충) 공부한 후, 아주 당돌하고 당돌한 여우는 ‘React.js, 스프링 부트, AWS로 배우는 웹 개발 101’이라는 책을 삽니다.
React.js, 스프링 부트, AWS로 배우는 웹 개발 101 - YES24

이 책은, 스프링부트 로 백엔드 개발을 하는데 리포지토리로 스프링 데이터 JPA를 씁니다.
리포지토리는 JpaRepository를 상속받은 인터페이스를 사용하기 때문에 해당 인터페이스 안에는 당연히 아무것도 없었고,
‘findById(), save(), delete()같은 메서드를 어디에서도 정의한 적이 없는데 대체 어디서 튀어나오는 거지?!’같은 고민을 하며 고통받았던 기억이 납니다.

심지어 이 책은, 프론트엔드 단 개발을 위해 리액트를 사용해요.
그 말인 즉슨, 대충 이렇게 생긴 창과 거의 보름 이상을 씨름해야 했다는 뜻입니다. 백엔드 개발자를 하겠다는 사람이···

리액트 구간이 어렵게 어렵게 끝난 후 웹페이지의 보안 기능을 구현하기 위해 jwt를 사용하는 순간 ‘이건 정말 아니다’ 라는 생각이 들었어요. 분명 뭔가 잘못됐다.

2021.12.25

제가 쓰는 기술에 대한 이해가 필요했습니다.
mvc 패턴이 뭔지도 모른 채 스프링 mvc 라이브러리의 기능을 갖다 쓰고 있으니 머릿속에 혼란만 가득했어요.
코딩 교육 사이트로 인프런이라는 사이트가 가장 인기있다 하여 인프런에서 김영한님의 스프링 입문 강의를 들었습니다.

무료 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링의 기능 각각을 가볍게 짚고 넘어가는 무료 강의임에도 ‘책에서 봤던 코드가 이거였구나~’ 하는 것을 깨달으면서 정말 신나고 재미있게 공부했던 강의입니다.

마침 영한님의 강의는 스프링 초심자가 강의를 찾아다니는 수고를 하지 않아도 되도록 스프링 로드맵을 짜서 제공해 주셨어요.

로드맵의 강의들을 차례차례 구매해서 수강하기만 하면 스프링의 기초를 정말 빠르게 쌓을 수 있었을 터인데 다음날 제가 무엇을 샀는 지 아십니까?

2021.12.26 ~ 2022.1.1

이거 사서 공부했습니다.
자바 ORM 표준 JPA 프로그래밍(에이콘 오픈 소스 프로그래밍 시리즈) | 김영한 | 에이콘출판 - 교보문고

Q. 영한님 로드맵은 어따 두고,, 아니 SELECT문도 쓸 줄 모르는 색기가 도대체 왜···???

당시에, 음, 김영한님 스프링 기초편이 12만원인가 했거든요.
제 딴에는 꽤 큰 돈이라 생각해서 좀 돈 안 들이고 많이 공부할 수 있는 수단이 없을까 고민하다 이 책을 샀었네요.

근데 SQL도 모르는 사람이 ORM을 어떻게 이해해요··
예제 코드를 따라하려면 프로젝트 설정을 어떻게 해야 하는지도 몰라서
코드도 못 쳐보고 영혼없이 책장만 넘겼죠.

그래도 6일동안 어떻게 이해라도 해보겠다고 힘겹게 책도 읽고 코드도 따라 쳐본 흔적이 깃허브에 있네요.
(프로젝트 세팅을 똑바로 안 해서 거의 모든 코드에 컴파일 오류가 떠있지만요)

13장까지 읽다가 도중에 중단하고 다시 길을 찾아 떠납니다.

2022.1.2 ~ 2022.1.19

여전히 스프링에 대한 이해가 부족했기에
이번에는 로드맵에서 시키는 대로 스프링 기본편 강의를 수강합니다.
스프링 핵심 원리 - 기본편 - 인프런 | 강의
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

SQL 공부도 동시에 진행했네요. 공부할 때 이용했던 강의와 책은 다음과 같습니다.
MySQL - 생활코딩
혼자 공부하는 SQL | 우재남 | 한빛미디어 - 교보문고

위의 두 개를 완강한 후에는 영한님의 야생형 로드맵에 따라
JPA 활용 편을 수강했어요.
SQL을 공부하면서 외래키, join 구문 등을 학습한 이후라 책 읽을 때보다는 수월했습니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

2022.1.20 ~ 2022.2.25

강의 세 개를 연달아 완강하고 나니 금전적으로 쫄렸는지,
다른 좋은 무료 강의가 있지 않을까 또 찾아다니다
네이버 부스트코스를 만납니다.

웹 프로그래밍(풀스택) 강좌소개 : 부스트코스

이 강좌를 수강하면서 ‘나를 소개하는 홈페이지 -> TODO 리스트 -> 네이버 예약 사이트’ 이렇게 3개의 프로젝트를 직접 만들게 되는데,
풀스택 강좌이다보니 백엔드 단 뿐만 아니라 화면상의 레이아웃도 직접 구현을 해야 해요.

놀라운 것은 이 프로젝트를 만들 때 백엔드 단에서는 프로젝트를 만드는 도구로 고대의 HttpServlet과 JDBC를 사용하고, 프론트엔드 단에는 innerHTML과 XMLHttpRequest를 사용해야 한다는 것이었습니다.

스프링이나 리액트와 같은 프레임워크를 사용하지 않고 프로젝트를 만들어야 해요. (챕터 3부터는 스프링을 사용합니다)

대부분의 시간을 프론트엔드 쪽 구현에 쓰기는 했지만 되게 알차고 유익한 시간이었고,
이후에 스프링 mvc 공부를 할 때 이 때의 경험을 기반으로 해서 굉장히 수월하게 이해할 수 있었습니다.

프로젝트를 완성하면 네이버 개발자분들께서 코드리뷰도 해주시니 개인적으로 강추!

2022.2.26 ~ 2022.3.5

네이버 프로젝트가 끝나고 다음으로는,
-겁도 없이- 유튜브에 무료로 올라와 있는 스프링 시큐리티 강의를 수강했어요!
메타코딩 스프링 시큐리티

스프링 시큐리티의 구조(유저 정보 객체는 뭐를 구현했고 어디에 담겨서 어디에 저장하고··) 를 전혀 이해하지 못한 채 들었기 때문에 실사용법 위주로 공부했습니다.

구글, 페이스북, 네이버 소셜 로그인을 구현해본 후
jwt토큰을 이용한 인증도 실습해볼 수 있으니 인증 관련 공부하시는 분들께는 강추드려요.

이 때 스프링의 값 검증 기능과 Spring data JPA의 페이징 기능을 살짝 실습해볼 수 있는 것도 큰 도움이 돼요.

이 강의 완강하고 다음으로는··

2022.3.6 ~ 2022.3.11

이거 공부했습니다.
Apex

Q. ??? 이게 뭔데요

세일즈포스(슬랙 인수한 회사)에서 사용하는 전용 언어입니다.
지인 중에 유일하게 개발 관련된 일을 하시는 분이 이 언어 쓰신다 하셔서 잠깐 공부해봤었는데··· 돌이켜보면 개발 공부한 것 중에 제일 아까운 시간이네요.

그러니까 독학 고집하면 이렇게 이상한 길로 자꾸 빠진다고! ㅜㅜ

2022.3.12 ~ 2022.3.30

위의 쓸데없는 언어 공부하면서 스프링 관련된 걸 그새 다 까먹어버려서
여러 책들을 보면서 복기하는 시간을 가졌습니다.

이 시기에 보고 공부했던 책은 요거.
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
배워서 바로 쓰는 스프링 프레임워크
Do it! 자료구조와 함께 배우는 알고리즘 입문: 자바 편
스프링 입문을 위한 자바 객체 지향의 원리와 이해

되게 열심히 뭘 읽고 따라하긴 했네요.

2022.3.31 ~ 2022.5.26

이 때부터 로드맵을 충실히 따르는 게 얼마나 중요한지를
공부 시작한 지 4개월만에 깨닫고 인프런 강의를 충실하게 듣기 시작합니다.

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의
더 자바, Java 8 - 인프런 | 강의
스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

4월부터 국민취업지원제도 지원금을 받아서 강의 수강료 걱정 없이 마음껏 사서 들었어요. 와앙

(동시 진행) 2022.4.23 ~ 2022.6.26

너무 강의만 연달아 듣다보니 직접 실습할 토이 프로젝트의 필요성을 느꼈어요.
옛날에 익명으로 엽서 비슷한 편지를 무작위로 주고받는 앱을 재밌게 했던 기억이 있어서, 이걸 직접 구현해보자! 라는 마음으로 가볍게 토이프로젝트를 시작 했습니다.

이 토이 프로젝트는 버전이 2개에요.

Version 0: 스프링에서 제공하는 기능을 거의 안쓰면서, 순수 자바 코드를 이용해 최대한 스프링과 비슷한 형태를 하도록 구현했어요. 사실상 스프링 프레임워크를 직접 만들어보는 프로젝트라고 해야 할 것 같아요!

Version 1: 스프링에서 제공하는 기능을 적극적으로 사용해요. Version 0에서는 JSP를 사용했는데, 이 버전에서는 프론트엔드 단을 vue를 사용하도록 분리하고 서로 rest api를 사용해 소통하도록 했습니다.

이 프로젝트를 만들면서 부족한 지식들은 강의를 통해 보충했어요.
Vue.js 시작하기 - Age of Vue.js - 인프런 | 강의
더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의
스프링 기반 REST API 개발 - 인프런 | 강의
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의

2022.6.27 ~ 현재

나름 스프링에 대한 전반적인 이해가 된 듯 하여,
지금까지 공부한 내용 중 그 당시에 지식이 부족해서 대충 공부하고 넘어간 내용이 있나? 를 되짚어보면서 복습하고 있습니다.

또, 제가 공부하면서 스레드나 트랜잭션같은 cs 관련 지식이 매우 부실하다는 것을 깨닫고 cs공부도 시작했어요!
모두의 네트워크
데이터베이스 개론
운영체제

마지막으로, 유지보수하기에 적합한 아키텍처와 클린 코드에 대한 것은 거의 생각을 안 하고 있었는데, 슬슬 배워야 할 때가 온 것 같아 관련된 기술을 배우고 있습니다.
객체지향의 사실과 오해
도메인 주도 개발 시작하기

미래

10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online. | 패스트캠퍼스
: 실무에서 요구하는 기술 스택 중에 제가 아직도 안 써본 것들이 많아요. 이 패키지를 통해서 넓고 얕게 실습해보는 시간을 가지고 싶습니다.

(↑ 사선으로 칠한 게 전부 안 써본 기술 스택)

또, Node.js 기반의 웹 서버 프레임워크에 대해 가볍게라도 공부해보고 싶어요. 자바스크립트는 자바와는 또다른 특징을 가진 언어이기 때문에, js를 기반으로 하는 프레임워크들이 스프링 생태계와 어떤 차이가 있는지 알고 있어야 한다고 생각합니다.

Q. 독학하는 거 안 힘들어요?

힘들어요. 장황하게 늘어놓은 역사에서 보시다시피 남들은 훨씬 짧은 기간에 공부 마쳤을 일을 빙빙 돌아 왔잖아요. 주위에 러닝메이트가 없으니까 나태해지는 마음을 붙잡는 게 제일 어렵고.
저보다 훨씬 짧은 기간 공부하셨는데 훨씬 많이 아시는 분들 보면 기분이 이상하기도 하고.

그래도 ‘그냥 어제의 나보다 오늘 좀 더 발전하면 언젠가 꼭대기에 가겠지’ 라는 마음으로 하고 있어요.

Q. 어떤 회사에 가고 싶나요?

네카라쿠배토당야. (양심 없음)
다소 업무강도가 세더라도 그 강도에 맞는 보상을 지급해 주고,
그 업무를 통해 성장할 수 있는 회사면 좋겠습니다.

Q. 어떤 개발자가 되고 싶나요?

근시일에는 ‘레디 플레이어 원’처럼 오프라인 세상에서 살기가 너무 힘들어서
엄청 많은 사람들이 온라인 세상으로 강제 이주할 수도 있는데,
그런 세상에 대비할 수 있는 개발자가 되고 싶어요.
앞으로 다가올 새로운 세상의 중심에 있는 개발자가 되고 싶습니다.

너무 뜬구름 잡는 이야기죠. 제가 뜬구름이라서 그래요.

Q. 또 회고록 예정 있나요?

공부 1년차 쯤 되었을 때 또 써볼래요.
그 때는 팀프로젝트도 하나 있었음 좋겠다.

궁금한 점 있으시면 트위터 계정 ( @backfox__ )으로 연락 주세요.
읽어주셔서 고마워요. 안녕.

profile
그 때의 나에게. 단지 너를 지켜왔다는 것. 그 하나만으로도 수고 많았다.

5개의 댓글

comment-user-thumbnail
2022년 7월 24일

화이팅 :D

답글 달기
comment-user-thumbnail
2022년 7월 25일

저도 비전공으로 현직장 퇴사 예정이 연말인데
현재 그동안 퇴근 후,주말마다 독학하고 있습니다
보면서 정말 많은 도움이 되었습니다 !

답글 달기
comment-user-thumbnail
2022년 7월 26일

의지가 대단합니다... 동기부여 엄청 받고갑니다~

답글 달기
comment-user-thumbnail
2022년 8월 1일

대단하시네요!!! 화이팅!!

답글 달기
comment-user-thumbnail
2022년 8월 4일

저도 독학을 했는데 그때 그 마음이 여기 고스란히 남아있네요
네카라쿠배토당야 응원하겠습니다!

답글 달기