본문 바로가기

WEB/Spring

(25)
Paging 구현 org.springframework.data.domain.Page : 페이징을 위한 클래스 org.springframework.data.domain.PageRequest : 현재 페이지와 한 페이지에 보여 줄 게시물 개수 등을 설정하여 페이징을 요청하는 클래스 org.springframework.data.domain.Pageable : 페이징을 처리하는 클래스 ** JPA 환경을 구축했다면 JPA 라이브러리에 포함되었으니 추가로 설치할 필요는 없다 Page findAll(Pageable pageable); Pageable 객체를 받아 Page 타입 객체 반환하는 findAll 메서드 작성 public Page getList(int page){ Pageable pageable= PageRequest.of(..
Validation 사용자로부터 입력받은 값을 검증하기 위해 사용하는 라이브러리 dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-validation' @Size 문자 길이 제한 @NotNull Null을 허용 X @NotEmpty Null 또는 빈 문자열을 허용 X @Past 과거 날짜만 입력 가능 @Future 미래 날짜만 입력 가능 @FutureOrPresent 미래 또는 오늘 날자만 입력 가능 @Max 최댓값 이하의 값만 입력할 수 있도록 제한 @Min 최솟값 이상의 값만 입력할 수 있돌고 제한 @Pattern 입력값을 정규식 패턴으로 검증 https://wikidocs.net/book/7601
DTO(Data Transfer Object) 서비스가 요청을 처리 후 클라이언트에게 반환할 때 Model 자체를 그대로 리턴하는 경우는 드물고 보통 DTO로 변환해 리턴한다. 이유는 다음과 같다 1. 비지니스 로직을 캡슐화 하기 위함 Model은 DB 테이블 구조와 매우 유사하다. 모델이 갖고 있는 필드는 테이블의 스키마와 비슷할 확률이 높다. 외부에서 DB의 스키마를 아는 것을 원치 않을 경우가 대다수이다. 이때 DTO를 사용하면 외부에 서비스 내부의 로직, DB구조 등을 숨길 수 있음 2. 클라이언트가 필요한 정보를 모델이 전부 포함하지 않는 경우가 많다. 만약 서비스 실행 도중 에러가 발생하면 이 메세지를 어디에 포함해야하는가 ,모델은 서비스 로직과는 관련이 없기 때문에 DTO에 에러 메세지를 포함한다.
Entity에 테이블 맵핑 https://wikidocs.net/161165 2-04 엔티티로 테이블 매핑하기 * `[완성 소스]` : [https://github.com/pahkey/sbb3/tree/v2.04](https://github.com/pahkey/sbb3/tree/v2.04… wikidocs.net h2 연결 이슈로 mysql 사용 @Entity 스프링 부트가 해당 클래스를 엔티티로 인식 @Id - id 속성을 기본키로 지정 @GenerateValue - 데이터를 저장할 때 해당 속성 값이 자동으로 1 씩 증가 Strategy=GenerationType은 해당 속성만 별도로 번호가 차례대로 증가하는 옵션 (생략되면 모든 @GenerateValue이 지정된 모든 속성에 번호를 생성) @Column 열의 세부 설정을 위..
active profile 설정(인텔리제이 무료 버전 기준) 스프링 사용할 때 실행되는 설정을 다르게 하고 싶을 때 profile을 설정하는 방법 1. application.yml 우선 구분선(---)을 이용해서 각 설정에 따른 application.yml 파일 수정 (구분선을 기준으로 위는 local , 아래는 dev로 설정) 2. active profile 빨간색 동그라미 클릭 -> edit configurations 클릭 Modify options(빨간색 동그라미) 클릭 -> Java- add VMoption 클릭 -> 새로 생긴 vm option 창(빨간색 체크)에 -Dspring.profiles.active= 원하는 profile 이름 입력 3. 실행 결과 확인
Dependency Injection 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입
컴포넌트 스캔 Filter 필터 사용법 @MyIncludeComponent public class BeanA { } @MyExcludeComponent public class BeanB { } @Configuration @ComponentScan( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = MyIncludeComponent.class), excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class) ) includeFilters: 컴포넌트 스캔에서 추가할 대상을 지정 excludeFilters: 컴포넌트 스캔에서..
스프링 빈 조회하기 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(빈등록클래스명.class); 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법 1. ac. getBean(빈 이름, 타입) 2. ac.getBean(타입) 만약 조회 대상 스프링 빈이 없으면 발생하는 예외 - NoSuchBeanDefinitionException 조회되는 타입이 둘 이상일 때 발생하는 예외 - NoUniqueBeanDefinitionException -> 이름으로 조회, 특정타입을 모두 조회 스프링 빈의 상속 관계 부모 타입으로 조회하면 자식도 함께 조회됨 -> Object로 하면 모든 스프링 빈 조회
AOP(Aspect Oriented Programming) AOP는 공통 관심사항과 핵심 관심사항을 분리하여 프로젝트를 원활하게 만들어줌 만약 프로젝트의 모든 메서드 호출 시간이 궁금하다면 각 메서드마다 시간 측정하는 로직을 추가해야한다 하지만 한 로직만 변경해서 모든 메서드에 적용할 수 있도록 도와주는게 aop @Component 등록하고 @Aspect 등록하고 @Around("execution(* 패키지 경로..*(..))")
JPA로 DB(h2) 사용하기 1. build.gradle 파일에 jpa, h2 라이브러리 추가 추가하면 옆에 코끼리 버튼이 뜨는데 꼭 클릭해줘야한다 2. 스프링 부트에 JPA 설정 추가 맨 밑줄에 none인 이유는 미리 테이블을 생성해뒀기 때문! create으로 바꾸면 테이블을 직접 생성해줌 3. 엔티티 맵핑 Entity는? 데이터의 집합이다 위 처럼 member 테이블이 있으니 만들어놓은 Member class에 가서 엔티티 맵팽을 한다 @Entity @Id @ GenerateValue, GenerationType 모두jakarta.persistence로 임포트 plz 궁금한게 많은데 JPA를 제대로 안다뤄봐서 .. ㅠ 검색해보니 private Long id 위에 어노테이션은 기본키라서 저렇게 설정해놓은 것 같다 4. JPA 회원..