[TIL] 20220713 캠프 88일차

C____JIN·2022년 7월 13일
0

TIL 1.0

목록 보기
46/78
post-custom-banner

2차 프로젝트

새로운 Entity 생성 <Community>

  • 이전 db 설계

  • 발생하는 문제

    유저가 같은 맛집을 등록해도 각 맛집 아이디로 커뮤니티 페이지에 접속하하게된다.
    그렇게되면 동일한 맛집이어도 다른 커뮤니티 페이지로 넘어가게된다
    결과적으로 커뮤니티 페이지가 커뮤니티 기능을 못하고 각 유저의 소유물로 변하는 문제 발생...

  • 변경된 DB

커뮤니티 entity를 추가해주면 커뮤니티에서 해당하는 맛집 리스트를 갖게되고 그것을 바탕으로 커뮤니티 페이지로 연결되기 때문에 맛집 별로 페이지가 생기지 않고 맛집이 모여있는 커뮤니티 별로 커뮤니티 페이지로 연결괴기 때문에 원하는 결과를 얻을 수 있다.

  • Community.java
@Entity
@Getter
@NoArgsConstructor
public class Community {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;
    @Column
    private String addr;

    @Column
    private String addrRoad;

    @Column
    private String phoneNum;

    @Column
    private String cate;

    @OneToMany(mappedBy = "community")
    private List<Place> places = new ArrayList<>();

    @OneToMany(mappedBy = "community")
    private List<Comment> comments = new ArrayList<>();

    @Builder
    public Community(String name, String addr, String addrRoad, String phoneNum, String cate) {
        this.name = name;
        this.addr = addr;
        this.addrRoad = addrRoad;
        this.phoneNum = phoneNum;
        this.cate = cate;
    }
}
  • 커뮤니티에 장소에 대한 정보를 전달하기위해 name, addr, addrRoad, phoneNum, cate 를 추가했다.
  • place와 연관 관계가 설정되어 communiy id 별로 place list가 저장되게 된다. (comment도 동일)
  • PlaceService.java
		... // 생략
        Community savedCommunity = communityRepository.findByAddr(place.getAddr());

        if(savedCommunity == null){ // 이전에 등록된 Community가 없다면 새로운 Community Entity 생성
            Community community = Community.builder()
                    .name(placeCreateRequestDto.getName())
                    .addr(placeCreateRequestDto.getAddr())
                    .addrRoad(placeCreateRequestDto.getAddrRoad())
                    .phoneNum(placeCreateRequestDto.getPhoneNum())
                    .cate(placeCreateRequestDto.getCate())
            .build();
            place.placeCommunity(community);
            communityRepository.save(community);
        }else{	// 이미 일치하는 Community가 있다면, Community의 place list에 추가
            place.placeCommunity(savedCommunity);
        }
		... // 생략

마무리

처음에는 DB설계를 변경하지 않고 Place랑 Users를 ManyToMany관계로 해보려고 했는데, ManyToMany 를 사용하게 되면 효율 문제나 다른 처리해야할 문제가 많이 발생하므로 사용하지 않는 것이 좋다고 한다.
최대한 생각을 바꾸어 ManyToMany관계를 사용해야할 때는 위의 상황처럼 ManyToMany를 최대한 사용하지 않고 넘어가는 방향을 찾아서 진행해야겠다.

profile
개발 블로그🌐 개발일지💻
post-custom-banner

1개의 댓글

멋진데유~~

답글 달기