2023.01.30.MON

ronglong·2023년 1월 30일
0

1. Spring WebFlux

//

  • 서버가 2개, 즉 메인 서버외부 서버가 있을 때, MVC와 같은 blocking 방식은 외부 서버에서 요청 처리를 완료할 때까지, 메인 서버의 요청 쓰레드가 blocking된다.
    따라서, 외부 서버에서 요청 처리가 오래 걸리는 만큼, 메인 서버에 다음 요청 전송이 지연됨.
  • Non-blocking 방식의 경우, 외부 서버에서 요청 처리가 끝나지 않았어도 메인 서버의 요청 쓰레드가 blocking되지 않아, 요청을 계속 받아서 외부 서버에 전달함. 외부 서버는 여러 개의 요청을 동시다발적으로 수행.

//

  • 리액티브 스택에서는 데이터 액세스 기술로 JDBC/JPA가 아닌, R2DBC 등을 사용.
  • R2DBC에서 H2 웹 콘솔 설정 방법
    서버 임포트 루트 : import org.h2.tools.Server;
    https://itvillage.tistory.com/53
  • schema.sql, data.sql 따로 설정해줘야 함. 자동 아님.
  • R2DBC : 엔티티 연관 매핑 지원하지 않음
  • 컨트롤러 계층, 서비스 계층, 데이터 계층의 모든 데이터가 Mono 또는 Flux(Publisher)로 래핑되어 전달됨.
  • 래핑하지 않고 값을 직접 받아오면 블로킹의 여지가 있으므로, 선언형 프로그래밍을 적극 활용할 것.

2. 오늘의 삽질

- OrderDto와 OrderCoffeeDto 분리. response 확인
- 커피 주문 시 스탬프 추가 로직 구현
- 예외 처리 완성하기
- JUnit 테스트 로직 작성
- API 문서 만들기
- 주문 시스템 구현이 끝나면, 게시판도 만들어 볼 것.
  • 주말에 만들던 사이드 프로젝트의 약 6가지의 할 일 중, 가장 위의 2개 밖에 못 했다.
  • Dto 재정비 하고, Mapper 수정하고, 스탬프 추가 로직 구현하고 실행했는데, NullPointerException 났다.
  • 주말에 디버그 사용 방법 배웠으니까, 혼자서 직접 디버그 해봤는데 값이 안 들어갔길래, 아무래도 매핑이 제일 복잡하니까 매핑이 잘못된 건가 싶어서 열심히 들여다 봤으나 도통 모르겠고.. 결국 또다시 스터디 동기님들께 sos를 쳤다,,
  • 결론적으로는 매핑은 잘 되었고, 스탬프 추가 로직에서, 스탬프가 들어있지 않은, memberId만 들어있는 (dto를 변환한) orderEntity에서 스탬프를 가져다가 쓰려고 해서 NullPointerException이 뜬 것이었다.
  • 오더 서비스가 아닌 멤버 서비스로 가서 스탬프 로직을 다시 구현했다.
  • 그리고 1대1 연관 매핑에서 멤버와 스탬프가 매핑이 잘 안 되었는지, 콘솔에서 스탬프의 memberId가 null로 찍혔는데, 양방향 매핑에서 꼭 setter를 통해 설정해줘야 한다.
public class MemberEntity{ 
... 
public void setStamp(StampEntity stamp) {
        this.stamp = stamp;
        if(stamp.getMember()!=this) {
            stamp.setMember(this);
        }
    }
}
public class StampEntity{
...
public void setMember(MemberEntity member) {
        this.member = member;
        if(member.getStamp()!=this){
            member.setStamp(this);
        }
    }
  • 그리고 orderService에서 createOrder() 메서드를 통해서 orderRepository에 Order 객체를 save()하면 저장된 객체가 반환되는데, 이상하게 포스트맨에 찍으면 orderList 부분의 값이 제대로 반환이 안 됐다.
    하지만 h2 콘솔에는 모든 값이 정상 입력되어 있음.
  • 그래서 일단은 어차피 포스트 요청에 대한 응답이니까, responseEntity에 정상 주문 완료되었다는 HTTPS 상태만 담아서 반환했다.
  • URI 까지 만들어서 header에 추가해서 보내고 싶은데, 어떻게 적용하는지 잘 모르겠어서 보류,,
  • 내일은 예외 처리와, 새로 생성한 URI를 응답 header에 담는 것이 목표.
- 예외 처리 완성하기
- URI 응답 header에 담기
- JUnit 테스트 로직 작성
- API 문서 만들기
- 주문 시스템 구현이 끝나면, 게시판도 만들어 볼 것.

https://blog.naver.com/PostView.naver?blogId=alpine_knotweed&logNo=221798681118

<느낀 점>
WebFlux는 고난도 기술에 최신 기술이라 커리큘럼에서도 가볍게 다루기도 했고,
프로젝트할 때 실질적으로 사용할 기술은 아닌 것으로 보여 가볍게 봤다.
사이드 프로젝트 하니까 거기로 신경이 쏠리는 경향이 있다.

내일부터는 클라우드 학습이라 중요해서 똑바로 집중해야겠다.
일단은 본 수업에 더 집중하고, 사이드 프로젝트는 주말에 열심히 하자.

오늘 저녁에도 에러를 만났고, 또다시 여러 스터디원 동기님들께서 도와주셨는데, 너무 감사하고 또 민망할 정도로 죄송하다,, 나 거의 4일 연속 매일 물어보는 것 같은데..⭐️

주말에는 뭔가를 했다는 사실에 뿌듯했다가, 오늘은 또 급격하게 현타옴,,

내일부터 1주일은 거의 매일 페어가 있어서 조금 긴장된다.
화이팅,,,

0개의 댓글