Open kyupid opened 3 years ago
강의명 : 스프링 MVC 1편 수강 회차 <스프링 MVC - 구조 이해> 스프링 MVC 가 어떻게 구성되었는지 알아보았다 자세한 기능은 다음에 들어보도록 하자
강의명 : 스프링 입문 수강 회차 <프로젝트 환경설정> 스프링 MVC 1편을 통해서 스프링 프레임워크를 직접 만들어보았다 이 과정을 다 거치고 난 후 스프링 입문 편을 들으니 @Controller 나 @GetMapping 이 무엇인지 알아볼 수 있었다
프로젝트에 직접 적용해보려니,, 수강 순서가 뒤죽박죽이다 일단 스프링 입문 복습을 통해 간단하게 스프링을 정리해보고 스프링 MVC 1편부터 다시 꼼꼼하게 복습해보자
자바 코드로 직접 스프링 빈 등록하기
참고: XML로 설정하는 방식도 있지만 최근에는 잘 사용하지 않으므로 생략한다.
참고: DI에는 필드 주입, setter 주입, 생성자 주입 이렇게 3가지 방법이 있다.
참고: 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다. -> 상황에 따라 DB를 연결할 경우 사용
주의: @Autowired 를 통한 DI는 helloConroller , memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다. -> 컴포넌트 스캔이 되지 않은 클래스의 @Autowired는 동작하지 않는다.
@GetMapping(“/“)
: 첫 페이지[image:300B4D9B-EECA-4652-9EAD-9FB5E79CE55C-74013-000010B31FFBD5A9/Untitled 2.png]
참고: 컨트롤러가 정적 파일보다 우선순위가 높다.
*redirect:/
: /
로 이동
@GetMapping
에 의해서 /members/new
로 이동return
에서 members/createMemberForm.html
파일 렌더링<form action=“/members/new” method=“post”>
에서 post 방식으로 /members/new
로 폼 전송@PostMapping
에서 폼을 수신하고 회원 등록@GetMapping
에서 /members
로 이동model.addAttribute(“members”, members)
로 모델에 members 입력return
에서 members/memberList
파일 렌더링<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
객체지향 5대원칙 코드로 설명해주시면서 자세히 알려주시는데 이해가 잘 안간다.
가령 코드를 보여주시면서 이때 _OrderServiceImpl_은 DIP 원칙에 어긋난다고 하시는데, 왜냐하면 _OrderServiceImpl_은 DisCountPolicy 인터페이스에만 의존하는게 아니라 _RateDiscountPolicy_에도 의존을 하고 있고 구현체를 변경했을경우에, _DisCountPolicy_를 구현하고있는 또 다른 구현체인 _FixDiscountPolicy_를 구현하고 있기때문에 DIP 원칙에 어긋난다는 것이다.
위에 있는 코드로 예시를 들자면 상위모듈이라는 것은 할인 정책이 될것이고, 하위모듈은 각 세부적인 _RateDiscountPolicy_나 FixDiscountPolicy 같은 클래스가 하위 모듈이 될것이다.
상위 모듈은 하위 모듈의 구현에 의존해서는 안된다는 것은 상위 모듈인 _OrderServiceImpl_이 하위모듈인 _RateDiscountPolicy_와 _FixDiscountPolicy_에 의존해서는 안된다는 말이다. 그래서 DIP -> 의존성을 역전했다는 말은 아직까지도 이해가 안가긴하지만..