SimpleEats 토이 프로젝트 (3)

유승선 ·2022년 10월 27일
0
post-thumbnail

Progress

Progress(Sign In)

내가 원했던 설계대로 코드를 짜볼수 있었다. 계정 이름, 비밀번호, 주소 그리고 핵심 기능 중 하나였던 회원 종류 선택기능. 이것으로 우리는 일반 회원으로 오는지 아니면 가게 업주로 오는지를 구분할 수 있었다.

Progress(Member Controller)

멤버 컨트롤러에 몇가지 변화가 생겼다. 타임리프 디테일 강의에서 봤던 Enum 클래스를 활용하여 타입을 구분해줬는데 아주 잘한거같다. 그리고 ModelAttribute 어노테이션을 활용해서 자연스럽게 memberTypes 라는 오브젝트 이름으로 모델에 넣을수 있었다.

Enum 클래스

SignForm 클래스. JPA 강의였느지 어디였는지 기억은 안나는데 이렇게 Form 같은 경우 Member 클래스를 직접 활용하는것보다 이렇게 나뉘어서 만들어주는게 훨씬 유리하다고 배웠다. 이유로는 @Valid 같은 검증 기능을 넣을때 조금 더 깔끔하고 유리한 전략으로 가지고 올 수 있기 때문이다. 검증 관련기능은 다음에 넣도록 하겠다.

  • MemberService 클래스를 추가한것도 확인 가능하다. MemberRepository 를 그대로 가져오는게 아니라 서비스 계층에서 따로 관리해주는점이 아직 익숙치 않은거같다.

Progress(MemberService)

아직 많은 기능이 추가된것은 아니지만 미래에 점점 발달 시킬 계획이다.


Error

Error

No default constructor for entity: :simpleEats.simpleEats.domain.Address

코드가 순탄하게만 흘러간건 아니였고 에러가 몇번씩 나왔다. 그리고 에러를 분석한 결과 내 자바 이해도에서 살짝 아쉬움이 있다고 느꼈다. default Constructor 이란것은 JPA 를 활용할때 기본 컨스트럭터를 사용해야 한다는 점이 있었다.

여러가지 해결점이 있지만 해결법 이런식으로도 해결 가능하다. @NoArgsConstructor 이라는 어노테이션을 새로 배웠다.

+추가
관련 글을 쓸까 말까 했는데 써봐야지 나중에 실수를 줄일 수 있을거같다.

MemberService 기능을 테스트 하던중에 타임리프 오류도 나오지 않았지만 이상하게 H2데이터베이스에 추가가 안되가지고 당황했다. 보니깐 내가 @Transactional(readOnly = true) 로 설정해두었는데 이 경우 read 기능은 향상이 되지만 write 기능을 해야할때는 꺼주는게 맞았다. 그런 이유로 @Transactional을 join() 위에 한번 더 적어준것이다.


배운점, 고칠점

확실히 모든 프로젝트를 혼자 해보니깐 더 배우는게 있는거같다. 먼저 Controller 구현에서 많은것을 배웠고 내가 원했던 Member Type 구현을 바로 할 수 있어서 너무 다행이었던거같다. 타임리프 코드는 아직 헷갈리는 부분이 많지만 그래도 이해 가능하다.

다음번에는 로그인 기능을 MemberRepository 에서 validate 하는 기능을 구현해보고 일반 회원 / 가게 업주에 따라서 보이는 화면이 다르게 보이도록 구현을 해봐야겠다.

profile
성장하는 사람

0개의 댓글