[목표]
AWS 강의를 듣습니다.
회원가입 기능을 추가합니다.
시놀로지에 배포합니다.
AWS 강의를 듣습니다. + 생성형 Ai
관련 내용은 정리되는대로 올리겠습니다.

식사를 하고 왔습니다.


어제 못했던 시놀로지 배포를 해보겠습니다.
[완성된 페이지 깃링크]
https://github.com/prkty/Krafton_Jungle_SpringReact/tree/main
npm run build
/volume1/web/your-react-app/에 build/ 폴더 내용을 업로드(Web Station에서 접근 가능)
/volume1/web/your-react-app위의 지침을 따르니 프론트는 배포 가능했습니다.
Spring과 My SQL의 통신을 위해 3306 포트를 포트포워딩 했습니다.
상세한 버전까지 맞춰줘야합니다. 이후에는 3306을 시놀로에서 쿼리문을 작성하지말고, My SQL WorkBench 에서 작업하면 한결 편합니다.
설치완료되면 터미널에서 mysql -u root -p 을 통해 시놀로지에 접근가능합니다. 그 이후에는 전에 적었던 쿼리문을 따라서 추가적인 작업을 해줍니다.
CREATE DATABASE todos;
CREATE USER 'todos-user'@'localhost' IDENTIFIED BY 'dummytodos';
GRANT ALL PRIVILEGES ON todos.* TO 'todos-user'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'todos-user'@'localhost';
Spring Boot 프로젝트 루트에 아래 파일 작성합니다. (인텔리제이)
FROM openjdk:17-jdk-alpine
COPY target/restful-web-services-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
아마 mvn 명령어가 안먹힐텐데 maven 인터넷에서 zip파일로 받아서 저장하고 해당 경로를 환경변수 설정하면 됩니다. 자세한건 인터넷 확인하세요.
프로젝트 폴더에서 cmd로 해당 코드를 통해 빌드 해줍니다. 밑에 서술하지만 코드의 환경자체가 시놀로지에 맞춰져 있어서 테스트는 스킵해야한다.
mvn clean package -Dmaven.test.skip=true (테스트 스킵)
시놀로지에 도커로 Spring을 배포하기 위해 도커파일을 만듭니다. 윈도우는 WSL과 Docker Desktop이 필요합니다.
docker build -t spring-app .
로컬에서 만든 Docker 이미지를 NAS로 옮기는 방법입니다.
docker save spring-app > spring-app.tar
spring-app.tar 전송SMB, SCP, File Station 등으로 NAS에 복사합니다.
시놀로지에서 세팅해주면됩니다. Web Station을 통해 웹 포털 활성화에 체크해야합니다.
도커가 올라가면 자동으로 웹스테이션으로 가면서 포트를 물어볼 것이다. React와 통신하기 위해 8080 포트로 설정해주면된다.
이렇게 하면 리엑트 배포완료.
스프링과 My SQL 연동 완료. → 엄청 오래걸림…
mysql이 정상작동해도, spring이 sql을 못잡고 뻗습니다. 그래서 도커끼리는 통신을 못하는거 같다고 생각했습니다.
mysql을 점유 포트인 3306 포트포워딩해서 본체랑 연결되는지 확인 → 정상.
이와중에 spring에서 지정한 DATABASE(이름)todos 와 username:user, password:userpw는 동일하게 맞췄다.
그리고 mysql 기본 설정은 쿼리문을 통해 동기화해줬다. 또한 시놀로지 My SQL 버전도 똑같이 맞췄다.
추가로 Spring의 application.properties 의 SQL URL을 변경했습니다.
spring.datasource.url=jdbc:mysql://서버IP:3306/todos
근데도 안돌아가길래 프로젝트 파일에서 수정해야겠다고 생각해서 spring 설정파일에 다음과 같이 바꿨습니다. (이렇게 하면 안됨)(다른 컴퓨터에서 로그인이 안된다. 정답은 밑에 있다.)
import axios from 'axios'
export const apiClient = axios.create(
{
baseURL: 'https://서버ip:8080'
}
);
다시 빌딩하고, jar 파일 만들어서 doker에다가 포트 8080으로 올렸더니, 이제 다운되지 않지만, 웹사이트에서 로그인이되지 않는 것을 보았습니다. F12를 통해 오류코드를 보니 프론트엔드와 벡엔드가 통신을 못하는것 같았습니다.
→ 이렇게 진행된것이 다음 트러블 슈팅입니다.
먼저 Spring, React 통신을 위해 포트포워딩 8080 통신 포트 개방완료했습니다.
React의 apiclient.js 에 localhost에서 서버 주소로 입력했습니다.
import axios from 'axios'
export const apiClient = axios.create(
{
baseURL: 'https://securebigserver.synology.me:8080'
}
);
spring에서 RestfulWebServicesApplication.java 파일을 수정했다.
기존
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("http://localhost:3000");
}
};
}
변경후
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://securebigserver.synology.me")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);
}
}
그러고 나서 다시 재배포하니 다른 컴퓨터에서도 정상적으로 운영된다.
우하하하하ㅏㅏ하하ㅏㅏㅏㅏ
둘다 정상적으로 돌아가는걸 볼 수 있다.
발표자료를 작성하고 있다.
현재 완료 기술: Spring, React, REST API, My SQL, JWT, Synology
완료하여 깃허브와 발표자료까지 제출했다. 오늘은 일찍 자러가야겠다.