Spring 112

Bean Validation

대부분의 특정 필드에 대한 검증 로직은 일반적인 로직이고 공통적이다. 이런 검증 로직을 모든 프로젝트에 적용하도록 공통화, 표준화한것이 바로 Bean Validation!! public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; } Bean Validation이 뭔데? Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준. 검증 애노테이션과 여러 인터페이스의 모음. 이..

Spring/Spring MVC 2021.07.14

Spring IoC/DI

테코톡 스터디 : Spring IoC/DI 10분 테코톡을 시청하고 작성하였습니다. 영상링크 참고용 : 이전에 영한님 강의듣고 정리해놓은 IoC/DI 스프링의 대 삼각형 스프링의 가장 밑바탕이 되는 3가지 IoC/DI ==> 가장 기본 AOP PSA IoC / DI Spring Framework의 근간 Object의 생명주기와 의존관계에 대한 프로그래밍 모델 유연하고 확장성이 뛰어난 코드를 만들 수 있게 해주는 프로그래밍 모델 "토비의 스프링"에서 발췌 관심사의 분리 유연하고 확장성이 뛰어나다. (= 변경이 있을 때 수정이 쉽다.) (= 수정할 부분만 수정하면 된다.) (= 관심사의 분리가 잘 이루어졌다.) 전략 패턴(Strategy Pattern) 관심사의 분리를 잘 설명할 수 있는 패턴 객체들이 할 ..

테코톡 스터디 2021.07.13

Validation

폼 입력으로 들어오는 데이터를 검증하고 만약 오류가 발생했을 때 오류 페이지를 보여주는 것이 아닌 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 고객에게 알려주어야한다. 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지를 검증하는 것이다. 클라이언트 검증은 조작이 가능하다. ==> 보안에 취약 그렇다고 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용해야함. API 방식을 사용해서 검증 오류를 API 응답 결과에 남겨주는 것도 좋은 방법 1. 검증 직접 처리 서버에서 검증 실패가 발생하면 Form에 입력된 데이터와 검증 오류에 대한 결과를 Model에 담아 다시 상품 등록 Form으로 보내준다. 이런 오류 페이지가 띄워지는 것이 아닌 입력한 데이터는 그대로..

Spring/Spring MVC 2021.07.07

메시지, 국제화

메시지란? 만약 상품명이라는 라벨을 상품이름으로 변경하자는 요구사항이 들어왔다고 가정해보자. 이를 위해선 상품명이라고 코딩되어 있는 모든 부분을 찾아서 상품이름으로 고쳐야할 것이다. HTML 파일에 메세지가 하드코딩되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하는 기능을 메시지 기능이라고 한다. "message.properties"라는 메세지 관리용 파일을 만들어 사용하는 것이다.(key-value) item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML은 key값으로 value를 불러와 사용하면 된다. 물론 하드코딩된 현재 상태에서는 모두 찾아고쳐야 하지만 추후에 비슷한 요구사항이 들어왔을 때에는 메시지 관..

Spring/Spring MVC 2021.07.06

검색 기능 만들기(동적쿼리) - Querydsl 사용

현재 Spring Security를 사용하여 로그인, 로그아웃을 구현한 상태이고 인증(로그인)하지 않은 사용자는 게시판에 접속할 수 없도록 구현해놓았다. Controller 파라미터로 page(페이징 변수), category(카테고리별 조회), myPost(내 게시물 보기), searchDto(검색창)를 받는다. 1. page page는 defaultValue를 0으로 설정하였기 때문에 값을 설정하지 않으면 0페이지부터 보여준다. 만약 다음 페이지 버튼을 누르게 되면 현재 페이지에서+1을 한 값이 page 변수에 담기고, 이전 페이지 버튼을 누르면 현재 페이지에서 -1을 한 값이 담긴다. 2. category required 속성을 false로 지정해놓았기 때문에 category 값을 주지 않으면 nul..

중급 문법

1. 프로젝션과 결과 반환 1-1. 프로젝션과 결과 반환 - 기본 프로젝션 : select 대상을 지정 프로젝션 대상이 하나 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 둘 이상이면 튜플이나 DTO로 조회한다. 튜플 조회 "com.querydsl.core.Tuple" 리스트의 타입이 Tuple형식으로 반환된다. 데이터를 사용할 때는 get()을 사용하여 값을 꺼낸다. 1-2. 프로젝션 결과 반환 - DTO 조회 (중요!!) JPA에서 DTO를 조회할 때는 new 오퍼레이션을 사용하는데, DTO의 패키지명을 다 적어줘야해서 매우 지저분해지고 생성자 방식만 지원한다는 단점이 존재한다. Querydsl 빈 생성 - 프로퍼티 접근 - 필드 직접 접근 - 생성자 사용 먼저 프로퍼티 접근을 사용하는 방..

Spring/Querydsl 2021.06.29

로그인한 사용자 정보 받아오기

Spring Security를 사용하여 로그인, 로그아웃을 구현해놓았다. 또한 회원 가입시에 Spring Security를 통해서 비밀번호를 암호화하여 저장하도록 하였다. 초기버전에서의 새로운 게시물 작성은 Member 엔티티를 추가하기 이전이였기 때문에 작성자를 직접 입력하는 식으로 구현되었다. 하지만 현재 Member 엔티티를 추가하여 로그인, 로그아웃을 구현해놓은 상태이기 때문에 Authentication 객체를 사용하여 세션 정보를 가져와 작성자를 고정시키는 방식으로 변경하였다. 게시물을 작성하면 세션 정보를 가져와 작성자는 disabled Authentication를 파라미터로 받아 위와 같이 사용하였다. 스프링 시큐리티를 처음 사용해보았는데 굉장히 성숙도가 높은 부분인 것 같아 추후에 따로 공..

조회수 기능, 페이징, 정렬

현재 게시물 CRUD 기능은 구현이 되어있는 상태이다. 스프링 데이터 JPA를 사용하여 굉장히 편리하게 구현하였다. 조회수 기능 조회수 기능의 구현 로직은 굉장히 간단하다. 그냥 해당 게시물을 조회할 때 조회수 필드를 +1 시켜주면 된다. 프로젝트를 진행할 때에는 Setter를 사용하여 값을 변경하는 습관은 매우 좋지 않은 습관이다. 그 외에 따로 조회수 필드를 변경할 수 있는 메서드를 만들어서 진행하였다. 이는 서비스 계층에서 호출되어 사용된다. JPA의 Dirty Checking 기능을 사용하여 조회수를 1씩 올려주는 식으로 구현하였다. 서비스 계층의 클래스 레벨에서 @Transation(readOnly=true)로 설정해놓고 생성, 수정이 일어나는 메서드 레벨에서 위와 같이 @Transaction을..

Spring MVC의 HiddenMethod 기능 사용하기

기본적으로 HTML Form의 method 속성은 post와 get 방식 밖에 지원하지 않는다. 그렇다면 HTML Form을 사용할 때는 @DeleteMapping을 사용하지 못하는 걸까?? Spring MVC는 HiddenMethod 기능을 통해 HTML Form이 제공하지 않는 delete, put과 같은 메서드를 사용가능하게 해준다. input 타입을 hidden으로 사용자가 원하는 http메서드 방식을 스프링에게 알려주면 스프링 MVC가 내부적으로 이를 사용가능하게 해주는 방식으로 동작한다. 예전에는 @Configuration을 통해 스프링 빈에 등록시켜고 web.xml을 통해 filter를 설정해주어야했지만 최신 스프링부트에서는 application.properties나 yml에 등록해주면 바로..

Spring 2021.06.21
반응형