본문 바로가기
백엔드/Spring Framework

웹 개발의 역사, WEB/WAS, SpringFramework

by maverick11471 2024. 7. 29.

[웹 개발의 역사]

1. 초창기 웹: html, css 파일(정적파일)만 주고받고 할 수 있는 형태의 웹

  - 문제점: DB에 있는 데이터를 가져와서 동적으로 표시할 방법이 없는 문제점 발생

 

2. CGI 프로그램

  - CGI(Common Gateway Interface): 동적 데이터 처리에 대한 규약

  - 클라이언트(사용자)가 요청을 보내면 Web서버에서 CGI 프로그램을 호출하여 동적 데이터를 처리하는 방식

  - 문제점: 프로세스 기반이었기 때문에 한 사용자의 요청이 끝나기 전에는 다른 사용자의 요청에 대한 처리를 시작할 수 없었다.(다수의 처리에 대한 문제점 발생)

 

3. Servlet

  - CGI 프로그램의 문제점 해결을 위해 고안된 방식. 요청 당 하나의 프로세스를 생성하지 않고 스레드를 생성해서 멀티 스레드 방식의 병렬처리를 통한 다수의 요청을 처리하도록 구현

  - 스레드 기반의 비동기 처리방식이기 때문에 먼저 들어온 요청이 먼저 끝날 수 있고, 나중에 들어온 요청이 먼저 끝날 수 있는 시스템

  - 문제점: Java 코드로 html을 구성하는게 매우 복잡하고 어려움

 

4. JSP(Java Server Page)

  - Java 코드로 html을 구성하는게 비효율적이기 때문에 JSP는 html 웹 문서를 구성하고 그 안에서 Java 코드를 사용할 수 있는 방식

  - JSP는 한 파일에 자바 + html + Css + JavaScript 소스코드가 모두 존재

  - 문제점: 모든 소스코드가 JSP에 몰려있다 보니 소스코드가 어지럽고 더러운 문제. 소스코드 분석이 어려움.

 

5. JSP/Servlet 방식

  - JSP방식에서 소스코드 분석의 문제가 발생하면서 화면단과 비즈니스 로직을 분리하는 방식으로 발전

  - 화면단 소스 코드(JSP), 비즈니스 로직(Servlet)

  - MVC 방식의 시초

 

6. MVC(Model View Controller) 패턴

  - JSP/Servlet 방식이 좀 더 구체화 되면서 발전된 형태의 디자인 패턴

  - JSP/Servlet 방식: PageController(Servlet)가 하나만 존재

    MVC 패턴: 기능별 Controller(일반 Servlet이 아닌 Http 프로토콜(규약) HttpServlet(Spring에서 제공해주는)을 상속받아서)를 생성

  - Model(DB 접근 객체: DAO, Repository)

    비즈니스 로직: Service, Service를 상속받은 ServiceImpl

    테이블 매핑 객체: VO, DTO, Entitiy

    View: JSP, Html

    Controller: Controller


[WEB/WAS]

1. WEB

  - 클라이언트(사용자)의 요청을 가장 먼저 받아주는 서버

  - 요청을 WEB 서버에서 처리할 것인지 아니면 WAS로 전달할 것인지 판단하여 처리(단순 정적파일: WEB 서버에서 바로 사용자에게 정적파일(Html, Css, Jpg 등)을 보내준다.

  - 컴파일이나 DB에 데이터를 가져오는 로직 등 비즈니스 로직이 필요한 경우 사용자 요청을 WAS로 전달. WAS에 처리된 결과가 WEB 서버로 오고 WEB 서버는 사용자에게 그 결과를 전달해주는 형태

  - WEB 서버는 기본적으로 80포트를 사용하게 되어있는데 설정파일에서 변경가능

  - 많이 사용하는 종류: Apache, IIS, nginx, WebtoB 등

 

2. WAS(Web Application Server)

  - 실제로 웹 어플리케이션을 실행하는 서버

  - 템플릿엔진(JSTL, Thyleaf 등)이 필요한 경우나 비즈니스 로직인 Java 클래스의 메소드, SQL 쿼리 실행까지 모두 WAS가 담당

  - 사용자 요청이 WAS로 전달되면 Servlet 컨테이너에서 Servlet을 생성해서 요청을 처리

  - WAS는 기본적으로 8080포트로 동작하며 설정파일에서 변경가능

  - 많이 사용하는 종류:  tomcat, Web Logic, Jetty, Jeus 등

 

apache-tomcat을 설치하면 conf 폴더에 server와 web 파일이 있는데 각각 WAS와 WEB서버를 의미하고 있다.

 


[SpringFramework]

  - SpringFramework는 웹 개발의 뼈대나 골격을 제공하는 역할

  - SpringFramework 등장 전에는 개발자들이 각자의 스타일대로 개발을 진행 -> 한 명의 개발자가 빠지게 됐을 때 유지보수하거나 소스코드의 수정에서 어려움을 겪음

  - 장점

    * 제공되는 같은 모양의 틀로 소스코드를 찍어낼 수 있기 때문에 구현시간이 매우 빠름

    * 유지보수가 용이함

    * 능력의 획일화와 인건비가 감소함

    * pom.xml을 통한 라이브러리 관리가 이루어지기 때문에 라이브러리를 직접 다운받아 참조시킬 일이 없어지고 관리하기 훨씬 수월함(기존에는 개발자들이 라이브러리를 전부 들고 다녔음)

  - 특징

    * 의존성 주입(DI: Dependency Injection): 객체타입의 변수에 의존성 검색(DL)을 통해 찾은 객체를 넣어주는 작업

    * 의존성 검색(DL: Dependency Lookup): 자동으로 객체를 찾아주는 기능. 클래스들간의 의존성이 존재할 떄 의존성에 알맞는 객체를 찾아주는 작업

    * IOC컨테이너(Inverse Of Controll: 제어의 역전): 기존 개발자들이 해오던 작업들을 SpringFramework에서 대신 해주는 것. 설정파일이나 어노테이션으로 지정된 클래스의 객체를 Spring에서 자동생성

    * AOP(Aspect Oriented Programming:관점 지향 프로그래밍): 로그찍기 같은 공통기능들은 설정파일로 처리. 로그찍기, 예외처리, 트랜잭션과 같은 메소드에서 공통으로 실행되는 기능들은 공통(횡단)관심으로 묶어서 처리

      - AOP는 라이브러리가 좋아져서 무색해짐. 트랜잭션(commit, rollback)만 AOP기능으로 남아있음.

  - 의존성, 결합도, 응집도

    * 의존성: 한 모듈이 다른 모듈의 결과에 영향을 줄 수 있는 관계

    * 결합도: 독립성 측정 척도. 의존성이 많아질수록 결합도가 높아진다.

    * 응집도: 독립성 측정 척도. 하나의 모듈과 관련된 기능을 얼마나 잘 모아놨는지에 대한 척도. 예시로 로그인 기능을 3개의 클래스로 나눠져 구성했다면 응집도가 낮다고 볼 수 있다.

    * 독립성이  높다는 것은 결합도가 낮고 응집도가 높다고 볼 수 있다.