분류 전체보기 (193) 썸네일형 리스트형 23년 03월 06일 하기로 했던 배포를 공부하는데 예상했던 문제가 생겼다. ssh로 접속하려면 22번포트로 접속해야하는데 집 유선인터넷이 skt유선인터넷이라 접속이 제한되어있다. 검색해보니 skt 일부 모뎀이 제한을 한다는데 하필 집 인터넷에 있는 모뎀이 제한이 걸린 모델인것 같다. 이 문제에 대해서 해결을 하려면 기사를 불러 모뎀을 바꿔주어야 하는데 그러긴 귀찮아서 아예 인스턴스의 ssh접속 포트번호를 바꿔주기로 했다. ec2페이지에서 ec2연결을 통해 직접 연결 한 다음 ubuntu 명령어를 사용해 ssh접속 포트번호를 바꿔 주었다. config들어간다음 #Port22 를 #을 지우고 원하는 포트번호로 변경해야하는데 캡쳐하지 않아서 생략하고, 잘 변경이 되었다. 그리고 -p포트번호를 통해 변경된 포트번호로 접속을 해 준.. 27주차 개발일지 이번주는 개발해놓았던 api들을 연결해 프론트 페이지를 만들고, 프론트 페이지를 좀 수정했다. 백엔드 부분은 비효율적으로 나가는 쿼리 정도만 정리 해 준것 같다. 개발 내내 내가 맡은 부분에 대해서는 쿼리가 어떻게 나가는지 신경쓰면서 만들고 있는데, 그래도 부족한 점이 많은 것 같다. 또한 주말동안에 배포를 어떻게 해야할지 생각하면서 배포의 개념에 대해서 조금 공부 했는데, aws ec2, s3, cloudfront, rds 정도를 활용해서 배포를 시도 해 볼 생각이다. 아직 자세히는 알지 못하고 이런게 있다 정도만 알아놓은 상태라 자세한 것은 직접 구현을 하며 알아봐야 할 것 같다. 그리고 ELK라는 것도 있는데 이에 대해서는 우선 배포를 하고 알아볼 생각이다. 다음주 내로 프론트는 완전히 마무리 짓고.. 23년 03월 02일 오늘도 프론트 페이지를 구현하고 새로 구현해야하는 api와 쿼리를 손봤다. 중간에 비효율적으로 작동하지도 않는데 무조건 날아가는 쿼리가 있었는데, api를 나눔으로써 그 기능을 작동시킬때만 쿼리가 날아가게 했다. 프론트 페이지를 만들면서 api가 생각보다 세분화 되어 있지 않다는것과 설계가 세밀하게 되어 있지 않다는 것을 느끼는데, 이부분은 처음부터 예상하고 설계를 했기 때문에 계속 수정해 나가야 할 것 같다. 그리고 service코드를 새로 쓰다가 순환참조를 또 만났다. 이부분은 설계가 잘못되었다고 느껴서 interestService에서 가져오던 interest count를 productService에서 수행하게 하였다. 프론트 구현을 하면서 설계의 구멍과 쿼리가 비효율적으로 나가는 부분을 계속 고쳐나.. 23년 02월 28일 오늘도 채팅기능을 손봤다. 비효율적으로 나가는 쿼리가 많았는데, 정리를 좀 해주고 api도 나눠야 할 것은 나눠 주었다. 그러다가 product를 호출했는데, 다른 테이블도 같이 호출되길래 fetchType = Eager가 걸려있나 했는데, OneToOne 양방향 연관관계가 걸린 객체들이었고, OneToOne양방향 관계가 걸려있으면 LAZY가 먹히지 않는다고 한다. 강제로 OneToMany, ManyToOne의 관계를 가지게 하거나 id매핑을 시켜주거나, 단방향 매핑을 해주던가 해야 할 것 같다. 고민을 해봤는데, 굳이 product가 review를 가지고 있을 필요가 없을 것 같아 product에 있는 연관관계를 빼고 단방향 연관관계를 맺어주기로 했다. 채팅기능도 여러가지 이슈가 있기는 한데, 일단 채.. 23년 02월 27일 오늘은 프론트 페이지의 페이지네이션을 좀 바꿨다. 기존의 페이지네이션은 페이지가 있는대로 숫자가 붙어 나왔는데, 5개 단위로 끊어서 나오도록 바꾸었다. 그리고 오래걸리는 채팅 기능 구현을 같이 하기로 했다. 일단 채팅을 할때 유저 정보를 받아오지 못하는 이슈가 있었는데, 알고보니 프론트 페이지에서 받기로 한 값을 백엔드에서 보내주지 못하고 있었다. 그래서 쿼리 dsl을 사용해 원하는 값을 불러오게 해주었다. 그리고 보내는 사람의 이름과 받는 사람의 이름을 저장하지 못하는 이슈도 있었는데 자바스크립트에서 받는 값을 약간 수정해주었더니 잘 저장이 되었다. 문제는 프론트 페이지에서 값을 제대로 보여주지 못하고, 작동이 실시간으로 되지 않았다. 알아보니 레디스를 사용해야 pub/sub이라는 것을 사용할 수 있다.. 26주차 개발일지 프로젝트 중간발표를 마무리하는 주였다. 어찌어찌 프론트 페이지까지 대충 만들어서 발표를 하긴 했는데, 다른 조에 비해서 준비가 많이 부족했던 것 같다. 프론트 페이지가 만들어진게 백엔드 기능에 비해서 많지 않기도 했고, 백엔드에서 만들어진 api가 하나씩 나사가 빠진 기능들이라 추가로 리팩토링 해야 할 것 들이 많은것 같다. 일단 주말에 쉬면서 간단하게 프론트에서 이메일 인증을 하던것을 서버에서 하게 만들었다. 기존에 팀원이 만들어놓은 이메일 인증이 서버에서 인증하게 하면 같은 인증번호만 계속 보내는 이슈 때문에 서버에서 인증을 하지 않고 프론트로 보내서 프론트쪽에서 비교하게 했는데, 문제는 페이로드로 인증 코드가 다 노출된다. 만약 실제 서비스였으면 콘솔만 열어도 다른사람의 이메일을 사용하여 가입 할수.. 23년 02월 24일 팀프로젝트 중간 발표회를 진행했다. 다른 조 발표를 보니, 일단 프론트 개발이 미흡했고, 적용한 기술 스택도 너무 적었다. 기술 스택이 적은건 공부하는 입장에서 큰 문제는 아니라고 생각한다. 결국 내가 사용해야하는 건 자바 코드고, 백엔드의 데이터 흐름을 알고 사용해야하는데 아직 그것도 제대로 못하는 주제에 여러가지 기술 스택을 적용해보려하는 것은 그냥 따라하는 것 이상은 되지 않을 것이라는 생각을 가지고 있기 때문이다. 하지만 작업 분배를 잘못해서 프론트 개발이 미흡한건 내 잘못이라 생각한다. 처음에 판단을 잘못해서 프론트 개발을 혼자 다 떠맡았고, 결국 무리라 생각해서 작업을 분배했는데, 결국에는 내가 만든 프론트쪽만 완성이 되었다. 또한 우리 팀의 작업 계획같은게 반쯤은 내 주도로 진행되고 있었는데.. 23년 02월 23일 팀프로젝트 중간발표 준비중 유저 평점 로직이 너무 비효율적으로 작동하는것같아 리팩토링 해 주었다. 그런데 테스트를 해보니 Cannot call sendError() after the response has been committed라는 에러메세지가 뜨면서 계속 순환참조가 되었다. 처음보는 에러다 보니 순환참조인지도 모르고 당황했었는데, 쿼리가 날아가는 것을 보니 계속 똑같은 요청을 반복하는것이 보였다. 원인은 새로 써준 쿼리에 있었는데, review와 usergrade는 @OneToOne관계라 서로를 가지고 있는데, review를 가지고 있는 userGrade를 호출하고, userGrade에서 다시 review를 호출하고.. 이런식으로 순환참조를 했던 것 같다. 필요한 값이 userGrade의 grade.. 23년 02월 22일 전체적인 api들의 오류를 수정했다. 아무래도 나 혼자 쓴 코드들이 아니기 때문에 어디서 오류가 터지는지 알기 쉽지 않았는데, 사소한것도 있었고 아닌것도 있었다. 그리고 fetch join을 잘못 써서 쿼리가 먹지 않는 문제도 있었다. fetch join은 fetchType = Lazy로 설정된 연관관계의 객체를 불러올때 N+1 현상이 발생해 쿼리가 의도한것보다 많이 날아가는 현상을 방지하기 위해서 쓰는데, 나는 하나의 객체만 가지고 있는데도 Lazy를 건 객체가 있어서 fetch join을 해야한다고 생각하고 fetch join을 걸어놨었는데 에러가 떴다. 이 문제의 해결책은 fetch join을 하지 않으면 되는것인데, 그렇게 한다면 N+1문제가 다시 발생하게 된다. 하지만 내가 fetch join을.. 23년 02월 21일 오늘도 프론트페이지 작업을 진행했다. 어김없이 cors문제를 만났는데, GET매핑인데 pageDto를 requestbody로 받아야 하고 그러기 위해서 data를 받았었는데, 그래서 cors에 걸리는 것 같았다. 나중에 알게 되었는데 이럴때는 @requestbody가 아니라 @modelattribute를 사용하여 받아야 한다고 한다. 그리고, 페이징 처리를 한 페이지를 받아오려고 했는데, 또 문제가 생겼다. 분명 테스트코드에서는 통과를 했는데 페이징된 객체가 contents를 못찾아반환이 되지 않는 것이다. 쿼리 문제인가 싶어서 query dsl을 이용하여 다시 써 보았는데도 반환이 되지 않았다. 알고보니까 dto에 getter가 없어서 그랬던 것이었다. 테스트 코드를 통과한 이유는 빈리스트를 주어서, .. 이전 1 2 3 4 5 6 7 ··· 20 다음