전체 글 35

Querydsl 중급 문법

QueryDSL 중급 문법 1. 프로젝션과 결과 반환 - 기본 프로젝션 대상이 하나일 경우 @Test public void simple_projection() throws Exception { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } 프로젝션 대상이 둘 이상일 경우 - 튜플 조회 @Test public void tuple_projection() throws Exception { List result = queryFactory .select(member.username, member.age) .from(..

Spring Data 2021.11.04

Querydsl 초급 문법

QueryDSL 초급 문법 0. 소개 쿼리를 자바 코드로 작성한다. 동적 쿼리 문제를 깔끔하게 해결해준다. 쉬운 SQL 스타일 문법 JPQL 은 쿼리가 실제로 동작하는지 런타임 시점에서 밖에 확인이 되질 않는다. QueryDSL 은 자바 코드로 작성하기 때문에 컴파일 시점에서 문법 오류를 체크할 수 있다. QueryDSL 은 자바 코드이기 때문에, 쿼리를 메소드로 추출하여 재사용이 가능하다. 따라서, 엔터프라이즈 애플리케이션을 위한 마지막 퍼즐이다! ( Spring boot + Spring Data JPA + QueryDSL ) 1. 환경 세팅 build.gradle plugins { id 'org.springframework.boot' version '2.5.2' id &#..

Spring Data 2021.11.04

객체지향의 사실과 오해 #3

객체지향의 사실과 오해 #3 3. 타입과 추상화 해리 맥 영국의 지하철 노선도의 예 추상화를 통한 복잡성 극복 현실에 존재하는 다양한 현상 및 사물과 상호작용하기 위해서는 우선 현실을 이해해야 한다. 문제는 복잡성의 총체인 현실이라는 괴물을 그대로 수용하기에는 인간이 지니고 있는 인지 능력과 저장 공간이 너무나도 보잘것없다는 점이다. 따라서 사람들은 본능적으로 이해하기 쉽고 예측 가능한 수준으로 현실을 분해하고 단순화하는 전략을 따른다. 진정한 의미에서 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다. 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다. 복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다..

Book 2021.11.04

객체지향의 사실과 오해 #2

객체지향의 사실과 오해 #2 2. 이상한 나라의 객체 객체지향과 인지 능력 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다. 인간은 좀 더 단순한 객체들로 주변을 분해함으로서 자신이 몸담고 있는 세상을 이해하려고 노력한다. 즉, 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 객체지향 패러다임은 인간이 인지할 수 있는 다양핳ㄴ 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인..

Book 2021.11.04

객체지향의 사실과 오해 #1

객체지향의 사실과 오해 #1 1. 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. "소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다." - Bertrand Meyer 객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 '캡슐화'하는 소프트웨어 객체의 '자율성'을 설명하는 데 효과적이다. 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성해 나가는 과정은 '메세지&..

Book 2021.11.04

DDD START! #2

DDD START! #2 네 개의 영역 표현 영역을 통해 사용자의 요청을 전달받는 응용 영역은 시스템이 사용자에게 제공해야 할 기능을 구현한다. 예를 들어, '주문등록', '주문 취소', '상품 상세 조회' 와 같은 기능을 구현한다. 응용 영역은 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다. 주문 취소 기능을 제공하는 응용 서비스를 예로 들면 다음과 같이 주문 도메인 모델을 사용해서 기능을 구현한다. public class CancelOrderService { @Transactional public void cancelOrder(String orderId) { Order order = findOrderById(orderId); if (order == null) throw new OrderN..

Book 2021.11.04

DDD START! #1

DDD START! #1 도메인 모델 도메인 모델은 기본적으로 도메인 자체를 이해하기 위한 개념 모델이다. 개념 모델을 이용해서 바로 코드를 작성할 수 있는 것은 아니기에 구현 기술에 맞는 구현 모델이 따로 필요하다. 개념 모델과 구현 모델은 서로 다른 것이지만 구현 모델이 개념 모델을 최대한 따르도록 할 수는 있다. 예를 들어, 객체 기반 모델을 이용해서 도메인을 표현했다면 객체 지향 언어를 이용해서 개념 모델에 가깝게 구현할 수 있다. 도메인은 다수의 하위 도메인으로 구성된다. 각 하위 도메인이 다루는 영역은 서로 다르기 때문에 같은 용어라도 하위 도메인마다 의미가 달라질 수 있다. 예를 들어, 카탈로그 도메인의 상품이 상품 가격, 상세 내용을 담고 있는 정보를 의미한다면 배송 도메인의 상품은 고객에..

Book 2021.11.04

우아한 스프링 배치 요약

우아한 스프링배치 요약 1. 배치 애플리케이션이란? 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램( 작업 ) 들의 실행이다. 웹 애플리케이션은 사용자와의 상호 작용이 주력이다. Web - 실시간 처리, 상대적인 속도, QA 용이성 Batch - 후속 처리, 절대적인 속도, QA 복잡성 Spring batch 와 Quartz Quartz 는 스케줄링 프레임워크 ex ) 매 시간 / 마지막 주 금요일에 실행 Quartz 는 Spring batch 의 보완제 역할이지 대체제가 아니다. 배치 애플리케이션이 필요한 상황 일정 주기로 실행되어야 할 때 실시간 처리가 어려운 대량의 데이터를 처리할 때 한 달에 한 번 실행이 된다는 의미는 한 달동안 쌓인 모든 데이터가 대상이라는 의미 즉, 대용량 데이터 처리가 ..

Semina 2021.11.04

Java 8 함수형 인터페이스, 람다, 스트림

Java 8 함수형 인터페이스 함수형 인터페이스 구현 @Functionalnterface public interface RunSomething { void doIt(); // 추상 메소드가 하나만 있다면 함수형 인터페이스이다. 앞에 abstract 생략 // void doItAgain(); // 추상 메소드가 하나를 초과하면 함수형 인터페이스가 아니다. } public class Foo { public static void main(String[] args) { // Java 8 이전 방식 // 익명 클래스 RunSomething runSomething = new RunSomething() { @Override public void doIt() { System.out.println("dohyun"); }..

Java 2021.11.04

2021.05.26

2021.05.26. 1. 첫 번째 다이어리를 쓴 지 6주 정도 지났다. 지난 6주간 많은 것 들을 공부했고, 또 더 많은 것들을 공부하고 싶어졌다. 이에 따라 뒤죽박죽 엉켜있는 내 머릿 속의 생각들을 글을 쓰며 정리할 필요가 느껴졌다. 따라서 오늘은 내가 6주동안 무엇을 했고, 공부 했는지, 앞으로 무엇을 공부하고 싶고, 공부에 대한 순서는 어떻게 정할 것인지, 또 4월의 나와 비교하여 얼마나 성장했는 지 등 내가 가진 생각을 정리하는 시간을 갖고자 한다. 2. 먼저 내가 6주간 해온 것들을 정리하자면, 회사의 작은 프로젝트 하나를 끝 마치고 배포하였다. 세션 기반의 로그인 인증 구현, 유저 권한과 관리자 권한의 분리, SMTP 를 이용한 이메일 인증, 프로필 수정, 공지사항 및 1:1 문의 기능을 구..

Diary 2021.11.04