[SpringBoot] Jenkins + Docker로 빌드 및 배포 자동화
·
SpringBoot
현재 백엔드는 EC2 서버에서, 프론트엔드는 Vercel로 배포되어 있음전체 자동화 구조[개발자]git push↓[GitHub]├── 프론트엔드 레포 push → Vercel 자동 배포 (자동)└── 백엔드 레포 push → Jenkins Webhook 트리거↓Docker 이미지 빌드↓EC2에 컨테이너 재시작 📌1. EC2 보안 그룹 설정Jenkins 웹 UI 접속을 위해 EC2 보안 그룹에서 포트를 열어야 함 AWS --> EC2 --> 보안 그룹 --> 인스턴스에 적용한 보안 그룹 선택 --> 인바운드 규칙 편집Jenkins 포트번호 추가 (기본 8080)이때 포트번호가 백엔드와 겹치면 다른 포트번호로 변경 (e.g. 9090) 📌2. EC2에 Jenkins, Docker 설치java는 이미 설치..
[트러블슈팅/Jenkins] Jenkins 파이프라인 빌드 중 EC2 서버 성능 저하
·
트러블슈팅
🎯문제Jenkins를 이용해 빌드 및 배포 자동화를 진행하려는데, 생성한 젠킨스 파이프라인을 빌드하면 EC2 서버가 엄청 느려지며 뭘 진행할 수가 없었다. 젠킨스 대시보드 화면 어디를 눌러도 로딩만 계속 될 뿐 이동이 안 되고, 빌드 현황도 업데이트가 안 됐음. cmd 창에서 명령어를 입력하는 것조차도 너무 느려져(타이핑 자체가 안 먹음) 할 수가 없었다 원인서버를 강제 중지하고, 추후에 젠킨스 파이프라인 마지막 빌드의 Console Output을 확인하니, 로그 중간에 이런 내용이 있었음Downloading https://services.gradle.org/distributions/gradle-9.2.1-bin.zip............10%.......Resuming build at Wed Jul..
[트러블슈팅/Jenkins] stderr: Load key "~": error in libcrypto
·
트러블슈팅
🎯문제jenkins에서 파이프라인을 생성하고 테스트를 진행했는데 실패가 뜨더니 아래 오류 메시지가 떴다.stderr: Load key "~": error in libcrypto 원인Jenkins Credential로 등록된 SSH 키 포맷을 libcrypto가 파싱하지 못했기 때문내가 겪은 원인은 두 가지였다.키가 OpenSSH 포맷(-----BEGIN OPENSSH PRIVATE KEY-----)인데, Jenkins가 사용하는 libcrypto(OpenSSL) 버전이 이 포맷을 제대로 파싱 못하는 경우키의 시작과 끝을 알리는 -----BEGIN ~ -----, -----END ~-----을 입력 안 한 경우 해결1. 키를 PEM(RSA traditional) 포맷으로 변환ssh-keygen -p -m..
[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. 나머지 값은 기본값으로 설정 후 우측의 '인스턴스 시작' 버튼 클릭..