전체 글 썸네일형 리스트형 항해 99 - 트러블 슈팅 Optional(Likes) 금일의 작업 중 Likes 부분에서 오류가 발생하였다. 그 이유를 둘러보니 그냥 로직이 이상했다... likesRepositoy.findByMemberId(Long) // 이와 같은 부분에서 오류가 발생하였다. 이 부분이 문제가 된 이유는 해당 코드를 Optional로 사용하고 있는데 MemberId로 찾아오는 값이 단일 값을 찾아오지 못한다는 저번고 같은 오류를 발생시키고 있는 것이였다. 이 이유는 기초적으로 봤을 때, 1번 퀴즈에 좋아요를 누르고 2번 퀴즈에 좋아요를 누를 경우 까지만 가능하고 3번째 누를 때, findBy로 찾아오는 값이 유니크 값이 아닐 때 발생하는 지난번과 같은 오류가 발생하는 구조였다. 근데 진짜 문제는 이게 해당 하는 것이 아니였다. 즉, 위에 해당하는 코드는 문제가 맞지만,.. 더보기 항해 99 - 서비스와 RDB 우리의 프로젝트에서 섬세하게 터치한 부분중 하나는 RDB이다. 초기에 코드를 작성하기 좋은 방식으로 우선 작성하고 여러가지 변화를 거쳐왔다. 여기서 작성하기 편함이라고 한다면, 테이블 간에 관계에서 무조건 적으로 참조를 하며 Many To One관계를 활용하여 빠르게 작성한 것을 말한다. 이때는 기존의 관계는 작성은 편하게 가능하지만 반대로 삭제를 요하는 단계에서는 참조하는 연관관계로 인하여 삭제 불가능한 현상이 일어나는 사고가 있었다. 때문에 이 관계에서 불편점을 찾아 개선점을 마련하였다. 1. 퀴즈의 삭제 불가 현상 퀴즈를 삭제하려고 했지만, 현재 퀴즈는 여러가지 분야에서 참조당하고 있는 문제가 있다. 너무 복잡한 관계로 인하여 삭제가 불가능한 현상이 발견된다. 댓글, 문제, 선택지, 좋아요, 등의 .. 더보기 항해 99 실전 프로젝트 - 트러블 (Optional) 이번에 있었던 문제 과정이다. 이번 프로젝트에서 담당한 부분 중 하나인 퀴즈에서 문제가 있다는 소식이 갑자기 새벽에 들려왔다. " ??님 이거 퀴즈를 여러개 못만드는 데요?" 때문에 즉시 노트북을 키고 코드를 봤다. 바로 작동을 돌려보니 문제가 생기는 지점은 Optional quizOptional = quizRepository.findByMemberId(member.getId()); if(quizOptional.isEmpty()){ MemberDetail memberDetail = member.getMemberDetail(); memberDetail.gainMileagePoint(100); memberDetailRepository.save(memberDetail); } 이 지점이였다. 해당 값에서 fin.. 더보기 항해 99 실전 프로젝트 - 문제발생 및 해결 금일, 관계의 방향성을 cascade를 통하여 관리하려 하였으나. cascade는 영속성을 이용한 관계로 부모 Entity의 변화가 자식에게도 영향을 끼치게 하는 영속성 기능을 활용하여 제공하는 강력한 기능이다. 그러나 너무 유용하기 때문에 너무 남발하면 부작용이 많은 기능이다. 때문에 어중간하면 사용을 미하지만 유저의 상세 정보가 등록 내역에 대하여 완전하게 데이터를 소유하고 있다는 점, 헙업이기 때문에 내 코드를 남이 신경쓰이게 하는 것을 방지하려는 점 이 두가지 이유를 가지고 cascade를 통해 데이터를 관리하려 하였다. 그러나 실제로 사용해보니 아래와 같은 이유로 오류가 발생했다. 1. cascade.ALL관계로 인하여 Entity를 저장하는 과정에서 문제 발생 엔티티에 저장된 데이터와 저장하려.. 더보기 항해 99 실전 프로젝트 - CRUD 금일 프로젝트 중 생긴 트러블 1. 문제가 생길 만큼 너무 느린 성능의 삭제 프로세스 public MsgResponse deleteQuiz(Long id) { //이전의 것과 마찬가지 입니다. Quiz quiz = findQuiz(id); List comments = getComment(id); List quizQuestionList = quizQuestionRepository.findAllByQuiz(quiz); List quizChoicesList = new ArrayList(); for (QuizQuestion quizQuestion : quizQuestionList) { List quizChoices = quizChoicesRepository.findAllByQuizQuestion(quizQues.. 더보기 항해 99 6주차 - 마무리 이번 주를 간략하게 말한다면 협력주 였다고 생각할것이다. 프로젝트를 진행하며 2주 짜리의 짧다고 하면 매우 단시간의 프로젝트지만, 최선을 다하여 아직도 달리고 있는 주간이라고 느끼고 있다. 협력의 포인트는 바로 분업이라고 생각한다. 지금 프로젝트의 진행상황으로 생각해본다면 근 70% 정도는 진행 되었고 거의 마지막 단계라고 생각하는데, 담당 매니저님이 순회를 하면서 말씀하는 감상이 매우 빠르다 였다. 이 이유를 바로 효율적으로 분산된 업무라고 생각한다. 우선 머리로 느꼈을 경우 백엔드와 프론트 엔드를 놔눠 단순하게 생각했은 때 근 3일 만에 대부분의 기능구현은 완료하였다. 이를 통해 프론트와의 연동을 다음 3일간, 이후 서버 작업을 몇일 더 하여 나름대로 빠른 속도로 업무를 진행했다. 이번 분업에서 효율.. 더보기 항해 99 6주차 - 2일 오늘도 즐거운 프로젝트~ 날이다. 나름대로 즐겁게 코드를 치는 나날을 보내니 뭔가뭔가다. 오늘 작성한 것은 토큰을 통해서 비밀번호 분실시, 새로 설정 가능한 api를 제작하였다. public String createTemporaryAuthorization (String userId, String email) { Date now = new Date(); Date expriDate = new Date(now.getTime() + 5 * 60 * 1000); return BEARER_PREFIX + Jwts.builder() .setSubject(userId) // 유저 아이디 .claim("email", email) // 유저 이메일 .setIssuedAt(now).setExpiration(expriDate.. 더보기 항해 99 6주차 - 1일 프로젝트를 하며 여러가지를 느끼고 있다. 1. 협업은 고려할 사항이 많다. 협업을 하면서 가장 많이 생각한 부분은 내가 작성한 것이 아닌 변수에 대한 내용이라고 생각한다. 변수 명을 살펴봐도 이게 무슨 뜻이지? 하면서 한번 더 고민하게 되는 경우의 이름을 보고서 이게 이건가? 하면서 연결하면 오류가 발생하는 경우가 많은 것 같다. 때문에 그만큼 컨벤션이 중요한것 같다. 또 한 협업을 하면서 내가 모르는 무언가를 배울 수 있다는 점은 큰 장점인것 같다. 그러나, 그로인하여 내가 뒤를 살피는 동안 같이하는 사람은 달릴수 있는데 내가 발목잡는거 같아서 미안한 감정이 든다. 더하여 처음 코딩을 배우고, 혼자서 하는 경우가 많았다보니 가끔 변수명을 이상하게 쓰는게 있는데 최대한 주의하고 있지만, 시간이 늦는다던지.. 더보기 이전 1 2 3 4 5 ··· 7 다음