본문 바로가기

백기선

(40)
[Spring Boot] 데이터베이스 초기화 1. JPA를 사용한 데이터베이스 초기화 spring.jpa.hibernate.ddl-auto - update/create-drop/create로 설정 시 자동으로 스키마 생성 - update (사용 권장) : 기존에 있는 스키마는 그대로 두고, 추가된 것만 변경 / 컬럼명 변경시 기존 컬럼 삭제되지 않음 - create-drop : 처음에 생성되고, 어플리케이션 종료 시 스키마 삭제 - create : 초반에 띄울 때, 삭제 후 재생성 spring.jpa.generate-ddl=true로 설정 해줘야 동작함 ! 운영 환경일 경우 spring.jpa.hibernate.ddl-auto=validate spring.jpa.generate-ddl=false # Account Entity @Entity publ..
[Spring Boot] Spring-Data-JPA 1. 의존성 추가 org.springframework.boot spring-boot-starter-data-jpa 2. ORM(Object Relational Mapping) 객체와 릴레이션을 매핑할 때 발생하는 개념적 불일치를 해결하는 프레임워크 JPA(Java Persistence API): ORM을 위한 JAVA(EE) 표준 3. 스프링 데이터 JPA JPA 표준 스펙을 아주 쉽게 사용할 수 있도록 Spring-Data로 추상화 시켜 놓은 것 구현체 : Hibernate Spring-Data-JDBC의 기능을 전부 + 부가적인 기능 원래는 @EnableJpaReopositories를 사용해서 설정을 해야 spring-data-jpa 사용 가능하지만 해당 부분이 자동설정되기 때문에 필요없음 Sprin..
[Spring Boot] MySQL 설정하기 1. DBCP DataBase Connection Pool 커넥션을 만드는 과정이 오래 걸리기 때문에, 미리 여러 개의 커넥션을 만들어놓고 어플리케이션이 필요로 할 때 만들어져있는 커넥션을 가져다 쓰는 방법 몇 개를 만들 것인지, 얼마동안 안쓰이면 없앨 것인지, 최소 몇 개를 유지할 것인지, 얼마동안 커넥션을 어플리케이션에 던지지 못하면 에러를 던질 것인지 등 여러 설정 가능 어플리케이션 성능에 핵심적인 역할 2. Spring Boot가 지원하는 DBCP HikariCP (기본) Tomcat CP Commons DBCP2 -> 세 가지 DBCP가 클래스패스에 있는 경우, HikariCP를 사용 3. HikariCP https://github.com/brettwooldridge/HikariCP#freque..
[Spring Boot] 인-메모리 데이터베이스 1. Spring Boot에서 지원하는 인-메모리 데이터베이스 H2 HSQL Derby H2 의존성이 클래스패스에 들어있고 아무런 데이터 소스 설정을 하지 않으면 스프링 부트는 자동으로 인메모리 데이터베이스를 설정해줌 2. DataSource, JdbcTemplate Spring-JDBC가 클래스패스에 있으면 자동 설정이 필요한 빈을 설정해줌 spring-boot-starter-jdbc 의존성이 있으면 DataSource, JdbcTemplate 빈이 자동 설정됨 @Autowired로 DataSource, JdbcTemplate 주입받을 수 있음 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframe..
[Spring Boot] CORS 1. SOP과 CORS Cross-Origin Resource Sharing Single-Origin Policy를 우회하기 위한 표준 기술 (SOP, CORS 모두 웹 브라우저가 지원하는 기술) SOP는 같은 Origin에만 요청을 보낼 수 있고 CORS는 서로 다른 Origin끼리 리소스를 공유할 수 있는 방법을 제공하는 표준 (기본적으로는 SOP가 적용되어 있어서 Origin이 다른 경우 호출하지 못함) ex) 어떤 REST API를 제공하는 서버가 http://localhost:8080에서 제공이 되고 있고, 해당 REST API를 http://localhost:8443 사용하는 어플리케이션이 호출하지 못함 -> SOP 위반 2. Origin : 스키마, hostname, 포트를 조합한 것 URI..
[Spring Boot] Spring HATEOAS 1. HATEOAS Hypermedia As The Engine Of Application State 서버: REST API에서 리소스에 대한 정보를 제공할 때, 현재 리소스와 연관된 링크 정보를 클라이언트에게 제공한다. 클라이언트: 연관된 링크 정보를 바탕으로 리소스에 접근한다. 연관된 링크 정보 - Relation(rel) - Hypertext Reference(href) spring-boot-starter-hateoas 의존성 추가 org.springframework.boot spring-boot-starter-hateoas ObjectMapper 제공 - spring.jackson.* 사용해서 커스터마이징 가능 (application.properties) - Jackson2ObjectMapperB..
[Spring Boot] ExceptionHandler 1. 스프링 @MVC 예외 처리 방법 @ControllerAdvice 전역적으로 예외 처리 (@ControllerAdvice 어노테이션이 붙은 클래스를 만들고 안에다가 ExceptionHandler 정의) @ExceptionHandler 특정 컨트롤러 안에서 발생하는 예외 처리 (아래 4.@ExceptionHandler 참고) 2. 스프링 부트가 제공하는 기본 예외 처리기 BasicErrorController HTML과 JSON 응답 지원 커스터마이징 방법 ErrorControll 구현 3. 커스텀 에러 페이지 에러가 발생했을 때 응답의 상태 값에 따라 다른 웹 페이지를 보여주고 싶은 경우 src/main/resources/static|template/error 하위에 404.html, 5xx.html ..
[Spring Boot] index 페이지와 favicon 1. 웰컴 페이지 어플리케이션 루트로 요청했을 때 보여지는 페이지 (localhost:8080) 정적 페이지로 보여주는 방법과, 동적 페이지로 보여주는 방법 2가지 존재 정적 페이지로 보여주는 방법은 기본 리소스 위치 중 아무데나 index.html 파일을 두면 됨 index.html 찾아보고 있으면 제공 index.템플릿 찾아보고 있으면 제공 둘 다 없으면 에러 페이지 (Whitelabel Error Page) 2. 파비콘 어플리케이션 실행 시 보여지는 아이콘 https://favicon.io/ 에서 파비콘 만들고 resources/static에 favicon.ico 추가해서 변경 가능 기본 파비콘은 스프링 부트 jar파일에서 제공해주는 것 파비콘이 안 바뀌는 경우 localhost:8080/favic..
[Spring Boot] 웹 JAR 1. 웹 JAR 클라이언트에서 사용하는 자바스크립트 라이브러리 ex) jQuery, Bootstrap, react.js, ..들도 jar 파일로 추가 가능 jar 파일로 dependency 추가 maven 중앙저장소(www.mvnrepository.com)에도 올라와있음 script src에 버전 생략하고 사용하려면 webjars-locator-core 의존성 추가 가능 ex) jQuery 추가하기 org.webjars.bower jquery 3.6.0 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard 스프링 부트 개념과 활용 - 인프런 | 강의 스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게..
[Spring Boot] 정적 리소스 지원 1. 정적 리소스 동적으로 생성되지 않은 것 웹 브라우저나 클라이언트에서 요청이 들어왔을 때, 요청에 해당하는 리소스가 이미 만들어져 있고, 이미 만들어진 리소스를 그대로 보내면 되는 경우 서버에서 작업을 처리해서 요청이 들어왔을 때 뷰를 만드는 것이 아니라 이미 만들어져 있는 리소스가 있고, 그런 리소스를 제공하는 방법 2. 기본 리소스 위치 : 기본 리소스 위치에 있는 리소스들은 "/**" 요청에 매핑이 되어 제공됨 classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources ex) /hello.html 요청이 들어오면 /static/hello.html 파일이 있는 경우 요청한 쪽으로 이 파일을 보내줌 ->..