Spring Framework/Spring boot #2: 34개의 글
| Spring-Data-JPA란 ORM은 "관계형 데이터베이스의 구조화된 데이터와 자바와 같은 객체 지향 언어 간의 구조적 불일치를 어떻게 해소할 수 있을까"라는 질문에서 나온 객체-관계 매핑 프레임워크입니다. 즉, 객체와 릴레이션을 매핑할 때 생기는 다양한 문제들을 해결할 수 있는 솔루션이라 생각하면 됩니다. JPA은 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임워크입니다. 추상화 정도는 Spring-Data-JPA -> JPA -> Hibernate -> Datasource (왼쪽에서 오른쪽으로 갈수록 구체화) 입니다. 참고로, Hibernate는 ORM 프레임워크이며 DataSource는 스프링과 연결된 MySQL, P..
| 스프링 부트 PostgreSQL 연동하기 MySQL 연동하는 법과 유사하므로 다음 글을 참조하시면 좋습니다. [Spring Framework/Spring boot2] - [Spring Boot #22] 스프링 부트 DBCP 및 MySQL 연동해보기 프로젝트 구조 ├── pom.xml ├── spring-boot-tutorial.iml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springboottutorial │ │ │ ├── PostgreSQLRunner.java │ │ │ └── SpringBootTutorialApplication.java │ │ └── resources │ │ ├── application..
| DBCP란 DBCP(Database Connection Pool)은 특정 DB에 커넥션 객체를 미리 만들어 놓고 그 커넥션이 필요할 때마다 어플리케이션에 할당하는 개념입니다. 마치 어떤 풀(저장소)에 아이템을 미리 담가놓고 필요할 때 꺼내는 것이라 생각하면 됩니다. 커넥션 객체를 만드는 것이 큰 비용을 소비하기 때문에 미리 만들어진 커넥션 정보를 재사용하기 위해 나온 테크닉입니다. 스프링 부트에서는 기본적으로 HikariCP라는 DBCP를 기본적으로 제공합니다. (https://github.com/brettwooldridge/HikariCP#frequently-used) | 스프링 부트 DBCP 설정 DBCP 설정은 애플리케이션 성능에 중요한 영향을 미치므로 신중히 고려해야하는 부분입니다. 커넥션 풀..
| 인메모리 데이터베이스 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스입니다. 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다. 스프링 부트에서 H2, HSQL 같은 인메모리, 디스크 기반 DB를 지원합니다. | H2 데이터베이스 사용하기 프로젝트 구조 | pom.xml +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---springdatatutorial | | | H2Runner.java | | | SpringDataTutorialApplication.java | | | | | \---resour..
| CORS(Cross-Origin Resource Sharing)이란 CORS는 동일한 출처(Origin: 최초 자원이 서비스된 출처)가 아니여도 다른 출처에서의 자원을 요청하여 쓸 수 있게 허용하는 구조를 뜻합니다. 보통 보안 상의 이슈(DOM을 통한 취약한 데이터 접근 시도) 때문에 동일 출처(Single Origin Policy)를 기본적으로 웹에서는 준수하게 됩니다. 따라서 최초 자원을 요청한 출처 말고 다른 곳으로 스크립트를 통해 자원을 요청하는 것은 금지됩니다. CORS을 적용하려면 웹 어플리케이션에 그에 따른 처리를 해야하고 스프링 부트에서는 @CrossOrigin 어노테이션 혹은 WebConfig를 통해 CORS를 적용하는 방법을 제공합니다. | 기존 Single Origin Policy..
| HATEOAS란? HATEOAS는 Hypermedia As The Engine Of Application State의 약자로 하이퍼미디어를 REST API의 상태 정보를 관리하기 위한 매커니즘으로 활용하는 것을 말합니다. REST API에서 클라이언트에 리소스를 넘겨줄 때 특정 부가적인 리소스의 링크 정보를 넘겨주게 되며 이를 통해 REST API의 리소스 상태에 따른 관리를 진행하게 됩니다. HATEOAS를 쓰는 이유는 다음과 같은 기존 REST API의 단점을 보완하기 위해서입니다. 1. REST API는 앤드포인트 URL이 정해지고 나면 이를 변경하기 어렵다는 단점이 있습니다. 만일 API의 URL을 변경하게 되면 모든 클라이언트의 URL까지 수정해야하기 때문에 번거로워지므로 기존 다른 API를..
| 스프링 부트 ExceptionHandler 스프링 부트에서는 ExceptionHandler를 기본적으로 등록하여 Exception을 처리하고 있습니다. 기본 예외 처리기는 스프링에서 자동적으로 등록하는 BasicErrorController에서 관리합니다. ( 에러 발생 시 JSON 형식으로 리턴 ) 커스텀 Exception 핸들러, 커스텀 Exception 클래스를 만들어서 예외를 처리할 수 있습니다. Http Status 코드에 맞게 예외 발생시 html 문서를 클라이언트에 전송할 수 있습니다. | 샘플 예제 프로젝트 구조 | pom.xml | pom.xml +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---spri..
| HtmlUnit이란 HtmlUnit은 프로그래밍적으로 HTML 사이트와 상호작용할 수 있게 하는 자바 오픈소스입니다. 테스트 프레임워크로서 생각할 수 있지만 브라우져와 프로그래밍적으로 상호작용 할 수 있게 하는 확장된 개념으로 받아들이는 것이 좋습니다. 스프링 4 이후로 스프링에 통합되어 MVC 테스트(특히 템플릿 뷰 테스트) 때 유용하게 쓰일 수 있습니다. http://htmlunit.sourceforge.net/ 공식 사이트를 참고하시면 좋습니다. | 샘플 코드 프로젝트 구조 | pom.xml | +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---sptringbootmvc | | | SampleController...
| Thymeleaf란? Thymeleaf는 스프링 부트가 자동 설정을 지원하는 웹 템플릿 엔진입니다. HTML문서에 HTML5 문법으로 서버쪽 로직을 수행하고 적용시킬 수 있습니다. HTML 디자인에 전혀 영향을 미치지 않고 웹 템플릿 엔진을 통해 HTML을 생성할 수 있습니다. 독자적으로 HTML을 생성하기 때문에 테스트 시 렌더링 결과를 확인하기 좋습니다. | Thymeleaf 스프링 부트에서 사용하기 프로젝트 구조 +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---sptringbootmvc | | | SampleController.java | | | SpringBootMvcApplication.java | | | ..
| 스프링 웹 MVC 인덱스 페이지 웰컴 페이지 : 웹 어플리케이션의 root(/)로 요청했을 때 보여주는 페이지입니다. index.html 을 만들고 resources 안에 두면 root(/) 요청 시 어플리케이션이 해당 html 파일을 반환합니다. 프로젝트 구조 | pom.xml +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---sptringbootmvc | | | | SptringBootMvcApplication.java | | | | | | | | | | | | | \---resources | | | application.properties | | | | | \---static | | index.html index..