[Spring] WebClient를 사용한 외부 API 통신
·
Back-end/Spring
사이드 프로젝트를 진행하며 모델 서버와의 연동이 필요했는데, Spring Boot의 WebClient 라이브러리를 사용하여 해결했었다. 제대로 공부해야 할 것 같아서 기록한다. WebClient란?Spring에서 외부 API 서버와의 통신하는 방법으로는 RestTemplate과 WebClient 두 가지 방법이 있다. 그 중 WebClient에 대해 파헤쳐보자 WebClient는 RestTemplate를 대체하는 HTTP 클라이언트이다.기존의 동기 API를 제공할 뿐만 아니라, 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능하다! WebClient는 요청을 나타내고 전송하게 해주는 빌더 방식의 인터페이스를 사용하며, 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신을 한다. (Mon..
[AWS] EC2에 MySQL 적용 및 사용하기
·
Infra & Cloud/AWS
EC2에서 MySQL을 사용할 수 있는 방법은 3가지이다.AWS RDS 사용로컬 환경에서 직접 MySQL 설치 후 사용Docker에서 DB Container image 다운로드개인 프로젝트를 하면서 2번째 방법으로 개발을 진행했었는데, EC2에서 MySQL에 직접 연결했었던 과정을 답습하고자 이 글을 기록한다. MySQL 적용 시 EC2가 생성이 되었다고 가정한다.1. EC2 인바운드 규칙 설정EC2에서 MySQL에 직접 접속하기 위해 MySQL 포트를 열어주어야 한다. EC2 > 보안 그룹(사용 중인 보안 그룹의 이름을 모른다면, 사용 중인 EC2의 요약 페이지로 들어가 하단의 '보안' 탭에서 확인할 수 있다.) 인바운드 규칙 편집  아래와 같이 규칙을 추가하고 저장한다. HTTP, SSH, 사용자 서..
[AWS] S3 이미지 업로드 및 EC2 연결하기
·
Infra & Cloud/AWS
Simple Storage Service (S3)란?사진, 동영상 등 파일을 저장하기 위해 사용하는 파일 서버 서비스. S3의 버킷에 파일을 업로드 하면, URL로 파싱되어 사용자가 이용할 수 있는 서비스이다.서버에 이미지나 파일 등을 업로드 할 때 로컬 서버에 저장할 경우 데이터가 쌓이다 보면 언젠가 용량이 초과되겠지? 따라서 S3를 사용하면 좋은 점은 다음과 같다.1. 확장성(Scalability)파일 서버는 트래픽이 증가함에 따라 서버 인프라 및 용량 계획을 변경해야 되는데, S3가 확장 및 성능 부분을 대신 처리해준다. 2. 내구성(Durability)여러 영역에 여러 데이터 복사본을 저장하므로 한 영역이 다운되더라도 데이터를 사용할 수 있고, 복구가 가능하다. 이를 Spring 환경에서 적용해보..
[Spring] Swagger 사용 및 JWT과 https 적용해보기
·
Back-end/Spring
1. Swagger란?Swagger는 개발한 Rest API를 문서화 한다.문서화된 내용을 통해 관리 & API 호출을 통한 테스트를 가능하게 해준다. 2. swagger 적용하기build.gradleimplementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' springfox 말고 현재 꾸준히 업데이트가 진행 중인 springdocs 버전을 사용하여 swagger를 구현하였다.springDoc 공식 문서에 따르면, Spring Boot v3 (Java 17 & Jakarta EE 9)을 사용하기 위해선 위 dependency를 사용해야 한다. Spring Boot 3 지원을 위해 springdoc-openapi v2를 사용해야 하기 ..
[Spring] data.sql을 사용하여 서버 실행 시 데이터 삽입하기
·
Back-end/Spring
흔히 서버를 실행할 때 DB에 더미 데이터가 있으면 좋겠다는 생각을 하곤 한다. 매번 컨트롤러에서 직접적으로 넣어주는 방식으로 테스트를 진행했었지만, 더 좋은 방법이 있었다. jpa의 ddl-auto: create 옵션 설정으로 entity 생성하고 추가적인 ddl 스크립트를 만들어서 서버가 시작함과 동시에 데이터를 삽입하는 것! data.sql을 통해서 dml 작업을 진행해보도록 하겠다!  1. application.yml 수정먼저 data.sql을 사용하기 위해선 반드시 jpa.ddl-auto 속성값으로 create 또는 create-drop 으로 선언해야 한다! spring: jpa: database: mysql hibernate: ddl-auto: create # cre..
[Spring] JPA "Row size too large" 문제 분석하기
·
Back-end/Spring
간혹 가다가 Entity String Type의 속성 길이를 디폴트보다 길게 하고 싶을 때 다음과 같이 하는 경우가 있을 것이다.  Document entity의 content의 길이가 늘어나는 것을 대비해, @Column 어노테이션의 length = 50000으로 하여 길이를 늘리고 실행을 해보면 다음과 같은 에러가 발생한다engine=InnoDB" via JDBC [Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or B..
[Spring] CORS-safelisted response header 문제 해결하기
·
Back-end/Spring
문제 상황2024-1 알파프로젝트 진행 중에 프론트엔드 측에서 다음과 같은 문제 상황을 브리핑 해주었다. 현재 Spring Security를 통해 CORS를 허용해준 상황이었음에도 불구하고 CORS를 해결해달라는 요청이 들어왔다. 문제 상황을 요약하자면 브라우저의 개발자 도구를 통해 페이로드를 확인해보니 사용자가 직접 추가해준 헤더를 확인할 수 있는데, 프론트(React.js)에서는 추가한 헤더만 접근이 불가능했다. 즉, Authorization이 보이지 않았던 것! 이유이유는 바로 CORS-safelisted response header라는 것 때문이었다. 이 CORS-safelisted response header 에 해당하는 헤더는 CORS 응답인 경우에서 클라이언트의 스크립트에 노출되어도 안전..
[AWS] EC2에서 https 프로토콜 적용하기
·
Infra & Cloud/AWS
문제 상황프론트에서 배포 후 https 프로토콜을 사용하는 클라이언트가 현재 http를 사용 중인 서버에 요청을 보내는데 에러가 발생했다. http 80 포트에 접속하려는데, https 443 포트와의 충돌로 인한 문제였다. 이를 Mixed Content Error라고 한다.  이를 해결하기 위해, 클라이언트 딴에서 프록시 서버를 사용하거나 (react 환경 :  http-proxy-middleware) 서버에 SSL 인증서를 통한 https 프로토콜을 적용해야 한다. AWS Route 53으로 사용하면 쉽겠지만 어느 개발자님의 블로그를 참고하여 Nginx와 SSL 인증서를 통해 ec2에 적용해보도록 하겠다. 참고로, EC2에서 docker를 이용하여 빌드 파일을 다운로드하는 방식을 사용해도 똑같이 적용..