Skip to content

Latest commit

 

History

History
42 lines (30 loc) · 8.85 KB

File metadata and controls

42 lines (30 loc) · 8.85 KB

📖 개발을 하며 겪은 어려움과 해결 방법

허진혁

  • 팀원 전체의 진행상황을 파악하면서 프로젝트 완료를 위해 일정과 업무 분담을 파악하는 것이 어려웠습니다. 그래서 상황을 체크하기 위해 개발에 들어가기 전에 상황을 수시로 체크하였습니다.
  • 데이터를 모델링할 때, 각 엔티티가 가져야할 변수들과 다른 엔티티와의 매핑을 통해 필요한 것들을 정의하고, 서로 관계를 어떻게 맺어야하는지 고민을 많이했습니다. 팀원들과 계속 의논하면서 처음 모델링을 몇 번 수정하였습니다.
  • 로그인을 유지하는 방식을 처음에는 세션을 통해 스프링부트에서 제공하는 세션과 그로 인해 만들어지는 JESSIONID 쿠키를 통해 성공했습니다. 다만, 다른 url로 이동할 때마다 서버 인증 후에 JESSIONID 쿠키가 변하다 보니 지속적인 충돌로 인해 로그인이 풀리는 현상이 발생했습니다. 그래서 쿠키로 로그인 인증하는 방식으로 수정하였습니다.
  • 웹과 서버가 통신하는 방식을 몰랐었습니다. ajax, fetch를 통해 통신하는 방법을 배웠고 성공, 실패에 따른 전달을 다르게하는 방식을 다르게 하였습니다.
  • ajax를 통해 서버와 웹이 통신할 때, 값이 null이거나 안들어가는 경우가 존재했습니다. 팀원과 의논을 하고, 구글검색을 통해 웹과 통신할 때 JSON 형태임을 다시 인지하면서 JSON.stringify()라는 메서드를 확인하였고, 이를 활용해서 데이터가 JSON으로 전달되는 것을 확인하였습니다.
  • 주문을 할 때, 상품 상세에서 단건(1개 상품, 여러개 수량)주문이 가능한 것과 장바구니에 담긴 여러개의 상품을들 주문하는 것 2가지 방식에 대한 고민을 많이 하였습니다. 단건 주문일 경우 아이템에 대한 정보와 수량을 받아오면 끝이지만, 카트에 담긴 상품을 어떻게 주문에 넣어야 하는지에 대한 방식이 생각이 나지 않았습니다. 또한 장바구니와 상품이 N:N 매핑으로 되어 있었기에 이 엔티티들을 고려해야 했습니다. 구글 검색을 통해 다른 사람들이 만든 쇼핑몰도 많이 보았고, 이커머스 기술 블로그에서 관련된 글이 있는지도 찾아보았습니다. 다만, 제가 원하는 글이 없었기에 생각하던 로직을 노트에 그림으로 그려가면서 고려해야할 사항들을 계속 체크한 후에 완성된 그림을 기반으로 로직을 만들어서 장바구니 주문도 해결하였습니다.
  • 결제를 할 때, 결제 금액에 대한 조작을 하여 실제 결제해야할 금액과 다른 경우를 대비해서 결제 인증 로직을 고민을 해야 했습니다. 그래서 다른 팀에서 결제 관련된 부분을 맡은 동기와 같이 토론을 하여 주어진 결제 금액과 결제해야할 금액을 일치할 때만 검증로직이 통과하여 결제가 이루어졌고, 검증 로직에서 실패할 경우 주문 취소가 되도록 구현하였습니다.

김미지

  • 백엔드와 프론트를 연결하는 것이 어려웠습니다. 버튼을 누르면 작동이 되지 않거나 401, 409 에러가 나오는 상황들을 마주하며 버그를 찾으며 배울 수 있었습니다. 작동하던 로그인 기능이 되지 않았을 때 프론트와 관련된 코드들에서만 에러를 찾다가 변경된 JWT와 관련이 있다는 것을 깨닫고 프론트에서 발생하는 문제점들을 해결하려면 백엔드에서 구현한 코드들도 살펴봐야 한다는 것을 다시 한번 느꼈습니다.

김응준

  • N-N 매핑이 많이 어려웠고, 공부하고 될때까지 시도해서 해결했습니다.
  • MVC 패턴을 배우지 않은상태로 처음 다루다보니 매우 어려웠습니다. 다른 사람의 코드를 보고 익숙해지다보니 해결할 수 있었습니다.
  • Spring Security에 대해 제대로 몰라서 HTML에서 Authorize 기능 때문에 고생을 했는데 이번 기회에 깊게 공부해서 다룰 수 있게 되었습니다.
  • 대부분이 배운적도 없고, 처음해보는 것들이라 많이 힘들고 어려웠습니다. 그래서 영한님의 강의를 보거나, 공부하는데 시간을 쏟아서 해결했습니다.

