[웹 MVC 개발]
정적 컨텐츠 - 요청이 오면 관련 컨트롤러가 있는지 먼저 찾고 없으면 static 파일을 찾도록 되어있다.
HomeController에서 먼저 찾아봄 -> mapping된 것이 있으면 해당 컨트롤러 호출하고 끝남
--> 다른 html 파일은 무시된다.
@GetMapping("/members/new") //조회할 때 주로 사용
public String createForm(){
return "members/createMemberForm";
}
@PostMapping("/members/new") //data를 form에 넣어서 전달할때 사용
public String create(MemberForm form){
Member member=new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/"; //회원가입이 끝나면 홈화면으로 보내기
}
회원가입을 들어가면 /members/new로 들어가게 된다.
/members/new로 매핑되어서 createMemberForm.html로 이동하게 된다.
thymeleat 템플릿 엔진이 해당 html를 렌더링 하게 된다.
url은 똑같지만 get이냐 post냐에 따라서 다른 방식으로 진행되게 된다.
GetMapping : 데이터 조회
PostMapping : 데이터 등록
[HTML 태그]
<form태그> 값을 입력할 수 있는 태그
<input태그> name이 서버로 넘어갈 때 key가 된다</input태그>
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
[데이터베이스 연결]
h2 데이터베이스
연결할 때 다음 url 사용하기

똑같은걸 연결시켜 주기 위해 DataSourceUtils를 통해서 connection, release 해야한다
[순수 Jdbc]
JdbcMemeberRepository파일 추가하고 SpringConfig파일만 수정만 하면 됨
-> 기존 파일에는 손댈 필요가 없다 !!
public class SpringConfig {
private DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource){
this.dataSource=dataSource;
}
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
// return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
}
스프링 컨테이너가 다형성[객체지향의 특성]을 지원해준다. => 스프링의 장점
구현체가 <memory> memberRepository에서 <jdbc> memberRepository로 바뀐다
개방 폐쇄 원칙이 지켜진 것
기존 코드는 바꾸지 않으면서 설정만으로 구현 클래스 변경 가능
[스프링 통합 테스트]
@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
@Transactional : 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. [각각의 테스트마다 수행됨]
-> 이렇게 하면 DB에 데이터가 남지 않기 때문에 다음 테스트에 영향을 주지 않는다. [@AfterEach 대신 사용]
[스프링 JdbcTemplate]
순수 Jdbc와 동일한 환경설정을 하면 된다.
JDBC의 반복 코드를 대부분 제거해준다. but SQL은 직접 작성해야함
Jdbc -> JdbcTemplate = 반복적인 코드가 확 줄어든다.
Jpa -> 알아서 sql을 만들어주고, 객체 중심의 설계로 바꿔주며 개발 생산성을 크게 높일 수 있다.
[Jpa]
반복 코드 없애줌 + SQL도 직접 만들어서 실행해줌
query문 작성 없이 data 객체 저장
@Transactional 이 반드시 존재해야한다.
EntityManager 필요
[스프링 데이터 JPA]
인터페이스 작성만으로 끝나버린다.
대부분의 기본 메서드(CRUD)가 모두 제공된다.
[AOP] Aspect Oriented Programming
모든 메소드의 호출 시간 측정?
공통 관심 사항 vs 핵심 관심 사항을 분리할 수 있다.
Proxy라는 가짜 memberRepository를 만들어서 진행한다.
'spring' 카테고리의 다른 글
스프링 스터디_마지막 (0) | 2022.02.24 |
---|---|
스프링 스터디 6주차 (0) | 2022.02.17 |
스프링 스터디 5주차 (0) | 2022.02.10 |
스프링 스터디 4주차 (0) | 2022.02.03 |
스프링 스터디 3주차 (0) | 2022.01.27 |