@Controller public class SecurityController { @GetMapping("/messages/inbox") public ModelAndView currentUserName(@AuthenticationPrincipal CustomUser customUser) { String username = customUser.getUsername(); // .. find messages for this user and return them ... } }
문법 요약 아래에서 더 자세히알아보겠지만 타임리프에서 사용하는 문법은 다음과 같다. 간단한 표현 변수 표현식: ${...} 선택 변수 표현식: *{...} 메세지 표현식: #{...} 링크 URL 표현식: @{...} 조각 표현식: ~{...} 리터럴 텍스트: 'one text', 'Anothr one!', ... 숫자: 0, 34, 3.0, 12.3, ... 불린: true, false 널: null 리터럴 토큰: one, sometext, main, ... 문자 연산 문자 합치기: + 리터럴 대체: | The name is ${name}| 산술 연산 Binary operators: +, -, *, /, % Minus sign (unary operatior): - 불린 연산..
Spring = Spring Framework Spring은 JAVA 애플리케이션 개발을 위한 포괄적인 인프라를 지원해주는 Framework이다. 종속성 주입 등 다양한 기능을 제공하고 있다. Spring Boot Spring Boot는 기본적으로 Spring Framework를 설정하는데 필요한 구성을 제거하는 확장 버전이라고 생각하면 편하다. 개발자 입장에서 더 빠르고 효율적으로 프로그램 개발이 가능하도록 지원한다. 결론 Spring Boot는 Spring 자체의 확장 버전이다. 개발, 테스트, 배포가 Spring Framework에 비해서 혁신적으로 간편해졌다. 특정 프로젝트에서 필수적인 종속성 구성이 필요하다면 Spring을, 일반적인 종속성 구성으로 구현이 가능한 프로젝트라면 Spring Boo..
엔티티만으로는 데이터베이스에 데이터를 저장하거나 조회 할 수 없다. 데이터 처리를 위해서는 실제 데이터베이스와 연동하는 JPA 리포지터리가 필요하다. 리포지터리는 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들(예: findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 리포지터리이다.
엔티티는 데이터베이스 테이블과 매핑되는 자바 클래스를 말합니다. spring-boot-starter-data-jpa 의존성을 추가하고 @Entiy 어노테이션을 붙이면 테이블과 자바 클래스가 매핑이 됩니다. 그래서 JPA에서 '하나의 엔티티 타입을 생성한다'라는 의미는 '하나의 클래스를' 작성한다는 의미가 됩니다. 엔티티라는 용어는 때로는 클래스를 의미하는 경우도 있고, 클래스에 의해 생성된 인스턴스를 의미하는 경우가 있습니다. 정확히 얘기 하자면, 엔티티 클래스 와 엔티티 인스턴스 혹은 엔티티 객체라는 표현이 정확합니다.
이전 페이지가 없으면 비활성화 th:classappend="${!paging.hasPrevious} ? 'disabled'" 다음 페이지가 없으면 비활성화 th:classappend="${!paging.hasNext} ? 'disabled'" 이전 페이지 링크 th:href="@{|?page=${paging.number-1}|}" 다음 페이지 링크 th:href="@{|?page=${paging.number+1}|}" 페이지 리스트 루프 th:each="page: ${#numbers.sequence(0, paging.totalPages-1)}" 현재 페이지와 같으면 active 적용 th:classappend="${page == paging.number} ? 'active'"
화면에서 전달받은 입력 값을 검증하려면 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..