당니의 개발자 스토리
다음으로 본문
10. 다음으로
여러분 드디어 스프링 핵심 원리 기본편 강의가 끝이 났습니다.
그러면 지금까지 학습한 목차에 대해서 설명을 드릴게요.

우리가 1장, 객체지향 설계와 스프링에 대해서 쭉 설명을 한번 해드렸고요. 스프링이 단순히 기능 때문에 배워야 되는 게 아니라, 진짜 중요한 건 객체지향의 원리를 가지고 해야된다는 거죠.
그리고 2장, 3장을 통해서 우리가 과거로 돌아가서 예제를 만들어보고, 요구사항을 바꿔보니까 문제가 생기더라. 그런데 단순히 객체지향이 제공하는 다형성(역할과 구현으로 세상을 구분)만 가지고 해결되는 게 아니라, 거기에 DI 컨테이너나 의존관계 주입 같은 것들이 적용이 돼야 객체지향을 정말 제대로 사용할 수 있다라는 걸 알았습니다.
그리고 스프링이 그 모든 걸 다 제공해준다 라는 걸 알게 됐죠.
그러면서 4장 스프링 컨테이너와 스프링 빈에서는 스프링 컨테이너가 어떻게 동작하는지, 빈을 어떻게 등록하는지, 의존관계들이 어떻게 주입되는지도 알아봤고요.
그리고 5장은 스프링은 싱글톤 컨테이너다. 대부분의 기능을 싱글톤으로 해서 유지해준다.
싱글톤을 보장하기 위해서 @Configuration도 제공하고, CGLIB 라이브러리 같은 여러가지 기능을 제공했었죠.
그리고 6장에서는 요즘에 주로 많이 사용하는 컴포넌트 스캔, 그리고 7장에서는 자동으로 의존관계를 주입하는 방법들과 주의점들을 쭉 알아봤고요.
그 다음에 8장, 빈 생명주기 콜백과 9장, 빈 스코프에 대해서 알아봤습니다.

그래서 사실 1, 2, 3장은 스프링 핵심 원리, 그리고 객체지향 설계, 다형성, SOLID, DI에 대해서 알아본 거고요.

그 다음에 4, 5, 6, 7, 8, 9장은 스프링 핵심 기능들에 대해서 알아본 거죠.


그래서 지금까지 우리는 스프링의 핵심 원리와 핵심 기능에 대해서 깊이있게 학습을 했습니다.
스프링이 왜 만들어졌고 왜 필요한지, 그리고 객체지향 설계와 스프링이 왜 땔 수 없는 관계인지 이해했습니다. 스프링의 핵심 원리와 핵심 컨셉을 제대로 학습했기 때문에 스프링 웹 MVC, 스프링 데이터 접근 기술, 스프링 부트 등등을 포함해서 스프링의 핵심 기술을 활용하는 수많은 스프링 기술들을 배우고, 또 사용할 때도 단순한 기능 사용을 넘어서 '아 이게 그래서 이렇게 설계했구나' 라는 깊이있는 이해가 가능할 겁니다.
우리가 스프링의 핵심 원리에서 배웠던 객체지향의 원리와 DI 의존관계 주입에 대한 원리들이 스프링의 전반 기저에 다 깔려있어요. 그래서 단순히 기능 사용을 배우는 걸 넘어서 여러분들은 깊이 이해가 가능하실 거예요.
자 그리고 다음으로 어떤 내용들을 학습하면 좋은지 설명을 드릴게요.

스프링을 완전히 마스터할 수 있는 시리즈를 계속 준비를 하고 있고요. 실제 실무에서 사용하는 핵심 스프링 기능 위주로 설명을 하고 실무에서 사용하지 않거나 오래된 기능들은 과감하게 삭제를 할 거에요.

그리고 스프링의 실무 노하우를 전하는 스프링 완전 정복 시리즈를 계속 준비를 하고 있습니다. 여러분 스프링 입문 강의 많이 들어보셨을 거고요. 그 다음 스프링 핵심 원리 강의가 이 강의고, 이 강의가 핵심 원리 기본편 강의입니다.

웹 MVC 강의는 사실 여러분들이 웹 기술을 처음부터 배울 수도 있는데, 많이 어려워 하시더라고요. 처음 공부하시는 분들은 뭘 어려워하냐면 여러분들이 웹 어플리케이션을 한번이라도 개발해본 경험이 있으면 이게 되게 쉽거든요.
그런데 한 번이라도 경험이 없으면, '도대체 이 웹 브라우저랑 서버가 어떻게 통신이 되고, 클라이언트 서버를 주로 어떤 식으로 통신을 하는 거지?, 이 HTTP가 어떤 메커니즘으로 왔다 갔다 하는 거지?' 우리가 웹 개발을 위한 최소한의 정보가 필요한데, 이런 거에 대해서 잘 모르면 되게 어려워요.


다음 추천하는 강의 코스는 이래요.

