[Spring] postId 관련 삽질

gnoesnooj·2021년 12월 29일
0

돌아보니 너무 간단한, 나에겐 너무나 어려웠던 문제점들.
복습도 안 한 얕은 지식으로 그냥 다른 사람들 코드 보면서 하면 되겠지, 하는 아주 귀여운 생각에서 비롯된 문제다.

우선, 내가 짜려고 했던건

  1. Post 객체는 각각 postId 를 pk로 가진다.
  2. set 메소드를 사용하지 않는다. 빌더 패턴을 적용한다.
  3. 하지만, @Builder 어노테이션은 사용하지 않는다.
  4. postId는 자동생성되어 넣는다.
  5. DB는 일단 Map<Long, Post> 이다.

그래서, 일단 짜보자

Client -(1)- Controller -(2)- Service -(3)- Repository -(4)- DB 의 구조이다.

본래 api 를 받아서 api를 리턴하는 방식을 통해, Controller 부터 만들어 나가야 하는데, 나는 기초적인 강의만 보고 프로젝트로 뛰어든 나는 Controller 가 무조건 view만 return 하는 줄 알고 service 부터 만들어야 하나...? 했다.(심지어 service 부터 만들어야겠다는 틀린 결론에 이르는데에도 시간을 꽤나 썼다.) 당연히 아니다. RestController 를 통해서 api를 return 할 수 있었다. 프로젝트 초기 api만을 만든다 라는 말을 듣고 미리 떠올렸어야 할 의문점인데, 머리속에 든게없으니 의문점이 들리가 있나. 하여튼 여기서 이걸 깨달았다.

미리 build 된 post 객체를 매개변수로 갖는 service 의 createService() 를 호출하면, repository 의 savepost() 가 호출이 되고, 그걸 통해서 Collection Map db에 저장한다.

근데, 내가 맞이한 문제점들은

  1. 강의에서 자세히 안봤던 @id@GeneratedValue 는 진짜 DB가 있어야 한다.(이를테면 mysql 그런것들)
  2. 나는 이미 post 객체를 생성했는데, 내가 생성한 객체는 postId가 없이 build 된 것이다.
    (+) 이유 : service가 이미 build 된 post를 받아야 했기에 (2) 의 과정에서 build 되려면, postId는 (4)에서 자동생성되어 넣어졌어야 했기에 이런 상황이 발생함.
    그래서 나는 대체 Post 객체 필드에 있는 postId 는 어떻게 넣어야 할까 고민이 시작됐다.

그래서 깨달았나 ?

  1. 진짜 당연한데, key 값의 Long 과 value 의 postId 는 당연히 다르다. 창피하지만 나는 이걸 깨닫는데에 시간이 좀 걸렸다.
  2. 문제점 2번을 통해서 dto 와 entity 개념을 적용해야 한다는 것을 이제서야 떠올렸다.
  3. 그래서 우선 post 의 PostId는 삭제했다. 일단 db가 Map 인 상황에서, 굳이 Id를 또 가질 필요가 없다고 생각했다. key가 있으니까. 나중에 mysql 등 db를 사용하게 된다면 그땐 다시 postId 필드가 필요하겠지만, 지금은 필요가 없다. key 값은 savePost 에서 map에 put 할때 key++를 통해서 넣어준다.
  4. 기본적으로 김영한님의 강의도 보고, 스프링부트와 aws로 구현하는 웹서비스 라는 책도 보면서 코딩을 했는데, 아는거 없이 남의 것만 들여다보고 적용하려니 멋도 모르고 가져다 쓴 꼴이 되었던 것 같다. 정확히 어떻게 돌아가는지 알고 써야했는데..

아직 못한 것

  1. 시작점을 controller 로 잡고 다시 시작해야한다.
  2. Json 형식의 data가 들어온다고 가정하고 작성하자.
  3. dto, entity 개념을 생각하며 어떻게 다시 짤지 생각해보자.
  4. 아직 RestController 가 어떤식으로 작동하는지 자세히 모르기 때문에 그걸 공부하면 몇가지 과제가 해결될지도 모른다.

이제 2주 다되어 가는데, 진행도 이게 맞나 ? 왜이렇게 된걸까

공부를 확실히 안한 것 같다. 계속 풀리지 않는 postId 문제를 보면서 부딪히고 해결할 생각을 해야 하는데, 아 저거 해야하는데. 아 저거 풀어야 하는데 하면서 조금 보다가 다른 짓 하고 게임하고 놀고 도망가고 했던 기억이 난다. 이러면 해결되는게 하나도 없는데.. 실력이 늘려면 진짜 대가리 박고 해야하는데...
이제라도 제발 정신차리고 하자. 하자고 다짐한 것만 몇번인지 모르겠다만, 이번 다짐이 마지막이길 나 자신에게 바래본다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글