목록Spring/Spring Boot (34)
똑같은 삽질은 2번 하지 말자
Spring Data JPA JPA은 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임워크이다. 추상화 정도는 Spring-Data-JPA -> Hibernate -> JPA 이다. Hibernate를 쓰는 것과 Spring Data JPA를 쓰는 것 사이에는 큰 차이가 없지만 구현체 교체의 용이성 저장소 교체의 용이성 이라는 이유에서 Spring Data JPA를 사용하는것이 더 좋다. 자바의 Redis클라이언트가 Jdis에서 Lettuce로 대세가 넘어갈 때 Spring Data Redis를 사용하면 아주 쉽게 교체가 가능했다. Spring Data JPA, Spring Data MongoDB, Spring Data Redis..
SpringBoot가 지원하는 Spring Data 연동기술 SQL DB NoSQL 인메모리 데이터베이스 지원 DataSource 설정 DBCP 설정 JDBC 사용하기 스프링 데이터 JPA 사용하기 jOOQ 사용하기 데이터베이스 초기화 데이터베이스 마이그레이션 툴 연동하기 Redis (Key/Value) MongoDB (Document) Neo4J (Graph) Gemfire (IMDG) Solr (Search) Elasticsearch (Search & Analytics) Cassandra Couchbase LDAP InfluxDB H2 스프링부트가 지원하는 인메모리 DataBase:H2 우리가 H2에대한 아무런 설정을 하지않으면 자동으로 인메모리데이터베이스로 설정된다. Spring-JDBC가 clas..
SOP과 CORS Single-Origin Policy (같은 오리진에만 요청을 보낼 수 있다.) Cross-Origin Resource Sharing(서로 다른 오리진끼리도 보낼 수 있게한다.) 예전에 이 오류가 생겨서 JSONP로? 보낸적이 있다. SpringBoot에서 설정하는 방법은 간단하게 @CrossOrigin으로 가능하다. @RestController public class SampleController { @CrossOrigin(origins ="http:localhost:1212") // 1212포트 cors @GetMapping("hello") public String hello() { return "hello"; } } 이렇게 해당 맵핑에만 설정할 수도 있고 Controller로 자체..
스프링 @MVC 예외 처리 방법 @ControllerAdvice @ExceptionHandler 스프링 부트가 제공하는 기본 예외 처리기 BasicErrorController HTML과 JSON 응답 지원 커스터마이징 방법 ErrorController 구현 HTML 기본 예외 처리는 요거 많이들 봤을거라고 생각되는데 그럼 이제부터 ErrorHandler를 커스텀해보자 @GetMapping("/error") public String error() { throw new SampleException(); } @ExceptionHandler(SampleException.class) public @ResponseBody AppError sampleError(SampleException e) { AppError a..
스프링 부트가 자동 설정을 지원하는 템플릿 엔진 (FreeMarker Groovy Thymeleaf Mustache) JSP를 권장하지 않는 이유 JAR 패키징 할 때는 동작하지 않고, WAR 패키징 해야 함. Servlet Container의 개입이 있어야만 페이지가 완성된다. 그에 반해 , Thymeleaf는 독자적으로 페이지를 완성가능 그래서 andDO(print()) 테스트도 찍히는거(밑의 코드를 참조) SampleController 를 만들고 hello 맵핑하고 Model에 name을 담아서 반환하는 테스트를 ㄱㄱ @RunWith(SpringRunner.class) @WebMvcTest(SampleController.class) public class SampleControllerTest { @..
Web JAR Client에서 사용하는 BootStrap Vue React 등등 Web JAR로 Dependency에 추가할 수 있다. 원하는 것을 Maven 중앙 저장소에서 찾아서 넣으면 된다 org.webjars.bower jquery 3.5.0 제이쿼리를 추가하고 코드를 돌리면 잘 동작하는걸 알 수 있다. 버전 생략하고 사용하려면 webjars-locator-core 의존성 추가 WelCome Page index.html 찾아 보고 있으면 제공.(Controller 설정없이도 자동 설정된다는 말) index.템플릿 찾아 보고 있으면 제공.(index로 시작하는 친구 찾아본다는말 찾으면 그 친구로 자동설정) 둘 다 없으면 에러 페이지. -> White 뭐시기(많이 본 화면 ㅋ) 파비콘 favicon...
@Valid Dispatcherservlet이 메소드안에 선언된 객체를 만들어주고 값을 넣어준다. @Valid선언된객체에 설정을 바탕으로 검사후 BindingResult에 담아준다. 에러를 발생하려면 FieldError객체를 만들어서 BindingResult에 넣어준다. 태그에서 object에 담긴 객체의 프로퍼티를 filed *{필드이름} 형식으로 사용한다 errors는 BindingResult에 있는 에러값을 출력해준다. BindingResult.hasErrors : 에러가 있는지 검사한다. thymeleaf를 사용하여 사용한 예제이다. @Controller public class MemberController { @Autowired private MemberService memberService; ..
정적 리소스 지원 정적 리소스 맵핑 “ /**” 기본 리소스 위치 classpath:/static classpath:/public classpath:/resources/ classpath:/META-INF/resources 예) “/hello.html” => /static/hello.html spring.mvc.static-path-pattern: 맵핑 설정 변경 가능 spring.mvc.static-locations: 리소스 찾을 위치 변경 가능 Last-Modified 헤더를 보고 304 응답을 보냄. -> Last-Modified 이후에 갱신된게 없으므로 304 응답으로 훨씬 빠름 ResourceHttpRequestHandler가 처리함. WebMvcConfigurer의 addRersourceHan..
Spring-Boot-Devtools 캐시 설정을 개발 환경에 맞게 변경.(캐시를 끔 보통) 클래스패스에 있는 파일이 변경 될 때마다 자동으로 재시작. 직접 껐다 켜는거 (cold starts)보다 빠르다. 왜? 릴로딩 보다는 느리다. (JRebel 같은건 아님) 리스타트 하고 싶지 않은 리소스는? spring.devtools.restart.exclude 리스타트 기능 끄려면? spring.devtools.restart.enabled = false 라이브 릴로드? 리스타트 했을 때 브라우저 자동 리프레시 하는 기능 브라우저 플러그인 설치해야 함. 라이브 릴로드 서버 끄려면? spring.devtools.liveload.enabled = false 글로벌 설정 ~/.spring-boot-devtools.p..
음 테스트 코드를 짜던 도중 새로운 코드작성법? 을 하나 익혔는데 지금 SampleServices 라는 클래스가 없는 상황에서 하나하나 새로운 클래스 작성할 때 처럼 패키지 클릭하고 class 만드는 이름치고 만드는 작업을 그냥 F2하나로 줄여버릴수 있다.(저기 빨간줄에 커서대고 F2 누르면 아마 느끼실껍니다. 편안함을) 물론 저기 속하는 getName함수도 똑같이 적용 가능! import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import stat..