[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 응답인 경우에서 클라이언트의 스크립트에 노출되어도 안전..
[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..
[Next.js] 1. Next.js 시작하기
·
Back-end/Next.js
내가 몸 담고 있는 국민대학교 소프트웨어융합대학 웹 학술 동아리 대WINK의 공식 홈페이지 만들기에 사용된 Next.js spring이랑 express.js만 해봤기 때문에 typescript나 react에 대한 선수 지식이 없어서 어려울 것 같다... 처음 다뤄보기 때문에 기초부터 차근차근 다뤄보자1. Next.js란?Next.js는 풀스택 웹 애플리케이션을 구축하기 위한 React 프레임워크이다. React 구성 요소를 사용하여 사용자 인터페이스를 구축하고 Next.js를 사용하여 추가 기능과 최적화를 수행할 수 있다. 2. Next.js 시작하기다음 명령어로 프로젝트를 생성할 수 있다.npx create-next-app@latest 이 방식은 react, react-dom, next 라이브러리를 자..
[2023-2 WINK Project] 2. MongoDB 사용하기
·
Back-end/Node.js
1. MongoDB 설치하기https://mongodb.com/try/download/community위 링크에서 다운로드 가능하다.설치 중 다음과 같은 화면에서 해당 박스에 체크를 하지 않고 Next를 누른다.설치 이후 중요한 단계를 거쳐야 한다.바로 서버를 실행하기 전에 데이터가 저장될 폴더(C:\data\db)를 먼저 만들어야 한다.터미널에서 몽고디비를 실행할 수 있는 MongoSh(몽고쉘)을 설치해야 한다.https://mongodb.com/try/download/shell 2. MongoDB 연결하기몽고쉘을 설치한 이후 터미널에서 $ mongosh 을 입력하면 몽고디비에 접속할 수 있게 된다.그럼 프롬프트에서 test> 로 바뀌게 되는데, 맨 처음 누구나 몽고디비에 접속할 수 있으므로 관리자 계..
[2023-2 WINK Project] 1. Express 시작하기
·
Back-end/Node.js
1. 프로젝트 시작프로젝트 시작 시 패키지 정보들을 저장해야 하기 위한 기록을 남겨야 한다npm init터미널에서 위 코드 실행 시 만들고자 하는 앱의 정보들을 기입할 수 있다.2. 패키지 설치npm i [패키지명]현재 진행하는 프로젝트에서는 express, express-session, morgan, dotenv, cookie-parser, passport, nodemon 모듈을 사용하고 있다.express-session : express에서 세션을 관리하기 위한 모듈morgan : 로깅을 관리해주는 모듈GET /favicon.ico 500 6.647 ms - 26dotenv : 오픈 소스에 코드를 올릴 때 노출되면 안되는 값들을 .env 파일에 모아두기 위한 모듈cookie-parser : 쿠키 관리..