반응형
인텔리제이 꿀 단축기
- ctrl + R : 이전에 실행했던 것 그대로 실행시켜 줌(테스트할 때 유용)
- option + cmd + shift + L : 라인, import 정리
- cmd + option + v : 리턴 객체 자동 할당
- shift + F6 : 붙여넣기 한 것들 renaming
- cmd + E : 최근 봤던 파일 목록 보여 줌
- option + Enter : static import 등록(테스트에 유용)
- cmd + shift + T : test class 자동으로 생성해 줌
- cmd + N : 생성자, 테스트 케이스 생성 도와 줌
- ctrl + T : refactoring something (inline value 꿀팁!!)
스프링 꿀팁
- 통합 테스트 보다는 단위 테스트를 잘 만들어야 좋은 테스트다.
- @SpringBootTest 를 붙여주면 스프링을 실제로 기동하고 테스트를 진행함.
- @Transactional 이 테스트 class 에 붙어 있으면 테스트가 끝날 때 마다 항상 rollback 해 준다.
- 테스트는 항상 given, when, then 순서대로 진행한다.
- 테스트 메서드 명은 항상 영어일 필요는 없다.
- 스프링 빈을 등록하는 방법은 2가지가 있다.
- a) 컴포넌트 스캔과 자동 의존관계 설정에 따른 빈 등록
- b) 자바 코드로 직접 스프링 빈 등록
- a) @Component 를 붙여주면 처음 스프링이 기동될 때 컴퍼넌트 스캔이 되면서 빈을 등록해 준다.
- 빈을 주입할 때 생성자로 빈 주입할 경우(only 생성자가 하나일 때) @Autowired 가 생략 가능하다.(참고로 빈 주입에는 )
- @Component를 포함하는 다음 어노테이션도 스프링 빈으로 자동 등록된다.
- @Controller
- @Service
- @Repository
- DI에는 총 3가지가 있다
- 필드 주입
- setter 주입
- 생성자 주입
- 여기서 생성자 주입을 권장한다.
섹션 2. 스프링 웹 개발 기초
- MVC와 템플릿 엔진
- Controller
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data","hello!!");
return "hello";
}
}
- View
resources/templates/hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
- 실행
http://localhost:8080/hello
- API
- @ResponseBody
@ResponseBody 를 사용하면 viewResoler를 사용하지 않음
대신 HTTP의 body에 문자 내용을 직접 반환함.
더 자세한 로직을 살펴보면
- HTTP의 body에 문자 내용을 직접 반환
- viewResovler 대신에 HttpMessageconverter 가 동작
- 기본 문자 처리 : StringHttpMessageConverter
- 기본 객체 처리 : MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter 가 기본으로 등록되어 있음
섹션 3. 웹 MVC
- 컨트롤러 : 웹 MVC의 컨트롤러 역할을 함
- 서비스 : 핵심 비즈니스 로직을 구현 함
- 리포지터리 : DB에 접근, 도메인 객체를 DB에 저장하고 관리 함
- 도메인 : 비즈니스 도메인 객체 역할을 함(ex) 회원, 주문, 쿠폰 등등), 주로 DB에 저장하고 관뢰 됨
- 보통 인터페이스로 구현 클래스를 쉽게 변경가능하도록 설계 함.
- 개발 초기 단계에는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
테스트 케이스 작성
- src/test/java/ 밑에 똑같은 디렉토리 구조로 하위 폴더를 생성한다.
- 테스트 케이스를 작성한다.
- 테스트 케이스 작성 예
hello/hellospring/repository/MemoryMemberRepositoryTest
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
// 테스트는 순서와 상관없이 실행되어야 한다.
// 객체의 정합성을 테스트 한다.
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() {
repository.clearStore();
}
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
@Test
public void findByName() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
Member result = repository.findByName("spring1").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}
- @Test 를 붙이면 Test 할 function으로 인식한다.
- 보통 Test Class 의 명명 규칙은 ...Test 라고 한다.
- 보통 Repository Test를 먼저 작성하고 Service Test를 작성한다.
- JPA 와 Spring Data JPA 완전 다른 것이다.
- 테스트를 할 떄 중요한 원칙 5가지가 있다.(FIRST)
- F(Fast) : 테스트는 빠르게 수행되어야 한다.
- I(Independent) : 테스트는 독립적으로 수행되어야 한다.
- R(Repeatable) : 테스트는 반복적으로 수행해도 결과가 같아야 한다.
- S(Self-Validating) : 테스트는 자체적으로 검증 가능해야 한다.
- T(Timely) : 테스트는 적시에 작성되어야 한다.(TDD 에서는 중요!!!!)
섹션 7. AOP
- 공통 관심 사항 (cross-cutting concern) VS 핵심 관심 사항(core concern) 분리해서 생각해야 함.
- AOP 는 공통 관심 사항에 대한 것만 관련해서 적용
참고 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8
반응형
'Spring > 강의' 카테고리의 다른 글
김영한의 스프링 완전 정복 (스프링 핵심원리 - 기본 편) : 섹션1. 객체 지향 설계와 스프링 (0) | 2023.05.06 |
---|