티스토리 뷰

반응형

 

 

오늘의 에러는!!!

몇일 아니 몇주?에 걸린 대장정의 끝!!

 

캡스톤 '매칭 서비스' 구현 중

값을 못넘기고 못받아오고

이상하게 넘기고 이상하게 받아오고

더럽게 넘기고 더럽게 받아오는(?)

그 대 장 정 의 끝 !!

 

이런 저런

더럽고 치사하고 복잡하고 짜증나는 방법으로

값을 받아오지 못하는 에러를 해결하고 매칭 서비스를 구현한 후

작성하는 개발일기 포스팅이다!!

 

 

진짜 필자에게

캡스톤이나 프로젝트 하면서 가장 어려운 게

값 넘기고 값 받아오는 건데

(아 아니다,, 사실 팀원들과 커뮤니케이션,, 단합이 젤 어려움,,,)

 

 

 

암튼!

코드 작성하는 것 중에서

가장 어려운 부분은

값 받아오고 넘기고

여기서 저기로 값을 어떻게 전달해줄 것인지,,

이 부분인데

오늘도 그 문제였다.

 

문제의 consultignName, consultingInfo,,, 😡😡😡😡

 

어떤 상황인지 그림으로 살펴보자.

 


 

필자가 구현하려는 서비스는 다음과 같다.

컨설팅 신청 페이지

 

컨설팅 신청 페이지에서 회원이

조건에 맞게 값을 입력하고 '작가 매칭' 버튼을 누르면

작가가 일할 수 있는 시간 내에서

작가의 출강장소(컬럼)가

사용자의 입력 장소 범위에 해당하는 작가의 프로필이

list 형식으로 여러 개 뜨게 하고 싶다.

 

바로 이렇게!! 👇👇

저놈의 컨설팅 이름, 정보가 null이다. 😡

 

근데 상황상 컨설팅 테이블의 값도 가져와야 하는데

이게 안가져와지는 것이다ㅡㅡ

 

그래서 이전 페이지에서 값을 hidden 속성으로

넘겨주고 그 값을 변수에 저장해

쿼리 스트링으로 다음 페이지에 넘겨주어

성공했다!!

 

바로 이렇게!

어찌저찌 컨설팅 이름과 컨설팅 정보를 받아왔다.

 

그래서 여기서 받아온 정보들을

결제 api 진행 후 apiController로 넘겨주어

apiController 메서드에서 repository.save를 진행하려고 했다.

 

다시 돌아온 값 넘기기의 시간,,,,

 

    @PostMapping("/design/order")
    public String order(@RequestBody Orders orders,  Model model) {
        System.out.println("orders.getPayTime() = " + orders.getPayTime());

        System.out.println("orders.getConsulting().getConsultingPrice() = " + orders.getConsulting().getConsultingPrice());
        System.out.println("orders.getConsulting().getConsultingPlace() = " + orders.getConsulting().getConsultingPlace());
        System.out.println("orders.getConsulting().getStartingTime() = " + orders.getConsulting().getStartingTime());
        System.out.println("orders = " + orders.getConsulting().getEndTime());
        System.out.println("orders.getConsulting().getConsultingName() = " + orders.getConsulting().getConsultingName());
        System.out.println("orders.getConsulting().getConsultingInfo() = " + orders.getConsulting().getConsultingInfo());
//        System.out.println("orders.getMemberCode().getMemberName() = " + orders.getMemberCode().getMemberName());


//        Consulting consulting = Consulting.builder()
//                .consultingName(orders.getConsulting().getConsultingName())
//                .consultingInfo(orders.getConsulting().getConsultingInfo())
//                .startingTime(orders.getConsulting().getStartingTime())
//                .endTime(orders.getConsulting().getEndTime())
//                .consultingPlace(orders.getConsulting().getConsultingPlace())
//                .consultingPrice(orders.getConsulting().getConsultingPrice())
//                .writer(orders.getConsulting().getWriter())
//                .build();
//        consultingRepository.save(consulting);




//        System.out.println("/design/order controller 진입");
//        Orders order = Orders.builder()
//                .ordersCode(orders.getOrdersCode())
//                .ordersAddress(orders.getOrdersAddress())
//                .payTime(orders.getPayTime())
//                .build();
//        ordersRepository.save(order);
        System.out.println("orderRepository save 완료");

//        Consulting consulting1 = Consulting.builder()
//                .consultingName(consulting.getConsultingName())
//                .consultingInfo(consulting.getConsultingInfo())
//                .startingTime(consulting.getStartingTime())
//                .endTime(consulting.getEndTime())
//                .consultingPlace(consulting.getConsultingPlace())
//                .consultingDate(consulting.getConsultingDate())
//                .consultingPrice(consulting.getConsultingPrice())
//                .build();
//        consultingRepository.save(consulting1);



    return "ok";
    }

 

정말 다양한 방법으로

메서드 안의 모든 log를 찍을 수 있는 곳에

다 찍어서 하나하나 값을 확인했다.

 

log만 50줄 가까이 찍었다.

 

 

이번에도 처음엔

consultingName, consultingInfo

(저값을 계속 못받는 이유 : 지금 writerInformation 위주로 돌아가고있는데

consulting:writerInformation이 n:1이라

writerInformation(1)쪽에서 consulting(n)쪽을 부르는 것이 어려웠음.)

