@CrossOrigin 애너테이션을 이용해 컨트롤러 혹은 메서드에서 CORS 정책을 설정하면 된다.
애너테이션이 붙은 컨트롤러(혹은 메서드)에서만 적용되며 따라서 원하는 요청에 따른 응답에만 CORS 설정을 할 수 있다.
// 옵션을 이용해 세부적인 설정을 추가
// 메서드단위에도 적용 가능
@CrossOrigin(origins = "https://codestates.com")
@RestController
public class HelloController {
...
}
할일 목록을 처리하는 기능을 간단하게 구현해 봤다.
테이블 추가 + Todo backend사이트 테스트용 설정 추가 풀코드
- 클라이언트(View) 보조 사이트
실습으로 만든 todo의 경우 아래 링크로 가면 된다.
https://todobackend.com/client/index.html?http://localhost:8080/
@CrossOrigin
http://todobackend.com/에서 테스트하기 위해 추가해야 함.tmi https://todobackend.com/client/index.html?http://localhost:8080/#/
으로 뒤에 샵 잘못입력해서 한참 고생했다.
build.gradle
수정plugins {
id 'org.springframework.boot' version '2.4.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'war' // 추가합니다.
id 'java'
}
...
@SpringBootApplication
public class ToDoAppApplication extends SpringBootServletInitializer { // SpringBootServletInitializer를 상속
public static void main(String[] args) {
SpringApplication.run(ToDoAppApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // JAR → WAR 포맷 변경
return builder.sources(ToDoAppApplication.class);
}
}
이후 빌드하면 jar파일 대신 war 파일이 생성 된다.
.war
파일 생성빌드한 애플리케이션 war 파일을 톰캣 파일의 webapps파일(D:\AAWonJong\Program File\apache-tomcat-9.0.73\webapps
)로 이동
D:\AAWonJong\Program File\apache-tomcat-9.0.73\conf
위치에 있는 server.xml
파일 수정
<Context path="/" docBase="애플리케이션이름" reloadable="false" > </Context>
이거 한줄 추가해주면 된다.
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="to-do-app-0.0.1-SNAPSHOT" reloadable="false" > </Context>
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
5번과정 대신에 그냥 .war
파일명을 "ROOT"로 변경해도 된다.
D:\Users\...\apache-tomcat-9.0.68\bin> .\startup.bat # 톰캣을 실행
D:\Users\...\apache-tomcat-9.0.68\bin> .\shutdown.bat # 톰캣을 종료
직접 클릭해서도 가능
cf. 톰캣 실행해두면 인텔리제이 사용하면서 8080포트 충돌나서 못쓰니 아래와 같이 톰캣 포트를 수정할 수 있다.
- server.xml 파일을 아래와 같이 수정
<Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- port값에 8090을 입력하여 앞으로 외장 톰캣에서는 8090번 포트에서, IDE에서 실행하는 Spring boot(Embeded Tomcat)는 8080번 포트에서 실행하도록 조정
- 네트워크 설정을 하지 않아도 방화벽을 넘어 외부에서 로컬 환경에 접근할 수 있게 해주는 터널링 프로그램
- 무료 플랜의 경우 연결 세션이 약 2시간가량 유지
실행
// ngrok http {port} 의 형태로 원하는 포트를 연결
ngrok http 8080
ngrok http 8090
위와 같이 https://67a8-121-133-205-229.jp.ngrok.io
임시주소 확인 가능
아래와 같이 해당 주소로 CRUD 요청을 보내면 정상적으로 수행한다.