180115~16-TIL

Reading time ~2 minutes

15~16일 한일

- Board 생성 구현 완료

  • JPA를 통한 ManyToMany로 User, Board 테이블 구현

  • 뷰단에서 유저가 가지고 있는 Board 들을 정상적으로 출력하게 구현

  • JPA를 사용하는 기초적인 방법 숙지

    @Entity
    public class User {
      @ManyToMany
      @OrderBy("id ASC")
      @JoinTable(name = "board_list",
      joinColumns = @JoinColumn(name = "USER_ID"),
      inverseJoinColumns = @JoinColumn(name = "BOARD_ID"))
      private List<Board> boardList = new ArrayList<>();
    }
    
    @Entity
    public class Board {
      @ManyToMany(mappedBy = "boardList")
    	@OrderBy("id ASC")
    	private List<User> users = new ArrayList<>();
    }
    
    Board dbBoard = boardRepository.save(board);
    user.addBoard(board);
      	userRepository.save(user)
    

    조심해야 할 점 첫번째, 위의 user는 디비에서 가져온 user 야 한다. 두번째, OWNER 쪽인 user의 boardListadd를 한 다음 저장해야 한다. board_list에 대한 crud 가 일어날 때 보면 user 테이블을 기준(from)으로 동작한다. 셋째, board_list에 대한 insert 쿼리도 xxRepository.save(xx)가 수행될 때 실행된다. 사실 이 부분을 List에 add를 할 때 자동적으로 되지 않을까 착각을 했다.(그래서 콘솔에 insert 쿼리가 안 떠서 관계를 잘 못 맺었나 고민만 했다)

    아마 꽤나 틀린 부분도 있을 텐데 차후 JPA에 집중할 여력이 될 때 한번 제대로 공부해 봐야겠다.

    추가) 기본 생성자도 만들어 줘야 한다.


15~16일 느낀점

  • 데이터 베이스를 안 썼다면 쉽게 지나갔을 것 같은 부분이었는데 해당 부분에서 엄청나게 고생을 했다… 중간에 포비의 조언으로 해결이 됐다고 느꼈는데 착각이었다. 뒤에 지저분한 코드들을 수정하는 과정에서 조언을 통해 해결한 부분이 와르르 무너졌다.

    다시 오전과 같은 상황이 되어버려서는 멘붕…(무기력한 상태는 아니고 어렵지 않은 내용인데 왜 못할까 나한테 화나고 오기가 생기더라) 도저히 해결이 안 돼서 다시 한번 포비한테 질문을 해서 해결을 했는데 정말 기초적인 부분을 놓치고 있었다.

    컴퓨터가 똑똑하지 못하다는 건 알고 있었는데 JPA가 일정 부분 쉽게 처리를 해주기도 하고 JPA를 잘 모른다는 미명하에 사용자가 신경 써야 할 부분을 간과하고 알아서 다 해줄 거라는 착각을 해 버린 게 문제였다.

    후아.. 어떻게든 해결돼서 구현은 완료했는데 아직 능숙하게 사용하지도, 기본적인 사용법도 잘 안다고는 말 못하겠다. 모래성을 쌓은 형태인데 당장은 심적으로도 시간적으로도 여력이 안되므로 사용법을 숙지만 해두고 언젠가는 제대로 공부해봐야겠다. 아직도 왜 못했을까 스스로한테 분하다.

  • 카우한테 직접적인 지식에 대해서도 도움을 많이 받았지만, 가장 도움이 된 말은 객체는 테이블의 데이터를 표현하는 일종의 도구라고 생각하라는 말이었다.(정확히는 기억 안 나지만 이런 느낌의 말이었던 거로 기억한다) 그전까지는 이 둘을 자바스크립트에서의 == 정도로의 느낌으로 받아들였던 것 같다. 특히나 모델에 기능들이 들어가므로 모델을 더 중요시 생각했던 것 같기도 하다.

    저 말을 듣기 전까지는 객체 자체도 데이터로 생각을 하고 도리어 테이블을 도구쯤으로 생각했던 것 같다. 다른 부분은 관점의 차이일 수도 있겠지만 핵심적인 요지는 데이터 자체는 테이블 쪽이라는 것!! 그나마 이러한 생각이 들기 시작하니까 디비를 사용하는데 있어 생겼던 어색함을 많이 덜어 낼 수 있었던 것 같다.

  • 보안 쪽도 공부를 해보고 싶고, 트렐로의 기능을 다 구현하진 못하더라도 Card 구현까지는 해 보고 싶은데, 후자 같은 경우는 오래 걸리지는 않을 것 같아 일단은 내일 저녁까지는 구현하고 보안 부분을 구현할까 싶다. 특히 JPA를 어설프더라도 간단히는 사용할 줄 아나 복습 겸 반복 학습을 해봐야겠다.


내일 할일

  • trello 구현하기

    • Card 구현(그렇게 되면 Board 내부, Deck까지 구현) 혹은 보안 구현 시작