스프링 21

[Spring] Servlet 동작 방식

서블릿이란? 서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다. 서블릿 동작 방식 Spring MVC에서 Controller로 이용되며, 사용자의 요청을 받아 처리한 후에 결과를 반환합니다. 사용자가 url을 입력하면 http request가 servlet 컨테이너로 전송됩니다. servlet 컨테이너는 httpServletRequest, HttpServletReponse 객체를 생성합니다. web.xml 기반으로 사용자가 요청한 url이 어느 서블릿에 대한 요청인지 찾고, 해당 서블릿에서 service 메소드를 호출한 후 get, post 여부에 따라 doGet()이나 doPost()를 호출합니다. 메소드는 HttpSer..

BACK/SPRING 2023.05.23

스프링MVC - 웹 애플리케이션의 이해

웹에서는 모든 것이 HTTP 기반으로 데이터를 주고받는다. HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML (API) 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 웹 서버(Web Server) HTTP 기반으로 동작하는 서버 정적 html파일을 HTTP 요청하면, HTTP 응답으로 반환해준다. 정적(파일) HTML, CSS, JS, 이미지, 영상등 ex) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 (정적 리소스 제공 가능) HTTP 요청이 오면 프로그램 코드를 실행해서 애플리케이션 로직 수행 사용자마다 다른 화면 제공 가능 동적 HTML, HTTP API(JSON) 제공 서..

BACK/SPRING 2023.02.12

Spring Boot Project(7) - 서비스 인증과 권한 부여

인증과 인가 등의 보안 기능을 추가하기 위해 스프링 시큐리티를 사용해보겠다. 인증 사용자가 누구인지 확인하는 단계 로그인 - 데이터베이스에 등록된 아이디와 패스워드를 사용자가 입력한 아이디와 비밀번호와 비교해서 일치여부를 확인한다. 로그인에 성공하면 서버는 응답으로 사용자에게 토큰을 전달한다. 인가 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 해당 리소스에 접근할 권리가 있는지 확인하는 과정 리소스 접근할 때 사용자가 전달한 토큰을 통해 권한 유무를 확인한다. 스프링 시큐리티 애플리케이션의 인증, 인가 등의 보안기능을 제공하는 스프링 하위 프로젝트 스프링 시큐리티는 서블릿 필터(servlet filter)를 기반으로 동작한다. DispatcherServlet 앞에는 필터가 배치되어..

BACK/SPRING 2023.01.31

Spring Boot Project(2) - 프로젝트 세팅, MySQL 연동하기

프로젝트 생성 프로젝트 설정을 해준다. 프로젝트에서 사용할 의존성을 추가한다. plugins { id 'java' id 'org.springframework.boot' version '2.5.6' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.toy' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring..

BACK/SPRING 2023.01.24

[Spring] 컴포넌트 스캔 / @Autowired

지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. → 관리할 빈이 많아지면 관리하기 번거로워 진다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 설정파일이 없다면 의존관계는 어떻게 주입할까? → @Autowired를 사용해 자동 의존관계 주입을 한다 컴포넌트 스캔 @Component를 가진 모든 대상을 가져와서 빈에 등록하기 위해 찾는 과정 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. 참고로 @Configuration 이 컴포넌트 스캔의 대상이 된 이유도 @Configuration 소스코드를 열어보면 @Compone..

BACK/SPRING 2023.01.17

[Spring] DI / IoC, 컨테이너, 의존성 주입 방법

DI (Dependency Injection) DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. 의존 관계 먼저 의존 관계가 무엇인지 알아보자. UML 모델에서는 두 클래스의 의존관계를 다음과 같이 점선으로 된 화살표로 표현한다. A가 B에 의존하고 있음을 나타낸다. B의 기능이 추가하거나 변경되면 A에 영향을 미친다. 의존 관계에는 방향성이 있다. A가 B에 의존하지만, 반대로 B는 A에 의존하지 않는다. 의존성 주입 첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접..

BACK/SPRING 2023.01.09

[Spring] AOP란

Spring AOP 관점 지향 프로그래밍(AOP-Aspect Oriented Programming) AOP는 관점을 기준으로 묶어 개발하는 방식을 말한다. 관점(aspect)이란, 어떤 기능을 구현할 때 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다. 핵심 기능은 주로 핵심 비지니스 로직이고, 부가 기능은 핵심 로직을 실행하기 위한 데이터베이스 연결, 로깅, 파일 입출력 등이 있다. 여러 비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다. => 흩어져 있는 부분들을 Aspect를 이용해 모듈화 시킨 것을 볼 수 있다. 모듈화 시킨 Aspect를 어느 곳에 사용해야 하는지 정의해주면 된다. 스프링 AOP..

BACK/SPRING 2023.01.02

[Spring] MVC 동작 원리

Spring MVC Spring MVC란 웹 애플리케이션 개발을 위한 MVC 패턴 기반의 웹 프레임워크이다. 애플리케이션의 구성 요소를 Model, View, Controller로 분리한다. Model 데이터 관리 및 비지니스 로직을 처리하는 부분이다. 요청에 의한 로직만 처리하고 이 결과를 어디에, 어떻게 사용하는지는 상관하지 않는다. 뷰나 컨트롤러에 대한 어떠한 정보도 알면 안된다. 데이터의 변경이 일어났을때 뷰를 참조하는 내부속성값을 가지면 안된다는 것이다. ex) DAO, DTO, Service @Service를 통해 스프링 컨테이너에 등록된 객체는 Model에 해당된다. View 비지니스 로직의 처리 결과를 통해 사용자 인터페이스가 표현되는 구간이다. Model을 통해 전달받은 데이터가 어떤 데..

BACK/SPRING 2022.12.25

[Spring] AOP란? 용어 정리, 사용 방법

AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. OOP를 보완하는 수단으로,여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것이다. 중복되는 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이하다는 장점들이 있다. 여러 concerns들과 여러 모듈들이 뒤섞여 있는데, 모듈끼리, concerns끼리 분리한다. 이렇게 분리해 독립된 클래스로 만든 부가기능을 aspect라고 한다. 프로그램에서 비즈니스 로직을 분리하고, spring framework에서 런타임시 필요한 기능을 주입시킨다. 이전에는 Caller가 app funct..

BACK/SPRING 2021.10.18