서론 이전 프로젝트를 thymeleaf 기반으로 개발해서 그런지 데이터를 view에 직접 뿌려줬다. 그러다 보니 백엔드는 진짜 백엔드 답게 api를 열어놓고 프론트가 직접 호출하는 정석 프로젝트를 개발하고 싶은 마음이 생겼다.
react는 react만의 ide가 따로 있는 줄 알았는데 대부분 vscode에서 사용한다고 한다. 난 백엔드와 병행할 것이기 때문에 인텔리제이에서 다운 받았다.그전에1\. Node.js 설치https://nodejs.org/en위의 링크에서 Node.js를
React는 포트가 3000이고 Springboot는 8080이기 때문에 포트 번호를 맞춰줘야 한다. React 설정 Axios 설치 Axios는 브라우저와 Node.js를 위한 Promise 기반의 HTTP 클라이언트이다. React와 같은 프론트엔드 라이브러리 혹
클라이언트 작업을 했을 때 가장 먼저 겪은 에러는 CORS 에러였습니다. 제 머리속에 강하게 박혀 대체 이 CORS가 뭔지에 대해 알아보려 합니다. CORS란?교차 출처 리소스 공유(Cross-origin resource sharing, CORS), 교차 출처 자원 공
Dockerfile은 Docker 컨테이너 이미지를 생성하기 위한 설정 파일입니다. 각 Dockerfile은 일련의 명령어와 지시문으로 구성되어 있으며, 이를 통해 어떤 소프트웨어와 설정을 포함한 컨테이너를 만들지 정의합니다. 자신의 프로젝트의 root 디렉토리에 fi
Jpa를 쓰다 보면 N+1문제를 신경 쓰지 않을 수 없습니다. 흔히 N+1 문제는 조회에서 많이 발생하는데요. 일반적인 N+1 문제는 FetchType.EAGER를 사용했을 때의 문제를 말합니다. 하지만 이번에 소개드릴 문제는 조회 로직에서 잘못된 반복문 사용으로 인한
전 API 반환타입을 대부분 DTO를 따로 만들어서 지정합니다. 때문에 DTO 내부에 Entity To Dto 메소드를 만들어 놓습니다. 여기서 list에 대한 처리를 할 때 주의사항을 몇 가지 소개하겠습니다.Entity에서 List는 대부분 ManyToOne 관계의
리펙토링 계기 이제 어플리케이션을 어느 정도 만들 줄 알고 필수적인 아키텍처들에 대해 구현 정도는 알 줄 알게 되었습니다. 구현에만 집중하다 보니 해당 스택에 대해 제대로 아는 것도 없고 코딩 상태도 엉망이라는 느낌을 받았습니다. 아키텍처를 깊게 파는 것 보다는 기본
어노테이션을 생성하는 도중에 Attribute value must be constant 이런 에러가 떴습니다.Enum으로 이름들을 관리하는데 대체 뭐가 문제일까요?Attribute value must be constant를 직역하면 "속성값은 상수여야 한다" 입니다.
예전에 했던 소셜로그인 부분을 리펙토링 하려다 보니 내용을 까먹어서 복기할 겸 포스팅을 하려고 합니다. 참고 자료 링크 : https://www.youtube.com/playlist?list=PLJkjrxxiBSFALedMwcqDw_BPaJ3qqbWeB 이 분의 강
프로젝트의 규모가 커지면서 점점 파일이 쌓여가고 있다. 복잡한 디렉토리 구조가 거슬리때 쯤 https://cheese10yun.github.io/spring-guide-directory/ 이 글을 보게됐다.src/└── main/ └── java/
Service를 리펙토링 하던 중 No EntityManager with actual transaction available for current thread - cannot reliably process 'merge' call 에러를 발생했고 해당 에러는 @Trans
이제까지 무분별하게 Cascade 설정을 해왔는데 리펙토링을 하며 Cascade를 할 때 객체의 설계 방식에 맞게 설정해줘야 한다는 것을 깨닫게 되어 포스팅 하게 됐습니다.Member : 사이트의 회원SummonerInfo : 게임 플레이어 정보Match : 경기 정보
회원의 최신 20경기 만을 관리합니다. 때문에 갱신할 때 MatchList를 항상 최신 경기로 update해야 합니다. 이 update 방식에 대한 고찰을 소개합니다.기존 MatchList에서 update해야 할 index 범위를 찾고 delete한 후 새로운 Matc
초기에 구축된 소환사 정보 관리 시스템에서 callSummonerInfo라는 메서드는 회원 가입과 정보 갱신 시 중복 코드를 줄이기 위해 동일하게 사용되었습니다. 이 메서드는 if-else 구문을 사용하여 회원 가입과 정보 갱신을 구분했습니다. 회원 가입 시에는 rio
SummonerInfo를 저장하기 위해 save()를 호출했는데 연관관계인 match를 select 하는 현상이 발생했습니다. 불필요한 쿼리를 해결하기 위해 원인을 파악하기로 했습니다.CrudRepository의 save를 SimpleRepository에서 구현JPA에