Spring/02 Spring DI와 AOP
-
13 서비스 계층의 분리와 @Transactional(2)Spring/02 Spring DI와 AOP 2023. 7. 9. 22:22
서비스 계층의 분리와 @Transactional(2) 4-3) 실습(@Transactional 주입) root-context.xml A1DaoTest.java MySQL 에디터(테이블 b1생성) >> 데이터를 없이(false) a1과 같은 테이블 b1을 생성 >> 조건문 where false를 생략하면 a1의 테이블을 복사한 b1이 생성 >> primary key나 Notnull 같은 설정 값은 복사 되지 않는다(데이터 값만 복사) B1Dao.java(A1Dao.java 복사) >> B1Dao의 인터페이스를 추출해야되지만 생략하고 진행 TxService.java TxServiceTest.java >> conn의 주소 값이 다르다 TxService.java >> @Transactional 은 RunTime..
-
12 서비스 계층의 분리와 @Transactional(1)Spring/02 Spring DI와 AOP 2023. 7. 8. 21:57
서비스 계층의 분리와 @Transactional(1) 1) 서비스 계층(Layer)의 분리 비즈니스 로직의 분리 1-1) 서비스 계층(Layer)의 분리 비즈니스 로직의 분리 - 1)그림에서 UserHistoryDao의 추가하면 → RegisterController(userHistoryDao생성)변경해야된다 - 1-1)그림처럼 UserHistoryDao와 비즈니스 로직을 처리하는 UserService를 생성한다 >> 장점1) RegisterController는 UserService만 호출해주면 영속계층이 늘어나도 RegisterController는 에는 영향이 없다 장점 2) Tx 처리, UserService에 Tx 처리가 적합하다 RegisterController도 Tx처리가 가능하나 너무 복잡해진다 ..
-
11 AOP의 개념과 용어Spring/02 Spring DI와 AOP 2023. 7. 7. 20:53
AOP의 개념과 용어 1) 공통코드의 분리 1-1) 공통코드의 분리 (실습) AopMain.java(com.fastcampus.ch3.aop 패키지에 작성) >> 추가할 코드를 따로 분리해 작성해 놓고, 그 코드가 마치 추가된 것처럼 실행되는데 AOP 1-2) 공통코드의 분리 (응용1) >> a로 시작하는 패턴의 메서드만 실행하게 된다 1-2) 공통코드의 분리 (응용2) >> 에너테이션으로 출력 2) 코드를 자동으로 추가한다면 어디에? - 메서드 중간에는 넣을 수 없다 >> Advice{ } : 자동 추가할 코드 >> Before Advice : 메서드의 시작에 자동 추가 >> After Advice : 메서드의 끝에 자동 추가 >> Around Advice : 양쪽에 자동 추가 3) AOP(Aspect..
-
10 Transaction, Commit, RollbackSpring/02 Spring DI와 AOP 2023. 7. 5. 23:19
Transaction, Commit, Rollback 1) Transaction이란? - 더 이상 나눌 수 없는 작업의 단위 (Tx 간단히 쓰임, insert,update,select,등 명령 하나하나가 트잰젝션) - 계좌 이체의 경우, 출금과 입금이 하나의 Tx로 묶여야 됨 (출금+입금 = Tx) - ‘모’ 아니면 ‘도’. 출금과 입금이 모두 성공하지 않으면 실패. (둘다 성공, 하나만 실패해도 모두 취소) 2) Transation의 속성 - ACID 원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄져야 한다. ex) 출금+입금 = Tx 일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다. ex) 전: A가 500원, B는 300원을 가지고 있고, 후: ..
-
09 DAO의 작성과 적용(2-2)Spring/02 Spring DI와 AOP 2023. 7. 4. 21:06
DAO의 작성과 적용(2-2) 1) DAO 주입 LoginCotroller.java >> @Autowired를 주입 RegisterController.java >> @Autowired를 주입 2) 결과 확인(로그인, 회원가입, 에러 메시지) 톰캣 에러 메세지 >> ApplicationContextTest.java 주석 처리 - 로그인 >> HomeController.java의 @Controller가 주석 처리되었다 LoginController.java >> HomeController가 등록이 되어있지 않아 에러 발생 servlet-context.xml >> 등록 결과 확인 >> 성공 servelt-context.xml (변경) >> css가 출력되었다 - 회원가입 >> 한글이 깨져서 출력된다 web.xm..
-
09 DAO의 작성과 적용(2-1)Spring/02 Spring DI와 AOP 2023. 7. 3. 23:21
DAO의 작성과 적용(2-1) LoginController.java RegisterController.java loginForm.jsp index.jsp registerInfo,jsp registerForm.jsp 작성 LoginController.java RegisterController.java loginForm.jsp index.jsp menu.css (resource → css → menu.css 생성) >> menu.css는 생략 registerInfo.jsp registerForm.jsp
-
08 DAO의 작성과 적용(1)Spring/02 Spring DI와 AOP 2023. 7. 2. 21:37
DAO의 작성과 적용(1) 1) DAO(Data Access Object)란? - 데이터(data)에 접근(access)하기 위한 객체(object) dao - Database에 저장된 데이터를 읽기(R), 쓰기(C), 삭제(D), 변경(U)을 수행 CRUD - DB 테이블 하나의 DAO를 작성 1:1 2) 계층(layer)의 분리 >> 기능 LoginController : id, pwd체크 , RegisterController : 회원가입 >> LoginController에 +selectUser(String):User를 넣고 직접 DB에 접근 >> RegisterController도 회원정보를 보기위해 +selectUser(String):User가 필요하다 >> +selectUser(String):Us..
-
07 Spring으로 DB다루기 TDDSpring/02 Spring DI와 AOP 2023. 7. 1. 21:35
Spring으로 DB다루기 TDD 1) insertUser( ), insertUserTest 메서드 추가 DBConnectionTest2Test.java (insertUser( ), insertUserTest 추가) User.java 결과 확인 - 결과 확인 전에 MySQL 에디터에서 커밋이나 롤벡을 해놓고 테스트 실행 할 것 >> 쿼리에디더가 작업이 처리가 안된 상태에서 다른 컨넥션으로 같은 테이블을 건드렸기 때문에 rock이 걸려 작업을 기다리다가 끝나버인 경우 (오류 발생 원인) - Test 성공 - 값의 중복 에러 >> Test를 2번 진행했을 때 오류 >> id의 값이 이미 저장되어 있기 때문에 오류 발생 >> 실행할 때마다 다른 id 값을 입력해서 테스트를 진행해야된다 (delete 메서드 작..