목록BE (354)
오봉이와 함께하는 개발 블로그
회원 가입 홈 화면 홈 화면 회원 가입 로그인 Member @Data public class Member { private Long id; @NotEmpty private String loginId; @NotEmpty private String name; @NotEmpty private String password; } MemberRepository @Slf4j @Repository public class MemberRepository { // 동시성 문제가 고려되어 있지 않다. // 동시성 문제를 고려하려면 ConcurrentHashMap, AtomicLong 사용 고려 // static 사용 private static Map store = new HashMap(); private static Long..
로그인 요구사항 로그인 전 홈 화면 회원가입 로그인 로그인 후 홈 화면 "XXX"님 환영합니다. 상품 관리 로그 아웃 보안 요구사항 로그인 사용자만 상품에 접근하고, 관리할 수 있음 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동 Package 구조 hello.login domain item member login web item member login 도메인 도메인은 화면, UI, 기술 인프라 등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말한다. web을 다른 기술로 바꿔도 도메인은 그대로 유지할 수 있어야 한다. 이렇게 하려면 web은 domain을 알고 있지만, domain은 web을 모르도록 설게해야 한다. 이것을 web은 domain을 의존하지만, ..
Bean Validation - HTTP 메시지 컨버터 @Valid, @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다. 참고 @ModelAttribute는 HTTP 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용한다. @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용한다. ValidationItemApiController 생성 @Slf4j @RestController @RequestMapping("/validation/api/items") public class ValidationItemApiController { @PostMapping("/add") ..
Form 전송 객체 분리 - 소개 실무에서는 groups를 잘 사용하지 않는다. 그 이유는 등록시 폼에서 전달하는 데이터가 Item도메인 객체와 딱 맞지 않기 때문이다. 지금 사용하는 예제에서는 폼이 전달하는 데이터와 도메인 객체가 딱 맞지만, 실무에서는 도메인 관련 데이터 외에 약관 정보도 추가도 받는 등, 도메인과 관계없는 수 많는 부가 데이터가 넘어온다. 그래서 보통 도메인을 직접 전달받는 것이 아니라 복잡한 폼 데이터를 컨트롤러까지 전달할 별도의 객체를 만들어서 전달한다. 예를 들면 ItemSaveForm을 만들어서 @ModelAttribute로 사용하고, 이것을 통해 컨트롤러에서 폼 데이터를 전달 받아 필요한 데이터를 사용해서 Item을 사용한다. 폼 데이터 전달에 Item 도메인 객체 사용 H..
Bean Validation - 한계 수정시 검증 요구사항 등록시 기존 요구사항 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명 : 필수, 공백 X 가격 : 1000원 이상, 1백만원 이하 수량 : 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 수정시 요구사항 등록시에는 quantity 수량을 최대 9999까지 등록할 수 있지만 수정시에는 수량을 무제한으로 변경할 수 있다. 등록시에는 id에 값이 없어도 되지만, 수정시에는 id 값이 필수이다. 수정 요구사항 적용 수정시에는 Item에서 id값이 필수이고, quantity도 무제한으로 적용할 수 있다. @Data public class Item { @NotNull // 수정 요구사항 추..