문제 상황 관리자가 유저요청기록 페이지에 들어가면 전체 데이터를 가져와서 화면에 보여주게 된다.ApiRequesHistory에는 요청 기록이 담겨있고, Member와 1:1 관계를 가져서 누가 어떤 요청을 날렸고 어떤 응답을 받았는지 기록하게 된다. 조회 쿼리를 살펴보면 이렇게 쿼리가 날아가는데 실제 응답 DTO에서는 Member에 관한 데이터는 email 말고 사용하지 않는다.즉 9개의 데이터 중 1개만 필요한 상황인데 DB에서 과하게 부르고 있는 문제가 있다. 데이터가 하나라면 상관없지만 더미데이터를 75만 개 넣어뒀으니 불필요한 데이터 호출이 배로 늘어나고 있는 상황. 해결 방법 그래서 DB에 받는 데이터를 DTO에 직접 담아주려고 한다. 아래거 현재 작성된 쿼리문이다.List results = q..
문의 사항에 답변을 다는 로직을 진행하는데 문제가 발생했다.여기서 답변을 작성하고 답변하기를 누르면 작성까지 3~4초의 시간이 걸리게 된다. 그 이유는 컨트롤러의 로직이 아래처럼 작성되어 있기 때문이다.// 답변 등록 @PostMapping("answers") public ResponseEntity> createAns..
내 서비스는 소셜 로그인, 자체 로그인 2가지가 존재한다. 소셜 로그인의 경우 회원 탈퇴를 진행할 때 비밀번호 입력이 필요하지 않다.반면에 자체 로그인의 경우 비밀번호 입력이 필요하다. 그래서 로그인하면 유저 정보를 가져올 때 소셜 유저인지 판단해서 Pinia에 저장해 두었다.const social = computed(() => store.social); 그리고 먼저 소셜 유저면 true를 리턴하고 소셜 유저가 아니면 비밀번호 입력칸 체크부터 진행했다.// 비밀번호 입력 확인 -> 모달 띄우기const checkInput = () => { if (social.value) { showModal.value = true; return; } if (password.value.length ==..
트랜잭션 하나 이상의 항목에 대한 작업의 집합을 의미한다. 아이템을 구매하는 예시를 하나 들어보자. 유저가 상대방에게 아이템을 구매하는 시나리오는 아래와 같다. 1. 유저의 골드 차감2. 상대방의 아이템 제거3. 유저에게 아이템 제공4. 상대방에게 골드 제공 즉 1, 2, 3, 4의 경우에서 하나라도 빠지면 아이템 구매를 하는 데 버그가 발생할 수 있다. 즉 각각의 작업으로 존재하지만 묶음으로 처리가 되어야 하는 작업을 의미한다. 1번 API 전송 -> 2번 API 전송 -> 3번 API 전송 -> 4번 API 전송 이렇게 해도 동작만 한다면 문제가 발생하지 않는다. 그러나 묶음으로 처리가 되어야 하는 성격을 가진다면 하나의 API에서 1, 2, 3, 4번의 작업을 수행해서 리소스를 절약할 수 있다는 특..
SOP 정책 (동일 출처 정책) Same-origin policy라고 부르며 말 그대로 동일한 출처의 리소스만 상호작용을 진행하겠다는 의미.서로 소통하려는 두 URL의 프로토콜, 호스트, 포트가 모두 같아야 동일한 출처로 인정하게 된다. 즉 아래 두 개의 주소는 프로토콜, 포트가 동일하지만 호스트의 이름이 달라서 상호작용이 불가능하다. 이때 데이터를 요청하면 CORS가 발생하게 되는 것.https://service.example.com:8080https://api.example.com:8080 CORS (교차 출처 리소스 공유) Cross-Origin Resource Sharing이라고 부르며 이름 그대로 서로 다른 출처끼리 리소스 공유를 가능하게 해주는 방법. 프로젝트를 진행하면 실제로 "CORS가 발..
대체 어디서부터 잘못됐을까download 폴더를 정리하다가 나도 모르게 pem 키를 삭제했나보다...프론트 다시 배포하려는데 파일질라 접속이 안 돼서 깨달았다. 그래서 다시 재발급을 진행하려고 한다. pem key를 재발급해서 적용하는 방법에는 알려진 건 2가지 방법이 있다. 나는 그 중에서 인스턴스를 AMI 이미지로 만들고, AMI를 인스턴스로 새로 만들어 키페어로 등록하려고 한다. 우선 키페어에 가서 새로운 키를 발급받는다. 그리고 본인의 인스턴스 우클릭 후 이미지 생성을 눌러준다. 이미지를 하나 생성해 줍니다. 왼쪽에 AMI를 눌러서 사용 가능 상태로 변경되면 사용이 가능합니다. 인스턴스 시작을 눌러줍니다. 이름을 정해주고 OS 이미지 같은 경우는 기존의 EC2 인스턴스와 동일하게 설정해..
문제점 메인 페이지에서 "쿠키 없음" 로그가 2번씩 찍히는 문제 발생. Navbar에서 멤버의 정보를 가져오는 API, 쿠폰의 정보를 가져오는 API가 무조건 실행되도록 onMounted()에 걸어뒀다. Navbar.vueonMounted(() => { loadUserInfo(); loadCouponInfo(); const admin = store.getAdminRole; if (admin) isAdmin.value = true;});// 유저 정보 호출const loadUserInfo = async () => { try { const data = await apiGet("api/members"); store.updateUserInfo(data.data); } catch (err..
https://qkrqkrrlrl.tistory.com/139 즉 서로 간의 연결을 지향한다는 의미. 신뢰성을 보장하기 위한 방법 2. 연결을 위해 추가 작업이 필" data-og-host="qkrqkrrlrl.tistory.com" data-og-source-url="https://qkrqkrrlrl.tistory.com/139" data-og-url="https://qkrqkrrlrl.tistory.com/139" data-og-image="https://blog.kakaocdn.net/dna/k46On/hyV6ePiUvf/AAAAAAAAAAAAAAAAAAAAAAljipbc_K_1cbcREdML_htF_q6kuauOfZ3NkklwRvTv/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=tW%2FWbNW8bgfUqcoHPXnsBj5Z5OE%3D