1. 전체 구조부터

클라이언트 (리액트/브라우저)
HTTP
Web Server (nginx) ← 정적 처리
WAS - 톰캣 ← 동적 처리
├── JVM
├── 스프링부트
└── JDBC
SQL
DB (MySQL)
2. Web Server vs WAS 차이
Web Server (nginx, Apache)
정적 리소스만 처리
→ 클라이언트가 index.html 요청
→ 파일을 그대로 읽어서 반환
→ 연산, DB 조회 같은 건 불가능
동적 처리 요청이 오면
→ WAS로 넘김 (프록시)
- 정적 리소스만 처리
- 클라이언트가 index.html 요청
- 파일 그대로 읽어서 반환
- 동적 처리 요청이 오면 WAS로 넘김(프록시)
WAS (Web Application Server)
- 동적 처리 전담 서버
- 비즈니스 로직 실행
- DB 조회/연산/인증 처리
- 역할
- HTTP 요청 수신 및 파싱
- Servlet 컨테이너로서 Java 코드 실행
- DB 연동(JDBC)
- HTTP 응답 생성 및 반환
3.JVM
Java를 위해서 소프트웨어로 구현된 CPU
- 개발자가 Java 코드 작성 (.java)
- javac 컴파일러가 바이트코드로 변환(.class)
- JVM이 바이트 코드를 읽어서 실행
- 특징
- OS 위에서 동작하는 가상머신
- WAS인 톰캣 자체도 Java로 만들어졌기 떄문에 JVM 위에서 실행
- 스프링부트 구조도 JVM 위에서 실행
4. 톰캣이 WAS로서 하는 일.
톰캣의 핵심은 Servelt 컨테이너
Servlet이란?
- Java로 HTTP 요청을 처리하는 클래스
- WAS가 이 Servlet을 관리하고 실행
- 스프링에선 DispatcherServlet이 어느 컨트롤러에 HTTP 요청을 보낼지 결정
5.JDBC
Java 코드가 MySQL에 접근하려면 MySQL 전용 통신 프로토콜을 알아야 하는데 DB마다 통신 방식이 다름
JDBC는 Java 표준 DB 인터페이스로
- DB 종류에 관계없이 동일한 코드로 접근
- DB 벤더가 JDBC Driver 구현체를 제공
6. 프레임워크란?
반복되는 작업을 대신 처리해주는 뼈대로써 대표적으로 스프링이 있음
- DispatcherServlet
- 역할을 레이어로 분리
- Controller
- Service
- Repository
- 공통 기능은 프레임워크가 처리
7. 스프링의 문제점
- 톰캣 별도 설치
- 서버에 톰캣 설치, 버전 맞추기, war파일로 배포
- web.xml 수동 설정
- DispatcherServlet 등록
- URL 매핑 설정
- 인코딩 설정
- JDBC 설정 수동
- DB URL, 계정, 드라이버
- 커넥션 풀 설정
- 커넥션 풀이란?
- 서버 시작할 때 미리 DB 연결을 N개 만들어놓고 요청 올 때마다 꺼내 쓰고 반납하는 방식
- 의존성 충돌
8. 스프링부트
스프링부트 = 스프링 + 자동설정 + 내장톰캣
- 톰캣 내장
- Auto Configuration
- 설정 파일 최소화
- application.yml에 DB 정보만 적으면 나머지 설정은 자동
- 의존성 자동 관리
- spring-boot-starter-web만 추가하면 관련 라이브러리 버전까지 자동으로 맞춰줌