화면에서 전달받은 입력 값을 검증하려면 Spring Boot Validation 라이브러리가 필요하다. (... 생략 ...) dependencies { (... 생략 ...) implementation 'org.springframework.boot:spring-boot-starter-validation' } (... 생략 ...) "Spring Boot Validation"을 설치하면 다음과 같은 애너테이션들을 사용하여 입력 값을 검증할 수 있다. 항목설명 @Size 문자 길이를 제한한다. @NotNull Null을 허용하지 않는다. @NotEmpty Null 또는 빈 문자열("")을 허용하지 않는다. @Past 과거 날짜만 가능 @Future 미래 날짜만 가능 @FutureOrPresent 미래 또는..
서비스가 필요한 이유는 무엇일까? 모듈화 예를들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로 만들어 두면 컨트롤러에서는 해당 서비스를 호출하여 사용하면 된다. 하지만 서비스로 만들지 않고 컨트롤러에서 구현하려 한다면 해당 기능을 필요로 하는 모든 컨트롤러가 동일한 기능을 중복으로 구현해야 한다. 이러한 이유로 서비스는 모듈화를 위해서 필요하다. 보안 컨트롤러는 리포지터리 없이 서비스를 통해서만 데이터베이스에 접근하도록 구현하는 것이 보안상 안전하다. 이렇게 하면 어떤 해커가 해킹을 통해 컨트롤러를 제어할 수 있게 되더라도 리포지터리에 직접 접근할 수는 없게 된다. 엔티티 객체와 DTO 객체의 변환 우리가 작성한 Question..
타임리프의 자주 사용하는 속성에는 다음 3가지 유형이 있다. 이 3가지 유형만 알아도 여러 기능을 충분히 만들 수 있다. 1. 분기문 속성 분기문 속성은 다음과 같이 사용한다. th:if="${question != null}" 위의 경우 question 객체가 null 이 아닌 경우에 해당 엘리먼트가 표시된다. 2. 반복문 속성 반복문은 반복횟수만큼 해당 엘리먼트를 반복하여 표시한다. 반복문 속성은 자바의 for each 문과 유사하다. th:each="question : ${questionList}" 반복문은 다음과 같이 사용할 수도 있다. th:each="question, loop : ${questionList}" 추가한 loop 객체를 이용하여 루프 내에서 다음과 같은 속성을 사용할수 있다. loo..
1. Optional이란? Optional 개념 및 사용법 [ NPE(NullPointerException) 이란? ] 개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하길 권장하기도 한다. List names = getNames(); names.sort(); // names가 null이라면 NPE가 발생함 List names = getNames(); // NPE를 방지하기 위해 null 검사를 해야함 if(names != null){ names.sort(); } [ Optional이란? ]..
리포지터리의 메서드명은 데이터를 조회하는 쿼리문의 where 조건을 결정하는 역할을 한다. 항목 예제 설명 And findBySubjectAndContent(String subject, String content) 여러 컬럼을 and 로 검색 Or findBySubjectOrContent(String subject, String content) 여러 컬럼을 or 로 검색 Between findByCreateDateBetween(LocalDateTime fromDate, LocalDateTime toDate) 컬럼을 between으로 검색 LessThan findByIdLessThan(Integer id) 작은 항목 검색 GreaterThanEqual findByIdGraterThanEqual(Intege..
Gradle이란? Gradle은 오픈소스 빌드 자동화 툴이다. Gradle은 거의 모든 타입의 소프트웨어를 빌드할 수 있는 유연함을 가진다. Gradle의 특징 1. High performance Gradle은 실행시켜야 하는 task만 실행시키고 다른 불필요한 동작은 하지 않는다. 또, build cache를 사용함으로써 이전 실행의 task output을 재사용할 수 있다. 심지어 서로 다른 기계에서도 build cache를 공유하여 성능을 높일 수 있다. 2. JVM foundation Gradle은 JVM에서 실행되고, JVM을 사용하려면 JDK를 설치해야 한다. 따라서 Java Standard API를 빌드 로직에 사용할 수 있다. 또한 Gradle을 다양한 플랫폼에서 실핼할 수 있다. 3. C..
spring framework에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 CRUD 처리를 위한 공통 인터페이스 제공 - repository 개발 시 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입 - 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있도록 지원 - 공통 메소드는 스프링 데이터 JPA가 제공하는 org.springframework.date.jpa.repository.JpaRepository 인터페이스에 count, delete, deleteAll, deleteAll, deleteById, existsById, findById, save .. 출처: https://data-make.tistory..
JPA(Java Persistence API) JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록하자. ORM(Object-Relational Mapping) 우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다. JPA(Java Persistence API) Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음 자바 어플리케이션에서 관계형 데이터베이..