TIL_220722_강의용 실습 프로젝트 5

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

들어가기에 앞서
실제 프로젝트 진행했던 코드 내용은 업로드하지 않았습니다

8. Business Logic Test

(1) unit test, solitary test

  • 필요로 하는 것들만 사용하거나 mocking, slice test
  • 컨트롤러 입출력의 확인
  • 에러의 검증
  • 비즈니스 로직의 동작

(2) integration test, sociable test

  • @SpringBootTest
  • 인증 + API 호출
  • API 호출 -> 비즈니스 -> 데이터 접근 -> 응답까지

(3) Integration test 진행

  • test 폴더에 integration package
    -> APIEventIntegrationTest 생성
    -> @SpringBootTest
    -> @AutoConfigureMockMvc

9. View, View Templtate

(1) Thymeleaf 특징

  • HTML5 웹 표준 준수 템플릿
  • 전체적인 문법이 HTML5 마크업 표준을 최대한 해치지 않게끔 설계
  • Decoupled logic : 템플릿 문법을 아예 템플릿에서 분리 가능
    • 순수한 마크업만 남음 -> 템플릿 엔진이 작동하지 않아도 렌더링 되는 정적 목업 페이지
    • 디자이너가 이해하기 쉬운 코드
  • 문법
    • "th:" tage
    • "data-th" attribute
    • decoupled logic
  • Expressions
    • Variable Expressions : ${...}
    • Selection Variable Expressions : *{...}
    • Message Expressions : #{...}
    • Link URL Expressions : @{...}
    • Fragment Expressions : ~{...}
  • 기타 내용은 추후 강의 자료 좀 더 확인
  • 템플릿 엔진 vs 자바스크립트 : 역시나 자바스크립트 기반 프레임워크가 압도적...
  • properties :
    spring.thymeleaf.cache=false

10. 작업 효율 향상을 위한 Properties

(1) SpringBootProperties

  • logging
    • debug
    • trace
    • logging.level.원하는패키지이름=debug (혹은 trace)
  • banner
  • config
    • spring.config.activate.on-profile * (spring.profiles가 deprecated 됨)
    • spring.config.import
    • spring.config.use-legacy-processing
  • main
    • spring.main.banner-mode
    • spring.main.lazy-initialization
  • web
    • spring.hateoas.use-hal-as-defalut-json-media-type
    • spring.mvc.converters.preferred-json-mapper
    • spring.mvc.format.date
    • spring.mvc.format.date-time
    • spring.mvc.format.time
  • server
    • server.error.whitelabel.enabled
    • server.port
  • security, actuator, devtools...

(2) Rest Repositories

  • Repository로부터 REST API를 자동으로 만들어주는 기술
  • Spring Data REST를 사용
  • 페이징, 정렬, 리미트 사용 가능
  • QueryDSL Extension을 함께 사용하면 큰 노력 없이 컬럼별 검색 기능까지 사용 가능
  • 사실 많이 사용하지는 않음
    • 도메인을 직접 API에 노출하는 것을 꺼림
    • 복잡한 요구사항에 맞춰 API 설계를 하고 싶을 경우 부적합
    • 설정을 잘 하지 않으면 불필요 API 노출 우려
    • 실무에서 API는 필요에 따라 직접 만드는 편
  • 사용을 고려할 만한 상황
    • 내부에서 사용하는 애플리케이션 제작 시
    • 도메인이 복잡하지 않을 때
    • 요구사항이 복잡하지 않고 심플한 CRUD로 구성되어 있을 때
    • 빠르게 만들어야 할 때
  • 기존 도메인 클래스에 @Entity 추가 (DB와 연동) -> PK 필요
    @Id, @GeneratedValue(strategy = GenerationType.IDENTITY)
  • properties :
    logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace 기억해둘 것
    spring.jpa.defer-datasource-initialzation=true
    spring.jpa.hibernavte.ddl-auto=create-drop
    spring.jpa-show=sql=true
    spring.jpa.properties.hibernate.format_sql=true
  • 코드 예제
EventRepository extends JpaRepository<Event, Long>, QuerydslPredicateExecutor<Event>, QuerydsBinderCustomizer<QEvent>
  
@override  
customize(QuerydslBindings bindings, QEvent root) {
  binding.excludeUnlistedProperties(true);
binding.including(root.placeid, root.eventName.....)
binding.bing(root.eventName).first(StringExpression::likeIgnoreCase);
  .....

(3) Rest Repositories HAL Explorer

  • API 테스트도 스프링 부트에서
    • 심플하고 편리한 UI 제공

(4) Spring Boot Devtools **

  • 무조건 넣고 시작해도 무방할 정도
  • 스프링 부트 모듈들의 세부 설정을 개발에 적합한 형태로 자동으로 바꿔줌
  • Automatic restart - 자바 코드가 바뀌면 자동으로 애플리케이션을 재시작
  • Live reload - 정적 페이지가 바뀌면 자동으로 브라우저 웹페이지 refresh

(5) Actuator

  • 스프링 부트의 다양한 설정과 지표를 모니터링할 수 있는 도구
    • 내가 만든 빈이 잘 등록되었는가
    • 내가 만든 빈이 다른 빈들과 어떤 연관 관게를 맺고 있는가
    • 내가 설정한 환경 변수, 프로퍼티가 잘 등록되었는가
    • 내가 의도한 로깅이 잘 일어나고 있는가
    • 캐시 / 시스템이 잘 동작하고 있는가 등
  • 기본 엔드포인트와 추가 활성화 엔드포인트가 있음
profile
공부했던 내용들을 모아둔 창고입니다.
post-custom-banner

0개의 댓글