Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • Spring
  • 우아한형제들
  • bean
  • 백준
  • OS
  • 우아한테크코스
  • SIGINT
  • C++
  • DB
  • 정규화
  • 우테코5기
  • 우테코
  • 1259
  • OperatingSystem
  • 우테코 체스
  • Linux
  • 우아한테크코스5기
  • C
  • 데이터 조작어
  • 원시값 포장
  • 블랙잭
  • 운영체제
  • 인덱스
  • signal
  • 자바
  • 리눅스
  • Operating System
  • BOJ
  • 트랜잭션
  • 프로세스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

코코코딩공부/Spring

orElse 에서 생긴 문제 해결

2023. 7. 30. 21:28

들어가며

프로젝트를 진행하던 중에 

로그인 -> 카페 좋아요 -> 새로고침 후 로그인 -> 좋아요 데이터 증발

하는 문제가 발생했다.

우리팀 폴로는 문제의 원인이 orElse 쪽 문제라고 알려주었다.

그래서 한번 보았다.

문제

final Member member = memberRepository.findById(memberInfo.openId())
                .orElse(saveNewMemberWithAllCafes(memberInfo));

우리의 예상은 찾은 멤버가 없어서 null 일 경우 saveNewMemberWithAllCafes(memberInfo)를 실행할 것 같았다.

 

근데! null이던 아니던 상관없이 saveNewMemberWithAllCafes(memberInfo)가 실행되는 것이었다!!!

 

    public T orElse(T other) {
        return value != null ? value : other;
    }

분명 null 이 아니면 value, null 이면 other 이라고 했는데 .. 

    public T orElseGet(Supplier<? extends T> supplier) {
        return value != null ? value : supplier.get();
    }

orElseGet은 우리가 의도한대로 잘 작동 되었다. 하지만 orElse에서 왜 안되는지를 생각을 해보았는데

 

public T orElse(saveNewMemberWithAllCafes()) {
    return value != null ? value : other;
}

이렇게 실행 될경우 orElse 메소드 입장에서는 T 제네릭 타입을 추론해야 하는데 메소드이기 때문에 추론을 할 수 가 없다.

그래서 saveNewMemberWithAllCafes()의 결과 값을 가져와서 타입을 추론해야한다.

 

하지만 우리는 saveNewMemberWithAllCafes() 메소드 내부에 repository에 멤버를 초기화하는 로직이 들어있다.

그래서 항상 멤버가 초기화 되었던 것이다...

 

'코코코딩공부 > Spring' 카테고리의 다른 글

restAssured를 이용한 restDocs 와 OAS  (1) 2023.08.10
Spring Security 없이 Oauth 구현기  (0) 2023.08.06
Repository 사용기  (0) 2023.06.07
도메인은 id 값을 가져도 될까 ?  (0) 2023.05.28
[Spring] Argument Resolver 내부 구경 하기  (0) 2023.04.30
    '코코코딩공부/Spring' 카테고리의 다른 글
    • restAssured를 이용한 restDocs 와 OAS
    • Spring Security 없이 Oauth 구현기
    • Repository 사용기
    • 도메인은 id 값을 가져도 될까 ?
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바