여러분 웬만하면 무조건 야생형 코스로 들으세요.
먼저 JPA, 요즘에 애플리케이션 데이터 접근 기술은 JPA를 거의 다 쓰시거든요. 회사마다 좀 다르긴 해요. 스프링 공식 사이트 예제들도 대부분 DB 접근하는 기술은 다 JPA를 써요.
제가 볼 때는 실전 스프링보다 JPA의 활용 1이 진짜 중요한데요. 이게 뭐냐면, 간단한 주문 애플리케이션을 만들어 보는 거란 말이에요. 정말 간단하지만 회원, 주문, 상품, 배송 이것들이 카테고리로 이렇게 있어요. 이렇게 정말 최소한의 것을 가지고 연관관계가 복잡하게 맺어지고, 비즈니스 로직이 있는 상태에서 실무에서 어떻게 개발하냐? 이거를 보여드리는 강의입니다.

취업을 하려면 일단 알고리즘을 빡세게 공부해야 돼요. 물론 알고리즘만으로는 안 되죠.
여러 회사들이 취업준비생들을 뽑는데, 우선 어떤 개발자를 뽑겠어요? 실무에 당장 투입할 수 있는 개발자면 제일 좋단 말이에요.
그런데 실무에 투입하려면, 스프링이랑 JPA 같은 백엔드 기술들을 알고있어야 아무래도 뽑힐 확률이 높겠죠.
그래서 최신 기술의 Java 백엔드 개발자를 목표로 하는 취업 준비생들, 실무 주니어 백엔드 개발자들, 그리고 최신 개발 트랜드를 깊이 이해하고 싶은 실무 백엔드 개발자들이 대상이 됩니다.

핵심은 실무에서 프로젝트를 진행할 때 어떻게 설계하고 개발하는지, 그리고 최근에 사용되는 기술들을 경험해보고 큰 그림을 이해한 상태에서, 그 다음에 세부적인 각각의 기술들을 이제 학습해야 됩니다. 이게 야생형 코스인데요.

주니어 개발자들 중에서 특히 빠르게 올라오는 친구들이 있더라고요. 그 친구들의 공통점이 뭐냐면 바로 야생형 친구들이에요.
그 친구들의 두가지 특징이 있는데, 야생형은 일단 막 책에서 이론을 찾아서 한다기 보다는 일단 프로젝트에 바로 들어가요. 그리고 자기가 필요한 걸 찾아요.
그리고 또 하나, 토이 프로젝트를 주로 많이 해보더라구요. 그러니까 자기가 주말에 그냥 책을 공부하는 게 아니라, 프로젝트를 만들어보는 거예요. '재밌겠네, 이게 내가 공부하는 데 도움이 되겠네' 하고 만들어보면서 필요한 내용들을 찾아가더라고요. 이런 친구들이 정말 빨리 성장하는 거를 제가 정말 많이 봤어요.

학자형은 이론을 먼저 차근차근 쌓아올린 다음에 실무에 활용하는 방식이거든요.
그런데 야생형은 실무에서 어떤 기술이 어떤 식으로 활용이 되는지, 깊이가 부족해도 일단 경험을 해봐요. '아 코드가 이렇게 돌아가는구나, 내가 이게 부족하구나' 하고 찾아요. 그 다음에 필요에 의해서 이론 기술들을 공부하는 방식입니다. '아 지금 내가 실무에서 이걸 하려면 이게 필요하구나' 이런 거죠.
그래서 어떤 식으로 학습을 하냐면, 자기가 주말에 토이 프로젝트를 해보는 거예요. 책을 보는 게 아니라, 실무랑 비슷한 작은 프로젝트를 해보면서, '하다보니까 이런 문제가 있는데 이거는 공부해야지' 하고 그럼 그 부분에서 이론을 공부해요.

어쨌든 필요한 부분만 찾아서 하기 때문에 개발 공부는 야생형 스타일로 학습하는 개발자가 빨리 성장한다고 생각을 해요.
왜냐하면 내가 해결해야 할 문제가 뭔지 알고 난 다음에, 문제 해결에 필요한 기술들을 학습하기 때문이에요.
내가 해결해야 할 문제가 뭔지도 모른 상태로 단순하게 이론만 계속 학습을 해나가면, 이 기술을 왜 배워야 하는지도 모르고, 또 이해하기도 어렵고 무엇보다 중간에 포기할 확률이 굉장히 높아요.
야생형 스타일들은 일단 내가 목표를 가지고 예제처럼 뭔가 만들어 보면서 문제가 생기면, 그때 다시 책을 보거나 이론들을 학습한다는 거지, 아예 책을 안 본다는 게 아니에요.
그래서 추천하는 학습 코스가 어떻게 되냐면,

스프링 입문과 스프링 핵심원리 기본편에 들어가고 나면, 스프링에 대해서 기본기를 딱 잡은거거든요.

그러면 그 다음에 스프링 부트와 JPA 실무 완전정복 로드맵에 이 야생형 코스로 들어가셔야 돼요.


