목록전체 글 (544)
똑같은 삽질은 2번 하지 말자
데이터베이스 초기화 테스트를 할때 @SpringBootTest 를 이용하면 test용의 properties가 없으면 전 범위 스코프에서 다 따오기 때문에 더 느릴수 있다는거 인지하자. (DataJpaTest는 슬라이스 테스트로써 Embedded DB만 설정해주면 빠르게 동작) JPA를 사용한 데이터베이스 초기화 spring.jpa.hibernate.ddl-auto spring.jpa.generate-dll=true로 설정 해줘야 동작함. SQL 스크립트를 사용한 데이터베이스 초기화 schema.sql 또는 schema-${platform}.sql data.sql 또는 data-${platform}.sql ${platform} 값은 spring.datasource.platform 으로 설정 가능. reso..
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...
headに記述する内容、いつも前回のをそのまま使用するのですが、 なんで記述するのか一つ一つ理解していなかったので、まとめました。 対策編 // 対策編 1. IE対策 IE環境でWebページを表示できないことがあります。 IE環境でも常にWebページを表示できるようにするため、 常に標準モード設定に指定するmetaタグを入れます。 このmetaタグはcssやjsファイルが記述されている箇所の前に入れます。 2. レスポンシブ対応 viewportを指定することで、仮想的なウインドウが作成され、デバイスの画面幅に合わせて表示することができる。 3. 電話番号の自動リンク機能を無効化する safariでは、ページ内の電話番号を自動でリンクに変換し、 タップすることを電話でかけることができる機能が用意されています。 この機能だと電話番号に紛らわしいもの(注文番号やIPアドレス)も電話番号だ..
@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..