🛠️Backend35 [Spring Boot] Spring Boot & React 프로젝트 연결하기 개요프로젝트를 배포하면서 또다시 서버를 화면과 함께 배포해야되는 상황이 생겼다. 이전에 작성했던 게시글보다 더 쉬운 방법을 찾아서 기록해보려 한다. https://tlseoqja.tistory.com/184 [Spring Boot] Spring Boot & React 프로젝트 연결하기개요이전에 만들었던 서버를 화면과 함께 배포해야 되는 상황이 발생했다. 서버는 Spring Boot를 사용했고 화면은 React를 사용했다. 두 프로젝트를 합쳐서 배포한 작업을 기록으로 남긴다. 리액tlseoqja.tistory.com 리액트 프로젝트 빌드먼저 만들어놓은 리액트 프로젝트를 아래의 명령어를 입력해서 빌드한다.# npm 사용 시npm run build# yarn 사용 시yarn build 빌드가 완료되면 프로.. 🛠️Backend/Spring 2025. 4. 11. [Spring Rest Docs] Fields with the following paths were not found in the payload 에러 상황Spring Rest Docs를 사용해서 테스트를 진행하던 중 오류가 발생했다. 에러 코드Fields with the following paths were not found in the payload 해결 방법fieldWithPath 사용 시 테이블 컬럼의 데이터가 비어있거나 null 값이 있는 경우 optional 처리를 해줘야 한다.// 기존 코드fieldWithPath("list[].car_number").type(JsonFieldType.STRING).description("차량 번호")// 변경 코드fieldWithPath("list[].car_number").type(JsonFieldType.STRING).description("차량 번호").optional() 🛠️Backend/오류해결 2025. 1. 8. [Spring Boot] 사용자가 접속한 IP 알아내기 개요서버 내부에 저장된 이미지 경로를 반환하는 API를 생성했다. 하지만 외부망에서 접속 시 해당 이미지를 불러올 수 없었다.http://192.168.0.100/imgs/img1.png ❌ 해결 방안HttpServletRequest의 getHeader("Host") 함수를 사용하면 사용자가 접속한 IP의 주소를 받아올 수 있었다.@PostMapping("/get/host")public void getHost(HttpServletRequest request) { String host = request.getHeader("Host"); // Host: 192.168.0.100 System.out.println("Host: " + host);} 이전 코드@Value("${local.host}").. 🛠️Backend/Spring 2024. 12. 27. [Thyme Leaf] org.thymeleaf.exceptions.templateinputexception: error resolving template 오류 에러 상황프로젝트를 다른 직원과 협업으로 진행하게 됐고 웹 사이트를 Thyme Leaf로 만들게 됐다. 로컬 서버에서는 잘 접속되던 사이트가 AWS 서버에 올린 후 접속 시 403 에러가 발생했다. 에러 코드org.thymeleaf.exceptions.templateinputexception: error resolving template... 해결 방법해당 에러는 타임리프에서 지정된 경로의 템플릿을 못찾으면서 발생한 오류이다. 그래서 두 가지 작업을 해주었다. 1. @GetMapping의 value 값의 맨 앞 "/" 제거@GetMapping("/index") // ❌@GetMapping("index") // ✅ 위와 같은 value 값을 설정하면 타임 리프에서 절대 경로를 찾기 때문에 localho.. 🛠️Backend/오류해결 2024. 12. 20. [Firebase] Requested entity was not found. 개요기존 로직에서 Firebase의 전체 알림을 sendEachForMulticast() 함수로 전송하고 있었다. 하지만 사용자 별로 데이터를 다르게 전송해줘야 하는 상황이 생겨서 send() 함수로 메시지 객체를 전송했다. 해당 코드를 수정한 후 알림을 전송했을 때 'Requested entity was not found' 에러가 발생했다. 원인발생한 에러 메시지는 아래와 같았다.Requested entity was not found. 해당 에러의 발생 원인은사용자가 해당 앱을 삭제했을 때사용자가 앱의 FCM 푸시 알림을 비활성화 했을 때FCM 서버에서 디바이스 등록을 해제했을 때디바이스와 FCM 서버의 연결이 끊겼을 때위 4가지 원인이 있었다. 필자의 경우 이전에 테스트했던 앱을 삭제하면서 해당 에.. 🛠️Backend/오류해결 2024. 11. 12. [Spring Boot] Spring Boot & React 프로젝트 연결하기 개요이전에 만들었던 서버를 화면과 함께 배포해야 되는 상황이 발생했다. 서버는 Spring Boot를 사용했고 화면은 React를 사용했다. 두 프로젝트를 합쳐서 배포한 작업을 기록으로 남긴다. 리액트 프로젝트 추가 및 폴더 위치Spring Boot 프로젝트 내에서 리액트 프로젝트 폴더의 위치는 다음과 같다. 기존 서버 프로젝트의 main 폴더 아래에 넣어주었다. 만약 기존에 생성했던 리액트 프로젝트가 없다면 터미널에서 해당 위치에 리액트 프로젝트를 생성해주면 된다. Proxy 설정CrossOrigin 에러를 방지하기 위해 리액트 프로젝트에서 Proxy를 설정해준다. 필자의 경우 서버에서 CrossOrigin 에러 처리를 하고 있었어서 리액트에서 따로 proxy 설정은 하지않았다. 만약 필요하다면 다.. 🛠️Backend/Spring 2024. 10. 30. [Spring Boot] redirect 처리 (feat. RestTemplate, HttpServletRequest, @RequestBody) 개요이전에 만들었던 프로젝트의 API path를 변경해야 하는 상황이 발생했다. 하지만 이미 배포를 진행한 프로젝트였기 때문에 기존의 path가 호출되더라도 동일한 응답을 줘야만 했다. 작성했던 Service의 로직을 그대로 호출하는 방법도 있지만 동일한 코드를 호출하는 것은 비효율적이라고 생각했다. 따라서 redirect로 호출된 path의 마지막 부분과 동일한 API를 호출하는 코드를 작성하기로 했다. RestTemplate"redirect:/path" 로 변경된 path 를 호출하는 방법도 있지만 성능 저하 및 코드의 복잡성 증가 이슈가 있었다. 그래서 RestTemplate 라이브러리를 사용해서 직접 API를 호출하는 방법을 택했다. RestTemplate는 Spring Boot 2.4 버전 이.. 🛠️Backend/Spring 2024. 10. 22. [JWT] java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 에러 상황로그인 API를 호출하여 성공 시 JWT를 발급하는 로직을 구현하던 중 다음과 같은 에러가 발생했다. 에러 코드java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 해결 방법Spring Boot 프레임워크 사용 시 해당 dependency를 추가로 설치해주면 에러가 해결된다.implementation 'javax.xml.bind:jaxb-api:2.3.0' 참고 사이트https://jminie.tistory.com/123 JDK 11에서 java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 에러🚨 에러 발생 로그인 API에서 JWT를 이용해서 회원 인증을 구.. 🛠️Backend/오류해결 2024. 8. 20. [Java] Netty를 사용하여 간단한 Echo 서버 및 클라이언트 구현 Netty 란?고성능 네트워킹 애플리케이션을 제작하기 위한 자바용 고급 프레임워크이다. 단일 API로 블로킹과 논블로킹 방식의 여러 전송 유형을 지원한다. 그리고 사용 방법이 간단하며 추가 의존성 없이 netty 라이브러리만을 설치하여 사용할 수 있다. 무엇보다 코어 자바 API보다 높은 처리량과 짧은 지연 시간, 리소스 소비 감소, 메모리 복사를 최소화한다는 장점이 있다. 준비하기Netty를 사용하기 위해 의존성을 추가해준다. 필자는 Gradle을 사용해서 아래 의존성을 build.gradle에 추가했다.implementation 'io.netty:netty-all:4.1.109.Final' Echo Server네티 서버 구성 시 다음 항목이 필요하다. • ChannelHandler - 클라이.. 🛠️Backend/JAVA 2024. 7. 24. [IntelliJ] The file size exceeds the configured limit. 에러 상황프로젝트를 진행하며 google protobuffer를 사용했고, protobuf 파일 호출 시 빨간색 밑줄이 그어졌다. 그리고 창 위에 다음과 같은 경고 메시지가 나타났다. 에러 코드The file size (MB) exceeds configured limit (2.56 MB). Code insight features are not available. 해결 방법IntelliJ config에서 설정한 최대 파일 사이즈를 초과해서 발생하는 오류이다. 메뉴의 [도움말] > [사용자 지정 프로퍼티 편집...] 을 누르면 idea.properties 파일 창이 열린다. 아래의 코드를 추가 및 저장한 후 IntelliJ를 재시작하면 재빌드 후 소스 코드가 제대로 적용되게 된다.idea.max.inte.. 🛠️Backend/오류해결 2024. 7. 24. [Java] 순수 자바 프로젝트에서 MS-SQL 연결하기 개요새 프로젝트를 하면서 Spring Boot를 사용하지 않고 프로젝트를 진행하게 됐다. Spring Boot를 사용하지 않은 이유는 단순히 TCP/IP 통신 및 DB 만을 사용하는 프로그램에서 굳이 무거운 Spring Boot를 사용하지 않아도 된다고 판단했기 때문이다. 많은 래퍼런스가 없었기에 진행하면서 적용한 코드를 정리해보려고 한다. gradle 의존성 추가mssql을 사용하기 위해서 build.gradle 파일에 의존성을 추가했다.implementation 'com.microsoft.sqlserver:mssql-jdbc' 하지만 정상적으로 빌드되지 않았고, jre 버전과 맞는 버전을 추가해주니 정상적으로 의존성이 추가됐다.implementation 'com.microsoft.sqlserver:.. 🛠️Backend/JAVA 2024. 7. 17. [IntelliJ] error: unmappable character (0xEB) for encoding x-windows-949 에러 상황IntelliJ로 프로젝트를 진행하는 도중 한글로 입력한 주석에서 오류가 발생했다. 에러 코드error: unmappable character (0xEB) for encoding x-windows-949 해결 방법한글 인코딩 문제로 인해 빌드 시 오류가 발생했다. 설정 후 IntelliJ 캐시 무효화 및 재실행을 해주면 오류가 해결된다. 1. [파일] > [설정] > [에디터] > [파일 인코딩] 2. [도움말] > [사용자 지정 VM 옵션 편집...] > 코드 추가-Dfile.encoding=UTF-8-Dconsole.encoding=UTF-8 3. [파일] > [캐시 무효화] > [파일 시스템 캐시 및 로컬 기록 지우기 체크] > [무효화 및 다시 시작] 클릭 위 방법으로 해결이 안.. 🛠️Backend/오류해결 2024. 7. 17. 이전 1 2 3 다음