일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 서비스 디스커버리
- 달팽이
- 이분 탐색
- spring boot
- 주울
- 스프링 시큐리티
- Logback
- 다익스트라
- 스택
- 트리
- 완전 탐색
- 메모이제이션
- docker-compose
- Java
- 이분 매칭
- Spring Cloud Config
- spring cloud
- 백트래킹
- 구현
- Gradle
- 비트마스킹
- 도커
- dp
- 유레카
- Zuul
- ZuulFilter
- 구간 트리
- 게이트웨이
- 플로이드 와샬
- BFS
- Today
- Total
목록Toy Project/쇼핑몰 만들기 프로젝트 (6)
Hello, Freakin world!
기능 - 아이템 조회 - 아이템 추가 - 아이템 삭제 - 아이템 수정 validation, 예외처리 등 대부분의 골자는 Customer 엔티티 때와 비슷하다. 개선된 점이라면 REST의 하이퍼링크를 테스트하기가 참 곤란했는데 JsonPath 라이브러리를 이용해 만든 헬퍼메서드로 꽤나 간편하게 테스트를 수행하게 된 점이다. https://github.com/johnna-endure/myshop/tree/develop johnna-endure/myshop Contribute to johnna-endure/myshop development by creating an account on GitHub. github.com

시간이 엄청나게 걸렸다. 간단한 CRUD라도 테스트를 일일이 작성하고 예외처리, validation 등 견고한 코드를 작성하는건 꽤 어려운 일이었다. 구현한 것들 - api 응답에 하이퍼미디어 추가 - ControllerAdvice를 이용한 예외처리 - api 메서드 마다 단위테스트 추가 구현 보류한 것들 - AOP이용한 validation : AOP에 대한 학습이 더 필요하다. 휴~ 일단 결과물부터 살펴보자. /customers 는 고객 도메인의 aggregate root의 진입점에 해당한다. 페이징 파라미터를 따로 추가하지 않으면 size = 5다. 굳이 이렇게 말하지 않아도 응답에 _link 객체의 all의 href를 보거나, 여기서는 보이지 않지만 self 속성의 href 속성을 보면 어떤 파라미..
레퍼런스들을 읽어보고 어떤 걸로 하이퍼미디어를 구현할지 알아보는데 3일? 정도 걸렸다. 하루 대부분 영어 문서들을 거북이처럼 읽어가며 보냈기 때문에 체감상 훨씬 오래걸린 듯한 기분이다. 내가 찾아본 바로 RESTful API를 구현하기 위해서 3가지 방법이 있다. 1. 직접 JSON 응답 객체를 작성한다. 2. Spring HATEOAS 를 이용한다. 3. Spring Data REST 를 이용한다. 1,2번과 3번을 두 그룹으로 나눠서 보자. 내가 느끼기엔 서로 느낌이 좀 달랐다. 1번은 너무너무너무너무 거추장스럽고 고생스럽다. 2번은 1번을 하지 않도록 유틸 클래스와 메서드를 제공한다. 2번은 딱히 어떤 계층에 의존하지 않는다. 보통 컨트롤러 계층에서 작성하지만 굳이 다른 계층에서 할려고 한다면 객체..
생각해보니 RoleType 이라는 속성도 의미가 없었다. 비회원은 User 엔티티 속성이 모두 null이여야 한다. 비회원, 회원, 관리자를 단순히 하나의 필드로 구분할게 아니라 완전히 다른 개체로 분리해야 하는건 아닌가라는 생각이 들었다. 그래서 일단 지금은 User -> Customer 로 바꾸고 RoleType 속성은 삭제하자. 비회원과 관리자는 일단 미뤄둔다. import ... @Getter @ToString @NoArgsConstructor @Entity @EntityListeners(value = AuditingEntityListener.class) public class Customer { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) ..
이전 글에서 설계한 명세대로 User 엔티티를 작성해보자. User package com.springboot.myshop.domain.user; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.time.LocalDateTime; @Getter @NoArgsConstructor @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "USER_ID") private Long id; @Column(nullable = false,..

시작하는 단계라 대략적인 도메인을 나누고 수량 관계만 표현했다. 이제 회원 도메인을 좀 더 다듬어보자. 회원 필요한 기능1. 회원 등록2. 회원 정보 조회3. 회원 정보 수정4. 회원 탈퇴5. 인증 (관리자, 비회원, 멤버를 구분해야 한다) 1~4 는 결국 간단한 CRUD다.5번도 일단은 간단하게 이메일, 비밀번호를 받아 데이터베이스에서 비교하는 식으로 구현할 계획. (추후에 OAuth, Spring Security를 다시 적용할 예정) 위를 바탕으로 회원 객체 속성들을 나열해 보자. 회원 클래스 속성- id : Long = JPA 식별자- email : String - password : String- address : Address - createdDate : LocalDatetime - modifi..