전체 글

https://github.com/dhmin5693 dhmin5693@naver.com
Spring boot 자동 설정 Spring boot로 와서 가장 크게 달라진 점은 설정 부분이다. @SpringBootApplication 하나만 추가하면 필요한 모든 설정을 알아서 추가한다. 이 자동 설정 기능만을 위해 autoconfigure라는 모듈이 작성되어 있고 그 덕분에 Spring boot의 핵심인 @SpringBootApplication을 사용할 수 있다. 가시적으로 새로운 기능은 아니지만 편리성을 비약적으로 상승시켜 생산성을 어마어마하게 높여주었다. @SpringBootApplication Spring boot 프로젝트를 생성하면 main 메소드가 포함된 클래스에 자동으로 추가되는 어노테이션이다. 어노테이션의 정의를 타고 올라가면 SpringBootApplication의 코드를 확인할 ..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. 도메인 도메인 모델 이커머스에서 모니터를 구매한다고 가정해보자. 원하는 스펙의 모니터를 검색하고 다양한 물건을 비교한다. 눈에 띄는 물건이 여러 개라면 장바구니에 넣어둘 수도 있다. 구매를 결정했다면 어떤 결제수단을 사용할지, 배송지는 어딘지를 선택한다. 배송을 시작했다면 배송 추적 기능을 활용하여 내 물건이 어디쯤 왔는지를 확인한다. 개발자에겐 쇼핑몰은 구현 대상이다. 그리고 쇼핑몰에서는 구매를 위한 다양한 기능을 제공한다. 여기서 쇼핑몰은 소프트웨어로 해결하기 위한 도메인에 해당한다. 정의 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 비즈니스 로직에 맞는 규칙을 구현한 레이어는 도메인이 되어야 한다. 예시 상품 주문을 예시로 코드를 ..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 연관관계 매핑 기초 객체는 참조를 사용하여 연관 관계를 맺고 테이블은 외래 키를 사용해서 연관 관계를 맺는다. 관계가 있는 다른 데이터를 참조한다는 점에서 동일하지만, 참조와 외래 키는 완전히 다른 특징을 갖는다. 연관관계 매핑을 이해하기 위한 두 가지 키워드가 있다. 방향 : 회원/팀이라는 관계를 생각해본다. 단방향 : 회원 → 팀, 팀 → 회원 둘 중 한 쪽만 참조하는 관계 양방향 : 회원 → 팀, 팀 → 회원 둘이 서로를 참조하는 관계 다중성 1:1 (일대일) 1:N (일대다 혹은 다대일) N:M (다대다) 연관관계의 주인 : 양방향 연관관계를 만들 떄 연관 관계의 주인을 정해야 한다. 단방향 연관관계 가장 먼..
Bean 생성 원리와 저장 위치 Spring에서 bean 생성 전략은 두 가지로 나뉜다. 일반적으로 singleton을 사용하지만 상황에 따라 prototype bean을 사용하기도 한다. 그렇기 때문에 Spring에서는 bean의 정의를 따로 저장해둔다. 지난 포스트에선 딱 여기까지 진행했었다. 이번엔 실제로 생성된 bean이 어디에 저장되는지를 탐구해보려고 한다. 소스 코드 작성 Spring framework의 코드만 보고 bean의 위치를 직접 찾아가기는 어렵다. 목적에 맞는 소스 코드를 작성한다. SomeBean @ToString public class SomeBean { private String name = "someBean"; } BeanConfiguration public class Bea..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 엔티티 매핑 JPA에서 실제 테이블에 연결하는 객체를 엔티티라고 부른다. 따라서 엔티티와 테이블을 정확히 매핑시켜 사용하는 것이 매우 중요하다. 아래는 매핑을 위한 대표적인 Annotation 목록이다. 객체와 테이블 매핑 @Entity @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column 연관관계 매핑 @ManyToOne @JoinColumn @Entity 테이블과 매핑할 클래스엔 @Entity가 반드시 붙어야 한다. 속성 name (Default : 클래스명) entity에 사용할 이름 엔티티 중복은 허용되지 않는다. entity의 이름과 테이블 이름은 다른 개념이다. 주의사항 기본 생성자는 반드시 ..
Clean Code를 읽고 내용을 정리한 것입니다. 책 구매하러 가기 동시성 객체는 처리의 추상화다. 스레드는 일정의 추상화다. 동시성과 깔끔한 코드는 양립하기 어렵다. 단일 스레드 프로그래밍은 상대적으로 쉬운 편에 속한다. 다중 스레드 코드도 맘만 먹으면 코드를 쉽게 작성할 수 있다. 하지만 쉽게 작성한 다중 스레드 코드는 시스템의 부하가 큰 환경에서 코드 내부 깊숙한 곳부터 발생한 문제가 있을 수 있다. 동시성의 필요성 동시성은 무엇과 언제를 분리하는 전략이다. 단일 스레드 프로그램을 생각해보자. Breakpoint를 걸어놓기만 하면 언제 무엇을 하는지 명확하게 잡아낼 수 있다. 무엇과 언제를 분리하면 프로그램 구조와 효율이 극적으로 나아진다. 구조적인 관점에선 거대한 루프 하나가 아니라 작은 단위의..
Clean Code를 읽고 내용을 정리한 것입니다. 책 구매하러 가기 창발성 (創發性) 하위 체계로부터 생겨나지만, 그 하위 체계로 환원되지 않는 속성 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상 조직(organization)의 일정수준에서 실체에 속한 성질은 그보다 낮은 차원에서 발견된 성질로부터는 예견할 수 없다는 것 즉, 하위 요소를 잘 결합하여 전혀 다른 결과를 얻어 내는 것을 말한다. SW 설계 품질을 높여주는 켄트 벡의 단순한 설계 규칙 4가지 (중요도 순) 모든 테스트 실행 중복 제거 개발자의 의도를 표현 클래스/메소드의 수를 최소한으로 모든 테스트 실행하기 SW 설계는 개발자의 의도가 담겨있다. 테스트를 거친 시스템은 개발자의 ..
· Java/JPA
김영한 님의 [자바 ORM 표준 JPA 프로그래밍]을 읽고 내용을 정리한 것입니다. 교보문고 링크 EntityManager와 영속성 컨텍스트 mybatis처럼 직접 SQL을 작성하거나 JPA를 활용한 개발을 할 때는 눈에 보이는 것 이상의 차이가 있다. 가장 사소한 예시를 들어보자면 CRUD로 불리는 가장 기본적인 4가지 동작 중 UPDATE는 JPA에 존재하지 않는다. 그럼에도 JPA는 업데이트 동작을 잘 수행한다. 영속성 컨텍스트가 데이터의 변경을 감지하여 자동으로 update 쿼리를 실행하기 때문이다. JPA는 EntityManager와 영속성 컨텍스트를 통해 데이터의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행한다. Spring boot + Spring Data를 사용하여 막 JPA를 배우는..
감동이중요해
티끌모아 산을 쌓아보자