공부 일지/회고

코드스테이츠 - 메인 프로젝트 일지

Joshbla 2022. 12. 9. 10:22

코드스테이츠에서 진행된 두번째 프로젝트다.

 

코드스테이츠 교육기간동안 배웠던 내용을 최종적으로 실제로 적용해보고 

학습의 결과를 볼 수 있는 프로젝트였다.

 

조원은 처음엔 프론트엔드 3명, 백엔드 3명으로 구성되었지만

개인적인 이유로 프론트, 백엔드 각 1명씩 중도 하차를 하게되어 

총 4명이서 프로젝트를 진행하게 되었다.

 

주제는 기차여행 커뮤니티 웹 사이트를 구현하는 것으로 정했다.

이 과정에서 PM이 없었기 때문에 어떤식으로 사이트를 구현할 지 많은 대화를 나눴고

4주동안 구현이 가능할 부분과 불가능할 것 같은 부분을 체크하여 목표를 정하였다.

 

그다음으론 프리프로젝트 때 해본 경험으로 빠르게 규칙, 컨벤션등을 정했고

스키마디자인, API 명세서를 작성했다.

 

프리프로젝트 때 아쉬웠던 부분을 최대한 해결하려 노력을 많이 했다.

단순히 업무를 나누는 것으로 끝낸 게 아니고 

마감 기한을 정하고 서로 모르는 부분을 빠르게 공유하고 해결해 나가기로 정했다.

 

프리프로젝트 때는 아무래도 처음 해보는 프로젝트이다보니 당장 무엇을 해야할지 막막했었는데

두번째 프로젝트이다보니 어떤 방향으로 진행해야할지 눈에 대충 그림이 그려졌고

이전 프로젝트보다 훨씬 안정적이고 다양한 기능들을 구현할 수 있었다.

그만큼 성장한 것 같아 뿌듯하고 기분이 좋았다.

 

아쉬운 점이 있었다면 다른 사람들의 프로젝트를 봤을 때 내가 구현한 서버의 최적화가 완벽하지 않다는

생각을 많이 했다. Redis를 이용한 캐싱처리라던지 멀티 쓰레드 기능, 로드 밸런싱 기능 등 몰랐던 기능이 

많이 있었다. 이런 기능들을 미리 공부하여 사용할 수 있었으면 좋았을 것 같다.

비록 프로젝트는 끝났지만 이와 같은 기능을 공부하여 나중에는 자연스럽게 사용할 수 있게 할 것이다.

 

내가 구현한 기능

  • 게시글, 댓글, 멤버 CRUD
  • 게시글 추천, 비추천, 찜, 신고 기능
  • 게시글 - 태그연동
  • 마이페이지
  • 댓글 알림 기능
  • 정렬 기능
  • 관리자 페이지 / 통계 페이지
  • 이미지 AWS 업로드 , 수정 기능
  • 티맵 API를 이용한 거리, 시간 계산 기능
  • 라이브러리를 사용해 이메일 전송, 썸네일만들기
  • 프로필&닉네임 랜덤생성, 비밀번호찾기 - 랜덤 패스워드 생성
  • AWS 배포 
  • Route53 DNS 연결

 

