📚 정보
분야 : 자바/스프링
난도 : ★★★☆☆
추천 : 👍
⌨️ 입문과 고급 그 사이
무엇이든 중급 과정이 어렵다. 입문은 많고 고급은 어렵고, 누군가 나에게 입문에서 고급으로 갈 수 있는 중간다리를 놔주었으면 하는 생각이 많이 들 때, 우연찮게 발견한 이 책은 나에게 많은 도움을 주었다.
1. 기술 보다 개발
신입 개발자 혹은 취준생들에게 많이 보이는 경향이다.
이 책의 저자는 개발실력보다는 기술적 스펙트럼만을 넓히려는 신입/취준생들에게 안타까운 맘을 비치는 스탠스이다.
그러나 개요에서 말한 바와 같이 입문은 쉽고 고급은 어렵다, 그렇다면 중급이 있어야 하는데 실상 중급은 접하기 어렵다.
(기술적 수준이 아니라 강의나 자료의 수와 접근성 그리고 강의 내용의 관점)
그렇기에 나 포함 많은 신입 혹은 취준생들이 기술적인 스펙트럼을 넓히는 것을 고려하게 된다고 생각한다.
이 책의 저자는 개발 능력 자가 점검 리스트를 제시하는 데 이것이 절대적 척도는 아니나 적어도 반절 미만으로 대답한다면, 당장 지금 듣고 있는 트렌디한 강의를 잠시 덮어두고, 원리와 이해 수준의 클래식 강의를 듣길 바란다.
개발 능력 자가 점검 리스트
- OOP
1. 객체지향의 핵심 가치인 역할, 책임, 협력을 들어봤나요?
2. 여러분이 진행하는 (또는 진행했던) 프로젝트는 어떤가요? 객체지향적인가요? 그렇다면 왜 그렇다고 생각하나요?
3. 객체지향이 무엇인지 설명할 수 있나요? 혹시 '클래스를 이용해서 프로그래밍하는 방법' 이상의 답변을 못하고 있진 않나요?
4. 객체와 클래스의 차이점은 무엇인가요? 설마 붕어빵과 붕어빵 틀의 관계로만 설명하나요?
5. 메서드는 왜 메서드라고 부르는 것일까요? 메서드는 함수와 어떤 차이점이 있나요?
- 테스트
1. 테스트를 학습한다는 것은 무슨 의미일까요? 혹시 Mockito, JUnit, H2의 사용법만 학습하고 있지 않나요?
2. 단위 테스트, 통합 테스트, E2E 테스트의 차이점을 설명할 수 있나요? 설명할 수 있다면 단위 테스트의 단위는 무엇이고, 통합 테스트의 통합은 무엇인가요?
3. 만약 위의 라이브러리 없이 테스트를 작성해 보라고 하면 여러분은 스프링 프로젝트에 테스트를 넣을 수 있나요?
- 아키텍처
1. 아키텍처라고 하면 떠오르는 것이 무엇인가요?
2. SOLID를 알고 있다면 의존성 역전과 주입이 어떻게 다른지 설명할 수 있나요?
3. 의존성이란 무엇인가요?
4. 디자인패턴을 학습해 봤다면 기억에 남는 패턴이 있나요? 실제로 업무에 적용해 봤나요? GoF의 23가지 패턴이 실제로 체득
이 되던가요?
5. 인터페이스가 하나 있습니다. 그런데 구현체는 하나 밖에 없습니다. 굳이 분리한 이유가 무엇일까요?
한번 답변을 생각해보길 바란다.
이 책은 위와 같은 질문들에 대한 답을 이끌어 낼 수 있게 가이드해준다.
그러나 이 또한 이 저자의 주관이고 정답은 아니기에 받아들이는 것은 독자의 몫이다.
프로그래밍과 컴퓨터 공학은 그 역사가 매우 짧은 만큼 공식이나 정의라고 할 것이 많이 없다.
그러니 편하게 생각하고, 본인의 생각을 증명해 낼 수만 있으면 어떤 것이든 괜찮다고 본다.
2. 추천 독자
추천하는 독자층은 어느 정도 구현 능력이 있고 그리고 기본적인 자바/스프링 진영에서의 빅 이슈들을 본인 만의 해법을 가지고 있는 사람들이 다음 레벨로 넘어가기 위해 읽으면 좋을 것 같다.
여기서 말하는 자바/스프링 진영에서의 빅이슈란 흔히 알려진 문제들이다.
1. 자바 동시성 문제
2. JPA N+1 문제 혹은 Offset 페이징의 문제점과 Cursor-based 페이징으로 개선 혹은 Offset을 써야 한다면 어떻게 개선할지
3. JPA에서 동적쿼리를 활용하기 위해 dsl 언어 혹은 jpql을 활용하여 query를 @Override하여 사용하는데 이러면 JPA 사용 의미가 있는지
4. 외부 API에 대한 트랜잭션 처리는 어떻게 할 것인지
등등 이미 많은 best practice가 있는 문제들이 있다.
그런 것들에 대해 아직 잘 모르거나 본인만의 해결 방법 혹은 전형적인 해결 방법에 대해 숙지가 안되어있다면 해당 항목을 먼저 공부하고
이 책을 보시면 더욱 많은 도움이 될 것이라 생각한다.