개발한 기능을 실행해보기 위한 방법
1) main메서드를 통해서 실행
2) 웹 애플리케이션의 컨트롤러를 이용해 실행
위 두가지 방법은 준비하고 실행하는데 오래걸리고, 반복 실행이 어려우며 여러 실행 테스트를 한번에 실행하기 어렵다는 단점이 존재함
그렇기 때문에 JUnit이라는 프레임워크로 테스트를 실행하여 위 문제점을 해결
테스트 코드
테스트 코드는 순서를 보장하지 않음 -> 테스트 코드 작성은 어떤 순서로 수행되도 상관 없게 작동하도록 작성해야함
한 테스트가 끝나면 메모리나 디비에 데이터가 삭제되도록 해야함
테스트 코드 메서드명?은 한글로 작성해도 됨
의존성 주입
@Autowired로 자동 의존 관계 설정해줌
의존성주입 3가지
1) 필드 주입
2) setter 주입
3) 생성자 주입(권장)
스프링 빈 등록
- 스프링 빈 등록은 기본으로 싱글톤으로 등록(설정으로 '싱글톤이 아니게 등록할 수 있다' 라는 건 알아두기)
1) 컴포넌트 스캔
@Component(<-@Controller, @Service, @ Repository) 어노테이션을 붙여서 빈을 등록하는 방법
스프링 컨테이너에 등록을 함
스프링이 컴포넌트 스캔하는 범위: @SpringBootApplication이 있는 같은 패키지(어노테이션을 확인해보면 @ComponentScan을 확인해 볼 수 있음 그래서 기본적으로 같은 패키지에 위치하면된다라고 생각하면 되고, 필요 시 따로 설정하면 됨)
2) 자바 코드로 직접 스프링 빈 등록
@Configuration을 붙인 클래스를 만들어서 직접 @Bean등록을 해줌 Controller는 할 수 없고 Service와 Repository만 가능함
-> 당근 1번 방법이 쉽기 때문에... 1번 방법으로만 사용하지 않을까 싶은데...
3) XML로 설정하는 방법
과거에는 많이 사용했지만 최근에난 잘 사용하지 않아서 강의에서는 다루지 않음
http 요청 했을 때 관련 컨트롤러가 없는경우 html 띄우기, localhost:8080입력 했을 때 "/" 에 매핑 된 컨트롤러가 있는 경우 그 컨트롤러를 호출 하는거~!(만들어 둔 html 무시됨)
스프링 DB 접근 기술
1) 순수 JDBC: 과거 사용 기술
2) 스프링 JDBC 템플릿
- 스프링이 제공한 기술로 어플리케이션에서 JDBC로 데이터를 보내는 기술
- JDBC API에서 본 반복 코드 대부분을 제거해줌 하지만 SQL을 직접 작성해야함
3) JPA
구현한 여러 기업이 있지만 Hibernate 를 사용
4)스프링 데이터 JPA
실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용
개방-폐쇄 원칙(OCP, Open-Closed Principle)
확장에는 열려있고 수정, 변경에는 닫혀있다.
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
공통 관심 사항(corss-cutting concern)과 핵심 관심 사항(core concern)
- 핵심 관심 사항과 공통 관심 사항을 분리해서 코드를 관리 할 수 있다는 것이 장점 인 듯
- 원하는 적용 대상을 선택 할 수 있다는 것도
- 동작원리에 대한 공부가 더 필요할 듯 하지만 크게 이해하자면 AOP적용 전에는 컨트롤러가 서비스를 서비스가 리포지토리를 의존하는 관계였다면, AOP 적용 후에는 프록시라는 가짜를 의존하는 관계가되고 joinPoint.메서드가 수행 될 때 진짜 컨트롤러, 서비스, 리포지토리를 호출하는 그런 느낌
강의 듣고 느낀 점
1. 테스트
스프링 컨테이너까지 올려서하는 통합테스트보다는 단위 테스트가 중요하다고 말씀하시는데
왜인지는 잘 모르겠다... 하나하나의 기능의 문제가 없으면 통합했을 때도 문제가 없을 확률이 높기 때문일까???
아니면 순수하게 정상 기능에 대한 것과 예외처리 같은 전반적인 것을 테스트하는 것이 중요하기 때문인 걸까???
이번 프로젝트하면서 처음으로 테스트를 엄청 신경 쓰면서 했는데
단위 테스트 보다 통합 테스트가 전체적인 것을 테스트해야 했기 때문에 난도가 훨씬 높다고 느꼈고 그래서 시간도 더 쓸 수 밖에 없었다.
단위 테스트에 더 시간을 투자했어야 했나....ㅠㅠ
아무래도 프로젝트 테스트 부분을 좀 더 개선해야겠다.
2. JPA
스프링 데이터 JPA는 계속 사용했었던 거라 전체적인 흐름은 다 알겠는데.. 그 위에 기술들 진짜 이해 하나도 안감;;;; 머리 터질 뻔...
그나마 JPA는 아주 조금..? 본적 있는 정도...
JPA를 쉽게 사용하게 하기위해 제공되는 것이 스프링 데이터 JPA이기 때문에 JPA 공부는 꼭 필요하다고 함
그래야 문제가 발생했을 때 해결할 수 있는 능력을 가질 수 있는 거라고..
그래서 내가 프로젝트에서 JPA쪽 막힐 때 힘들었던 거였어....ㅎ
3. AOP
다른 강의 들으면서 접하고, AOP 개념 정리가 과제라서 정리하면서 접하고 그랬었는데 진짜 동작 원리에 대한 생각을 아예 안했구나싶다. 후에 핵심 강의에서 알려주신다고하니 그 때 배워야징..
4. 전체
스프링 처음 접하고 스프링이 뭔지 아~~~~~무것도 모를 때 이해가 안가서 이 강의를 앞 부분만 한 4-5번 들었나..
계속 프로젝트하고, 프로젝트 끝나고는 자바 좀 제대로 잡자는 생각에 자바 공부하고 이제서야 다시 스프링 공부를 시작하게 됐다.
처음 강의들었을때 1도 이해 못한 부분이 이제는 대부분이 아는 내용되었다.
부트캠프하면서 했던 경험들이 도움이 되긴 했나보당... 신기하당...ㅎㅇㅎ
김영한님 강의 30% 할인 하길래 큰 맘먹고 스프링 로드맵 강의 다 질러버렸다...진짜...빡공하자...!!
김영한님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 듣고 공부한 내용 기록
'오늘의 공부 & 기록' 카테고리의 다른 글
2월 14일(화) (0) | 2023.02.14 |
---|---|
2월 13일(월) (0) | 2023.02.13 |
스프링 강의와 HashMap, 스트림 복습 (1) | 2023.01.29 |
스프링 강의 메모 (0) | 2023.01.28 |
H2 DB와 인텔리제이(IntelliJ) 연동으로 더 간편하게 DB사용하기 (0) | 2022.12.23 |