전체 글154 [Spring] 스프링 핵심 원리 - 기본편 > 섹션 7. 의존관계 자동 주입 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] 섹션7. 의존관계 자동 주입에 대한 요점 정리를 하였다. 목차 1.의존관계 주입방법 2.조회 빈이 2개 이상일 경우 3.어노테이션 직접 만들기 1.의존관계 주입방법 의존관계 주입 방법에는 크게 4가지가 있다. 1. 생성자 주입 2. 수정자 주입(setter 주입) 3. 필드 주입 4. 일반 메서드 주입 이 중에서 생성자 주입을 기본으로 사용하자. 대부분의 의존관계 주입은 변하면 안되기 때문이다. 수정자 주입 방식은 다른 필드 값들도 주입해주어야 하므로 누락의 가능성이 있다. 필드 주입은 테스트하기 어렵고 @Configuration 같은 특별한 용도에서만 사용한다. 일반 메서드 주입은 한번에 여러 필드를 주입 받을 수 있지만 잘 사용하지 않는다. @C.. 2024. 4. 11. [Spring] 스프링 핵심 원리 - 기본편 > 섹션 6. 컴포넌트 스캔 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] > 섹션6. 컴포넌트 스캔에 대한 요점 정리를 하였다. 메서드에 @Bean 적용을 해야 하는 경우가 너무 많아질 경우가 있다. @Bean 적용 없이 동일하게 스프링 빈으로 등록하고 싶을 경우, 클래스에 @Component를 적용하고 DI를 위해서 생성자에 @Autowired를 적용한다. 그리고 @ComponentScan을 적용한 클래스를 만들면 된다. @ComponentScan은 이름 그대로 @Component 어노테이션을 적용한 클래스를 스캔해서 스프링 빈으로 등록한다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Conf.. 2024. 4. 11. [Spring] 스프링 핵심 원리 - 기본편 > 섹션 5. 싱글톤 컨테이너 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] > 섹션5. 싱글톤 컨테이너에 대한 요점 정리를 하였다. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } ... } 스프링이 없이 순수한 DI 컨테이너인 AppConfig는 클라이언트가 memberServiceImpl을 요청할 때 마다 새로운 memberServiceImpl을 생성하고 반환한다.(-> 메모리 낭비 발생) 이유는 스프링이 없는 순수한 DI 컨테이너는 싱글톤을 보장해주지 않기 때문이다. 객체를 1개만 생성하고 공유하도록 설계하는 스프링 컨테이너를 사용하자. 스프링 컨테이너는 객체 .. 2024. 4. 10. [Spring] 스프링 핵심 원리 - 기본편 > 섹션3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] 섹션3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용에 대한 요점 정리, 강의 외 추가 코드 작성을 하였다. 고객이 제품을 주문하고 할인을 받는 내용이다. 할인 정책 요구사항 변경이 생겼다. 기존 고정 할인에서 정률(%) 할인으로 변경 요구사항이다. 이 요구사항은 다시 고정 할인으로 되돌릴 수도 있다. 할인에 대해 명세가 확정되지 않았다는 것이다. 이러한 상황에서 어떻게 객체 지향적으로 다형성, OCP, DIP를 만족시킬 수 있을지를 중점적으로 볼 것이다. 주문 생성시 제품에 할인을 적용하는데 할인이 바뀔 수 있게 구현해야한다. DiscountPolicy 인터페이스를 만들고 구체 클래스인 FixDiscountPolicy(고정 할인), RateD.. 2024. 4. 8. [Git] git pull 오류시, 강제 git pull을 이용한 덮어쓰기 Git을 사용하다 보면 여러 가지 이유로 git pull 명령어가 예상대로 작동하지 않는 경우가 있다. 네트워크 문제, 충돌(conflict) 발생, 로컬 변경 사항 등 다양한 원인으로 인해 Git 작업 흐름에 지장을 받을 수 있다. 이러한 상황에서 강제로 git pull을 실행하여 원격 저장소(repository)의 내용을 강제로 동기화하는 방법은 크게 세 단계로 나누어 볼 수 있다. 1. git fetch로 받을 목록을 repository에서 업데이트 git fetch -all git fetch --all 명령어는 모든 원격 저장소와 브랜치의 최신 변경 사항을 로컬 저장소로 가져오지만, 실제 작업 디렉토리의 파일은 변경하지 않는다. 이 단계는 로컬 저장소의 정보를 최신 상태로 업데이트하며, 실제 파일.. 2024. 4. 8. [MYSQL] TRUNCATE() 사용 이유 TRUNCATE() 사용방법은 다음과 같다. TRUNCATE(값, 버림할 자릿수) 자릿수를 버림해야할 경우 사용한다. TRUNCATE(값, 0): 소수점 제거 해줌 TRUNCATE(100.123, 0) -> 100 TRUNCATE(값, 1): 소수점 1자리수 미만은 버림 TRUNCATE(100.123, 1) -> 100.1 TRUNCATE(값, 2): 소수점 2자리수 미만은 버림 TRUNCATE(100.123, 2) -> 100.12 2024. 3. 25. DDD(Domain Driven Design) 애그리거트 Chapter 3. 애그리거트(Aggregate) 3.1 애그리거트 애그리거트는 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들어 상위 수준에서 모델을 조망하기 위해 사용한다. 애그리거트는 엔티티 안에 밸류를 넣음으로 관련 객체를 묶는 방식으로 구현한다. 관련 객체를 하나로 묶기 때문에 루트 엔터티를 만들 때 관련 밸류 오브젝트도 함께 생성해야한다. 애그리거트는 보통 한 개의 엔터티 객체만 갖는다. 두 개 이상의 엔터티는 드물다. 3.2 애그리거트 루트 애그리거트에 속한 모든 객체가 일관된 상태를 유지하려면 애그리거트 전체를 관리할 주체가 필요하며, 이 주체는 루트 엔터티이다. 애그리거트 루트라고도 한다. 3.2.1 도메인 규칙과 일관성 루트의 핵심 역할은 도메인 규칙에 따라서 애그리거트의 일관성이 .. 2024. 3. 20. DDD(Domain Driven Design) 엔티티와 밸류 DDD 도메인 주도 개발을 하는 이유는 무엇일까 DDD로 개발하면 명확한 개념으로 잘게 쪼개어 개발함으로 - 요구사항에 적합한 개발 가능 - 다른 개발자가 코드를 볼 때도 이해가 쉬움 - 리팩토링의 수고를 덜 수 있음 - 유지보수 하기 좋은 코드가 됨 Chapter 1. 도메인 모델 시작하기 1.6 엔티티와 밸류 클래스 다이어그램은 엔티티와 밸류로 구분할 수 있다. 엔티티와 밸류를 구분해야 하는 이유는 도메인의 올바른 설계를 위해서이다. 1.6.1 엔티티 엔티티의 특징은 고유한 식별자를 가진다는 것이다. 이 고유한 식별자로 엔티티를 구분할 수 있다. 1.6.2 엔티티의 식별자 생성 엔티티의 식별자 생성 방법은 도메인 상황에 따라 달라진다. 식별자는 보통 다음 4가지로 생성한다. - 1) 특정 규칙에 따라.. 2024. 3. 19. 이전 1 2 3 4 5 6 ··· 20 다음