본문 바로가기
Spring

[스프링] 스프링과 웹어플리케이션

by chu_dw 2023. 3. 14.

● 웹 애플리케이션이란?

 

웹 애플리케이션이란 인터넷을 통해 여러 사람들이 웹브라우저라는 동적, 정적 콘텐츠를 이용할 수 있게 하는 응용프로그램이다.

웹 애플리케이션의 구조는 아래와 같다.

웹 브라우저에서 버튼을 클릭하면, 버튼에 대한 비지니스 로직이 데이터베이스 데이터를 이용해서 처리하고, 처리결과를 전송하는 동작의 반복으로 작동한다.

 

 

 

● 웹 애플리케이션 기술(자바 엔터프라이즈)

 

http : 가장 처음 등장한 웹 기술로 정적 콘텐츠를 표시하는 기술이다. 즉 초기의 웹은 웹브라우저의 요청에 같은 콘텐츠만 반환하였다.

 

cgi : http의 요청으로 실행되는 프로그램으로 웹브라우저의 요청을 받아 cgi가 해당 프로그램을 실행함으로 같은 요청의 처리결과로 다른 결 반환이 가능 해졌다. 하지만 요청 시마다 프로그램이 실행되고 세션관리가 없어 처리 요청이 많아질 경우 문제가 발생했다.

 

jsp, servlet : 이 둘은 멀티 스레드로 실행되고 세션 관리를 해준다.  또한 생성 로직과 비지니스 로직 분리가 가능해 cgi의 단점을 해결해 주었다. (이 둘은 따로 jsp에서 정리)

 

EJB : 분산용 컴포넌트로 모델로 분산된 ejb 컴포넌트를 마치 같은 머신에 있는 것처럼 접근할 수 있게 해 주고, 분산된 데이터베이스의 트랜잭션을 하나의 데이터베이스에 있는 것처럼 제어할 수 있게 해 준다.

그래서 jsp와 servlet으로 프레젠테이션을 구현하고 비지니스 로직은 ejb로 구현하는 것이 권장되었다.

하지만 복잡한 프로그래밍 모델을 가지고 있고 미리 정의되어 있는 기능을 모두 이해하고 사용해야 하는 점 때문에 스프링이 나오게 된다.

 

스프링 : 스프링은 중량급인 기존의 프레임워크를 대체할 경량 프레임워크의 필요로 탄생하게 되었다.

ejb컨테이너 대신 pojo 아키텍처를 구현한 DIxAOP 컨터이너를 사용한다.

여기서 pojo란 plain old java object로 컨테이너나 프레임워크에 의존하지 않는 일반 오브제트 즉 사용자가 직접 만든 간단한 오브젝트로 구현가능한 컨테이너를 말한다. 

   DI는 각각의 계층이나 서비스들 간 객체 의존성이 존재할 경우 프레임워크가 객체 간의 의존관계를 만들어주는 개념이다. 

   AOP는 모든 클래스가 할 수 있는 것을 하나의 관점으로 묶고 각 클래스는 자신의 기능만 역할하는 개념이다.

   (각 개념은 뒤에서 자세히 정리)

 

 

 

● 애플리케이션 아키텍처

 

 -애플리케이션 아키텍처 필요성

   서버 애플리케이션 구조가 client-server구조에서 web server 구조로 진화하면서 요구사항 변경과 기능추가 잦아졌다.

   이에 유연하게 대응할 수 있는 효율적인 아키텍처가 있어야 애플리케이션의 수명을 유지할 수 있다.

 

 -티어와 레이어

   웹 애플리케이션 아키텍처는 크게 물리층인 티어, 논리층은 레이어로 나뉜다.

   1. 티어 : 클라이언트 층(pc, 스마트폰), 중간층(애플리케이션 서버), els(db, 레거시 시스템)층 으로 구성됨

         중간층 = 레이어로 구성 (프레젠테이션 층, 비지니스 로직 층, 데이터베이스 층)

 

   2.레이어 : 아키택처 패턴 중 하나로 서로 인접한 레이어끼리만 단방향 액세스 가능하다. 

                    웹 애플리케이션에서 레이어는 기본적으로 중간층을 구성하고, 일부가 클라이언트 층에도 있다.

       프레젠테이션 레이어 = 사용자 인터페이스와 컨트롤러 제공 (요청받아서 다양한 뷰로 표현)

            -> 모델1, mvc2, 다양한 뷰

       비지니스 레이어 = 비지니스 로직을 서비스와 도메인으로 제공 (기능 구현, 트랜잭션 처리)

            -> 트랜잭션 스크립트, 도메인 모델, 트랜잭션 관리, 트랜잭션 경계, 선언적 트랜잭션, 명시적 트랜잭션

       데이터 레이어 = 데이터베이스 엑세스를 추상화

             -> o/r매핑, r/o매핑, 커넥션 풀링

 

   -오목형 레이어

     인터페이스와 구현의 분리를 위한 새로운 형태의 레이어이다. 

     프레젠테이션이나 데이터엑세스 층의 이용 기술이 변경되더라도 비지니스 층에 영향을 주지 않기 위해서 사용한다.

      비지니스로직 층을 다른 층의 변경과 분리하기 위해서 레이어의 결합 부분에 인터페이스 도입한다.

 

 

 

 부품화

 

티어와 레이어 사용하여 개발의 효율성과 유연성을 향상시키는 위 과정을 간단하게 정리하면  "부품화 시킨다."가 된다.

예시를 들어 설명하면 여러 부품으로 조립된 전자 제품을 들 수 있다.

티어나 레이어처럼 큰 부품은 컴퓨터와 모니터의 역할을 하고 그 안에 들어간 cpu, 메모리 등은 패키지나 컴포넌트이다.

이런 전자제품의 경우 뭔가 고장 났을 때 그 부품만 고치면 정상 작동 하듯이 유연성이 높다.

 

부품화를 위한 2가지 중요점이 있다.

1. 인터페이스를 어느 쪽이 가질지 결정해야 한다. 이때 인터페이스는 더 중요한 부품이 가져간다. 컴퓨터와 스피커가 연결될 때 꽂을 구명은 더 중요한 컴퓨터에 있는 것과 같은 느낌이다.

2. 어느 정도로 부품화 해야 할지 경정해야 한다. 즉 부품 하나의 크기를 어떻게 잡아야 할지 정하는 것이다.

이때에 절대적인 기준은 없고 부품 화할 필요가 있는 만큼 부품 화한다. 부품화에 따른 성능, 제약에 따라 결정해야 한다.

 

 

● 웹애플리케이션의 문제 (스프링 안 썼을 때)

 

오브젝트 생명주기 관리 문제 (싱글턴) -> di컨테이너로 해결

부품화 문제 (의존, 구현 비의존)  -> di컨테이너로 해결

기술 은닉 문제 (트래잭션, 예외, 로깅) -> aop로 해결

 

 

 

● 스프링 사용하는 이유

 

di 컨테이너를 사용한 소프트웨어 부품화로 요구사항 변경이 미치는 영향을 최소화할 수 있고 aop를 이용한 트랜잭션 관리와 코드의 공통부분 추출로 부품화를 촉진시킨다. 이러한 부품화를 통해 프로젝트의 효율성과 유연성을 향상시키고 팀개발과 유닛 테스트를 쉽게 해 주기 때문에 사용한다.

'Spring' 카테고리의 다른 글

[스프링] jdbc 추가  (0) 2023.04.10
[스프링] jdbc  (0) 2023.04.03
[스프링] di  (0) 2023.03.27
[스프링] gradle  (0) 2023.03.21
[스프링] Maven  (0) 2023.03.16