(양방향 연관관계 매핑을 해야하나,, 근데 고작 저 값 두개 받으려고? 

다른 방식으로 넘길 수 있을 것 같은데,, 이 고민의 반복과 반복,,)

 

 

 

결국 나는 단순 consultingInfo, consultingName 값을 가져오면 되는거라

writerInformation map 돌릴 때

다음과 같이 받아왔다.

 

양방향 연관관계 매핑 대신 선택한 방법

 

자 이제 결제 이후에 값을 받아와서

save처리만 하면 되는데

여기서 또 한 5일 이상이 소요되었다.

 

json

 

결제 완료 후 전송하는 json은 다음과 같은 타입

 

근데 apiController에서 받아오는 값을 log로 찍어보니

Controller 메서드 시작도 하기전에 에러가 나네?

아예 log 자체가 찍히지 않았다.

 

 

도저히 너무 어려워 선배님께 도움을 요청했는데

선배님께서 도와주셔서 해결했다!

 

에러 메세지

 

 

에러 메세지 확대

 

에러 메세지를 읽어보면

consultingName을 json parse하면서

에러가 났다고 하는데

 

이걸 보시곤 선배님께서

보내는 쪽에서 consultingName을 보자고 하셨다.

 

그리고 json alert 찍은 것과 함께 보니

consultingName이 제대로 보내지지 않고 있었다.

 

json alert

 

나는 위 alert를 보고

단순히

'consultingName, consultingInfo 값을 잘못 보냈구나

값이 안받아졌네,,'라고만 생각했는데

선배님께서는 이렇게 말씀하셨다.

 

"consultingName, consultingInfo를 지금 {}(딕셔너리)로 받고 있죠?

거기서 parsing error가 발생한 것 같아요"

 

그러고 보내주는 곳을 확인해봤더니

내가 ajax data 전송에는 값을 보내줘놓고

 

여기서 선언을 안해놓은 것이었다.

(당연히 지금은 consultingName, consultingInfo) 모두 전달하고 있다.

 

consultingInfo, consultingName을 위 json에서

보내라고 해놓고 무슨 값인지 지정을 안해놨으니

당연히 못받는 것!!

 

그래서 그걸 {}로 받았고 String으로 

parse 하면서 에러가 발생했던 것이었다.

 

그 외에 insert하면서 save하면서 또 에러가 발생하였지만

수많은 시행착오끝에

어떻게 잘 해결하였다.

 


 

아무튼 어찌저찌해서

거의 두 달 가까이 해매던

매칭 서비스가 오늘부로 끝이 났다.

 

위에 설명한 것 말고도

정말 많은 에러가 났고

(진짜 너무너무너무너무너무너무 많이 에러 남.)

 

많은 사람들의 도움을 받았지만

아무래도 여러 테이블을 쓰고

여러 방식으로 입력한 값들을 받아오고

보내는 과정이 가장 어려웠어서 그런지

이 과정이 가장 기억에 남는다.

 

솔직히 나름 에러의 원인을 설명한다고 설명했지만

내가 구현하려는 기능이 무엇인지

현재 어떤 구조로 설계를 하고 있는지

모두 알수 없기 때문에

독자분들이 공부 목적으로 이 포스팅을 읽을 순 없을 것이다.

 

그냥 개발일지? 에러일지?

하나의 기능을 만들면서 이렇게 수많은 에러를

접하고 또 한 단계 성장한 나를 위해 쓰는

개발일지로 생각해주면 좋겠다.

 

진짜 시작할때는 너무 막막했고

감도 잡히지 않던 걸

수없이 무너지며 결국 구현하고 나니

'아.. 내가 성장했다'이런게 아니라

'와 다행이다.. 자퇴하기전에(?) 구현했다!!' 이 생각이 든다

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

(진짜 진심으로 이거 때문에 자퇴할뻔했다.. 🤬)

 

 

 

이 기능이 뭐라고

(그래도 안에 주소 api, 결제 api, timeFormatter, dto, 등 있을 건 다있음 ㅋㅋ)

수없이 울며 스트레스 받던 순간들이 파노라마처럼 지나간다.

 

두달간 정말 많은 일이 있었다.

두달 동안 내가 받을 수 있는 모든 스트레스는 다 받았던 것 같다.

진짜 2X년 인생 중 가장 힘든 두달이었다.

(개발자체가 적성에 안맞는 것 같고 관두고 싶다고 하루에도 수천번 생각했다.)

 

 

 

독자분들도 지금 코태기(코딩 + 권태기)이시더라도

힘들더라도!!

꼭 이겨내실 수 잇다!!

필자도 진짜 아침에 눈 뜨기 싫고

학교 앞에 사는 것 자체가 짜증날 정도로 힘든 시간을 보내왔고

끝이 없다고 생각했는데

물론 지금도 캡스톤이 끝난 건 아니지만

그래도 끝이 있긴 하더라.

꼭 독자분들도 힘내셨으면 좋겠다. 😊

 

 

 

아직 남은 캡스톤이 있지만

가장 큰 서비스를 완성하였으니까

앞으로도 할 수 있다는 생각으로

천천히 한걸음씩 내딛자!!

 

 

그럼 오늘의 개발일기 끝~

 

 

반응형

'일기' 카테고리의 다른 글

[일기] CS 과목 공부 목차 및 계획 (+ 취준계획)  (0) 2022.08.15
[개발일지] 슬럼프와 번아웃  (0) 2022.06.26