먼저 이 활용 1편을 쭉 따라치면서 전체 기술과 백엔드 서비스 개발의 감을 익혀야 돼요. 이해가 좀 부족해도 일단 따라치면서 진행을 한번 해보셔야 돼요. 그래야 '아 실무에서 이렇게 개발하는구나' 알 수 있습니다.
그 다음에 보면, 핵심적으로 어려운 게 JPA예요. JPA는 스프링만큼 어렵거든요.
그래서 이 JPA 기본편을 딱 배워야 돼요. 요즘 현대적인 애플리케이션 개발은 무조건 스프링과 JPA, 두 가지를 같이 가지고 개발을 해야 돼요. 그래서 이 JPA 기본편을 가지고 기본 내공을 다지시고요.
그 다음에 다시 이 활용 1편을 복습을 하는 거예요.
여러분 같은 경우에는 현재 스프링 핵심원리 기본편도 배웠고, 스프링의 어떤 기본적인 것도 배웠고 이렇게 되면 JPA의 기본적인 것도 배우게 되거든요. 이 상태에서 활용 1편을 딱 복습을 해보는 거예요.
그러면 완전히 기본기가 되어있는 상태이기 때문에 이해가 되면서 '아 실무 애플리케이션은 이렇게 개발하는구나' 하면서 퍼즐이 맞춰질 거예요.
그런 다음에 퍼즐을 맞추면서 한번 완성을 해보면 이게 토이 프로젝트의 효과가 있는거죠.
그렇게 하면 기본기에 대해 공부한 게 딱 정립이 되죠.
이렇게 해놓고 이제 활용 2편에 들어가는 거예요. 2편은 실전에서 jpa를 개발하려면 어떤 문제가 있냐면, 성능 최적화, 그러니까 스프링이랑 jpa를 가지고 애플리케이션을 개발할 때 실무에서 단순히 개발하는 게 문제가 아니라 성능까지 고민해야 되고, 또 API를 어떤 식으로 설계하고 개발하는지, 주의점은 뭔지, 이런 내용들에 대해서 활용 2편에서 쭉 다루거든요.
실무에 딱 들어가면 주로 API 개발을 많이 하는데, 그래서 사실 활용 2편까지 딱 배우고 나면, '아 이런 식으로 API를 개발하는구나, 웹 애플리케이션 만들 땐 이런 거를 조심해야 되는구나' 이거를 딱 알게 돼요.
자 그리고 나서 스프링 데이터 JPA랑 Querydsl, 이 두 가지는 이제 약간 보조적인 기술이긴 한데, 최신의 어떤 스프링 부트와 JPA 기반의 애플리케이션 개발할 때는 스프링 데이터 JPA를 무조건 써요.
그리고 복잡한 쿼리와 동적 쿼리 문제까지 해결하려면 Querydsl까지 딱 써야 되거든요.
그리고 무엇보다 이 두 기술을 배우면, 코드 사용량이 진짜 확 줄어요. 그래서 애플리케이션 개발하는 것 자체가 굉장히 즐거워지고 여러분의 시간을 정말 아껴드릴 수 있는 기술이에요.
그래서 이 두개까지 딱 배우면, 실무에서 개발할 수 있는 스프링 부트와 JPA 관련된 실무 웹 애플리케이션 개발에 기본기를 꽉 다졌다고 보시면 되고, 제가 생각할 땐 이거를 정말 완벽하게 이해하시면 당장 실무에 들어가도 돼요.
근데 물론 부족한 게 있죠. 데이터베이스는 따로 공부하셔야 돼요. 데이터베이스 설계에 대한 거, 그 다음에 실제 애플리케이션을 설계하고 이런 부분에 대해서도 하루아침에 되지 않아요. 그리고 객체지향 설계나 분석이나 이런 것도 절대 하루아침에 되지 않아요. 이런 부분에 대해서는 여러분들이 계속 내공을 쌓으셔야 돼요.

자 이렇게 해서 야생형 코스를 완료한 다음에 본인에게 부족한 스프링 기술을 더 깊이 학습을 하시면 돼요.
스프링 MVC나 스프링 데이터 접근 기술 이런 것들도 이 야생형 코스를 학습하고 난 다음에 학습하셔도 됩니다.
그리고 또는 여러분들이 야생형 코스를 학습하는 도중에 '아 나는 도저히 기본 원리를 어느 정도 배워야 올라올 수 있겠어' 라고 하면, 이 활용 1편까지 하시고 그 다음에 스프링 기본 기술을 학습하신 다음에 올라오셔도 돼요.
개인적으로는 이 야생형 코스를 다 마치신 다음에 부족한 스프링 기술들을 하나씩 학습하는 것을 추천을 드립니다.
'스프링 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 스코프와 프록시 (0) | 2024.01.28 |
|---|---|
| 스코프와 Provider (0) | 2024.01.28 |
| request 스코프 예제 만들기 (0) | 2024.01.28 |
| 웹 스코프 (0) | 2024.01.28 |
| 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 (0) | 2024.01.28 |