경희대학교 컴퓨터공학부 하계 리턴 백엔드(스프링부트) 스터디 1주차 - 트랙장 최현영
스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크
웹 브라우저(Web Browser) : 클라이언트에서 요청을 하고 전달받은 페이지를 볼수있는 환경을 말한다. ( 크롬, IE, Safari, Firefox 등.. ) 웹 서버(Web Server) : 클라이언트로 부터 요청받아 서버에 저장된 리소스를 클라이언트 에게 전달한다. 주로 정적컨텐츠롤 담당한다.
웹 어플리케이션 서버 ( Web Application Server ) : 줄여서 was 라고도 부르며 서버단에서 필요한 기능을 수행하고 그결과를 웹서버에게 전달한다.
데이터베이스 : 서비스에 필요한 데이터를 보관, 갱신 등 관리를 한다.
웹 프레임워크란?
쿠키나 세션 처리, 로그인/로그아웃 처리, 권한 처리, 데이터베이스 처리 등 웹 프로그램을 위해 만들어야 할 기능이 정말 산더미처럼 많지만 웹 프레임워크에는 그런 기능들이 이미 만들어져 있기 때문에 단지, 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면 된다.
쉽게 말해 스프링 부트와 같은 웹 프레임워크는 웹 애플리케이션을 만들기 위한 스타터 키트라고 생각하면 된다.
스프링의 구조
나무위키 사진 ><
스프링 부트는 2012년에 많은 기업에서 사용 중인 검증된 웹 프레임워크이다.
로그인 기능과 페이징 기능이 이미 스프링 부트에 있다. 필요로 하는 웹 프로그램 개발을 위한 도구와 기능이 대부분 준비되어 있다. 스프링은 기능별로 구분된 20여가지의 모듈이 존재하며, 필요한 기능(모듈)만 선택하여 사용하여 개발할 수 있는데, 이러한 개발 기법을 이를 경량 컨테이너 설계라고 불린다.
Spring은 경량 컨테이너라고 불리는 영역에서 자바 객체를 직접 관리한다. 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리한다.
Spring의 가장 큰 특징으로 IoC와 DI, AOP가 있다.
제어의 역전 (IoC, Inversion of Control)
→ 즉, 사용자의 객체 사용 제어권을 다른 주체에게 넘기는 것을 IoC(제어의 역전)라고 한다.
//기존 방식
public class UserService {
private EmailService emailService;// 또다른 클래스 변수를 선언
public UserService() { //직접 EmailService를 new로 생성하여 EmailService를 의존함
this.emailService = new EmailService();
}
public void sendWelcomeEmail(String user) {
// 사용자에게 환영 이메일을 보내는 로직
emailService.sendEmail(user, "Welcome to our application!");
//메서드를 호출
}
}
public class EmailService {
public void sendEmail(String recipient, String message) {
// 이메일 전송 로직
System.out.println("Sending email to " + recipient + ": " + message);
}
}
//IoC 방식
public class UserService {
private EmailService emailService;// 또다른 클래스 변수를 선언
public UserService(EmailService emailService) {
//컨테이너가 싱글톤으로 생성한 인스턴스를 주입하여 이 객체 내의 변수에 할당
this.emailService = emailService;
}
public void sendWelcomeEmail(String user) {
// 사용자에게 환영 이메일을 보내는 로직
emailService.sendEmail(user, "Welcome to our application!");
}
}
public class EmailService {
public void sendEmail(String recipient, String message) {
// 이메일 전송 로직
System.out.println("Sending email to " + recipient + ": " + message);
}
}
의존성 주입 (DI, Dependency Injection)
관점 지향 프로그래밍(AOP)