Spring

[Spring]6. Spring Boot&React 연동

CodeJaram 2023. 9. 20. 08:49

Spring_06_Spring Boot&리액트 연동

 

[sqlDeveloper에서 mysql 사용하기]

  • Mysql Community 다운로드-sqlDeveloper 폴더에 넣기

https://dev.mysql.com/downloads/connector/j/8.0.html

 

 

[sqlDeveloper]

  • Oracle 환경설정-데이터베이스-타사 JDBC 드라이버-항목추가-Mysql.jar파일 선택

*mysql 파일 경로: C:\Users\smhrd\Desktop\sqldeveloper-23.1.0.097.1607-

no-jre\sqldeveloper

 

  • MySQL로 데이터베이스 접속

 

  • 데이터 베이스 선택

  • Player 테이블 생성

  • 선수정보 삽입

 

[Spring Boot]

  [PlayerController]

  • @RestController로 Mapping: view로 리액트를 사용하기 때문에 데이터만 응답

  • PlayerService 호출, PlayerList 호출

 

 [PlayerService]

  • @Service mapping

  • PlayerMapper 선언

 

  [PlayerMapper.interface]

  • PlayerList 추상메소드 만들기: select의 결과값 List<Player>

 

 [PlayerMapper.xml]선수정보 전체 조회

  • mapper를 찾는 namespace: Mapper의 경로 작성
  • Player 전체조회: id값 메소드이름, resultType Player entity

 

 [Player]선수정보 entity

  • Mysql에서 생성한 테이블 컬럼과 동일하게 필드 생성

  • lombok으로 생성자 만들기

 

  • 선수 이미지 static 폴더에 넣기

 

[com.smhrd.player.converter]

  • 이미지를 byte 문자열로 변환하는 패키지

 

 

 [PlayerImageConverter.interface]

  • 이미지 데이터를 byte 문자열로 변환하기 위해 필요한 추상메소드 상속하게 하는 클래스
  • 타입 지정 <F,S>: F(실제 파일), S(byte 문자열)

  • 매개변수는 F(파일)로 지정하고, 타입은 S(byte 문자열)인 추상메소드 : 예외처리 추가

 

  [ImageToBase64]이미지 파일을 byte 문자열로 변환

  • 이미지 파일을 byte 문자열 형태로 변환할 때 base64(이미지 기본 인코딩 방식)를 활용하여 인코딩하는 클래스
  1. 파일 가져오기: Commons IO 라이브러리

 

  • Commons IO 라이브러리(2.11.0) [pom.xml]에 추가하기

  • readFileToByteArray: 파일을 byte 형태로 읽는 메소드

 

 

 2. base64로 byte 배열을 문자열로 인코딩: 인코딩한 결과값을 Controller로 반환

 

 

 [PlayerService]데이터 가공하기: 파일이름→실제 파일→byte 문자열→JSON 파일

  • ImageToBase64 객체 호출

 

 

  • Mapper에서 가져온 선수정보 리스트를 JSON으로 변환하기

 

  (1)파일이름을 실제파일로 바꾼 후 byte 문자열로 변환하기: for-each문을 사용

 

   ①파일 이름 불러오기: classpath(src/main/resource 경로)/폴더경로/파일경로

  • 파일경로: 선수정보리스트에서 ImgSrc 속성 가져오기(getImgSrc())

 

 

  ②실제 파일 불러오기

  •  Autowired 방식으로 resourceLoader(파일 읽는 객체) 호출하기
  • resourceLoader객체를 통해 기존에 구한 파일경로에 있는 실제 파일 불러오기

 

 

③converter(ImageToBase64)를 통해 이미지 파일을 byte 문자로 변환

  •  resourceLoader를 통해 불러온 파일을ImageToBase64의  converte 메소드로 변환하기
  • try-catch문으로 오류에 대한 설정하기

 

 

   (2)선수정보 ImgSrc 필드값 변경: setter을 이용하여 byte문자열로 변환된 값으로 필드값 변경

 

  (3)byte 문자열 형태를 JSON 형태로 변환하기

 

  • JSON.simple 라이브러리 설치: JSON.simple(1.1.1) [pom.xml]에 추가

 

  • JSONArray 객체 호출하기

 

  • JSONArray에 byte 문자열 형태로 변환한 이미지가 담긴 선수정보 리스트 추가하기

 

  • 변환된 이미지 데이터가 담긴 JSON 객체 return

 

[PlayerController]리액트로 JSON 응답하기

  • Service에서 리턴한 JSON 파일을 리액트 서버로 전송하기

-RequestMapping 주소값을 통해 리액트에서 JSON 파일을 응답받을 수 있음

 

 

 

  • 리액트 서버 거절된 경우 CrossOrigin으로 리액트 서버 허용하도록 설정

 

(JSON 요청결과)

 


  1. Spring에서 보낸 이미지 데이터 받기

[React]

[Player.jsx]

  • Axios 비동기통신으로 Spring RequestMapping 주소값에 접근하기
  • 통신 성공 시 Spring에서 응답한 선수정보(res.data)를 선수리스트 state에 저장하기

(console창)React 서버로 받아온 선수정보리스트 확인

 

[List.jsx]

  • Spring에서 보낸 byte 문자열로 변환된 이미지 데이터를 출력

 

(리액트 화면)선수정보리스트 메인

 

2. Spring으로 선수의 이름데이터 보내기

[React]

[Item.jsx]

  • Spring으로 선수프로필 정보를 출력하기 위한 주소값에 이름보내기

 

[Spring]

  • React에서 해당 주소값을 요청했을 때 보낸 이름을 매개변수로 받아오기

 

[React]

[detail.jsx]

  • Spring에서 보낸 선수이미지 받아오기

(선수개인 프로필)

 

3. Spring에서 React에서 보낸 이름에 해당하는 선수정보만 보내기(JsonObject)

 

[PlayerController]

  • PlayerService로 name 전송하기

 

[PlayerService]

  • Mapper로 name 전송하기

  • ImagetToBase64 객체 호출하기
  • Mapper에서 가져온 선수정보 JSON으로 변환하기

 

1)Player entity에서 ImgSrc 가져오기

2)resourceLoader로 실제파일로 불러오기

 

3)converter로 이미지를 byte 문자열로 변환하기

 

4)byte문자열로 변환된 값으로 ImgSrc 필드값 변경하기(setter)

 

5)JsonObject에 이미지경로가 byte문자열로 변환된 선수정보 담고 return하기

 

'Spring' 카테고리의 다른 글

[Spring]7. 게시판 실습  (0) 2023.09.21
[Spring]5. Spring Boot  (0) 2023.09.15
[Spring]4. Ajax 비동기 통신  (0) 2023.09.14
[Spring]3. Spring Legacy 템플릿  (0) 2023.09.11
[Spring]2. 게시판 조회 및 삭제 실습  (0) 2023.09.09