-
JPA - 영속성 컨텍스트 영속성 컨텍스트란 순수 객체와 데이터베이스의 중간에 위치한 계층 : 중간 계층(레이어)을 둠으로써 얻는 이점이 있기때문에, JPA는 영속성 컨텍스트라는 레이어를 둠 엔티티 매니져를 통해서 접근한다고 생각하면 됨 J2EE 환경 : 엔티티매니져 당 하나의 영속성 컨텍스트를 가지고 있음 스프링 사용 환경 : 트랜잭션 내에서 여러 엔티티매니져가 하나의 영속성 컨텍스트에 접근(사용), 영속성 컨텍스트는 트랜잭션 끝나면 삭제 영속성 컨텍스트 특징 @Id로 엔티티 식별 : 식별자 값이 없으면 안됨(에러 발생) /* 엔티티를 영속성 컨텍스트에 저장해두고 관리...
-
AOP 핵심 로직과 부가 기능을 분리하기 : 중복 제거도 되면서 핵심 로직 개발에 더 집중할 수 있도록 완전한 분리 : 핵심 로직 부분에서 부가 기능이 적용되는지 모르도록(의존하지않도록 - 의존 관계 설정해두면 로직에서 사용되어야 부가기능이 적용됨) 분리 1단계 : 메소드 분리 @Service("userService") public class UserService { @Autowired private PlatformTransactionManager transactionManager; @Autowired private UserRepository userRepository; public void upgradeLevels() throws Exception { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { upgradeLevelsInternal(userRepository.findAll()); transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); }...
-
스프링 프로젝트 - java-ims Mockito를 통한 Service 단위테스트와 도메인 단위테스트 다른 의미의 테스트임 : 같아보이지만 Service 계층을 테스트 하는 것과 도메인에 대한 단독 테스트는 다름 서버 자원을 사용하는 것과 일반 자바 객체를 테스트 하는 것에서 차이 삭제 기능 바로 삭제를 하지않고, 삭제 상태로 만들어놓음 : 삭제 상태로 변경된 엔티티를 또다른 엔티티(히스토리)로 만들어서 보관함 일정 기간이 지났을 때 엔티티를 실제로 삭제함 기록 또한 일정기간 보관 @Entity public class DeleteHistory { @Id @GeneratedValue(strategy = GenerationType.IDENTIFY) private long...
-
스프링 스프링 빈 생성과 DI 시점 : 모두 스프링이 시작될 때 컨테이너에 생성(streotype 어노테이션으로 스프링빈 설정)해두고 DI까지 모두 해둔 상태 스프링 빈은 무상태여야함 : 상태를 가지는 객체를 관리하면 개발자가 고려해야할 부분이 굉장히 많아짐(race condition) - 굳이? 할 필요가 없음, 멀티쓰레드 환경 임을 잊지 말아야함 TDD 테스트 주도 개발을 하면서 중간에 끝내고 이어나가려고 할 때 어떻게 알아보나? 실패 케이스가 아직 구현되지않았기때문에 실패 케이스인 것, 실패 케이스인 부분부터 개발을 하면 됨 레이어 구조 생각해봐야할 점 : DTO를...
-
@Annotation 어노테이션 자바 1.5부터 등장한 API 코드에 메타 데이터를 설정 : 자신에 대한 부가 정보를 담고 있음 @Transactional(rollbackFor = CannotDeleteException.class) public void deleteQuestion(User loginUser, Long id) throws CannotDeleteException { deleteHistoryService.saveAll(findQuestionById(id).delete(loginUser)); } 이렇게 사용된다 컴파일러에 정보 제공 : @FunctionalInterface, @SuppressWarnings 이렇게 사용된다 코드 생성 : 롬복 @Setter, @Getter 등 런타임 프로세싱(조작) : Spring의 @Autowired(DI), JUnit의 @Test(테스트 할 메소드), Jackson의 @JsonIgnore(json 생성 시 참고) 등 종류 빌트인 어노테이션 : 제공되는 어노테이션 @Override : 상위 클래스의 메소드를 오버라이드...