[SpringBoot + Nexacro] Nexacro 설치 및 프로젝트 생성과 연동
·
SpringBoot
Nexacro 공부를 위해 SpringBoot + Oracle + Nexacro 토이 프로젝트를 진행하기로 함재고 및 물품 관리 시스템으로, 현재 재고 상태를 보여주는 대시보드를 제작할 예정 기술 스택FrontendNexacro NBackendSpringBoot 3.2.5 + MyBatisDBOracle XE 21c (Docker)빌드Gradle ❗JPA가 아닌 MyBatis를 선택한 이유MyBatis는 직접 SQL문을 작성할 수 있고, DBMS별 문법을 세밀하게 제어할 수 있음또한 Oracle과의 궁합도 좋기 때문에 Oracle 공부도 더 할겸 MyBatis를 선택함 💡 Nexacro 핵심 개념Form화면 하나 = Form 하나React의 Page 컴포넌트와 비슷한 개념 Dataset화면에서 데이터를..
[트러블슈팅/SpringBoot] Nexacro Dataset 인식 안 됨
·
트러블슈팅
🎯문제1Nexacro와 SpringBoot를 연동하여 데이터를 주고 받으려는데 아래 에러가 발생함Could not write JSON: Infinite recursion (StackOverflowError)...java.lang.IllegalStateException: getOutputStream() has already been called for this response 원인아래는 내가 작성한 Nexacro 전용 Controller 코드@RestController@RequestMapping("/nexacro")@RequiredArgsConstructorpublic class NexacroDashboardController { @GetMapping("/dashboard") public Ne..
[트러블슈팅/SpringBoot] Nexacro 연동 시 발생한 의존성 문제
·
트러블슈팅
SpringBoot 3와 Nexacro N을 연동하여 transaction 통신을 구현하던 중 서버 실행 및 통신 과정에서 여러 오류가 순차적으로 발생했다.개발 환경Java 17SpringBoot 3.2.5MyBatis 3.0.3Nexacro Ngradle 🎯문제1 - javax.servlet.ServletOutputStream필요한 코드를 작성하고 SpringBoot 프로젝트를 실행했는데 아래와 같은 오류 발생Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream 원인프로젝트에 사용하기 위해 다운받았던 Nexacro uiadapter 라이브러리가 Spring Boot 2.x 환경용(javax.servlet 기반)이었기 ..
[SpringBoot] Flyway로 DB 마이그레이션 및 DDL 작성
·
SpringBoot
SpringBoot와 Oracle, MyBatis를 이용하여 재고/물품 관리 시스템을 개발하던 중, DDL 스크립트를 저장하고 관리할 필요성을 느끼게 되었다특히 MyBatis는 SQL 실행 도구로 스키마를 자동 생성해주지 않기 때문에, 테이블 생성 시 DDL 스크립트를 필수로 작성해야 함 --> Flyway가 필수적❗JPA 사용 시에도 Flyway를 사용한다JPA 사용 시 Hibernate가 테이블 생성 및 수정을 자동으로 해주기 때문에 Flyway가 필요 없다고 생각할 수 있으나, Flyway 없이 `ddl-auto` 기능만을 사용하면 테이블 변경 시 누가 언제 어떤 컬럼을 추가했는지 추적 불가함따라서 실수를 방지하고 sql 버전 관리를 위해 JPA + Flyway 조합도 많이 사용함 📌 Flyway..
[SpringBoot] Swagger를 이용한 API 문서 자동화
·
SpringBoot
SwaggerREST API를 문서화하고 테스트할 수 있게 해주는 도구/명세 API 개발 시 프론트엔드 개발자나 외부 팀에게 아래 정보를 전달해야 함요청 URLHTTP 메서드 (GET, POST 등)요청 파라미터/바디응답 형태위 내용을 수동 작성하면 코드가 바뀔 때마다 문서도 일일이 따로 수정해야 함Swagger는 이 과정을 코드에서 자동으로 생성, Controller에 작성된 내용이 Swagger UI에 자동으로 API 표시됨 Swagger UI 제공브라우저에서 시각적으로 API를 확인할 수 있는 인터랙티브 문서 페이지를 제공함http://localhost:8080/swagger-ui.html 모든 API 엔드포인트 목록 확인요청/응답 스펙 확인직접 API 호출 테스트 가능 (Postman 필요 X) ..
[트러블슈팅/SpringBoot] 415 오류: Content-Type 'application/octet-stream' is not supported
·
트러블슈팅
🎯문제게시글을 작성할 때 사용자의 로그인이 필요하도록 코드를 작성함그런데 기능 테스트 시 사용자 회원가입 및 로그인은 문제 없이 되나, 게시글 작성만 403 오류가 뜨며 진행이 되지 않음 원인403 오류가 떴으므로 인증 관련 문제일 거라고 생각했으나, 로그를 보면 다음 단계를 거치는 걸 확인할 수 있음게시글 작성 요청인증 확인415 오류 발생Spring이 /error로 POST 요청SecureConfig에서 해당 url을 처리하는 부분이 없어 403 에러 발생 즉 사용자 인증에 실패하여 403 에러가 뜨는 것이 X오류메시지를 자세히 들여다보면 아래와 같이 Content-Type 'application/octet-stream' is not supported 라는 문구가 있음Could not resolve..
[AWS] SpringBoot + AWS EC2 Ubuntu 서버 생성 및 배포
·
SpringBoot
📌AWS 준비🟨인스턴스 설정1. AWS 로그인 후 우측 상단의 AWS Region에서 지역 설정본인이 현재 위치한 지역으로 설정‼️ 인스턴스 생성 후엔 지역 바꿀 수 없으므로 반드시 미리 지역 설정 후 인스턴스 생성할 것 2. EC2 서비스로 이동 후 '인스턴스 시작' 클릭 3. 인스턴스명 작성 후 AMI(Amazon Machine Image) 설정이름은 자유 입력AMI는 Ubuntu 서버를 사용할 것이므로 Ubuntu 선택 4. 키 페어 설정💡 키 페어AWS EC2 인스턴스에 연결하기 위한 암호화 파일우측의 '새 키 페어 생성' 버튼 클릭키 페어 이름은 알아볼 수 있는 선에서 자유롭게 작성유형 및 파일 형식은 기본 설정 사용 5. 나머지 값은 기본값으로 설정 후 우측의 '인스턴스 시작' 버튼 클릭..
[AWS] RDS DB 인스턴스 생성(PostgreSQL) 및 SpringBoot 연동
·
SpringBoot
📌RDS 생성1. AWS에서 RDS 검색 후 해당 서비스로 이동 (Aurora and RDS) 2. 데이터베이스 메뉴로 이동 후 우측 상단의 '데이터베이스 생성 - 전체 구성' 버튼 클릭 3. 데이터베이스 설정엔진 옵션은 PostgreSQL로 설정템플릿은 프리티어로 설정 DB 인스턴스 이름 설정 후 자격 증명 설정마스터 사용자 이름은 자유롭게 작성자격 증명 관리는 자체 관리 설정 후 비밀번호 입력 스토리지는 기본값 그대로 설정스토리지 자동 조정 활성화 란은 체크 해제해야 과금 위험 줄어들음 4. DB 생성 완료엔드포인트 확인데이터베이스 세부 정보 > 연결 및 보안 > 다음을 사용하여 연결: 엔드포인트 5. 연결 설정초기에 외부에서 데이터베이스에 접근 가능하도록 퍼블릭 액세스를 가능하게..
[트러블슈팅/SpringBoot] WebMvcTest로 Controller 테스트 시 JwtUtil 인식 안 됨
·
트러블슈팅
문제이미지와 함께 게시글 업로드 기능 관련 테스트 코드를 작성하는데, 계속 JwtUtil을 발견할 수 없다는 에러가 뜸Caused by: org.springframework.beans.factory.UnsatisfiedDependencyExceptionError creating bean with name 'jwtAuthenticationFilter'...Caused by: NoSuchBeanDefinitionException:No qualifying bean of type 'com.ahy.diarybackend.security.JwtUtil' available 게시글 관련 controller에서 사용자가 로그인 상태일 때만 게시글이 업로드 되도록 설정해두었는데,Controller 테스트에선 JWT 검증이..
[트러블슈팅/SpringBoot] Builder 필드 초기값 누락
·
트러블슈팅
문제로그인 기능 구현 후 테스트를 진행하는데, 로그인 성공 시 반환되는 AuthResponse에서 type 값이 null로 나옴필드 초기값을 설정했는데 왜 null로 나오는지 찾아봤다원인Lombok의@Builder는 필드 초기값을 전혀 사용하지 않는다고 함아래와 같이 AuthResponse 필드에 초기값을 넣어놔도 이는 기본 생성자(new AuthResponse())를 사용할 때만 적용됨// 인증 응답 DTO@Getter@NoArgsConstructor@AllArgsConstructor@Builderpublic class AuthResponse { private String token; private String type = "Bearer"; // 초기값 설정 private Long..