본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

12. 22 개인 과제 수행/ 자바 기초 수업/TIL 특강/ REST API 특강

728x90

1. 개인과제 수행

실행 중 오류 발생 :

1)

원인 :

Missing preceding open capture character before variable name 

스프링부트에서 제시하는 오류 해결 방법 :

Fix this pattern in your application or switch to the legacy parser implementation with 'spring.mvc.pathmatch.matching-strategy=ant_path_matcher'.

 

2)

원인 :

Error executing DDL "drop table if exists user cascade " via JDBC Statement

-> 테이블 이름을 User로 사용하면 발생하는 오류 (H2 데이터베이스에서 User를 예약어로 사용했기 때문에)

해결:

테이블 이름을 다른 것을 사용한다.

 

3)

원인 :

댓글 작성시 RequestDto에 생성한 배열의 값이 Null인 경우 -> Postman에서 날린 요청을 수정해야겠다.

중간 과정:

배열로 입력해 요청을 날렸지만, 

JSON parse error: Cannot deserialize value of type `java.util.ArrayList<java.lang.Object>` from Object value (token `JsonToken.START_OBJECT`)
 
역직렬화 문제라고 한다. 아직 뭔지 정확히 모른다.
 
4)
원인:
구조에 대한 이해가 부족해, 고민하던 중 구조를 다시 짜고 댓글은 게시물처럼 작성하되 생성한 post 객체의 인스턴스인 commentList를 참조하여 이 배열에 Comment 타입의 객체를 만들고 그곳에 게시물처럼 작성된 댓글을 추가하는 방식 시도
"org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.example.projectblog.entity.Comment
 
구글링 : Cascade 속성을 연관관계 설정 컬럼인 Post post와 CommentList에 추가
 
5)
추가 후 순환 참조 에러 :
 

[JPA] 순환참조 해결하기(JackSon 동작원리)

이번에 개인 프로젝트를 진행 함에 있어 1:N , N:1 양방향 관계에서 발생한 순환 참조 이슈를 겪어 포스팅합니다. 순환 참조가 일어나는 이유부터 같이 알아봅시다. Spring boot는 @ResponseBody를 선언

k3068.tistory.com

Jackson의 동작원리를 보고 관련 어노테이션인 @JsonBackReference, @JsonManagedReference를 사용하여 문제를 해결했다! + 다만, 아직..

1) 댓글 추가 후 응답란에 댓글의 id가 null로 표시되는 것(DB에는 정상 저장 및 조회할 때도 정상 출력)

2) ResponseDto타입의 객체를 만들어 거기에 완성된 값을 담고 반환한 후 그 객체를 참조하여 순환참조 에러를 원천 차단하는 방식에 대한 이해가 아직 부족함 ~ 이렇게 처리되는 게 맞는지 아닌지도 아직 확실하지 않음

2. 자바 기초 수업

 

조건식 수업 : Switch 문을 활용한 성적 표시 및 윤년 판단 프로그램, 객관식 퀴즈 출제하기

        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt();

        switch ((int)score/10) {
            case 10 :
                System.out.println("A+");
                break;
            case 9 :
                System.out.println("B");
                break;
            case 8 :
                System.out.println("C");
                break;
            default :
                System.out.println("F");
        }

        int year = scanner.nextInt();
        if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
            System.out.println("Leapyear");
        } else {
            System.out.println("No");
        }
        
        System.out.println("다음 중 프로그래밍 언어가 아닌 것은?\n1. JavaScript\n2. Java\n3. 망둥어\n4. HTML");
        int answer = scanner.nextInt();

        switch (answer) {
            case 1:
            case 2:
            case 4:
                System.out.println("오답입니다.");
                break;
            default:
                System.out.println("정답입니다.");
        }

3. TIL 특강

TIL은 왜 써야하는가? 채용은 알고 있다는 것을 증명하면 이루어진다.

-> "얘가 우리 회사에서 필요한 걸 알고 있나? : 서류, 코딩테스트, 포트폴리오, 면접"

 

성장, 성실함과 흡수력을 보여줘야 한다. ~ 이력서에 쓴 걸 설명할 수 있도록.

TIL은 개발자 프로젝트의 커밋 로그와 같다, 개발자 커리어의 버전관리.

이력서에는 내 성장의 결과물이 담긴다 ~ 프로젝트 등

성장과정은 TIL에 담겨있고, 질문은 여기에서 온다.

 

작성법 

문시해알 ~ KPT

어떤 문제가 있었는지

내가 시도해본 것들**

어떻게 해결했는지

뭘 새롭게 알았는지**

 

중요! 내 TIL에는 내 스타일이 담길 수 있도록 써보자

 

지양하기 : 예쁘게 꾸미기, 통째로 붙여놓은 코드, 감성적인 글, 강의노트 복붙 혹은 요약

 

TIL vs WIL

핵심

1, 알게 된 점 총정리

2. 목표

 

WIL

- TIL의 회고 : 이번 주 알게 된 점 총 정리

- 다음 주 목표 세우기

- 이번 주 목표 달성 여부

 

4. REST API 특강

이해를 돕는 REST API

https://www.youtube.com/watch?v=4DxHX95Lq2U 

다른 사람이 봐도 어플리케이션 간 통신의 흐름이 이해하기 쉽도록, 패턴 및 통일이 이루어지고 Http 통신이 원활하게 이루어지게 하기 위한 것이 REST API다.

1. URL에는 동사를 사용하지 않는다. -> Http 메서드를 활용한 소통 (GPPD)

2. 식별자를 적극 활용하기 ~ 특히 PUT/DELETE

3. 쿼리 파라미터 : @Param을 활용하기 -> 매번 새로운 GET URL을 만들 필요가 없고 API에 Pagination을 추가할 수 있다

5. 뭘 새롭게 알았나요?

-스프링 심화과정에서 학습하는 것 개괄 : Spring Security, OAuth2, Spring Test, Spring AOP, Spring Exception, Spring Transaction

 

-연관관계 설정에 대해 조금 더 나아짐: 게시물과 댓글간 관계 설정 및 실제로 값의 이동을 만들어내는 데 성공했다.

하지만 아직 부족한 점이 매우~ 많다.

 

-TIL 가이드라인 : 지난 며칠의 막막함과 벽을 마주한 느낌이 그대로 지난 TIL에도 반영되어있었다. 그만큼 TIL 쓰는데 소홀해졌었는데, 오늘 특강을 들으며 내가 자신있어 하는 공부방법인 '정리하며 공부하기'를 다시금 다잡을 수 있었다. 손으로 쓰고 정리하고 읽어보면서 이해하면 그냥 읽기만 하는 것보다 3배는 더 효율적이다.

 

-REST API : 이번 게시판 개인과제와 REST APi 특강을 통해 REST API, 거기에 객체지향 프로그래밍에 대한 이해를 조금은 더 넓힐 수 있었다.

728x90