토비의 스프링 | 7장 스프링 핵심 기술의 응용 (여러가지 배운것)

주싱·2022년 11월 7일
0

토비의 스프링

목록 보기
27/30

토비의 스프링 ‘7장 스프링의 핵심 기술의 응용’을 읽고 새롭게 배운 여러가지 것들을 정리합니다.

1. 개념

애노테이션

  • 애노테이션은 정의하기에 따라서 타입, 필드, 메서드, 파라미터, 생성자, 로컬 변수의 한 군데 이상 적용 가능하다.
  • 애노테이션이 부여된 클래스의 패키지, 클래스 이름, 접근 제한자, 상속한 클래스나 구현 인테페이스가 무엇인지 알 수 있다.

정책과 관례를 이용한 프로그래밍

  • 애노테이션 같은 메타정보를 활용하는 프로그래밍 방식은 코드를 이용해 명시적으로 동작 내용을 기술하는 대신 코드 없이도 미리 약속한 규칙 또는 관례를 따라서 프로그램이 동작하도록 만드는 프로그래밍 스타일을 적극적으로 포용하게 만들어왔다.
  • XML 설정파일도 미리 정의한 정책을 이용해서 특정 기능이 동작하게 만드는 것이라고 볼 수 있다. 태그를 작성해두면 그에 따라 하나의 오브젝트가 만들어진다.는 프로터티 주입을 통해 오브젝트의 의존관계가 설정되는 코드가 동작한다.
  • 이런 스타일의 프로그래밍 방식은 자바 코드로 모든 작업 과정을 표현했을 때에 비해서 작성해야 할 내용이 줄어든다는 장점이 있다. 좀 더 지능적으로, 자주 반복되는 부분을 관례화하면 더 많은 내용을 생략할 수 있다.
  • 반면에 프로그래밍 언어나 API 사용법 외에 미리 정의된 많은 규칙과 관례를 기억해야 하고, 메타정보를 보고 프로그램이 어떻게 동작할지 이해해야 하는 부담을 주기도 한다. 익숙해지면 편하겠지만, 그때까지 적지 않은 학습 비용이 들고, 자칫 잘못 이해하고 있을 경우 찾기 힘든 버그를 만들어내기도 한다.

2. 더 나은 테스트

다시 테스트에 대한 조언

반복해서 듣는 것은 수고로운 일이 아니다. 테스트를 먼저 만드는 게 불편하다면 일단 코드를 먼저 만들고 그에 대한 테스트를 바로 추가해서 확인해보는 방법도 나쁘지 않다. 중요한 건 코드를 작성한 다음 테스트를 만들어 검증하는 그 사이의 간격을 가능한 짧게 하고, 예외상황을 포함한 기능을 세세하게 검증하도록 테스트를 만드는 것이다.

철저한 테스트가 요구되는 영역

구현 방법과 적용 기술이 바뀔 수 있고 내부 구조가 변경될 수 있으면서도 인터페이스 메서드는 일정하게 유지해야 하는 부담이 있는 코드가 있다면, 설계도 중요하지만 테스트를 철저하게 만들어서 기능을 검증하고 구현 방식이 변경될 때 마다 테스트를 실행해서 기능에 영향을 주는지 확인하는 일이 매우 중요하다.

3. 더 나은 코드

인터페이스를 먼저 설계하는 방법

당장 테스트가 안되어 답답하지만 그렇게 하는 방법이 있다. 사용하는 추상화된 코드를 먼저 작성하는 것이다.

4. 데이터베이스

격리수준(Isolation Level)

READ_UNCOMMITTED 트랜잭션 격리수준의 문제점은 한 트랜잭션이 종료되기 전의 작업 내용을 다른 트랜잭션이 읽을 위험성이 있다는 것이다. 만약 다른 트랜잭션이 끝나기 전에 변경한 정보를 읽어버렸는데 해당 트랜잭션이 롤백돼버리면 실제로는 반영되지 않은 유효하지 않은 데이터를 사용하는 문제가 발생한다. 성능을 극대화하기 위해 약간의 위험성을 감수하고라도 일부러 낮은 격리수준을 적용하는 경우가 있긴 하지만 SQL의 변경 작업 같은 중요한 작업에는 권장할 수 없다. 낮은 격리수준의 위험성을 피하려면 READ_COMMITTED 격리수준을 지원하는 HSQL 1.9 이상을 사용하거나 H2, 또는 Derby를 사용해야 한다.

profile
소프트웨어 엔지니어, 일상

0개의 댓글