5주차 - 스프링 심화 & 미니 프로젝트

김형준 Kim Hyeong Jun·2022년 12월 19일
0
post-thumbnail

미니 프로젝트 시작

주특기 입문, 숙련, 심화의 3주 커리큘럼을 끝내고, 미니 프로젝트 주차가 시작됐다.

Spring 을 이용한 첫 프로젝트...
모르는 것 투성이 이지만, 확실히 재미를 느끼고 있어 스스로에게 다행이라 생각한다.

문제점은 결국은 재밌다고 생각하지만,
남들은 알고 내가 모르는 뭔가를 마주치면 그때는 상대방과 나를 비교하며 나를 좀 깍아 내린다는 점...?
음... 근데 여기서도 다행인점은 잘하는 사람들을 질투하지는 않는다.
더 열심히 공부하고 배워서 나도 많은걸 알아야겠다!!! 하며 자극을 얻는 다는 점!!!
(칭찬을 해야 할지, 말아야 할지... ㅋ)

분명히 아쉬운 점은 심화 주차의 학습 내용을 제대로 학습하고 이용해보지 못한 것.

실전 프로젝트 전까지 중간중간 남는 시간을 어떻게 해서든 잘 사용해야 한다.

힘을 내보자!

그래도 한 달 전의 나보다는 분명한 발전이 있지 않은가!
내일의 나도 오늘의 나보다는 분명히 발전 할 것이기에 멈추지 말고 차근차근 나아가자.

CORS (Cross Origin Resource Sharing)

Origin은 무엇을 의미할까?

한국말로는 출처라고 부른다.
이는 URL, 도메인 등과 비슷해 보이지만 엄연히 의미가 다르다.

Origin 은 URL에서 프로토콜, 도메인, 포트 번호를 합친 부분을 의미한다.

예시
https://it-eldorado.com:80

SOP 와 CORS

SOP (Same Origin Resource) 란?

한국말로 SOP는 동일 출처 정책 이라고 부른고,
CORS는 교차 출처 자원 공유 라고 부른다.

둘이 무슨 관계인데?

SOP는 다른 Origin으로 요청을 보낼 수 없도록 금지하는 브라우저의 기본적인 보안 정책이다.
즉, 동일한 Origin으로만 요청을 보낼 수 있게 하는 것이다.

그러나 기술이 발달하면서 서로 다른 Origin끼리 데이터를 주고 받아야하는 일이 많아졌고,
이로 인해 SOP는 별도의 예외 사항을 두게 되었다.
즉, 몇 가지 예외 사항에 대해서는 다른 Origin으로도 요청을 보낼 수 있게 하는 것이다.

RFC 6454에서는 그러한 예외 상황을 다음과 같이 정의하고 있다.

Generally, reading information from another origin is forbidden. However, an origin is permitted to use some kinds of resources retrieved from other origins. For example, an origin is permitted to execute script, render images, and apply style sheets from any origin. Likewise, an origin can display content from another origin, such as an HTML document in an HTML frame. Network resources can also opt into letting other origins read their information, for example, using Cross-Origin Resource Sharing.

  • <script> 태그로 javaScript를 실행하는 경우, 이미지를 렌더링하는 경우.
  • <link> 태그로 스타일 시트 파일을 불러오는 경우, HTML 문서를 화면에 보여주는 경우.

위와 같은 경우에는 다른 Origin 으로의 요청을 허용한다는 내용이다.

그리고 CORS 정책을 지키는 요청의 경우에도 다른 Origin으로 요청을 허용한다는 내용이 적혀있다.

즉, CORS는 다른 Origin으로 요청을 보내기 위해 지켜야 하는 정책으로, 원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 정책 이라고 볼 수 있다.

CORS 는 브라우저의 정책이다.
즉, 서버는 평소처럼 요청이 오면 응답을 해주지만,
브라우저가 자신이 보낸 요청 및 서버로부터 받은 응답의 데이터가 CORS 정책을 지키는지 검사하는 것이다.

따라서 서버가 정상적으로 응답을 해줬더라도, 브라우저가 안전한 요청 및 응답이 아니라고 판단을 하면 해당 응답을 버린다.

Spring CORS 설정

Spring 에서는 크게 2가지 방식으로 CORS를 설정할 수 있다.

  • @Configuration 설정 방법
  • @CrossOrigin 설정 방법

일반적으로 @Configuration 설정 방법을 많이 사용한다.

@Configuration 사용 예시
@Configuration
public class CorsConfig implements WebMvcConfigurer {

	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
			.allowedOrigins("http://127.0.0.1:8080")
			.allowedMethods(
				HttpMethod.GET.name,
				HttpMethod.POST.name,
				HttpMethod.PUT.name,
				HttpMethod.DELETE.name
			)
	}
}
  • addMapping : CORS를 적용할 Url 패턴을 정의한다. /**의 경우 모든 Url에 대한 접근을 허용한다.
  • allowedOrigins : 허용하고자 하는 Origin을 정의한다.
  • allowedMethods : 허용하고자 하는 method를 정의한다.
@CrossOrigin 사용 예시
@CrossOrigin("http://localhost:3000")
@RestController
@RequestMapping("/todo")
public class TestController {
	
	//@CrossOrigin("http://localhost:3000")
	@GetMapping public String test() {
		// test ..
	}
}
  • 해당 클래스나 메서드 위에 @CrossOrigin 어노테이션을 붙여주면 된다.

Reference

https://it-eldorado.tistory.com/163

https://yhmane.tistory.com/214

https://steady-coding.tistory.com/616

profile
I want be a developer🙂

0개의 댓글