이다온

  • 엔티티끼리 매핑이 되어있는 것이 개념이 잘 잡히지 않아 어려웠고 작업하면서 필요한 컬럼들이 추가되고 연관 관계들이 중간에 늘어나면서 다른 방향으로 접근해야 해서 어려웠는데 팀원들과 대화하면서 해결해 나갔습니다.
  • 이미지 업로드 구현 시 처음에는 엔티티를 따로 만들어 DB까지 들어가는 것에 성공했지만, 방법을 바꿔서 기존 레시피 엔티티 안에 이미지 컬럼을 넣어 구현하는 과정에서 연결고리를 새로 만들어야 했는데 어려워서 구글링해서 많은 예시를 적용해보았고 같이 이미지 업로드하는 팀원들과 안되는 부분을 하나씩 짚어보며 해결해 나갔습니다.
  • git 협업 시 충돌이 빈번하게 발생해서 어려웠는데 git으로 협업할 경우에 어떻게 해야 하는지를 배운 것 같고 충돌이 일어나지 않게끔 팀원 모두가 브랜치를 따로 사용해서 그 문제를 좀 줄이고 push 하기 전에 pull을 받아서 큰 문제를 막을 수 있었습니다.
  • 레시피 수정페이지에 재료 등록하는 기능이 있어 추가뿐만 아니라 비동기 통신으로 재료가 삭제되게끔 구현해야 하는데 이전 정보도 출력이 되어있고 새로 재료를 추가하는 과정에서 삭제 버튼이 이전 재료와 추가한 재료를 다른 태그에서 출력되게끔 구현해서 index를 찾는 데 어려움이 있었는데 로그를 찍어보며 홈페이지에서 하나씩 확인하며 해보니 해결할 수 있었습니다.

이소영

  • 프로젝트 초기에 잦은 버전 변경이 있어 배포 과정에서 에러가 발생하였었습니다. 그러나 구글링을 통해 Dockerfile에 대해 학습해보는 시간을 가짐으로써 현재 진행하는 프로젝트에 맞게 버전을 설정할 수 있었습니다. 이전에는 그저 강사님의 Script를 가져다 썼지만 이번 기회에 어떤 명령어가 어떤 동작을 할 수 있도록 해주는지 이해할 수 있었던 시간이었습니다.
  • 회원 가입 시 사용자가 아이디 중복 체크, 이메일 중복 체크, 모든 input 값을 입력할 수 있도록 하기 위해 Thymeleaf를 이용하여 서버에서 설정한 예외를 띄워주었으나 이는 좋지 않은 방법이라는 것을 알게 되었습니다. 그래서 프론트에서 자바스크립트를 이용하여 먼저 체크를 해줌으로써 서버에서 진행할 작업이 줄어들 수 있도록 하였습니다.
  • 프론트에서 boolean 값을 객체에 담아 서버에 보내주었지만 데이터가 서버로 잘 전달되지 않아 null로 떴던 경험이 있습니다. 이를 해결하기 위해 JSON.stringify()에 대해 학습하는 과정에서 데이터가 String으로 전달된다는 것을 알게 되어 이를 해결할 수 있었습니다.
  • S3를 이용한 이미지 업로드 기능이 로컬에서는 잘 이루어지지만 배포된 서비스에서는 IOException이 발생하였습니다. 처음에는 Permission denied라는 에러 메세지를 보고 S3 버킷과 IAM 사용자를 모두 삭제해보았으나 똑같은 에러가 발생하여 log를 찍은 상태의 프로젝트를 배포하고 서비스를 실행해봄으로써 로직 중 파일 변환이 정상적으로 이루어지지 않는 다는 것을 알게되어 UUID를 이용하여 랜덤 파일명으로 이미지들이 겹치지 않도록 하고 그 뒤에 기존 파일 확장자를 다시 붙여서 S3에 저장함으로써 해결할 수 있었습니다.

이수진

  • 데이터 모델링 과정에서 엔티티들이 서로 어떻게 매핑되어야 하는지를 결정하는것이 어려웠습니다. 개념을 알고 있어도 막상 적용해보려니 어려움이 많았고 팀원들과 계속 상의하고 다른 erd 예시들을 찾아보면서 연관관계 매핑에 대해 더 공부하며 해결하였습니다.
  • 화면에서 예외 상황들이 사용자에게 그대로 드러나지 않도록 처리하는 것이 어려웠습니다. java script를 사용하지 않고 해결하기에는 한계가 있어서 검색을 하며 java script 코드를 공부하며 로직을 작성하여 해결하였습니다.
  • S3 이미지 업로드 기능이 로컬에서는 잘 작동하지만 배포시에는 잘 작동하지 않는 문제가 있었습니다. 멘토님의 도움과 검색을 통해 구현 하였으나 createFile() 실행부분에서 permission denied 가 계속 발생했습니다. createFile()을 실행하지 않고 바로 업로드하는 코드를 사용하여 문제를 해결하였습니다.