전체 글
-
TIL28(2021.11.18)TIL(Today I Learned) 2021. 11. 18. 16:55
ComponentScan 📌 @Bean을 일일히 생성하지 않고, 자동으로 스프링빈 생성해주는 기능.(@Component를 클래스마다 추가해야함.) @AutoWire를 이용해 의존관계주입 AppConfig(메인 설정 파일) 하위가 모두 컴포넌트 스캔 대상이되고, AppConfig가 있는 루트에 coreApplication(시작 정보)를 두는것이 관례이다. ComponentScan filter기능(보통 잘 사용하지 않음, 스프링 기본 설정을 최대한 맞춰 사용하는것이 좋다.) 수동빈 vs 자동빈(애매한 버그가 일어날 수 있기 때문에 오류가 발생한다.)(단, 설정을 통해 가능하게 할수도 있다.) 궁금한점 📌 beanA, beanB 메서드는 선언해주지 않았는데 어떻게 사용가능한가?(get.Bean()에서) 스프링..
-
TIL 27 (2021.11.17)TIL(Today I Learned) 2021. 11. 17. 19:45
Spring Container 🎯 BeanDefinition (= interface)이 아래 데이터들(metadata)의 추상화 역할을 해서 읽어드린다. AppConfig.class (= 구현체) appConfig.xml appConfig.xxx Singleton Pattern🎯 pure java는 웹(클라이언트)에서 요청이 올때마다 새로운 객체를 생성한다. 이는 Memory waste를 초래한다 해결방안 : Singleton pattern을 사용한다. Singleton은 하나의 객체만 생성하고 공유하도록 설계가 가능하다. Problems of Singleton Pattern DIP 위반 테스트의 어려움 복수의 생성자 생성의 어려움(다형성을 크게 떨어트림) SpringContainer(SingletonC..
-
TIL(2021.11.16)(26일차)TIL(Today I Learned) 2021. 11. 16. 14:50
TIL(2021.11.16)(26th day) ✔ spring container find spring container all of bean Find bean using role and definition. Find same type bean(getBeansOfType) 부모 타입 조회 = 자식 타입도 함께 조회. spring container 🎯 ApplicationContext = 스프링 컨테이너 or interface new AnnotationConfigApplicationContext(AppConfig.class)는 구현체 빈 이름 + 빈 객체로 구성 빈 이름은 서로 다르게 구성 스프링 빈 의존관계 설정 spring container BeanName, Bean Object 꺼내기 Test 🎯 be..
-
TIL 25일차 (2021.11.15)TIL(Today I Learned) 2021. 11. 15. 17:43
TIL(2021.11.15)(Today 25) ✔ 변화에 대응하는 객체지향 설계(애자일 실행 관례) interface와 구현체의 분리 AppConfig 구현 (생성자 주입을 통한 관심사 분리) 구현체가 구현체에 의존하지 않도록 설정. 실제 동작에 필요한 "구현 객체를 생성" 생성한 객체 인스턴스의 참조를 "생성자를 통해 주입(연결)" 해준다. DI(Dependency Injection), 의존관계 주입 "사용 영역"과 "구성 영역"의 분리 SRP(한 클래스는 하나의 책임) 클라이언트는 실행만, AppConfig를 통해 연결과 구성요소를 생성 ] OCP(sw 확장에는 열려있으나 변경에는 닫혀있어야 한다.) 전제조건 : 다형성 + DIP 사용 영역과 구성 영역을 분리 그로 인해 구성 영역만 변경, 사용 영역..
-
TIL(24일차)(2021.11.14)TIL(Today I Learned) 2021. 11. 14. 16:49
SOLID 📌 SRP : 단일 책임 원칙 Single Responsibility Principle 하나의 클래스에는 하나의 책임만 가진다(책임의 크기는 클 수도, 작을 수도 있다.) 중요한것은 변경의 파급력이다. 변경의 파급이 적을 수록 단일 책임 원칙을 잘따른것이다. OCP : 개방-폐쇄 원칙 Open/Closed Principle 가장 중요한 원칙 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 즉, 코드 확장은 가능하지만 변경은 불가능하다는 역설적인 의미. 인터페이스를 구현한 클래스들의 변경은 가능하지만, 인터페이스 자체의 변경은 안된다는 의미. 다형성의 '역할'과 '구현'의 분리 하지만! 구현 자체를 변경하는것도 OCP를 위반하는 행위 그러므로 Ioc와 DI 등을 설정해줘서 ..
-
TIL(23일차)(2021.11.13)TIL(Today I Learned) 2021. 11. 13. 14:31
TIL(2021.11.13) spring data JPA📌 개발 생산성 대폭 증가 리포지토리에 구현 없이도 인터페이스 만으로 개발을 완료할 수 있다. 기본 CRUD 기능도 모두 제공 따라서 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있게된다. //SpringDataJpaMemberRepository.java public interface SpringDataJpaMemberRepository extends JpaRepository, MemberRepository { @Override Optional findByName(String name); } 데이터 JPA가 인터페이스를 받아서 자동으로 구현체와 스프링빈을 만들어준다. JpaRepository는 jpa에서 제공하는 기능으로 데이터 jpa가 인터..
-
TIL(22일차)(2021.11.12)TIL(Today I Learned) 2021. 11. 12. 14:22
Spring Framework의 장점📌 -> 객체지향 설계가 가능 -> 인터페이스를 지정하고 구현체를 사용자 임의대로 바꿀 수 있음.(DI 덕분에) -> 즉, memberService는 memberRepository를 의존하고 있고, 구현체로 memoryMemberReposotory와 , jdbcMemberRepository가 있다고 가정했을 때 -> 사용자 임의대로 memoryMemberRepository를 삭제하고 jdbcMemberRepository로 구현할 수 있다. -> 이는, SOLID에서 O(OCP, Open-Closed Principle) 즉, 개방-폐쇄의 원칙을 만족시킨다. -> 확장에는 열려있고, 수정에는 닫혀있다. 왜냐하면 기존 코드는 손대지 않고 새로운 jdbcMemberReposi..
-
TIL 21일차(11.11)TIL(Today I Learned) 2021. 11. 11. 15:17
정적 컨텐츠 실행 순서 -> 처음 클라이언트에 요청이 오게되면 내장 톰켓을 지나간다 -> 그리고, 컨트롤러에 요청이 있는지 확인한다(있다면 출력하고 정적 컨텐츠가 있다면 무시함.) @Controller public class HomeController{ @GetMapping("/") public String home() { return "home"; } }-> 컨트롤러에 아무런 요청이 없다면 정적 static.html을 출력한다. Hello hello MVC //createMemberForm.html file -> name="name"은 key역할 //Memcontroller.java file @PostMapping("/members/new") public String create(MemberForm f..