[Spring Boot 스터디] 7회차

minhyeok·2023년 3월 27일
0
post-thumbnail

https://jdm.kr/blog/142

학습 내용

백엔드 개발자로 협업하기

api 문서

참고 링크 : 백엔드와 협업하기
참고 링크 : API 문서 톺아보기

swagger

  • swagger 란?
    api들이 가지고 있는 스펙을 명세, 관리할 수 있는 툴이다. springboot에서 swagger를 사용하면 컨트롤러에 명시된 어노테이션을 해석하여 API 문서를 자동으로 만들어준다.

swagger ui 예시
https://swagger.io/docs/

7회차 미션

상점 테이블 설계하기

GitHub 링크 PR #4 store table 설계 참고

아래 값들을 모두 포함하는 Store 엔티티, 테이블을 생성하였다.

  • id
  • 상점이름
  • 주소
  • 전화번호

심화 - 주소에는 도로명 주소와 상세 주소가 포함

GitHub 링크 PR #4 feat: address Embedded 추가 참고

주소에는 도로명 주소와 상세 주소를 포함하도록 @Embedded , @Embeddable 어노테이션을 활용하여 구현하였다!
여기서 주의할 점은, 아래와 같이 Address 클래스에 Getter를 꼭 생성 해주어야 한다!!

import javax.persistence.Embeddable;

@Embeddable
public class Address {
    private String address1;

    private String addressDetail;

    public Address(){

    }

    //Getter를 생성해주어야 한다!
    public String getAddress1() {
        return address1;
    }

    public String getAddressDetail() {
        return addressDetail;
    }
}

수 많은 착오 끝에.,, 드디어 Address에 상세 주소까지 저장이 됐다 ㅠㅠㅠㅠ Address 부분은 계속 NULL이 떠서 방법을 찾아 다녔는데, 이것만 거의 한시간 걸렸따..
https://galid1.tistory.com/732 여길 참고했다!
나와는 다른 문제긴 했지만, Address 클래스에서 Getter 를 생성하니 해결됐다!!! 그리고 SQL에서 변수명은 인텔리제이에서 작성한 변수대로 작성해야한다! 대소문자 구별 해서!! 휴,, 오늘은 이거 하나 해결했지만 뿌듯하다!

table을 삭제하고 다시 데이터를 POST 하였다. 올바르게 작동한다.

심화 - 하나의 상점은 여러개의 상품을 갖을 수 있다.

GitHub 링크 PR #4 ProductEntity Table에 Store Entity id 생성?

위 링크를 참고하여 코드를 확인하자!

참고 링크 : 일대다 관계
https://jdm.kr/blog/141
https://stir.tistory.com/158
https://mjmjmj98.tistory.com/m/152

ProductEntity 테이블에 StoreEntity의 id가 생기는 부분까지 구현하였다.
하지만 지금 관계형데이터베이스에 관한 개념이 부족해 헤매고 있어 구현이 어렵다 ㅠㅠ
이제 이 다음에는 StoreEntity의 id를 각각 해당해야하는데, 구현이 어렵다..
사실 저기 테이블에 보이는 store_entity_product_entity 테이블도 왜 생기는지 모르겠따 ㅠ

상점 관련 기본 api 구현하기

Git PR #4 store table 설계 참고
위 링크에 구현해놓았다.

  • 상점 등록 api
  • 전체 상점 조회 api
  • 상세 상점 조회 (id별) api

기본 api를 구현하였다. ProductEntity 에서의 기능과 크게 다르지 않아 금방 구현하였다.

심화 - 하나의 상점에 속하는 모든 상품 조회 api

api/products?store=1 로 조회시 1번 상점에 있는 모든 상품 리스트 응답

구현하지 못했다 ㅠㅠ.

심화 - 지금까지 개발한 api들에 대한 swagger 생성하기

springfox-swagger, springdoc-openapi-ui 중 하나를 선택해서 swagger 문서를 생성해보세요.

이 심화미션도 구현하지 못했다. swagger에 대한 이해가 더 필요할 것 같다.

정리

  • 배운 내용, 깨달은 점

이번 회차를 통해 swagger를 알아보았고, 백엔드 협업 방식에 대해 알아보았다. 하지만 이 부분은 아직 내가 부족해 이해하는데 어려움이 있어 참고 링크만 기재해두고 나중에 다시 확인해보아야 할 것 같다.

미션을 통해, @Embedded , @Embeddable 그리고 Join Table(@OneToMany,@ManyToOne) 과 같은 개념을 알게 되었다.
@Embedded 어노테이션은 구현하였는데, 이 과정에서 시간이 오래 소요되었다. Getter를 생성해주어야 하는지도 몰랐고, POSTMAN에서 @Embedded 된 도로명 주소와 상세주소를 어떻게 JSON 형식으로 주어야하는지 몰라 상당히 헤맸다 ㅎㅎ,,
사진에 보다 싶이 처음에는 address1 과 addressDetail 에 값이 들어가지 않아 진짜 엄청 바꿔가며 이것저것 다 넣어보았다. Getter를 생성하고 대소문자 구별하여 POST 하니 성공적으로 데이터가 들어갔다!

그리고 다음으로는 JoinTable에 관한 구현이였는데, 아 이 부분이 너무 어려웠다.
데이터베이스에 대한 학습을 이번 스터디를 통해 처음한거라, 개념 자체도 생소해 사실 구현을 제대로 하지 못했다.. 개인적으로 이번 미션에서 단순 StoreEntity 저번 미션과 다를 바가 없어 @OneToMany와 같은 어노테이션을 사용해 1:N 관계를 구현하고 싶었는데 구현하지 못했다 ㅠㅠ
다음 학기에 데이터베이스설계 과목을 듣긴 하지만, 이렇게 소프트로 갈 줄 알았다면 미리 들어놓을걸 하는 아쉬움이 ㅠㅠ 스터디가 끝이 났지만 계속해서 부족한 부분을 공부해 프로젝트를 보완할 예정이다!

  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법

위에 적어놓았다 싶이 데이터베이스 관한 개념이 부족해 심화 미션 중 1:N(일대다) 관계를 구현하지 못해 아쉬웠다.
Swagger 에 대한 내용은 어려워 이번에 넘어간다 치더라도, 그 부분까지는 구현하고 싶었는데 아쉽다 ㅠ
데이터베이스 관계를 좀 더 공부하고 구현해보아야겠다!

  • 궁금한 점
    PR에 적어 놓았습니다!

0개의 댓글