김찬진의 개발 블로그

PropertySource - 스프링은 PropertySource 라는 추상 클래스를 제공하고, 각각의 외부 설정를 조회하는 XxxPropertySource 구현체를 만들어두었다. - 예) CommandLinePropertySource, SystemEnvironmentPropertySource 등 - 스프링은 로딩 시점에 필요한 PropertySource 들을 생성하고, Environment 에서 사용할 수 있게 연결해둔다. Environment - Environment 를 통해서 특정 외부 설정에 종속되지 않고, 일관성 있게 key=value 형식의 외부 설정에 접근할 수 있다. - environment.getProperty(key) 를 통해서 값을 조회할 수 있다. Environment 는 내부에서 ..

과거 : 외장 톰캣 김영한 님의 스프링 부트 강의영상 내용을 기반으로 만들었습니다 과거에는 WAS 안에 서블릿 컨테이너, 스프링 컨테이너를 생성하고 그 중간에 디스패처 서블릿을 등록해서 서블릿 컨테이너와 스프링 컨테이너를 연결했다 이 방법은 모두 서블릿 컨테이너 위에서 동작하는 방법이다 (사실 WAS 자체를 서블릿 컨테이너라고 부를 수 있는 것 같다) 따라서 애플리케이션 코드를 WAR 로 빌드하고, WAR 파일을 WAS(톰캣, 서블릿 컨테이너)에 배포를 해야만 동작할 수 있었다 스프링이 제공하는 이 방법은 단점이 많다 1. 웹 애플리케이션 구동을 위해 WAS 를 설치해야 한다 2. WAS 를 실행하고 WAR 와 연동하기 위한 복잡한 설정이 필요하다 3. 배포 과정이 복잡하다. (애플리케이션 코드를 WAR..
트랜잭션 하나로 묶는다는 것은 트랜잭션 하나만 사용한다는 것이다. 물리 트랜잭션, 논리 트랜잭션 개념을 사용할 필요도 없이 그냥 트랜잭션 하나만 존재한다. 트랜잭션 하나만 존재하기 때문에 신규 트랜잭션에 참여하는 개념 또한 없다. 그래서 서비스 또는 리포지토리 단에서 예외가 터지면 깔끔하게 트랜잭션을 롤백한다. (물론 예외가 터지지 않는다면 커밋) 트랜잭션 하나에 참여한다는 것은 신규 트랜잭션이 있고 다른 트랜잭션들이 신규 트랜잭션에 참여한다는 것이다. 다시 말해 각 계층의 로직에서 @Transactional 애노테이션을 사용한다는 것이다. 신규 트랜잭션과 기타 트랜잭션들은 모두 논리 트랜잭션으로, 하나의 물리 트랜잭션을 구성하는데, 신규 트랜잭션만이 물리 트랜잭션의 커밋 또는 롤백을 결정할 수 있다. ..
스프링은 체크예외를 비즈니스 의미가 있는 예외로, 언체크예외는 복구불가능한 예외로 간주한다. 따라서 스프링은 체크예외는 커밋, 언체크예외는 롤백하는 정책을 가진다. (참고로 정책이기 때문에 꼭 따를 필요는 없는데, 체크예외를 롤백하고 싶은 경우 @Transaction(rollbackFor=…) 를 사용하면 된다.) 체크 예외 즉, 비즈니스 의미가 있는 예외란, 시스템은 정상작동하지만 비즈니스 로직에 벗어났기 때문에 발생한 예외라는 것이다. 만약 비즈니스 로직에서 벗어났기 때문에 롤백함으로써 해당 예외를 처리한다면 방금 사용자가 입력한 데이터가 모두 삭제되어 버린다. 클라이언트에게 조치를 취하도록 유도한 이후에 커밋한다는 점에서 스프링은 비스니스 의미가 있는 예외를 체크 예외로 간주하는 것이다. 반대로 언..