본문 바로가기

Spring

(52)
[spring data jpa] - ORM 도메인 모델을 사용하는 코드를 Object 라 한다. 객체를 자동으로 sql 데이터베이스의 테이블에 영속화를 시켜주는 것 도메인 모델 기반으로 코딩 할 수 있다. 훨씬 객체지향 프로그래밍을 하기 수월해진다. 여러 디자인 패턴들을 사용가능해지고 코드 재사용성도 좋고 비즈니스 로직에 집중하기 좋다. 테스트 코드 짜기도 좋다 ORM은? 클래스와 sql DB 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용해 자바 어플리케이션의 객체를 테이블에 자동으로 영속화 시켜주는 기술이다. ORM 사용의 장점은? 생산성 - 하이버네이트에서 사용을 하면 정말 쉽게 정의만하면 데이터를 가져오기 너무 편해진다. 로직만 보이게 되면서 테스트 코드도 짜기 쉬워진다. 성능 - sql 단건만 보면 sql 보다 느릴수있다. 하지만, ..
spring data jpa - 관계형 데이터베이스 관계형 데이터베이스 JDBC 를 사용해 데이터베이스에 접속해 데이터를 가져온다. 어플리케이션의 데이터를 persistent (영속성) 어딘가에 저장해놓고 어플리케이션이 뻗어도 데이터가 유지되어야 해야한다. 이번엔 관계형 데이터베이스에 넣고 조회하는 방법을 써보자 JDBC - 데이터소스 / drivermanager - 컨넥션 - preparedStatement driverManager 를 다운받고 , db url 주소와 인증정보를 통해 connection 을 맺을 수 있다. preparedStatement 를 통해 DDL, DML 을 실행 시킬 수 있다. 이 방법을 쓰면 사실 굉장히 번거롭다 ResultMap 에서 꺼내 객체에 맵핑을 시켜줘야하고,, 코드 상으로 복잡해진다. 커넥션을 만드는 비용이 굉장히 ..
스프링 MVC - 그 외 다양한 어노테이션들 DataBinder - @InitBinder InitBinder 를 사용하면 바인딩 설정, 포메터 설정, Validator 설정을 할 수 있는데, 바인딩 설정을 하면, 원하는 값을 허용하거나 거부하거나 설정을 할 수 있다. Validator 는 객체 위에 @NotBlank 이런 어노테이션으로는 할 수 없는 커스텀한 검증을 하고 싶을때 커스텀 Validator 를 생성 할 수 있다. 이런식으로 커스텀한 Validator 를 만들 수 있다. supports 에 커스텀할 객체를 설정하고, validate 에 실제 검증할 로직을 적어준다. addValidators 에 넣어주면된다. 아니면 , Validator 자체를 빈으로 등록하고 , (@Component) 이런식으로도 검증할 수 있다. 이런식으로 쓸 경우에는..
핸들러 메소드 - 응답 데이터 @RequestBody 요청 본문에 있는 데이터를 메시지 컨버터를 이용해서 변환된 타입으로 받을 수 있다. 요청 Body 로 들어온 데이터를 Event 객체로 컨버트 를 하려고 한다 이때 사용되는게 HttpMethod Converter 기본적으로 여러개 가 등록 되어 있다. 핸들러 어댑터가 메시지 컨버터를 이용해서 아규먼트를 요청을 컨버팅 한다 HttpEntity HttpEntity 를 쓰면, RequestBody 와 다른 점은 요청 헤더 정보도 얻을 수 있다는 것 데이터 검증과 BindingResult로 에러도 받아 올 수 있다. @ResponseBody 핸들러에서 return 하는 값을 http 응답 본문에 담아 준다. requestBody 처럼 응답할때 메시지 컨버터를 이용해서 응답한다. Respo..
핸들러 메소드 - 세션 데이터 @SessionAttributes row 하게는 HttpSession 을 이용해서 사용할 수도 있다. 만약 SessionAttributes 를 쓰면 이름에 해당하는 model attribute 를 세션에 넣어준다. (SessionAttribute 와는 굉장히 다르다) 세션을 왜 넣어서 사용하냐 하면 여러 페이지에 걸쳐서 요청을 받았을때, 세션에 있는 값도 @ModelAttribute 를 통해서 객체에 값이 들어가게 된다. @SessionAttribute 세션으로 저장되어 있는 데이터를 가져 올 수 있다. HttpSession 과 다른 점은? HttpSession 으로 받은 데이터는 데이터 타입이 Object 로 나오게 된다. 타입 변경 하기가 훨씬 쉽다. @RedirectAttributes Redirec..
핸들러 메소드 - 요청 데이터 아규먼트와 리턴 타입 핸들러에서 받을 수 있는 메소드 아규먼트를 먼저 봐보자 표 처럼 아규먼트 타입을 받을 수 있다. 이번엔 응답 리턴 값을 알아보자 ResponseEntity 는 응답 본문 부터 헤더 까지 셋팅 할 수 있다. URI 패턴 이번엔 Uri에 들어있는 패턴을 메소드 아규먼트로 가져오는 방법을 알아보자 PathVariable 을 통해 가져온다 문자열을 넘겨줘도 Integer 로 자동 변환 된다. Matrix Variable 을 쓰기도 한다. 로 쓰면 로 받아 올 수 있다. 하지만 이 설정은 비활성화 되어 있기때문에, 쓰고 싶으면 로 설정을 해서 활성화 시켜야 한다. 요청 파라미터 파라미터는 @RequestParam 으로 받아오는데 이걸 생략이 가능하다. 객체를 받아올 때는 @ModelAttri..
Spring MVC 핵심 기술 - 커스텀 어노테이션 메타 에노테이션 - 에노테이션에서 쓸 수 있는 에터테이션 이 메타 에노테이션을 합쳐서 만든 에노테이션을 컴포즈드 에노테이션이라고 한다. - 코드를 간결하게 줄이고, 더 명확하게 에노테이션을 만들 수 있다. 예제 이렇게 에노테이션을 만들고 hello 를 요청해봤더니, 404 페이지가 나왔다 왜? GetHelloMapping 에노테이션이 사라지기 때문에 가장 중요한 속성인 @Retention 이 있다. 이 에노테이션을 언제까지 살려둘것인가를 정한다 기본값은 CLASS 다. .class 파일을 만들때까지는 살아있지만 런타임 시에는 사라지게 된다. 그래서 여기서 저걸 정상적으로 사용하려면 RUNTIME 으로 변경해줘야 한다. 타겟은 이 에노테이션이 어디에서 사용할 수 있을지 정해주는것 METHOD 로 하면 메소..
Spring MVC 핵심 기술 - 요청 맵핑 Http 요청을 핸들러에 맵핑하는법을 봐보자 * 컨트롤러에 있는 요청을 처리할 수 있는 메소드를 핸들러라고 부른다 단순한 거니 후다닥 보고 넘어가자 뷰로 보내는게 아니라 응답 메시지를 내보내고 싶을때 @ResponseBody 어노테이션 붙여준다 해당 핸들러 테스트 테스트용 스프링 러너를 이용하고, 테스트를 해준다, 여기서 RequsetMapping 에는 Get,Post,Put 등 Http 메소드를 적어 줄 수있는데, Get 으로 보낼경우에는 캐싱을 할 수 있다. 보내는 요청 헤더에 캐싱 관련 헤더를 붙여 넣을 수 있다. 조건적 GET 이라 하면, not Modified ,Modified since 같은 헤더를 이용 하는 건데, 조건에 따라 캐싱한 값을 바로 보내줘서 요청이 굉장히 빠르게 해결된다. POS..