본문 바로가기
관리자

Programming-[Backend]

(394)
[TIL][중요]Entity의 필드값 변경은 Service가 아닌 Entity에서 처리 Entity의 필드값 변경은 Service 코드 내에서가 아니라 Entity 코드 내에 작성하는 것이 좋다. 왜냐하면 어떤 Entity를 여러 서비스에서 사용할 수 있기 때문이다. 예를들어, 다음과 같은 1: N 연관관계를 갖는 엔티티가 있다고 가정하자. General 엔티티에 Soldier 엔티티가 1 : N으로 연결되어 있다. 서비스코드에서 파라미터로 받아온 dto의 값들을 general 엔티티 내부의 soldier 엔티티의 필드값으로 Set하는 addSoldiers 메서드는, 서비스 코드에서 작성하는 것이 아니라 Entity 코드에서 작성한다. 이렇게 하면 makeArmyServiceImpl 코드에서 뿐만 아니라, 다른 Service 코드에서도 addSoldiers 메서드를 활용할 수 있게 된다. ..
[TIL][링크] Predicate, BooleanExpression의 개념과 차이점 Predicate, BooleanExpression 개념 뭐냐 BooleanExpression 클래스는 자바8 문법이다. 조건문을 담을 수 있고, 담은 조건문을 다른 곳에서 활용할 수 있다. 왜쓰냐 조건문이 null일수도 있다. 단순 Builder를 쓰면 문법도 보기 좋지 않고 무슨 조건절인지 한눈에 파악이 어렵다. BooleanBuilder builder = new BooleanBuilder(); if(XxxRepository.getMemberId() != null) { builder.and(....) } 이런식으로 BooleanBuilder에 조건절을 if문을 통해서 하나하나 검사하고, and 메서드로 조건절들을 추가한다. 그리고 완성된 BooleanBuilder를 쿼리문의 조건절에 넣는데, 조건이 ..
[스프링 웹MVC-2] 8. 검증(Validation) - Bean Validation 사용하기 1. Bean Validation 어노테이션 적용해보기 Bean Validation 개념 자바 if 코드로 작성했던 특정값이 null이거나 blank가 있으면 안된다. , 숫자값은 최소값 ~ 최대값 사이여야 한다는 검증 조건 등은 매우 기본적인 조건이다. 이런 간단한 제약조건은 어노테이션으로 지원이 되는데, 이런 검증 내용을 표준화하고 자동화해주는 것이 Bean Validation 이다. Bean Validation은 구현체가 아니라, Bean Validation 이라는 JSR-380의 표준기술이다. 하이버네이트 Validator의 공식사이트는 다음과 같다. https://beanvalidation.org/2.0/ 2. Bean Validation 테스트 라이브러리 추가하기 본격적인 사용에 앞서, Bea..
[스프링 웹MVC-2] 7. 검증(Validation) - 오류코드, 메시지 처리 이제 검증된 내용을 앞서 배운 메시지로 공용화하여 처리하는 방법을 배운다. 이렇게 공용화함으로써 유지보수에 유리하고, 계층적인 오류 및 메시지 관리가 가능하게 된다. 살펴볼 순서는 다음과 같다. 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 알아보기 2. bindingResult의 rejectValue, reject 사용해보기 3. 범용적 메시지 처리 4. 처리 원리 : MessageCodesResolver 5. 오류 메시지 계층화 하기, ValidationUtils 6. 스프링이 만든 오류 처리 : typeMismatch 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 앞선 글에서 FieldErrors와 Ob..
[스프링 웹MVC-2] 6. 검증(Validation) 개선 : BindingError, FieldError, ObjectError 1. 코드 개선을 위한 코드 복사 및 변경 코드 replace 검증을 위한 코드를 개선해본다. 우선 앞선 글에서 작성한 코드를 복사해서 V2 버전으로 만든다. 코드 내에 있는 v1, V1 부분을 v2, V2로 만드는데, 변경을 원하는 코드를 블록하고, [Ctrl + R]을 누르면 intelliJ에서 선택하여 변경, replace All 기능을 제공한다. 디렉토리 내 단어 변경 [Ctrl + Shift + R]을 누르면 디렉토리 내부의 단어들을 전부 바꿔줄 수 있다. 2. BindingResult 적용 : 기본 에러의 종류와 메시지를 담는 errors 객체를 직접 생성하는 것이 아니라, 스프링에서 제공하는 BindingResult 객체를 사용하도록 한다. BindingResult 객체는 View로 넘기는 ..
[스프링 웹MVC-2] 5. 검증(Validation) 강의에서 받은 validation 프로젝트 파일을 기반으로 검증에 대해서 공부한다. 초기 세팅은 이전 프로젝트들과 동일하게 해주도록 한다. 1. 검증 내용 검증 예제를 바탕으로 학습을 해볼 것이다. 검증 요구사항이 아래와 같다고 가정한다. 1. 타입 검증 가격, 수량에 문자가 들어가면 에러 2. 필드 검증 상품명 : 필수 입력, 공백X 가격 : 1,000원 이상, 1,000,000원 이하 수량 : 최대 9,999개 3. 전체 검증 가격*수량의 값은 10,000원 이상 프론트 VS 백 검증 검증에는 클라이언트(프론트)상에서 입력값을 바로 검증하는 방법이 있고, 입력값을 서버(백)로 가져와서 검증하는 방법이 있다. 그러나 결론은 프론트, 백 모두에서 검증해야한다. 왜냐하면 프론트에서만 검증할 경우, 입력창에..
[스프링 웹MVC-2] 4. 메시지, 국제화 기존 상품 등록 프로젝트를 그대로 가져온다. 강의에서 받을 수 있는 파일로 받는데, 이전 시간에 다룬 체크박스 등의 내용은 제외된다. 1. 개요 현재 프로젝트는 만약 html 상 하드코딩된 단어들을 변경해야 된다면, 일일이 찾아서 고쳐야하는 상황이다. 아래 사진에서 상품명, 가격, 수량 등을 바꿔야 한다면 직접 찾아가며 바꿔야되는 것이다. 이런 어려움을 해결해줄 수 있는 것이 메시지 이다. 단어들을 하드코딩하지 않고, 별도의 파일(messages.properties)에 놔두고 관리하는 것이다. 국제화 도 메시지에서 영어버전 파일은 messages_en.properties, 한글 버전 파일은 message_ko.properties로 두면 될 것이다. 그리고 HTTP의 accept-language 헤더 값을..
[스프링 웹MVC-2] 3. 타임리프/스프링으로 폼 양식 만들기 - th:object, th:field, 체크박스, 라디오 버튼, 셀렉트 박스 form 프로젝트를 생성한다. 강의에서 기초 자료를 받아서 진행한다. MVC 1편에서 상품 관련 폼을 만들던 프로젝트이다. 스프링 통합 폼을 실습하기 위해서, 타임리프를 스프링 빈 형태로 등록해야한다. 기존 스프링은 다소 복잡한 과정을 통해 타임리프 템플릿 엔진을 스프링 빈으로 등록해야 하지만, 스프링 부트는 아래 구문으로 build.gradle 파일에 타임리프를 import 해옴으로써 이런 과정을 한번에 처리해준다. implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 1. 입력 폼 수정 상품 등록/수정 폼 우선 html 파일에서 객체 정보를 바로 넘길 수 있도록 하기 위해, Controller에서 객체를 넘겨줘야 한다. 이때 ..