일단 프로젝트를 만들 때, 버전 2.7.0에 자바는 버전 11로 맞추어주었다. 주변에서 듣기로는 제일 실무에서 많이 쓰인다고 들었기 때문이다(소문)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.projectlombok:lombok:1.18.22'
implementation 'mysql:mysql-connector-java'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
// JUnit5
testImplementation("org.junit.platform:junit-platform-launcher:1.5.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.5.2")
// jwt
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'
// OAuth2
implementation group: 'com.auth0' , name: 'java-jwt', version: '3.10.3'
// Swagger
implementation 'io.springfox:springfox-boot-starter:3.0.0'
// validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
의존성은 이렇게 주입한 상태이다. 기본적으로 Json Web Token(후에 설명할)을 위한 의존성, Spring Security를 이용한 회원을 만들기 위한 Spring Security, OAuth2(후에 설명할 것), Swagger(바로 다음 단계) 등등 후에 어떤 기능인지와 어떻게 만들었는지 같이 정리해보려고 한다.
이후 CORS를 설정해두었다.
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedMethod("*");
config.addAllowedHeader("*");
source.registerCorsConfiguration("/api/**", config);
return new CorsFilter(source);
}
}
@Configuration으로 설정 클래스임을 명시하고, 내부에 Spring Bean에 들어갈 객체를 만들어주었다.
cors에 대한 필터를 설정해주었다.
Credentials | 처리방식을 설정해준다. 기본적으로 요청에 대한 응답으로 json타입이 나간다. 이를 Javascript에서 처리할 수 있게 해준다. 이를 통해 프론트엔드에서 처리된 응답을 뷰에 맞게 설정해줄 수 있다. |
Origin | 출처, 보낸 곳의 IP + Port를 명시한다. addAllowOrigin("*")는 모든 출처를 허용한다는 뜻이다. |
Method | 방식, Get/Post/Update/Delete등의 요청을 허용하는 방식을 설정한다. "*"는 모든 방식을 허용한다는 뜻이다. |
Header |
이런 방식으로 존재하는 헤더에 대해, 허용하는 헤더의 타입을 설정할 수 있다. "*"는 모든 헤더를 허용한다는 뜻이다. |
이렇게 만들어진 config(설정값)이 존재할 때, 이를 내 서버의 Cross-Origin-Resource-Sharing(쉽게 말하면 다른 서버의 리소스 공유)설정에 등록해준다. 이렇게 적용된 내 서버의 외부 서버 리소스 공유 방식의 설정을 반환하게 설정해준다.
그러면 뭐가 변한 걸까?
원래는 한 서버는 다른 ip의 서버어 리소스를 공유하지 못하게 설정해둔다.
스프링의 SOP(단일 Origin 규칙)에 따라 다른 서버에 접근할 수 없지만, Cors를 통해 접근을 가능하게 해준다.
즉, Cors가 없다면 우리가 요즘 흔하게 보는
이런, 다른 계정을 통한 로그인을 할 수 없다.
내가 만든 서버는 SOP로 인해 외부 IP의 계정으로 로그인할 수 없으니까.
'스프링 공부 > 게시판 프로젝트 만들기' 카테고리의 다른 글
[스프링] 6. SecurityUtil 예외처리를 커스텀 해보자(부제: 2단계, 리스폰스를 이용해 예외처리하기) (0) | 2023.01.02 |
---|---|
[스프링] 5. SecurityUtil 예외처리를 커스텀 해보자(부제: 1단계, Response만들어주기) (0) | 2023.01.02 |
[스프링] 4. SecurityConfig에 대한 유틸 추가하기 (0) | 2023.01.01 |
[스프링] 3. swagger ui 적용시키기(2) (0) | 2022.12.31 |
[스프링] 2. swagger ui 설정하기(1) (0) | 2022.12.28 |