-
스프링관련 자바 웹어플리케이션 레이어 및 전반적인 구성 요소에 대해서 알아보자.
-
- 분류를 하자면, 아래와 같이 분류 가능하다.
- Web Layer
- 웹 애플리케이션 컨트롤러를 담당하고, 뷰를 랜더링 하는 계층
- Business Layer
- 비즈니스 로직을 담당하는 계층
- Data Layer
- 데이터베이스와 통신을 담당하는 계층
- Integration Layer
- 다른 애플리케이션과 통신을 담당하는 계층
- Crosscutting concerns
- 위의 서로다른 Layer 에 대한 전반적인 관심사
- 예를들면,
- 로깅 / 보안 / 트랜잭션 관리 등등
- 예를들면,
- 스프링 IoC 컨테이너는 Bean을 관리하기 때문에 AOP(Aspect-Oriented Programming)를 통해 Bean 주변의 관심사를 해결할 수 있음.
- 위의 서로다른 Layer 에 대한 전반적인 관심사
- Web Layer
- 분류를 하자면, 아래와 같이 분류 가능하다.
-
-
우선, Web Layer 에 대해서 알아보자
- 사용자에게 비즈니스 로직을 노출 하는 방법 2가지
- 첫째, RESTful 서비스
- 보통 아래 2가지 접근 방식이 존재함.
- Spring MVC
- Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.
- 참고 URI
- JAX-RS
- REST 서비스용 JAVA API
- JAVA EE 표준 스펙.
- Jersey
- Jersey RESTful Web Services , formerly Glassfish Jersey, currently Eclipse Jersey[1] framework is an open source framework for developing RESTful Web Services in Java. It provides support for JAX-RS APIs and serves as a JAX-RS (JSR 311 & JSR 339 & JSR 370) Reference Implementation.[2]
- 참고 URI
- Jersey
- JAVA EE 표준 스펙.
- REST 서비스용 JAVA API
- Spring MVC
- 보통 아래 2가지 접근 방식이 존재함.
- 둘째, 웹 애플리케이션 서비스
- HTML View 랜더링
- 보통 아래 2가지종류의 WEB MVC 프레임워크 사용.
- View 는 템플릿기반 프레임워크를 사용해 랜더링이 가능함.
- JSP
- JavaServer Pages (JSP) is a collection of technologies that helps software developers create dynamically generated web pages based on HTML, XML, SOAP, or other document types. Released in 1999 by Sun Microsystems,[1] JSP is similar to PHP and ASP, but uses the Java programming language.
- 참고 URI
- JSF
-
JavaServer Faces (JSF) is a Java specification for building component-based user interfaces for web applications[1] and was formalized as a standard through the Java Community Process being part of the Java Platform, Enterprise Edition. It is also a MVC web framework that simplifies construction of user interfaces (UI) for server-based applications by using reusable UI components in a page.[2]
-
JSF 2 uses Facelets as its default templating system. Other view technologies such as XUL or plain Java[3] can also be employed. In contrast, JSF 1.x uses JavaServer Pages (JSP) as its default templating system.
- 참고 URI
-
- Freemarker
- Apache FreeMarker™ is a template engine: a Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data. Templates are written in the FreeMarker Template Language (FTL), which is a simple, specialized language (not a full-blown programming language like PHP).
- 참고URI
- JSP
- HTML View 랜더링
- 첫째, RESTful 서비스
- 사용자에게 비즈니스 로직을 노출 하는 방법 2가지
-
그럼, Business Layer 에 대해서 알아보자
- 애플리케이션의 모든 비즈니스 로직이 포함되는 계층.
- 또한, 트랜잭션관리의 경계가 시작되는 계층이기도함.
- 해당 트랜잭션관리는 보통 아래 2가지를 사용해서 구현함.
- Spring AOP
- AOP 란?
- 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함
- 즉, 모듈성을 증가시키는 것이 목적.
- 참고 URI
- 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함
- AOP 란?
- AspectJ
- AspectJ는 PARC에서 개발한 JAVA 프로그래밍 언어용 관점 지향 프로그래밍 (AOP) 확장 기능임.
- 참고 URI
- Spring AOP
- 해당 트랜잭션관리는 보통 아래 2가지를 사용해서 구현함.
- 또한, 트랜잭션관리의 경계가 시작되는 계층이기도함.
- 그리고, Spring Framework 는 해당 계층에 Bean을 연결하는 데 사용함.
- 애플리케이션의 모든 비즈니스 로직이 포함되는 계층.
-
그럼, Data Layer 에 대해서 알아보자
- 데이터베이스와 통신하는 계층을 말함.
- 즉, JAVA 객체에서 데이터베이스로 데이터를 저장
- 또는, 데이터베이스에서 JAVA 객체로 데이터를 저장
- 아래는 주요 솔루션임.
- Spring JDBC
- JDBC(Java Database Connectivity)는 JAVA에서 데이터베이스에 접속할 수 있도록 하는 JAVA API
- 그리고, JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공함.
- 현재, JDBC / Spring JDBC는 더 이상 일발적으로 사용되지 않음.
- 저도 보통은 공부를 위한 용도로 사용해보았으며, 아래 설명할 MyBatis 와 JPA 를 사용하면 정말간편하게 구현되어 질 수 있구나 비교하며, 알기위한용도 ^^; 정도일까?
- 참고 URI
- JDBC(Java Database Connectivity)는 JAVA에서 데이터베이스에 접속할 수 있도록 하는 JAVA API
- MyBatis
- MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
- 즉, 마이바티스는 맞춤SQL Stored 프로시저 및 고급 매핑을 지원하는 퍼스트 클래스 퍼시스턴스 프레임워크임.
- 다시말해서, 간단한 데이터 매핑 프레임워크
- 거의 모든 JDBC 코드와 파라미터 수동 설정 및 결과 검색을 대신해주는 역할을 함.
- 즉, 마이바티스는 맞춤SQL Stored 프로시저 및 고급 매핑을 지원하는 퍼스트 클래스 퍼시스턴스 프레임워크임.
- 참고 URI
- MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
- JPA
- JPA(Java Persistence API) 는 자바 퍼시스턴스 API or 자바 지속성 API 라고 함.
- 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 JAVA API
- 특징은, 자바 객체를 데이터베이스 테이블에 매핑하는데 도움이 됨.
- 하이버네이트(Hibernate)는 JPA 에서 가장 많이 사용되는 구현체.
- 하이버네이트(Hibernate)란?
-
Hibernate ORM (or simply Hibernate) is an object-relational mapping tool for the Java programming language. It provides a framework for mapping an object-oriented domain model to a relational database. Hibernate handles object-relational impedance mismatch problems by replacing direct, persistent database accesses with high-level object handling functions.
-
Hibernate is free software that is distributed under the GNU Lesser General Public License 2.1.
-
Hibernate's primary feature is mapping from Java classes to database tables, and mapping from Java data types to SQL data types. Hibernate also provides data query and retrieval facilities. It generates SQL calls and relieves the developer from the manual handling and object conversion of the result set.
-
- 참고URI
- 하이버네이트(Hibernate)란?
- 하이버네이트(Hibernate)는 JPA 에서 가장 많이 사용되는 구현체.
- 참고 URI
- Spring JDBC
- 데이터베이스와 통신하는 계층을 말함.
-
그럼, Integration Layer 에 대해서 알아보자
- 통합 레이어는 일반적으로 다른 애플리케이션과 통신하는 계층.
- Spring JMS
- The Java Message Service (JMS) API is a Java message-oriented middleware API for sending messages between two or more clients.[1]
- 보통,Queue or 서비스 버스에서 메시지를 보내거나 수신하는 데 사용함.
- 참고 URI
- The Java Message Service (JMS) API is a Java message-oriented middleware API for sending messages between two or more clients.[1]
- Spring MVC RestTemplate
- The RestTemplate is the central Spring class for client-side HTTP access. Conceptually, it is very similar to the JdbcTemplate, JmsTemplate, and the various other templates found in the Spring Framework and other portfolio projects. This means, for instance, that the RestTemplate is thread-safe once constructed, and that you can use callbacks to customize its operations.
- 클라이언트 측 HTTP 액세스를위한 중앙 Spring 클래스임.
- 개념적으로 JdbcTemplate, JmsTemplate 및 Spring Framework 및 기타 포트폴리오 프로젝트에있는 다양한 템플릿과 매우 유사함.
- 다시말해서, RESTful 서비스를 호출 할 수 있음.
- 개념적으로 JdbcTemplate, JmsTemplate 및 Spring Framework 및 기타 포트폴리오 프로젝트에있는 다양한 템플릿과 매우 유사함.
- 클라이언트 측 HTTP 액세스를위한 중앙 Spring 클래스임.
- 참고 URI
- The RestTemplate is the central Spring class for client-side HTTP access. Conceptually, it is very similar to the JdbcTemplate, JmsTemplate, and the various other templates found in the Spring Framework and other portfolio projects. This means, for instance, that the RestTemplate is thread-safe once constructed, and that you can use callbacks to customize its operations.
- Spring WS(Web Services)
- Spring Web Services (Spring-WS) is a product of the Spring community focused on creating document-driven Web services. Spring Web Services aims to facilitate contract-first SOAP service development, allowing for the creation of flexible web services using one of the many ways to manipulate XML payloads. The product is based on Spring itself, which means you can use the Spring concepts such as dependency injection as an integral part of your Web service.
- 다시말해서, SOAP 기반 웹 서비스를 호출하는데 사용 할 수 있음.
- 참고 URI
- Spring Web Services (Spring-WS) is a product of the Spring community focused on creating document-driven Web services. Spring Web Services aims to facilitate contract-first SOAP service development, allowing for the creation of flexible web services using one of the many ways to manipulate XML payloads. The product is based on Spring itself, which means you can use the Spring concepts such as dependency injection as an integral part of your Web service.
- Spring Integration
- Spring Integration enables lightweight messaging within Spring-based applications and supports integration with external systems via declarative adapters.
- 즉, Spring 기반 애플리케이션 내에서 경량 메시징을 가능하게하며, 선언적 어댑터를 통해 외부 시스템과의 통합을 지원함.
- 참고 URI
- Spring Integration enables lightweight messaging within Spring-based applications and supports integration with external systems via declarative adapters.
- Spring JMS
- 통합 레이어는 일반적으로 다른 애플리케이션과 통신하는 계층.
-
그럼,Crosscutting concerns 에 대해서 알아보자
- 위에서 설명한 서로다른 Layer 에 대한 전반적인 관심사에 대해서 알아보자
- Logging
- 아래의 관점지향 프로그래밍을 사용해 여러 Layer 에서 로깅을 구현 가능함.
- Spring AOP
- AspectJ
- 아래의 관점지향 프로그래밍을 사용해 여러 Layer 에서 로깅을 구현 가능함.
- Security
- 일반적으로 Spring Security 프레임워크를 사용해 구현함.
- Spring Security를 사용하면, 보안 구현을 매우 단순하게 만들 수 있음.
- 일반적으로 Spring Security 프레임워크를 사용해 구현함.
- Transaction
- 스프링 프레임워크는 트랜잭션관리를 위한 일관된 추상화를 제공함.
- 트랜잭션 관리의 표준
- JTA
- JTA(Java Transaction API) 란?
-
The Java Transaction API (JTA), one of the Java Enterprise Edition (Java EE) APIs, enables distributed transactions to be done across multiple X/Open XA resources in a Java environment. JTA is a specification developed under the Java Community Process as JSR 907. JTA provides for:
-
demarcation[clarification needed] of transaction boundaries
-
X/Open XA API allowing resources to participate in transactions.
-
-
- JTA(Java Transaction API) 란?
- 참고URI
- JTA
- Error Handler
- 스프링에서 제공하는 대부분의 추상화는 언체크된 예외를 사용함.
- 즉, 비즈니스 로직에서 요구하지 않는 한 클라이언트에 노출된 레이어에서 에러 처리를 구현하는 것으로 충분함.
- Spring MVC에서는 애플리케이션 전반에 걸쳐 일관된 에러 처리를 구현하는 @ControllerAdvice 를 제공함.
- 참고 URI
- https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
- Global Exception Handling
A controller advice allows you to use exactly the same exception handling techniques but apply them across the whole application, not just to an individual controller. You can think of them as an annotation driven interceptor.
- Using @ControllerAdvice Classes
- Global Exception Handling
- https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
- 참고 URI
- 스프링에서 제공하는 대부분의 추상화는 언체크된 예외를 사용함.
- Logging
- 위에서 설명한 서로다른 Layer 에 대한 전반적인 관심사에 대해서 알아보자
-
결론
- 스프링관련 자바 웹어플리케이션 레이어(Layer)를 분류를 하자면, 아래와 같이 분류 가능하다.
- Web Layer
- 웹 애플리케이션 컨트롤러를 담당하고, 뷰를 랜더링 하는 계층
- Business Layer
- 비즈니스 로직을 담당하는 계층
- Data Layer
- 데이터베이스와 통신을 담당하는 계층
- Integration Layer
- 다른 애플리케이션과 통신을 담당하는 계층
- Crosscutting concerns
- 위의 서로다른 Layer 에 대한 전반적인 관심사
- 예를들면,
- 로깅 / 보안 / 트랜잭션 관리 등등
- 예를들면,
- 스프링 IoC 컨테이너는 Bean을 관리하기 때문에 AOP(Aspect-Oriented Programming)를 통해 Bean 주변의 관심사를 해결할 수 있음.
- 위의 서로다른 Layer 에 대한 전반적인 관심사
- Web Layer
- 오늘도 스프링관련 자바 웹어플리케이션 레이어(Layer) 지식에 대한 마술(?) 한가지 획득완료! 감사합니다. ^^
- 스프링관련 자바 웹어플리케이션 레이어(Layer)를 분류를 하자면, 아래와 같이 분류 가능하다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
19.Spring, 12팩터앱(The Twelve-Factor App)에 대해서 알아보자. (0) | 2021.01.27 |
---|---|
18.Spring, 스프링 데이터 JPA(Java Persistence API)에 대해서 알아 볼께요. (0) | 2021.01.15 |
16.Spring, 스프링MVC의 핵심개념 중 컨트롤러 레벨에서 공통적으로 특정로직을 적용하는 방법에 대해서 알아볼께요. (0) | 2021.01.02 |
15.Spring, 스프링MVC의 핵심개념 중 세션속성(SessionAttribute)에 대해서 알아볼께요. (0) | 2021.01.02 |
14.Spring, 스프링MVC의 핵심개념 중 모델속성(ModelAttribute)에 대해서 알아볼께요. (0) | 2021.01.02 |