1. 서버와 클라이언트 등 개발에 필요한 개념적인 부분을 이해할 수 있다.
- 개념학습
✔︎ 서버 : 제공하는 주체
✔︎ 클라이언트 : 제공받는 대상
✔︎ 서버의 종류
Apache
, IIS
, NginX
와 같은 웹 서버 소프트웨어를 사용해 웹 서비스 가능Tomcat
, WebLogic
, WebSphere
와 같은 웹 애플리케이션 서버 소프트웨어를 사용해 웹 애플리케이션 서비스 제공 가능Oracle
, MS-SQL
, MySQL
과 같은 데이터베이스 소프트웨어를 사용하여 서비스 가능VS-FTPD
, IIS
와 같은 소프트웨어를 사용해 서비스 가능Send-mail
, Microsoft Exchange Server
와 같은 소프트웨어를 사용해 서비스 가능✔︎ 서버와 클라이언트의 통신
✔︎ 서버 구성과 서버 환경 설정
Apache
, IIS
, NginX
와 같은 웹 서버 소프트웨어를 이용해 웹 서비스를 가능케하는 서버 환경 설정을 의미Tomcat
, WebLogic
과 같은 웹 애플리케이션 서버 소프트웨어를 이용해 웹 애플리케이션을 구동하여 서비스를 가능케하는 서버 환경 설정을 의미Oracle
, MS-SQL
과 같은 데이터베이스 솔루션 소프트웨어를 이용해 데이터베이스를 관리할 수 있는 서비스를 제공하는 서버 환경 설정을 의미✔︎ CORS (Cross-Origin Resource Sharing)
애플리케이션 간 출처(Origin)가 다를 경우, 스크립트 기반의 HTTP 통신을 통한 리소스 접근이 제한되는 정책(SOP; Same Origin Policy) 존재
CORS는 이러한 접근 제한의 예외 조항
사전 설정을 통해 리소스에 선택적으로 접근할 수 있는 권한을 부여하도록 브라우저에게 알려주는 정책
브라우저에서 확인할 수 있는 CORS 관련 에러 콘솔 문구
- 다른 출처의 리소스를 가져오려고 했지만 SOP 때문에 접근 불가
- CORS 설정을 통해 서버의 응답 헤더에 'Access-Control-Allow-Origin'을 작성하면 접근 권한을 얻을 수 있음
✔︎ CORS 정책 동작 방식
OPTIONS
메서드로 사전 요청을 보내 해당 출처 리소스에 접근 권한이 있는지부터 확인하는 것을 의미Access-Control-Allow-Origin
으로 요청을 보낸 출처가 돌아오면 실제 요청을 보내게 됨✔︎ CORS 정책 설정 방법
.cors(withDefaults())
일 경우, corsConfigurationSource
라는 이름으로 등록된 Bean을 이용@Conffiguration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
...
.cors(withDefaults()) // CORS 설정 추가
...
);
return http.build();
}
@CrossOrigin
애너테이션을 이용해 컨트롤러 혹은 메서드에서 CORS 정책 설정
애너테이션이 붙은 컨트롤러(혹은 메서드)에서만 적용, 따라서 원하는 요청에 따른 응답에만 CORS 설정 가능
< 컨트롤러 단에서 애너테이션을 이용해 CORS 설정 >
@CrossOrigin // Controller에 애너테이션을 이용해 설정
@RestController
public class HelloController {
...
}
< 메서드 단에서 애너테이션을 이용해 CORS 설정 >
@RestController
public class helloController {
@CrossOrigin // 해당하는 메서드에 애너테이션을 이용해 설정
@GetMappping
public ResponseEntity<> getHello () {
...
}
}
애너테이션을 이용해 CORS 설정을 하는 경우, 옵션을 이용해 세부적인 설정 추가 가능
@CrossOrigin(origins = "https://codestates.com")
@RestController
public class HelloController {
...
}
✔︎ CSRF (Cross-Site Request Forgery)
disable
처리 필요@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable() // disable 처리
...
}
...
}
☞ 드디어 프로젝트의 첫 발을 내디뎠다... (웅장)
우선 시작은 간단한 TO-DO Application을 혼자서 진행하는 솔로 프로젝트 시간이었다. 처음부터 바로 프로젝트를 만드는 시간으로 알았는데 자세히 보니 앞에 개념학습도 병행되어 있었다. 그래서 2일로 잡은듯 ^^,,
앞선 개념학습에서는 기존에 배웠던 내용을 보충하거나 복습하는 느낌이었다. (서버, 클라이언트, CORS 등등 ...) 특히 CORS 에러 파트에서는 내가 이전 실습 때 직접 만나본 에러라 반갑기도 했다!
CORS 에러지만 사실 CORS 문제가 아니라, HTTP 통신 간 리소스 접근이 제한되는 정책인 SOP 때문이라는 점❗️
이전 실습에서는 단순한 나의 오타때문이었지만 ^^,,, 정확한 에러의 이유를 알 수 있는 시간이었다 :)
CSRF 공격 같은 경우도 정보처리기사를 공부할 때와 이전 학습 때 접해본 내용이라 크게 어려움은 없었던 것 같다.
시간이 남아서 TO-DO App 프로젝트를 대충 끄적여봤는데 Section3에서 학습한 Spring MVC 내용들을 복습하는 느낌이었다. 공부한 내용들을 다시 상기시켜보며 하나하나 짚으며 정리해갔다..! 솔로 프로젝트의 내용같은 경우는 내일 직접 실습을 진행하며 회고해보도록 하겠다.
・ 웹 애플리케이션 설계