문제 상황 관리자가 유저요청기록 페이지에 들어가면 전체 데이터를 가져와서 화면에 보여주게 된다.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 ==..
대체 어디서부터 잘못됐을까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..
현재 REST API의 서비스는 유저의 추방, 탈퇴 시간과 여부를 기록하지 않는다. 즉 회원가입을 진행하면 가입 날짜, 최근 로그인 날짜만 기록하지 탈퇴와 추방에 대한 여부는 고민하지 않았다. 추가 이유 1. 유저의 탈퇴는 서비스에서 필수적이라고 생각했다. 아무래도 본인의 개인정보를 남기기 싫어하는 유저는 분명 존재할 것이기에 탈퇴 서비스를 추가하려고 한다. 2. 유저의 추방은 아무래도 GPT API를 내 개인 API 키로 사용하다보니 요금에 대한 부분을 신경쓰지 않을 수 없었다.API 요청 기록을 전부 남기기에 기록을 확인해서 비정상적인 유저를 추방시키기 위해 추가하려고 한다. Member@Id @GeneratedValue(strategy = GenerationType.IDENTITY) privat..
위에 보이는 부분이 Navbar로 컴포넌트를 만들어두었다. 해당 Navbar는 로그인이 된 상태에서만 등장해야 하기 때문에 기존에는 App.vue에 설정을 두었다. store에서 로그인 상태를 추출해서 로그인이 된 상태면 navbar를 보여주기 설정했었다. 문제점로그인만 성공하면 메인, 로그인페이지를 Navbar가 사라지지 않는다. 위 사진처럼 모든 화면에서 Navbar가 한번 생성되면 고정되어 따라다니는 점이 문제였다. 내가 하고 싶은 부분은 메인, 로그인, 에러 페이지에서는 Navbar 뜨지 않길 원한다. 변경 사항기존에는 App.vue에서 store의 로그인 상태를 보고 Navbar의 표시 유무를 결정했다. 그러나 store가 아닌, 해당 라우터에 showNavbar 라는 옵션을 추..
이것이 백엔드 개발이다, 객체지향의 사실과 오해 등등 책을 읽어보면서 지금의 내 코드를 보면서 코드 리팩토링을 진행해보려고 한다. 변경 기록을 블로그에 작성. 1. DIP 원칙에 맞게 의존성 변경public class MemberController { private final MemberServiceImpl userService; ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡpublic class EmailController { private final EmailServiceImpl emailSe..