[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를 이용하여 빌드 파일을 다운로드하는 방식을 사용해도 똑같이 적용..
[Spring] JPA 동적 네이티브 쿼리, 제대로 알고 사용하자
·
Back-end/Spring
문제 상황프로젝트를 수행하면서 다음과 같은 상황이었다. cafe, beverage, document 세 엔티티에 대해 cafe : beverage = 1 : n 관계였으며, beverage : document = 1 : 1 관계를 갖는다. 세 개의 엔티티를 조인하고 특정 컬럼만 뽑아내기 위해 직접 CafeRepository에 다음과 같이 nativeQuery를 날린 상황이었다.package com.alpha.DLINK.domain.cafe.repository;import com.alpha.DLINK.domain.cafe.domain.Cafe;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data..
[Next.js] 2. Routing에 대하여
·
Back-end/Next.js
이전에 next.js 프로젝트 생성 후 구조를 분석하는 글을 포스팅했다. 이번에는 Routing에 대해서 공부해보도록 하겠다. [Next.js] 1. Next.js 시작하기내가 몸 담고 있는 국민대학교 소프트웨어융합대학 웹 학술 동아리 대WINK의 공식 홈페이지 만들기에 사용된 Next.js spring이랑 express.js만 해봤기 때문에 typescript나 react에 대한 선수 지식이 없어서sksmsfbrjs51.tistory.com 1. Routing 구조- Nested Routing (중첩 경로)원하는 엔드포인트를 설정하기 위해 directory/directory 구조로 중첩하여 생성하는 것이다. 중첩 경로에서는 세그먼트의 구성 요소 가 상위 세그먼트의 구성 요소 내에 중첩된다.- Dynam..