주특기 회고의 날_W.A

min·2021년 10월 9일
0

✍스프링 프레임워크 (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가 대신 해주면서 더욱 편리하게 데이터 관련 작업을 가능하게 함

0개의 댓글