Spring에 대해 처음 공부를 시작하는 경우에 스프링에서 동작하는 방식을 이해시키기 위해서 정리해보았습니다!
@ResponseBody
이용하면, viewResolver 대신 HttpMessageConverter(문자 직접 반환)인터페이스를 이용해서 모듈화 표현
domain(member) → interface(memberRepository : id 저장, 불러오기 등 CRUD 선언)
→ repository(interface @Overide 구현) : 동시성 문제로 ConcurrentHashMap, AtomicLong
→ test → service(리포지토리 생성 + ~회원가입, 목록 불러오기 등 구현)
→ controller(서비스 의존관계 생성 + @getMapping 함수들)
Optional 클래스 : 'T'타입의 객체를 포장 & nullPointer 문제 해결(null 값 예외 처리)
test : repository 객체 생성 + @Test { given : 데이터 생성 - when : 작업 - then : 결과(비교) } + @AfterEach
assertThat(특정 값).isEqualsTo(?); ← ?이 맞는지
~.ifPresent(m -> { throw new IllegalStateException("이미 존재"); });
: ~에 값이 존재하면, 이미 존재한다는 오류 문장 출력
service에 repository 객체를 DI(의존성 주입 : 필드/setter/생성자 3가지)를 통해 넣기
스프링 빈 등록 2가지 방법
1) 컴포넌트 스캔과 자동 의존관계 설정
⇒ 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록(하나 등록 후 공유)
2) 자바 코드로 직접 스프링 빈 등록
controller
return "redirect:/";
: ‘/’로 이동DB → mysql : https://yiyj1030.tistory.com/463
H2 데이터베이스 설치 → application.properties에서 mysql 연결 코드 추가
순수 Jdbc → 위 5번 jdbc에 추가 작성
스프링 통합 테스트
스프링 JdbcTemplate
JDBC API에서 본 반복 코드를 대부분 제거, 그러나 SQL은 직접 작성
→ 저장소를 jdbcTemplate 형태로 사용하기 위해 스프링 설정에서 저장소 생성 변경
JPA
- 기존의 반복 코드 + 기본적인 SQL도 JPA가 직접 만듬
스프링 데이터 JPA
서비스 계층에 트랜잭션 추가
AOP - 시간 측정