책
[5장]에서는 스트림 연산에 대해 알아보았다. 스트림 연산을 복습해보자면 아래와 같다. 스트림 연산은 중간 연산과 최종 연산으로 구분할 수 있다. 중간 연산은 스트림을 다른 스트림으로 변환하는 연산이다. 여러 연산을 연결할 수 있다. 중간 연산은 스트림 파이프라인을 구성하며, 스트림 요소를 소비하지 않는다. 최종 연산은 스트림의 요소를 소비해 최종 결과를 도출한다. 최종 연산은 스트림 파이프라인을 최적화하면서 계산 과정을 짧게 생략하기도 한다. [6장]에서는 컬렉터와 리듀싱 요약, 데이터 그룹화와 분할, 커스텀 컬렉터 개발에 관해 알아볼 것이다. Collector(컬렉터)란 무엇일까? 컬렉터는 자바 스트림에서 쓰이는 중요한 인터페이스다. 컬렉터 인터페이스는 스트림의 요소들을 수집하고 그룹화하고 집계하는데..
어플리케이션의 비즈니스 로직이 올바르게 동작하려면 데이터를 사전 검증해야한다. 이를 유효성 검사(validate) 혹은 데이터 검증이라 부른다. 예를 들어 어플리케이션의 여러 계층에서 들어오는 데이터를 검사하여 의도한 형식대로 값이 들어오는지 확인하는 과정이 있다. 이는 매우 중요한 부분이다. 일반적인 어플 유효성 검사의 문제점 일반적으로 사용되는 데이터 검증 로직은 계층별로 진행된다. 이러한 유효성 검사는 클래스 별로 분산되어 관리하기 어렵고, 의외로 검증 로직에 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 또 검증해야 할 값이 많다면 검증하는 코드가 길어진다. 이러한 문제들은 코드를 복잡하게 하고 가독성을 떨어뜨린다. 이런 문제들을 해결하기 위해 자바 진영에서는 2009년부터 Bea..
[4장]에서는 스트림에 대해 알아보았다. 복습해보자면 스트림은 아래와 같은 특징을 보인다. 스트림은 컬렉션 데이터를 선언형으로 처리할 수 있다. (데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다.) 더 간결하고 가독성이 좋아진다. (선언형) 스트림은 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. (파이프라이닝과 내부반복을 지원한다.) 성능이 좋아진다. (병렬화) 스트림은 대부분의 스트림 연산시 스트림 연산끼리 연결할 수 있다. 유연성이 좋아진다. (조립성, 책에서는 '조립할 수 있음'이라 표현되어있다.) 스트림의 연산은 최종 연산으로 중간 연산이 한 번에 처리된다. (스트림은 LAZY한 특성을 가지며, 이는 최적화와 관련이 있다.) 참고로 예제코드는 OpenJ..
JPA를 사용하는 어플리케이션에서도 테이블의 연관관계를 엔티티 간의 연관관계로 표현할 수 있다. 다만, 객체와 테이블의 성질이 달라 정확한 연관관계를 표현할 수는 없다. 본 책의 9장, 연관관계 매핑 챕터에서는 JPA에서 이러한 제약을 보완하면서 연관관계를 매핑하고 사용하는 방법을 알려준다. 연관관계 매핑 종류와 방향 [6장]에서 엔티티 설계를 알아보았다. [9장]에서 알아볼 것은 테이블 간 연관관계의 종류와 방향이다. 연관관계 종류는 크게 4가지가 있다. One To One (1:1) One To Many (1:N) Many To One (N:1) Many To Many (N:N) DB에서 두 테이블의 연관관계를 설정하면 외래키를 통해 서로 Join 해서 참조하는 구조로 생성된다. 하지만 JPA를 사용..
이전에 알아봤던 것처럼 Spring Data에는 JPA를 지원해준다. 우선 JPA를 활용하기 전에 JPQL에 대해 알아보자. JPQL JPQL은 JPA Query Language의 줄임말로 JPA에서 사용가능한 쿼리를 의미한다. 그런데 JPQL을 왜 알아야할까? JPA는 정말 강력한 기능을 제공해 주지만 JPA의 Query Method 로만 개발하는 것에는 한계가 존재한다. 따라서 JPA를 사용하기 위해서는 JPQL도 알아야 한다. JPQL의 문법은 SQL과 매우 비슷하기 때문에 DB Query에 익숙하다면 어렵지 않게 사용가능하다. JPQL은 SQL과 차이가 존재한다. SQL에서는 테이블이나 칼럼의 이름을 사용한다. 반면에 JPQL은 엔티티 객체를 대상으로 수행하는 쿼리를 날리기 때문에 매핑된 엔티티의..
어플리케이션은 데이터(리소스)를 주고받는 것이 주 목적입니다. 엔터프라이즈급 어플리케이션에서 정상적으로 로직이 동작하기 위해서는 데이터베이스가 꼭 필요합니다. - 91 p. 어떻게 연동할까? 우선 스프링이 추구하는 Data 사용법에 대해 알아야 한다. 스프링은 Spring Data라는 스프링 하위의 프로젝트에서 제공하는 프로그래밍 모델을 통해서 스프링이 추구하는 데이터 접근 방식을 제공하고 있다. Spring Data가 추구하는 방향은 사용하는 DB의 특수성을 그대로 유지하며, 이것저것 할 것 없이 사용자가 스프링의 편안함을 느끼게 하는 것이라 한다. 따라서 스프링을 이용하는 난 ORM(객체 관계 맵핑)과 JPA를 알고 있어야 한다. ORM ORM은 객체관계 맵핑의 줄임말이다. ORM은 객체지향 언어에서..
나는 이 책을 왜 읽는가? 나는 좋은 개발자가 되고 싶다. 내가 생각하는 좋은 개발자는 의사소통(코드로든 인간적으로든)이 잘되고, 끊임없이 배울줄 아는 개발자가 좋은 개발자라고 생각한다. 나는 자바 개발자이면서 스프링을 사용하는 좋은 개발자가 되기 위해서 이 책을 읽는다. 사실 스프링이 뭔지 알아야 내가 좋은 코드는 못짜더라도 최소한 다른 선배들의 코드를 읽을 줄은 알 것이 아닌가? 스프링 부트와 스프링 프레임워크 스프링은 스프링 프레임 워크를 말한다. 스프링 프레임 워크는 자바 기반의 어플리케이션 프레임 워크이며 속도, 단순성, 생산성에 중점을 둔 멋진 프레임워크다. 스프링의 탄생에는 OOP와 SOLID 원칙, J2EE가 배경에 있다. 즉, 객체지향을 더 잘 지키면서 효율적으로 개발하고 싶은 여러 선배..