[웹 개발의 역사]
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개의 클래스로 나눠져 구성했다면 응집도가 낮다고 볼 수 있다.
* 독립성이 높다는 것은 결합도가 낮고 응집도가 높다고 볼 수 있다.
'백엔드 > Spring Framework' 카테고리의 다른 글
의존성 주입 (0) | 2024.07.29 |
---|---|
게시판 구현 / 8-2. '상세 글' 파일 업로드(미리보기, 수정하기, 삭제) (1) | 2024.07.23 |
게시판 구현 / 8-1. '글 등록' 파일 업로드(미리보기, 수정하기, 삭제) (2) | 2024.07.23 |
게시판 구현 / 7. 파일 업로드(notice) (0) | 2024.07.22 |
게시판 구현 / 7. 파일 업로드(boardFile) (0) | 2024.07.22 |