소개
게시글
질문&답변
상품 등록, 수정 구현 방법에 대해서 궁금합니다.
주말에 쉬셔야 하시는데 답변 달아주셔서 감사드립니다.ㅠㅠ 서비스를 각각 별도로 분리해라는 뜻이 Controller(add)-Service(save), Controller(edit)-Service(update)로 분리해라는 의미일까요? 그렇다면 클래스가 분리되니 클래스당 코드 양은 줄일 수 있을것 같습니다. 다만, Service의 save, update 로직은 if-else 문은 결국 저런 형태로 구현해야한다는 말씀이신지 궁금합니다.
- 1
- 2
- 369
질문&답변
@Transacional의 범위에 대해서 궁금한 점이 하나 있습니다!
감사합니다. 강사님 ㅠㅠ, 몇일동안 많이 고민했었는데 강사님 덕분에 속이 뚫린 느낌입니다! AOP는 모든 스프링 빈이 처리되고 나서 적용되기 때문에 TestDataInit 클래스가 빈에 등록될때 호출되는 @PostConstruct 시점에는 AOP 중 하나인 @Transactional이 적용되는 것을 보장해주니 않는 것이군요. 그렇다면 MemberService로 접근해서 성공한 것도 정확히 말한다면 @Transactional이 보장되지 않지만 운이 좋아서 성공한 것이라고 생각하면 되는 것일까요?
- 1
- 4
- 461
질문&답변
@Transacional의 범위에 대해서 궁금한 점이 하나 있습니다!
안녕하세요 강사님, 올려주신 두 링크를 확인하고 많은 고민을 해봤습니다. 제가 이해한 바는 다음과 같습니다. [첫번째 링크] Repository에는 @Transactionl이 없기 때문에 EntityManger에 우선 프록시 객체를 주입해준 다음 다른 트랜잭션에서 해당 Repository에 접근하게 되면 그 EntityManger를 사용하겠다. [두번쨰링크] 메서드 A에 @Transactional을 걸었다면 메서드 내부에 트랜잭션이 전파되기 때문에 A에서 호출되는 다른 기능들은 동일한 트랜잭션이다. 두 링크를 다음과 같이 이해하였습니다. 그렇다면 init() 메서드를 트랜잭션 A라고 가정하겠습니다. [MemberService] init()에서 memberService.save 호출 => 트랜잭션 A memberService에 @Transactional이 있음, 따라서 memberService.save => 트랜잭션 B memberRepository.save, Repository는 @Transactional이 없으니 EntityManager에는 프록시 객체가 있음. memberService로 인해 호출되었으니 meberService의 EntityManger를 사용해서 디비에 저장 => 트랜잭션 B [MemberRepository] init()에서 memberRepository 호출 => 트랜잭션 A memberRepository.save, Repository는 @Transactional이 없으니 EntityManager에는 프록시 객체가 있음. init()로 인해 호출되었으니 init()의 EntityManger를 사용해서 디비에 저장 => 트랜잭션 A 그렇다면 두 방법 모두 EntityManger에는 프록시객체가 아닌 트랜잭션 A or B의 EntityManger가 존재하는 것이 아닌건가요? 둘다 존재한다면 MemberService를 거치지 않고 바로 MemberRepository.save()로 처리했을때 오류가 발생하는지 모르겠습니다.
- 1
- 4
- 461
질문&답변
equals 메서드도
== 연산, equals() 메서드 차이를 공부해보시면 좋을 것 같습니다. 강의 8:55분쯤을 보시면 강사님께서 same은 ==, equal은 equals를 생각하시면 된다고 설명해주셨습니다. String 클래스의 equals() 메서드를 확인해보시면 1. == 연산으로 두 객체의 참조값이 같은지를 확인, 2. 두 문자열의 구성이 같은지를 확인하도록 Object의 equals() 메서드를 오버라이딩한 것을 확인할 수 있습니다. 즉, isEqualTo는 같은 객체인지도 비교하며, 같은 참조값이 아니더라도 String 클래스의 equals() 메서드에 따라 두 문자열의 구성이 같다면 true을 반환합니다. 반면 isSameAs는 두 객체의 참조값이 같은지만 비교하기 때문에 위 예제에서는 false를 반환합니다. 1, 2번 테스트의 차이는 String 객체를 생성하는 방법인 new 연산과 리터럴 방식을 공부해보시면 좋을듯합니다.
- 0
- 6
- 764