일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바예외
- 스프링부트와AWS로혼자구현하는웹서비스
- 네트워크
- 인프런백기선
- 인덱스
- java
- MariaDB
- CleanCode
- 이펙티브자바
- 도메인 주도 개발 시작하기
- react
- 인프런김영한
- 자료구조
- AWS RDS
- DDD
- AWS
- jpa
- 알고리즘
- 알고리즘분석
- mysql
- 클린코드
- 이팩티브 자바
- 자바
- vue.js
- aop
- SQL쿡북
- 혼공SQL
- 이펙티브 자바
- 기술면접
- 자바스터디
- Today
- Total
목록전체 글 (272)
기록이 힘이다.
1. 엔티티의 식별자 생성 특정 규칙에 따라 생성 UUID나 Nano ID와 같은 고유 식별자 생성기 사용 값을 직접 입력 일련번호 사용(시퀀스나 DB의 자동 증가 칼러 사용) UUID uuid = UUID.randomUUID(); String strUuid = uuid.toString(); //엔티티를 생성하기 전에 식별자 생성 String orderNumber = orderRepository.generateOrderNumber(); Order order = new Order(orderNumber, ...); orderRepository.save(order); 2. 밸류 타입 public class OrderLine{ private Product product; private int price; pri..
1.2 도메인 전문가와 개발자 간 지식 공유 코딩에 앞서 요구사항을 올바르게 이해하는 것이 중요하다. 요구사항을 제대로 이해하지 않으면 쓸모없거나 유용함이 떨어지는 시스템을 만들기 때문이다. 요구사항을 잘못 이해하면 변경하거나 다시 만들어야 할 코드가 많아지고 경우에 따라 소프트웨어, 즉 제품을 만드는 데 실패하거나 일정이 크게 밀리기도 한다. 아쉽게도 이런 문제는 자주 발생한다. 도메인 전문가 만큼은 아니겠지만 이해관계자와 개발자도 도메인 지식을 갖춰야 한다. 제품 개발과 관련된 도메인 전문가, 관계자, 개발자가 같은 지식을 공유하고 직접 소통할수록 도메인 전문가가 원하는 제품을 만들 가능성이 높아진다. 1.3 도메인 모델 특정 도메인을 개념적으로 표현한 것이다. 여러 관계자들이 동일한 모습으로 도메인..
CGLIB 구체 클래스 기반 프록시 문제점 -대상 클래스에 기본 생성자 필수 -생성자 2번 호출 문제 -final 키워드 클래스, 메서드 사용 불가 스프링 3.2, CGLIB를 스프링 내부에 함께 패키징 CGLIB를 사용하려면 CGLIB 라이브러리가 별도로 필요했다. 스프링은 CGLIB 라이브러리를 스프링 내부에 함께 패키징해서 별도의 라이브러리 추가 없이 CGLIB를 사용할 수 있게 되었다. 'CGLIB spring-core org.springframework' CGLIB 기본 생성자 필수 문제 해결 스프링 4.0부터 CGLIB의 기본 생성자가 필수인 문제가 해결되었다. 'objenesis'라는 특별한 라이브러리를 사용해서 기본 생성자 없이 객체 생성이 가능하다. 참고로 이 라이브러리는 생성자 호출 없..
2.5부터 순환참조가 금지되었다. 수정자 주입도 마찬가지
@Around만 있으면 되는데 왜? 이렇게 제약을 두는가? 제약은 실수를 미연에 방지한다. 일종에 가이드 역할을 한다. 만약 @Around를 사용했는데, 중간에 다른 개발자가 해당 코드(Object result = joinPoint.proceed();)를 수정해서 후출하지 않았다면? 큰 장애가 발생했을 것이다. 처음부터 @Before 를 사용했다면 이런 문제 자체가 발생하지 않는다. 제약 덕분에 역할이 명확해진다. 다른 개발자도 이 코드를 보고 고민해야 하는 범위가 줄어들고 코드의 의도도 파악하기 쉽다. @Around("hello.aop.order.aop.Pointcuts.orderAndService()") public Object doTransaction(ProceedingJoinPoint joinPo..
1. @Bean을 사용해서 직접 등록 2. @Component 컴포넌트 스탠을 사용해서 자동 등록 3. @Import 주로 설정 파일을 추가할 때 사용(@Configuration)
스프링이 제공하는 AOP는프록시를 사용한다. 따라서프록시를 통해메서드를 실행하는시점에만 AOP가 적용된다. AspectJ를 사용하면앞서설명한것처럼더 복잡하고 더다양한 기능을사용할 수있다. > 그렇다면 스프링 AOP 보다는 더기능이많은 AspectJ를직접 사용해서 AOP를 적용하는것이더 좋지 않을까? > AspectJ를 사용하려면공부할내용도 많고, 자바관련 설정(특별한컴파일러, AspectJ 전용 문법, 자바 실행옵션)도복잡하다. 반면에스프링 AOP는 별도의추가 자바설정 없이스프링만있으면 편리하게 AOP 를사용할 수있다. 실무에서는스프링이 제공하는 AOP 기능만 사용해도대부문의 문제를해결할수 있다. 따라서스프링 AOP가제공하는기능을학습하는것에집중하자.