✍스프링 프레임워크 (Spring Framework)
-
경량화된 프레임워크로 진입 장벽이 높지 않고 빠른 시간에 시스템 구축 가능
-
어느 한 분야에만 집중하지 않고 전체를 설계하는 용도로 사용 가능
-
여러 종류의 프레임워크를 혼용해서 사용 가능
-
POJO(Plain Old Java Object) 기반의 구성
- 스프링은 내부적으로 객체 간의 관계를 구성할 때 별도의 API등을 사용하지 않는 POJO만으로 구성이 가능하도록 되어 있어 일반적인 Java 코드를 이용하여 객체를 구성하는 방식 그대로 사용이 가능하다.
- 이는 특정한 라이브러리나 컨테이너 기술에 종속적이지 않다는 것을 의미하며 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 높은 생산성과 유연한 테스트를 할 수 있다
-
AOP(Aspect Oriented Programming) 지원
- 스프링은 AOP는 AspectJ 모듈의 문법을 통해 작성 가능하고 반복적인 코드를 줄이고 개발자가 핵심 비즈니스 로직에만 집중하며 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다
✍스프링에서 DI (Dependency Injection,의존성 주입) 를 사용하는 이유
의존성 주입의 3가지
- 생성자 주입
생성자에서 받는 방식이다. 컨테이너가 알아서 생성자에 객체를 넣어주면서 생성하는 방식이다. 이 때 final로 설정하는 것이 좋다.
- setter 주입
- 필드 주입
주입 받을 필드에 @Autowired 어노테이션을 붙여주면 컨테이너가 알아서 resolve 해준다.
✍스프링 시큐리티를 사용한 회원관리 방법 순서도
✍개발자 테스트 코드 작성 시 장/단점과 테스트 종류 별 (단위 테스트, 통합 테스트, E2E 테스트) 로 특징
1. 개발자 테스트
🌝 장점
- 테스트 자동화 가능(배포 절차시 테스트 코드가 수행되어 동작 검증)
- 리팩토링 할때마다 프로그램 전체 다 실행하면서 고칠 필요 없어짐
🌚 단점
- 개발시간이 오래 걸림
- 기존 코드 작성 시 테스트 코드도 같이 수정하여 유지보수 비용 발생
2. 단위 테스트 (Unit Test)
프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해준다
- Edge 케이스 고려한 단위테스트
다양한 예상치 못한 사용자의 요청들을 예상하는 것
- Mock Object 사용한 단위테스트
직접 목객체를 만들 수 있지만, Mockito를 사용하면 편하게 사용 가능
3. 통합 테스트 (Integration Test)
Controller→Service→Repository 를 통합해서 테스트하는 것
- 단위 테스트
- 하나의 모듈이나 클래스에 대해 세밀한 부분까지 테스트 가능
- 모듈 간에 상호작용 검증하지 못함
- 통합 테스트
- 두개 이상의 모듈이 연결된 상태 테스트
- 모듈간의 연결에서 발생하는 에러검증가능
- E2E(End to End Test)
- 실제 사용자화 거의 동일한 환경에서 테스트(=블랙박스 테스팅)
4. @SpringBootTest 이용한 통합테스트
단위 테스트 시 스프링은 동작이 안되지만 어노테이션을 붙이면 동작 가능
- Spring IoC 사용가능
- Repository 사용해 DB CRUD가능
- End to End 테스트도 가능(Client 요청 → Controller → Service → Repository → Client 응답)
- @Order(1), @Order(2), ... 테스트 순서 정할 수 있음
🌚 단점
@SpringBootTest 어노테이션을 사용하면 스프링이 관리하는 모든 빈을 등록시켜서 테스트하기 때문에 무겁다.
✍ORM, JPA, Spring Data JPA 를 구분해서 설명
1. ORM (Object-Relational Mapping)
- Object(객체) Relational(관계형 데이터베이스) Mapping
- 객체와 관계형 데이터베이스에서 사용하는 언어가 다른데 이 가운데에서 통역 역할을 해주는 기술
- 서버를 개발하는 개발자가 사용하는 언어(객체 지향 언어. 자바, 파이썬 등)와 데이터베이스(MySQL, Oracle, H2)를 다루는 DBA가 다루는 언어가 다른데 이를 가운데에서 이어주는 역할
- 이를 통해 직접 쿼리문을 작성하지 않고 java언어로 데이터를 다룰 수 있게 됨
2. JPA (Java Persistence API)
- 자바의 ORM 기술에 대한 API의 표준 명세
- 자바에서 ORM기술을 사용하기 위한 인터페이스들의 모임
3. Spring Data JPA
- Spring 개발환경에서 JPA를 편리하게 사용할 수 있도록 기존 JPA을 wrapping하여 만들어진 기술
- JPA를 사용할 때 필수적으로 작성해야하는 것들, repository 인터페이스를 사용할 때 필수적으로 해야하는 구현체 만드는 작업 등을 Spring JPA가 대신 해주면서 더욱 편리하게 데이터 관련 작업을 가능하게 함