돌아보니 너무 간단한, 나에겐 너무나 어려웠던 문제점들.
복습도 안 한 얕은 지식으로 그냥 다른 사람들 코드 보면서 하면 되겠지, 하는 아주 귀여운 생각에서 비롯된 문제다.
우선, 내가 짜려고 했던건
- Post 객체는 각각 postId 를 pk로 가진다.
- set 메소드를 사용하지 않는다. 빌더 패턴을 적용한다.
- 하지만,
@Builder
어노테이션은 사용하지 않는다.
- postId는 자동생성되어 넣는다.
- 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에 저장한다.
근데, 내가 맞이한 문제점들은
- 강의에서 자세히 안봤던
@id
와 @GeneratedValue
는 진짜 DB가 있어야 한다.(이를테면 mysql 그런것들)
- 나는 이미 post 객체를 생성했는데, 내가 생성한 객체는 postId가 없이 build 된 것이다.
(+) 이유 : service가 이미 build 된 post를 받아야 했기에 (2) 의 과정에서 build 되려면, postId는 (4)에서 자동생성되어 넣어졌어야 했기에 이런 상황이 발생함.
그래서 나는 대체 Post 객체 필드에 있는 postId 는 어떻게 넣어야 할까 고민이 시작됐다.
그래서 깨달았나 ?
- 진짜 당연한데, key 값의 Long 과 value 의 postId 는 당연히 다르다. 창피하지만 나는 이걸 깨닫는데에 시간이 좀 걸렸다.
- 문제점 2번을 통해서 dto 와 entity 개념을 적용해야 한다는 것을 이제서야 떠올렸다.
- 그래서 우선 post 의 PostId는 삭제했다. 일단 db가 Map 인 상황에서, 굳이 Id를 또 가질 필요가 없다고 생각했다. key가 있으니까. 나중에 mysql 등 db를 사용하게 된다면 그땐 다시 postId 필드가 필요하겠지만, 지금은 필요가 없다. key 값은 savePost 에서 map에 put 할때 key++를 통해서 넣어준다.
- 기본적으로 김영한님의 강의도 보고, 스프링부트와 aws로 구현하는 웹서비스 라는 책도 보면서 코딩을 했는데, 아는거 없이 남의 것만 들여다보고 적용하려니 멋도 모르고 가져다 쓴 꼴이 되었던 것 같다. 정확히 어떻게 돌아가는지 알고 써야했는데..
아직 못한 것
- 시작점을 controller 로 잡고 다시 시작해야한다.
- Json 형식의 data가 들어온다고 가정하고 작성하자.
- dto, entity 개념을 생각하며 어떻게 다시 짤지 생각해보자.
- 아직 RestController 가 어떤식으로 작동하는지 자세히 모르기 때문에 그걸 공부하면 몇가지 과제가 해결될지도 모른다.
이제 2주 다되어 가는데, 진행도 이게 맞나 ? 왜이렇게 된걸까
공부를 확실히 안한 것 같다. 계속 풀리지 않는 postId 문제를 보면서 부딪히고 해결할 생각을 해야 하는데, 아 저거 해야하는데. 아 저거 풀어야 하는데 하면서 조금 보다가 다른 짓 하고 게임하고 놀고 도망가고 했던 기억이 난다. 이러면 해결되는게 하나도 없는데.. 실력이 늘려면 진짜 대가리 박고 해야하는데...
이제라도 제발 정신차리고 하자. 하자고 다짐한 것만 몇번인지 모르겠다만, 이번 다짐이 마지막이길 나 자신에게 바래본다.