TIL_220707_DI, AOP, Validation, Data Binding 外

창고·2022년 7월 8일
0
post-custom-banner

1. DI (IoC) 와 Bean

  • Spring Container에서 생성, 관리되는 객체
  • Annotation 기반등록 : @Bean, @Controller, @Service
  • Scope : Bean 생성 규칙 - singleton / prototype / request
  • Bean 생성 주기 callback : @PostConstruct(빈 생성 시점) / @PreDestroy(빈 파괴 시점)

2. AOP (Aspect Oriented Programming)

  • AOP : 특정 시점 (함수 호출 전, 후 등) 에 공통적인 처리 필요 시 사용 (로깅 / 트랜잭션 / 인증 등)

    • Aspect : 여러 클래스나 기능에 걸쳐서 있는 관심사, 그것들을 모듈화
    • Advice : 조언, AOP에서 실제로 적용하는 기능을 뜻함 (로깅, 트랜잭션, 인증 등)
    • Join Point : 모듈화된 특정 기능이 실행될 수 있는 연결 포인트 (연결 가능 지점)
    • Pointcut : Join Point 중에서 해당 Aspect를 적용할 대상을 뽑을 '조건식'
    • Target Object : Advice가 적용될 대상 오브젝트
    • Weaving : Advice를 비즈니스 로직 코드에 삽입하는 것

  • AOP 절차

    • Aspect
    • Pointcut 선언 및 결합 : Aspect 적용 대상 지정
    • Advice 정의 : Pointcut의 특정 시점에 실행될 액션을 지정
      • Before (해당 Pointcut의 실행 이전)
      • AfterReturning (해당 Pointcut의 실행 이후 Return까지 반환되었을 시)
      • Around (해당 Pointcut의 전/후)

3. Validation

  • Validation : 유효성 검증, 사용자 또는 서버의 요청 (http request) 검수

    • 데이터 검증 : 필수 데이터 존재 유무 / 데이터 값의 범위 / 데이터의 형식 등
    • 비즈니스 검증 : 서비스 정책 준수 여부 / 외부 API, DB 데이터 조회 등
  • Spring Validation

    • Java Bean Validation : JavaBean 내에 Annotation으로 검증 방법을 명시, 가장 많이 활용
    • Spring Validator 인터페이스 구현을 통해 Validation
  • Validation 수행 시 주의사항 및 패턴

    • Validation이 너무 여러 군데 흩어져 있으면 테스트 및 유지보수성이 떨어짐
      • 중복된 검증 : 정책 변경 시 모든 중복 코드를 수정해야 함
      • 다른 검증 : 여러 군데서 다른 정책을 따르는 검증이 수행될 수 있음
    • 가능한 Validation은 로직 초기에 수행 후 실패 시에는 exception을 throw 하는 것이 처리가 편함
  • 실무 활용 패턴 (주관적)

    • 요청 DTO에서 Java Bean Validation으로 단순 데이터 1차 검증
    • 로직 초기에 2차로 비즈니스 검증 수행 후 실패 시 Custom Exception throw

4. Data Binding

  • 사용자나 외부 서버의 요청 데이터를 도메인 객체에 저장, 프로그램 Request에 담아주는 것

  • Converter<S, T> Interface : S(Source) 타입을 받아 T(Target) 타입으로 변환해주는 인터페이스

  • Formatter : 특정 객체 <-> String 간의 변환 담당

5. Spring Resource

  • Spring의 내부 동작을 이해하기 위해서 필요한 부분.. 추후 복습

6. Spring Expression Language (SpEL)

  • Expression Language (표현 언어) : 짧고 간단한 문법을 통해 필요한 데이터나 설정 값을 얻어올 수 있게 하는 특별한 형태의 표현식에 가까운 간편한 언어

    • 예시 : @Value("${config.value}")와 같은 방식으로 설정값을 주입 받는데 활용
  • SpEL의 값 평가 (evaluation)
    SpelParser는 "" 안에 들어 있는 문자를 평가(evaluation) 하여 결과값을 만들어냄

  • BeanProperty를 설정할 때 사용하는 방식
    #{<Expression String>} 방식으로 property를 설정, 각종 테스트 등에서도 활용

7. Null-Safety

  • Null 체크를 통해 NPE(NullPointerException)를 방지, 정확한 에러 위치 확인 필요

  • @NonNull Annotation : 해당 값/함수가 Null이 아님을 나타냄

    • method 파라미터에 붙일 경우 : null 데이터가 들어오는 것을 방지
    • property에 붙이는 경우 : null을 저장하는 경우 경고
    • method에 붙일 경우 : null 리턴 시 경고, 응답값을 저장/활용하는 쪽도 NonNull이라고 신뢰
  • @Nullable Annotaion : 해당 데이터가 Null일 수 있음을 명시

    • 해당 Annotation이 붙은 값을 사용 시 null check를 항상 할 수 있도록 경고
profile
공부했던 내용들을 모아둔 창고입니다.
post-custom-banner

0개의 댓글