아래는 내가 프로젝트를 진행하면서 마주한 에러들과 그것을 해결한 과정이다.

 

  • 패키지 생성 후 엔티티,컨트롤러 등 실행 준비를 모두 마치고 실행 시 mysql에서 테이블을 생성하지 못하고,
    요청을 보내도 데이터가 저장이 되지 않았다.
    ☞ board 패키지를 스프링부트어플리케이션 위치보다 상위에 잘못 만들었다. 이동시킨 후 정상 작동 되었다.
  • @builder 와 @NoArgsConstructer 를 함께 사용했을 때 에러가 발생했다
    ☞ @AllArgConstructor와 같이 써야한다.
  • # 에러메세지
    @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
    ☞ 빌더 사용시 생기는 문제인데 해결법은 아래와 같다.
    1. 해당 warning 이 발생하는 필드에 @Builder.Default 어노테이션을 붙여준다.
    2. 해당 warning이 발생하는 필드에 final 키워드를 붙여준다.
  • [Mysql]에러 : Public key retrieval is not allowed
    ☞  원인은 useSSL=false로 설정하고 allowPublicKeyRetrieval  설정을 하지 않은 경우에 발생한다.
    application.yml파일 spring.datasource.url의 값 뒤쪽에 추가해 주자.
  • mappedBy reference an unknown target entity property
    ☞ 연관관계 설정 시 설정한 변수명으로 mappedBy 해줘야 한다. 변수명을 잘못 적었었다.
  • 순환 참조
    ☞ 최대한 repository 를 이용하자.
  • 팀원이 merge 후 팀원의 컴퓨터에서 특정 클래스가 import되지 않는 에러가 발생했다.
    분명히 존재하는 클래스인데 아예 찾질 못했다.

    ☞ 인텔리제이에서 캐시 삭제를 하니 해결됐다
  • CollectionSerializer & BeanPropertyWriter - 스택오버플로우 에러
    원인 ☞ Jackson으로 Order 엔티티를 Serialize를 할때, LAZY(LAZY 옵션은 필요할 때 조회) 설정으로 비어있는 객체를 Serialize 하려고 해서 발생되는 문제
    해결 ☞ 오류가 나는 컬럼에 @JsonIgnore을 설정해준다.
  • BeanSerializerBase관련 무한 순환
    → 변수명을 잘못 매핑하여 생긴 에러 찾지 못해 발생
  • 415 Unsupported MediaType ERROR
    ☞ 포스트맨으로 form-data 형식으로 데이터를 날릴 때 미디어 타입을 지정해줘야한다.
  • object references an unsaved transient instance - save the transient instance before flushing
    ☞ 엔티티를 레포지토리에 저장할 때 저장 순서에 문제가 있었다. 보드를 저장하고 보드가 연관관계 설정된 보드이미지를 저장해야한다. 순서가 바뀌면 안된다.
  • 팀원이 작성한 시큐리티 인증 과정에서 there is no passwordencoder mapped for the id null 에러가 발생
    원인 ☞  보통 암호화가 안되거나 잘못된 경우에 발생하는 에러다.
    로그인된 정보로 유저디테일을 @Builder 방식으로 생성했는데 그 객체를 저장을 하지 않아서 발생한 에러이다.
    시큐리티 인증 과정이 유저디테일에서 정보를 가져와서 비교하는 방식인데 유저디테일에서 정보를 가져오는 방식을 잘못 구현함
    해결 ☞ 따로 정적메서드를 만들어줘서 새로운 유저디테일을 생성하는 것이 아닌 기존 유저디테일을 업데이트하는 방식으로 변경
  • 팀원이 작성한 소셜로그인 과정에서 네이버에서 사용자 정보를 받아오지 못함
    ☞ 네이버는 데이터를 response로 돌려줘서 로 지정해줘야 함
  • There was an unexpected error (type=Method Not Allowed, status=405). Request method 'GET' not supported
    원인 ☞ get메서드가 허용 안되는 에러인데 일반 컨트롤러가 아니라 소셜로그인 시 발생을 한 에러여서 많이 헤맸다. 근데 다른 컨트롤러에서 팀원분이 작성한 patch메서드 경로가 중복돼서 발생한 에러였다.
    (patch메서드 “/{boardId}”와 patch메서드 “/{plannerId}” 형식으로 중복 됐다.)
    소셜로그인과 전혀 상관 없는 부분에 해결점이 있어서 조금 당황스러웠다.
  • No content length specified for stream data. Stream contents will be buffered in memory and could result in out of memory errors.
    ☞ s3 업로드시 setContentLength 를 지정하지 않거나 IOUtils.toByteArray(inputStream) 사용시 inputStream 이 소진되어 발생하는 경고이며 이를 설정해주면 해결된다.
  • dto내부에 컬럼들이 순서가 바뀌어서 출력된다.
    ☞ LinkedMap으로 내보내 주자

 

 

배포링크 : http://yeogiyo.site/

Notion Link: https://www.notion.so/codestates/40-Team007-f5f31466aa20417597fde76d78641813

GitHub Link: https://github.com/woong-sung/seb40_pre_032