spring boot

같은 팀원의 코드리뷰 중 JPA 변경감지를 사용하지 않고 명시적으로 saveAll 메서드를 호출하고 있는 코드를 발견하였습니다.변경감지를 사용하여 처리하는 게 어떻겠냐고 제안하였고 팀원 분께서는 변경감지가 동작하지 않는다고 하였습니다.메서드에는 @Transactional 어노테이션이 걸려있었고 트랜잭션 커밋 시 영속성 컨텍스트가 flush 되기 때문에 저는 동작할 것이라고 예상했는데 말이죠. 팀원 분께 괜찮다면 제가 한 번 실행해 봐도 되냐고 여쭤본 후 실행해 보니 정말 변경감지가 동작하지 않았습니다!🫨계속 확인해 보다가 이상한 점을 발견했습니다.팀원 분이 작성하신 코드는 다음과 같은 구조를 가지고 있었습니다.@Servicepublic class SelfInvocation { public Stri..
코드리뷰를 하던 중 동료 개발자 분 코드에서 1건 저장 행위만 하는 Service 레이어 메서드의 @Transactional 이 없는 것을 발견했습니다. 나: "어? 이게 있어야하지 않을까요?" 동료 개발자 : "1개 만 저장하는 건데 있어야 하나요?" 생각해 보니 딱히 이유를 찾지 못했습니다. 어차피 spring-data-jpa 구현체인 SimpleJpaRepository의 save 메서드에서 @Transactional 이 걸려있습니다. 분명 제가 본 강의에서는 서비스 레이어의 클래스에는 @Transactional(readOnly=true) 어노테이션을 붙이고 쓰기 메서드에는 @Transactional을 붙이는 방식을 많이 활용한다고 했는데 이유가 기억나지 않았습니다. 조금 더 검색해 본 결과 다음과 ..
WebClient로 타 API 요청 시 recvAddress(..) failed: Connection reset by peer 오류와 함께 요청이 정상적으로 처리되지 않는 문제가 발생하였습니다. 해당 오류를 처리하기 위해서는 일단 3 way handshake HTTP/1.1에 대한 이해가 필요합니다. 이해를 돕기위해 각각 간략하게 알아보겠습니다. 3 way handshake TCP 통신의 경우 데이터를 주고받기 위해서 handshake 과정이 필요합니다. 1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다. 2. 서버는 SYN 패킷을 받고 클라이언트의 요청을 수락한다는 ACK와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 응답하기를 기다립니다. 3. 클라이언트는 서버에게 AC..
infitry
'spring boot' 태그의 글 목록