|
[제이펍에서 제공 받은 '제이펍 서평단' 도서 리뷰 입니다] 자바를 사용하는 웹 개발자이면서, 항상 마음 속 깊은 곳에 간직하고 있는 한가지 의문이 있다. '나는 자바를 잘 활용하고 있는가?' 이다. '자바를 공부했으니까 자바를 사용하고 있고, 자바로 돈을 벌고 있으니까 된거 아냐?' 라고 긍정적으로 생각한다면 다행이지만 연차가 쌓이고 후배가 늘어가고 '좀 더 나은 방법이 없을까?' 를 고민하다보면 생각하고 싶지 않아도 내가 가진 기술에 의문이 들 수 밖에 없는 것 같다. 그럴 때 발견한 자바의 근본에 대해 이야기하는 신간! 을 어떻게 좋은 기회를 받아 서평을 하게 되었다. 오늘 리뷰 할 서적의 이름은 바로 '기본기가 탄탄한 자바 개발자(제2판)' 이다. ![]() ![]()
1. 무려 820p를 넘어가는 두꺼운 서적으로 자바를 처음 배우거나 자바 기능을 바로 실전에 적용해야 하는 개발자에겐 어울리지 않는 내용들로 구성되어있음. 8버전 이후 수많은 버전의 자바가 등장했음에도 업그레이드를 꺼려하거나, 현재 사용하는 자바에는 어떤 기능이 들어있는지 궁금한 개발자들이 찾을만한 내용들로 구성. ![]() 2. 5개의 파트로 LTS를 지원하고 있는 버전 중 가장 많이 쓰이는 8, 11버전에서 17버전으로 넘어가야 하는지를 첫 파트에서 소개하고, 자바가 어떻게 동작하고 사용되는지, JVM을 사용하는 다른 언어들 소개, 그 뒤에선 그래들 같은 웹 개발에서 많이 접했을 법한 내용들과 기존 자바에선 볼 수 없었던 새로운 내용들을 소개하는데, 각 챕터마다 길이가 꽤나 길어서인지 앞뒤 내용을 몰라도 보고싶은 파트를 골라서 볼 수 있음. 3. 각 파트 별, 챕터 별로 첫 페이지에서 어떤 내용을 다루는지 간략하게 보여줌. 특히 파트 시작 페이지에는 그저 무엇을 배우는지에 대해 요약한것이 아닌, 저자의 생각이 함께 들어가 있어서 어떤 생각으로 이 내용들을 구성했는지 알 수 있음. ![]() ![]() 4. '자바'라는 언어에 대한 이야기에 국한되지 않고 최신 트랜드에서 많이 쓰이는 도커, 쿠버네티스 등 컨테이너 개발에 대해서 이야기하고, JVM을 사용하는 다른 언어들을 소개하며 자바에는 존재하지 않는 기능이나 편리함이 있다면 함께 사용할 수 있는 여러 가능성은 언제든 열려있다고 이야기 함.
1. 생각보다 난이도가 있으니, 자바를 처음 배운 사람보단 숙련자이면서 자바의 근본에 관심이 있는 개발자들에게 어울리지 않을까 싶다. 자바가 JVM을 사용한다, JVM은 어떻게 동작하나? 제네릭이 뭔가? 제네릭은 어떻게 사용하나? 함수형 프로그래밍은 뭔가? 같은 자바 프로그래밍의 근본적인 질문부터, '힝 이건 몰랐지?' 같은 가벼운 느낌의 질문에 대한 답변까지 존재한다. 아래 사진(우측)에서 나온 'duck' 이라는 타입은 처음 보고, 'var'를 자바에서 사용할 수 있게 되었다는 것도 처음 알았다. 제네릭은 그냥 저렇게 사용하는 것인 줄 알았는데, 편리함을 추구하며 업그레이드 되었다는 것도 알게 되었다. ![]() ![]() 2. 솔직히 'JVM을 사용하는 다른 언어'를 소개하는 파트는 빼도 되지 않았나 싶다. 뭘 말하고 싶은지는 알겠지만, 실제로 개발하면서 자바와 코틀린, 클로저를 같이 쓰는 경우는 아직 못본 것 같다. 심지어 클로저라는 언어는 처음 듣는다. 하지만 기술의 비슷한 점이 존재하는 기술을 알아두면 나중에 필요할 때 써먹을 수도 있으니 그냥 있어도 괜찮을 것 같다는 생각도 든다(반반...). 3. 계속 읽으면서 느끼는건 자바를 사용하고 있었지만 자바에 대해 모르는게 너무나도 많았고, 자바로 할 수 있는게 무긍무진한 세계에서 밑만 바라보고 있었던 느낌이랄까, 근데 막상 이런 생각을 갖고 읽어나가도 처음 보아서 그런지 어색한 것들과 내용이 이해가 잘 안가는 부분이 많아서 그런지 제대로 활용을 못할 것 같은 안타까움이 들어서 더욱 아쉽다(특히 5챕터나 마지막 부분의 '동시성 프로그래밍' 같은 것은 더더욱 잘 활용할 수 있을지, 아니 사용 할 일이 있을지 모르겠다.) 뭘 배우든 이런 느낌이었으니 읽고 사용하고 또 읽고 사용하다보면 언젠간 조금 더 성장한 자신을 볼 수 있지 않을 것이라 생각한다. |
|
책이 많이 두껍습니다. 책을 받는 순간 많은 내용을 내것으로 만든다면 자바에 대해서 정말 책의 부제처럼 기본기가 탄단한 개발자가 될 것 같은 생각이 듭니다.
이 책은 큰 특징은 아래와 같다고 생각이 듭니다.
![]()
■ JAVA LTS 버전별 특징에 대해서 살펴보기 ![]() https://www.oracle.com/kr/java/technologies/java-se-support-roadmap.html www.oracle.com
Java버전에 대해서 사용을 한다면 LTS(Long Term Support) 장기지원버전을 선택해야 합니다. 지금 Java에서는 8, 11, 17 버전중에 선택을 해야 합니다.
이 책은 무조건 최신 버전을 사용하는 것을 사용을 권유하는 것이 아니고, 우리가 사용하는 버전을 기준으로 고려하고 있는 Java버전을 사용하기 위해서 고려해야 하는 부분이 주로 언급됩니다.
이 책을 통해서 Java버전별로 제공하는 특징을 이해하기 매우 좋습니다.
자바 8부터 17까지 주요 기능과 변화를 체계적으로 설명 람다표현삭, 스트림 API, 모듈 시스템, text블록 등 최신 기능들을 실제 코드에 어떻게 적용할지 설명 · 11에서 작은 변경 사항 - 컬렉션 팩토리 (JEP 213) - 엔터프라이즈 모듈 제거 (JEP 320) : 예전에 J2EE모듈에 추가된 사항이 제거됨 - HTTP/2 - 단일 소스 코드 프로그램 (JEP 330) : 파이션, 루비 같은 스크립트 언어 형태로 사용자 경험 제공
· 자바 모듈 모듈이 도입된 이유는 복잡한 의존성으로 자바 애플리케이션의 jar지옥 의존성을 해결하기 위함입니다. java9부터 도입된 새로운 개념입니다. java8을 사용하시는 경우에는 새롭게 추가된 개념입니다. 모듈에 대해서 어떤 구조를 가지고 플랫폼, 애플리케이션 측면에서 모듈을 어떻게 빌드하고 사용하는지 내용을 설명합니다. 모듈에 대해서 사용법 및 내보내기 하고, 의존적인 모듈을 선언하는 방법등이 설명되어 집니다.
![]()
다증 릴리스 JAR 를 사용해서 최신의 모듈식 JVM 모드에서 작동할수 있는 라이브러리를 만들수 있습니다.
· JAVA 17 주요내용으로는 Text블록, switch 표현식, record, sealed타입이 설명됩니다
text의 경우, python, javascript등에서 주로 사용하는 블록단위 처리를 가능하게 처리하였습니다. record 클래스는 기존에 애플리케이션에서 도메인 클래스를 더 명확하고 작게 만들수 있으며 많은 수작업 코딩 구현을 제거하는데 도움이 됩니다. record관련 내용에 많은 지면을 사용해서 코드를 통해서 예제를 제공합니다. ![]()
이렇게 part1에서는 자바 11, 17에서 주요 변화된 기능 스팩을 코드 기준으로 설명을 하면서, 기본적인 개념 및 문법을 학습할수 있는 내용으로 구성되어 있습니다.
■ JVM에 대해서 좀 더 알아보기 이 책의 장점은 java의 신규 기능 설명에 대한 부분만 있는 것이 아니라, 실제 동작원리를 소개한다는 점이다. JVM을 통해서 클래스 로딩 부터 살펴봅니다.
실제 동작하는 자바 클래스 파일의 내부를 들여다 보고 바이트 코드가 담고 있는 내용을 살펴보면서 강력한 디버깅 능력을 학습합니다. javap를 이용합니다.
클래스 로딩, 리플랙션, 클래스 파일의 구조, JVM바이트코드에 대해서 명확한 개념을 살펴보고 이해할수 있습니다. 기본이라는 것이 실제 동작원리를 파악하는 것인데, 평소에 잘 접하지 않은 분들은 매우 좋은 레퍼런스가 될수 있습니다.
![]()
load, store, Invoke 오퍼레이션 코드에 대해서 정의하고 각각의 인수, 스택 레이아웃에 대해서 설명합니다.
![]()
자바개발자가 갖추어야할 기술중에 매우 중요한 부분이지만, 어려움이 있습니다. 리플렉션은 객체를 쿼리하거나 내부를 조사해서 런타임에 해당 객체의 기능을 발견하고 사용하는 기능입니다.
![]()
· 자바 동시성 라이브러리 java의 동시성을 지원하기 위해서 java.util.concurrent 패키지를 이용합니다. 동시성을 처리하기 위해서 빌딩 블록의 도구 상자를 사용하는 방법을 잘 정리하고 있습니다. 우선 동시성 처리 동작의 기초적인 내용으로 - 동시성 이론, 블록 구조 동시성, 동기화, 자바 메모리 모델, 바이트 코드에서의 동시성 지원을 통해서 기본적인 이론을 설명합니다. 동시성과 멀티스레드의 대한 부분, 스레드의 상태 모델 및 동기화 예시 등이 있습니다. ![]()
이어서 관련 클래스 등을 있습니다. - 아토믹 클래스 - 잠금 클래스 - 동시 데이터 구조 - BlockingQueues - Futures와 CompletableFuture - Executors 의 사항을 다루고 있습니다.
■ 다른 JVM언어 JVM에서 동작되는 다양한 언어들이 제공되고 있습니다. 그중에서도 코틀린은 안드로이드 및 Spring개발에도 많이 사용되고 있습니다.
다양한 언어에서 각각의 특징이 있습니다. - 인터프리트 vs 컴파일 - 동적 타이핑 vs 정적 타이핑 - 명령형 언어 vs 함수형 언어 - 재구현 vs 원래 언어
JVM을 사용하는 환경에서 다양한 언어들이 시도 되고 있습니다. java에서는 재컴파일이 번거롭다. 엄격한 문법을 가지고 있다. 정적 타입 지정은 유연성을 제한할수 있다. 배포는 무거운 과정이다. 이러한 부분 때문에 JVM환경에서 구현이 가능한 언어중에 코틀린, 클로저 가 대표적입니다.
코틀린의 주요 문법에 대해서 코드 및 주석을 통해서 java와 다른 부분을 설명합니다. ![]()
■ 그래들과 메이븐을 사용한 빌드 & 도커 이용하기 책에서 자바를 실제 빌드와 디플로이먼트를 소개하는 것도 매우 인상적입니다. 현재 가장 많이 사용하고 있는 빌드 도구인 메이븐과 그래들을 살펴봅니다.
기본적으로 빌드도구를 이용하는 방법 이외에 컨테이너에서 자바 실행하는 방법까지도 설명됩니다.
maven에서 사용하는 pom.xm파일에 대해서 구문, mainfest 설정 및 다른 의존성 주입에 대해서 언급됩니다. gradle 도 동일하게 동일하게 의존성 및 작성법, 동작방식에 대해서 다룹니다.
아래 사례는 그래들을 이용해서 빌드를 하고 도커로 빌드하는 환경을 만드는 부분입니다. ![]()
이어서 ks8(쿠버네티스)환경에서도 간단하게 구성하는 방법도 있습니다.
■ 테스트 기본 java와 함께 꼭 필요한 테스트에 대해서도 함께 있는것도 자바를 잘 활용할수 있습니다. 단순히 테스트를 위한 JUnit4에서 5로 변경에 대한 기술적인 부분만이 아니라 테스트 하는 이유, 테스트 방법, 테스트 중싱 개발, 테스트 더블등에 대해서 전반적으로 다룹니다.
Java책이지만, 이러한 꼭 필요한 테스트 관련 내용이 있다는 것은 자바의 기본기를 탄탄하게 하기 위해서는 테스트가 반드시 필요하다는 역설적인 부분을 말하는 것 같습니다.
더미 객체, 스텝 겍체, 페이크 객체, 목 객체등을 활용한 방법이 있습니다.
![]()
java8에서 스트림을 많이 사용하는데, 아래와 같은 목차 처럼 상세하게 필요한 요약된 내용을 제공합니다. ![]()
|
|
이제 막 개발을 시작하려는 분들에게는 맞지 않을 수 있습니다. 자바를 활용하여 실무를 하고 있는 분들이라면 꼭 읽어보시기를 추천드려요. 책이 800페이지 가까이 되어서 처음에는 조금 두려웠지만, 번역이 잘 되어 있어서 술술 읽히는 편입니다. 저는 자바 개발을 10년 가까이 해오면서 실무에 바빠 새로운 기능들을 따라가지 못하고 쓰는 기능만 쓸 때도 많았는데, 이번 기회를 통해서 자바에 대해서 다시 공부할 수 있는 시간이 되어 뜻깊었습니다. |
|
이번에 리뷰할 도서는 800페이지에 육박하는 압도적인 분량을 자랑하는 Java 언어에 대한 도서이다. 보기만해도 도서의 풍성한 내용에 마음이 뿌듯해진다고나 할까? ^^ 솔직히 말해서 아직 다 읽지는 못했는데, 방대한 분량 때문도 있지만, 이 책은 왠지 정독보다는 두고두고 필요할 때마다 발췌독을 해야 될 것 같아서, Part 1 부분까지만 정독하고 나머지는 어떤 내용이 있는지 쭉 훑어보고 리뷰를 남긴다. 이 책은 Java 8 버전부터 17 버전까지의 주요 기능과 변화된 부분에 대한 자세한 설명을 담고 있는 All-in-one 교과서이다. 특히 이 책에는 자바 가상 머신(JVM)에서 동작하는 언어들에 대한 설명도 담고 있는데, 코틀린(Kotlin), 클로저(Clojure)와 같은 언어가 바로 그것이다. 옮긴이의 표현처럼, JVM 생태계의 다양성을 이해하고, 각 프로젝트에 가장 적합한 도구를 선택할 수 있는 능력을 키우는 것 또한 본 도서를 읽는 독자에게 제시하고자 하는 목적이라고 할 수 있다. ![]() 나는 현재 Java를 주력 개발 언어로 사용하고 있지는 않으나, 내가 알고 있는 얇은 지식으로 현재 업계에서 주력으로 사용되는 Java의 버전은.. 지원 기간이 긴 LTS 버전인 8버전(1.8)과 11버전, 그리고 17버전 정도로 알고 있다. 그 중, 전자정부 프레임웍(아직 Java 8버전이 사용 가능한 Spring Framework 5.3 기반)을 사용하는 공공기관에서는 아직 8버전이 많이 사용되고 있고, 최근 서비스 개발 시 많이 사용되고 있는 Spring Boot를 사용하는 일반 서비스 개발 업체에서는 Spring Boot 3.0부터 17버전 이상만 지원하는 제약사항으로 인해 17버전을 많이 사용하는 것으로 안다. (그런데 개인적으로, 17버전의 지원기간이 왜 8버전보다 짧은지는 이해가 가지 않음 ㅋ) ※ 참고 : https://www.oracle.com/kr/java/technologies/java-se-support-roadmap.html 다만, Spring Framework 5.3도 곧 EoS될 예정이라(물론 유료 Enterprise Support는 2년 4개월 더 남았지만..) Spring 개발자라면 필연적으로 17버전 이상으로 업그레이드하는 것을 가급적 빨리 준비하는게 좋을 듯 하다. 전자정부 프레임워크 쪽도 (물론 legacy 코드를 갈아엎는게 쉽지는 않겠지만) 조만간 업그레이드 계획이 있다고 들었던 것 같다. ※ 참고 : https://spring.io/projects/spring-framework#support 참고로, 최근 LTS 버전인 Java 21도 출시되었는데, Virtual Threads라는 새로 추가된 기능이 그렇게 핫하다고 한다. (무슨 내용인지는 잘 모름 ^^;) 그래서 17버전에서도 많은 개발자들이 점차 21버전으로 갈아타게 되지 않을까하는 생각도 드는데, 시간은 좀 걸릴 것 같다. 2014년에 출시된 8버전이 아직까지도 사용률 1위라고 하니.. ^^; 아쉽게도 본 도서에서 21버전에 대해서는 다루지 않지만, 떠오르는 대세 버전인 17버전까지 다루고 있는만큼 최신 트렌드에 맞게 2판 내용이 잘 보강된 듯 하며, Part 1편인 Chapter 3까지 그러한 모던 자바의 최신 버전에 대한 설명을 담고 있다. ![]() Part 2가 시작되는 Chapter 4부터는 JVM의 동작 원리에 대한 설명을 담고 있다. 즉, 클래스 파일의 구조와 JVM 프로세스가 클래스를 로딩하는 과정, 소스코드와 기계코드의 중간코드 형태인 JVM 바이트코드에 설명, 그리고 그러한 바이트코드(클래스 파일)의 의미를 이해하기 위한 javap 명령어를 사용하는 방법에 대해 살펴보고 있다. 마치 JVM 내부의 동작 과정을 low level 측면에서 상세히 분석하는 형태로 기술하고 있다고 보면 된다. ![]() 또한, Chapter 5에서는 Java의 동시성이라는 개념에 대한 상세한 설명을 담고 있는데, Chapter 6에서는 실제 이러한 동시성 기능을 가진 java.util.concurrent 패키지 등에 대한 소개를 통해 실제 동시성에 대한 실습을 해볼 수 있다. 이를 통해 동기화, 블로킹 큐나 여러 스레드 간의 합의 로직 등의 Thread Safe한 동시성 프로그래밍을 구현할 수 있다. ![]() Part 3에서는 JVM에서 Java 외의 언어 중 Kotlin과 Clojure에 대한 소개를 담고 있다. 개인적으로 2개 언어 모두 들어는 봤지만 실제 제대로 사용해본 적은 거의 없고, 특히 Clojure는 Lisp 언어 구문으로 표현된다는 내용 정도만 들어왔고 코드는 1줄도 짜본적이 없어서 추후 해당 언어에 대한 공부를 하게 될 때 좋은 참고자료가 될 것이라 생각된다. 그 외에도 본 도서의 뒷 부분에는 라이브러리 의존성 관리 및 빌드 & 배포를 위한 Maven과 Gradle, JUnit을 통한 단위테스트 자동화, 테스트 주도 개발, 컨테이너에서 JVM 실행하는 법 등 여러 가지 유용한 내용들을 방대하게 담고 있다. 분량이 많아서 그런지 설명이 자세하고 이러한 설명에 대한 이해를 돕는 그림들도 많아서 독자들의 이해에 도움을 준다. ![]() 결론적으로, 본 도서는 다음과 같은 분이 읽으면 좋을 것 같다.
본 도서는 입문서는 아니다. Java 언어를 공부해본 사람이 좀 더 상세한 동작 원리 등에 대해 공부하며 보다 숙련된 Java 개발자로 거듭나기 위한 중급 도서이다. (즉, Java 언어 문법을 모르는 사람이 보기에는 적합하지 않을 수 있다.) 그러므로, JVM 자체에 대한 상세한 동작 과정을 다룬다는 측면에서 더 나은 Java 개발자가 되기 위한 필독서라고 생각되며, Java 개발자라면 오프라인 서점에서 한번쯤 찾아보시거 내용을 살펴 보시길 바란다. |
|
[제이펍에서 제공 받은 '제이펍 서평단' 도서 리뷰 입니다] 학습을 하고 토이 프로젝트를 몇 번 진행해본 개발자가 그 다음으로 레벨업하고 싶을 때 참고하면 좋은 책이라고 생각한다. 백엔드 개발자 커리큘럼을 보면 보통 자바의 기본적인 문법을 배우고 나서 Spring 위주의 학습을 한다. 프로젝트 경험이 여러번 있고, 실무에서 일하면서 자바 개발자이면서도 자바에 대해서는 자세히 모른다는 것에 위화감을 느꼈는데 나 같은 사람에게 적당한 책인 것 같다. 자바의 버전별 차이점, 메이븐과 그래들의 차이 등 '다들 많이 쓰길래 사용하긴 했는데 자세히 모르는' 부분들을 전체적으로 다루고 있다. 전체적인 개념을 알았으니 이 지식을 바탕으로 실무에서 상황에 맞게 추가적으로 깊게 학습해서 도입해볼 예정이다. |
| 기본기있는 책을 구매하였습니다. 디자인은 괜찮고 노하움이 있지 않을까 기대해봅니다. 저도 자바 개발자이지만 최적화하기에 찾고 싶었고 모던 자바도 원했습니다. 개발자로서 기본기가 있어야 하고 더욱 더 전문가가 되기 위해 많이 배워가면서 공부하겠습니다. |
|
처음에는 엄청난 두께에 압도되어 놀랐지만 막상 읽다보면 자바를 다루면서 알아야 할 모든 것들이 자세하고 이해하기 쉽게 담겨있었습니다! 기존 시중에 나와있는 자바 책들은 대부분 java 8 기준으로 설명하고 있어 최신 자바 릴리즈 내용들이 없다는 아쉬움이 있었으나, 해당 책은 java 11부터 17까지 다루고 있어 최신 동향 파악에도 좋습니다! 이외에도 자바 성능 튜닝, 코틀린과 같은 다른 jvm언어, 빌드 및 배포, 함수형 프로그래밍, 자바의 미래까지 폭넓고 자세히 다루고 있어 저처럼 자바를 어렴풋이? 알고 사용만 하는 개발자들에게 자바에 대한 심도깊은 이해가 가능하게끔 해주는 자바계의 바이블이라고 느꼈습니다 :) |