CORS(Cross-Origin 리소스 공유)
CORS는 도메인이 다른 두 사이트가 데이터를 교환할 때 발생하는 문제입니다.
예를 들어 domain-a.com 데이터가 있는 경우 <-> domain-b.com을 교환하면 별도로 지정하지 않는 한 CORS 오류가 발생합니다.
* 브라우저는 보안상의 이유로 스크립트 시작 교차 출처 HTTP 요청을 제한합니다.
따라서 다른 서버에서 리소스를 호출하려면 소스에서 응답 헤더에 CORS 정보를 추가해야 합니다.
-Access-Control-Allow-Orgin: 요청을 보내는 페이지의 출처(*, 도메인)
-Access-Control-Allow-Methods: 요청을 허용하는 메서드. 기본값: GET, POST
-Access-Control-Max-Age: 클라이언트의 프리플라이트 요청 결과를 저장하는 시간(서버가 응답할 수 있는지 확인)
-Access-Control-Allow-Headers: 요청을 허용하는 헤더
잘라내기 및 실행과 객체 지향의 차이점.
절차적 프로그래밍
– 하향식 순차처리를 강조하는 프로그래밍 기법 -> C언어가 대표적이다.
– 컴퓨터의 처리 구조와 유사하여 실행 속도가 빠릅니다.
– 코드의 순서가 변경될 경우 동일한 결과를 보장하기 어렵습니다.
(순서가 엄격히 지켜져야 하기 때문에 유지보수 측면에서 그리 쉽지 않습니다.)
객체 지향 프로그래밍
– 사물을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법 -> 전형적인 자바
– 캡슐화, 상속, 다형성 등의 기법을 사용할 수 있다.
– 절차적 언어보다 실행 속도가 느립니다.
MSA(마이크로서비스 아키텍처)
MSA는 시스템을 각각 독립적으로 배포 가능한 서비스로 나눕니다.
각 서비스는 API를 통해 데이터를 교환하며 하나의 큰 서비스를 형성합니다.
모든 시스템 구성요소가 하나의 프로젝트로 통합되는 MSA(Microservice Architecture)(모놀리식 아키텍처)의 한계를 극복한 듯했다.
장점
– 일부 서비스가 실패하더라도 전체 서비스에 영향을 미치지 않습니다.
– 각 서비스는 서로 다른 언어와 프레임워크로 구성될 수 있습니다.
– 서비스 확장이 용이합니다.
불리
– 서비스가 분리되어 있어 거래를 테스트하거나 처리하기 어렵습니다.
– API를 통해 서비스를 전달하기 때문에 비용이 발생합니다.
– 서비스간 호출이 계속되어 디버깅 및 버그 추적이 어렵다.
WAS(웹 애플리케이션 서버)와 WS(웹 서버)의 차이점
였다
– 비즈니스 로직을 추가합니다.
– 톰캣, PHP, ASP, NET 등
WS
– 비즈니스 로직을 삽입할 수 없습니다.
– Nginx, 아파치 등
스프링 프레임워크란?
Spring Framework는 Java 개발을 보다 쉽게 해주는 오픈 소스 프레임워크입니다.
– Java 개체를 직접 관리하는 경량 컨테이너입니다.
각 객체의 생성과 소멸 등 생명주기를 관리하며 필요한 객체만 Spring에서 얻을 수 있다.
– IoC(Inversion of Control) 기술을 사용하여 애플리케이션에서 느슨한 오류를 장려합니다.
컨트롤의 제어는 사용자가 아닌 프레임워크에 있기 때문에 Spring은 필요에 따라 사용자의 코드를 호출합니다.
– 의존성 주입(DI)
각 계층 또는 서비스 간에 종속성이 있는 경우 프레임워크는 이들을 함께 연결합니다.
– 측면 지향 프로그래밍(AOP)
트랜잭션, 로깅 및 보안과 같은 여러 모듈이 공유하는 기능의 경우 기능을 분리하여 관리할수있다.
@RequestBody, @RequestParam 및 @ModelAttribute의 차이점
@요청 본문
– 클라이언트가 전송한 HTTP 본문 콘텐츠를 JSON 유형에서 Java 개체로 변환하는 MessageConverter의 역할입니다.Do (값을 삽입하지 않고 변환하기 때문에(reflection으로 할당. 변수에 대한 생성자, getter, setter가 없어도 보통 할당됨)
@RequestParam
– HTTP 요청 파라미터를 얻기 위해 사용!!
@RequestParam이 True여야 하므로 기본적으로 적절한 매개변수를 전달해야 합니다. 통과하지 못한 경우 400 에러가 발생할 수 있으며, 필수 변수가 아닌 경우 required 값을 false로 설정해야 합니다.
(@RequestParam 주석에 속성 값이 필요합니다.)
@ModelAttbute
– 생성자, getter 및 setter를 통해 HTTP 본문 내용 및 HTTP 매개 변수 값을 삽입하는 데 사용됩니다!!
값이 주입되고 변환되지 않기 때문에 변수에 대한 생성자 또는 getter 또는 setter가 없으면 변수가 저장되지 않습니다.
스프링 부트와 스프링 프레임워크의 차이점
– 가장 큰 차이점은 자동 구성인 것 같습니다. Spring은 프로젝트 초기에 다양한 환경 설정이 필요하지만,
SpringBoot는 사용자가 쉽게 사용할 수 있도록 많은 구성을 자동화합니다.
SpringBoot srart 종속성을 추가하기만 하면 구성이 완료되고 내장된 tomcat으로 서버를 실행할 준비가 된 것입니다.
스프링 MVC
MVC는 Model, View, Controller의 약자로 각 계층 간의 기능 분리에 중점을 둔 디자인 패턴입니다.
모델
– 데이터 관리 및 비즈니스 로직을 처리하는 부분오전. (DAO, DTO, 서비스 등)
보다
–비즈니스 로직의 처리 결과로 사용자 인터페이스를 표현하는 부분(일부 화면은 HTML, JSP, Tymeleaf 등으로 구성되어 있으며, 서버가 REST API로 구현된 경우 JSON 응답으로 구성된다.
제어 장치
– 사용자 요청을 처리하고 Model과 View를 중재하는 역할Do Model과 View는 연결되어 있지 않기 때문에 Controller는 둘 사이의 통신 매개체 역할을 합니다.
제어 역전(IoC)
Inversion of control은 모든 개체(생성, 수명 주기 등)의 제어가 개발자가 아닌 IoC 컨테이너로 전달됨을 의미합니다.
Spring에서는 IoC 컨테이너에 객체가 생성될 때 객체간 DI(Dependency Injection) 역할을 하며, 컨테이너에 등록된 객체를 “bean”이라고 부른다.
의존성 주입(DI)
종속성 주입은 필요한 객체를 직접 생성하는 대신 외부에서 객체를 받아 사용하는 방식으로 이루어집니다.
이렇게 하면 개체 간의 결합을 줄이고 코드 재사용성을 높일 수 있습니다.
종속성 주입에는 생성자 주입, 필드 주입 및 세터 주입의 세 가지 유형이 있습니다.
그 중 Spring에서 가장 추천하는 의존성 주입 방식은 생성자에 의한 주입 방식이다.
그 이유는 -> 1. 순환 참조를 피한다 / 2. 불변성을 가진다. 배우3 테스트가 쉽기 때문입니다.