HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧑🏻‍💻
박진형
/
🌲
Resume - 형욱 (1)
/
🤔
프로젝트 자세히보기
🤔

프로젝트 자세히보기

notion image
Instakyuram 소개3️⃣  프로젝트 진행 방식4️⃣  Tech Stack5️⃣  기여한 역할6️⃣  트러블 슈팅🧐  게시글에 이미지들 중 하나라도 업로드에 실패하면 어떻게 해야할까?🧐  동적 쿼리로 커서페이징 처리를 어떻게 해야하지?7️⃣ 프로젝트 회고8️⃣  프로젝트를 하면서 느낀점

Instakyuram 소개

  • 데브코스에서 6월22일까지 배운 기술들을 통해 인스타그램을 클론코딩 해보는 프로젝트
[팀구성]
  • 팀장
    • 곽동운
  • 스크럼마스터
    • 김형욱
  • 개발자
    • 박혜빈
    • 김병연
    • 박진형

1️⃣  프로젝트 관리

🛩️
프로젝트 관리

2️⃣  GitHub

 

3️⃣  프로젝트 진행 방식

notion image
  • 4~5일 주기로 스프린트 및 회고를 진행하였습니다.
  • 13:00 ~19:00 코어타임을 정해 스크럼 및 프로젝트를 진행하였습니다.
  • 협업 도구로 Jira, Notion, Slack, Gather를 사용하였습니다.
 

4️⃣  Tech Stack

notion image
[기술 스택을 이렇게 선택한 이유는 무엇인가요?]
  • SpringBoot의 최신 버전을 사용함으로써 Spring Security의 WebSecurityConfig가 Deplicated 된 사실을 알게 된 적이 있었습니다. 이 과정에서 자신이 쓰고 있는 기술이 어떻게 업데이트 되고 있는지에 대한 꾸준한 관심이 필요하다는 것을 느꼈습니다.
  • 따라서 개발자는 항상 최신 기술에 관심을 많이 가져야 한다고 생각하였으며 기술스택을 최신버전 위주로 선택하게 되었습니다.
  • 백엔드 개발자끼리 진행하는 프로젝트였지만, 페이지가 없다면 백엔드 코드는 의미없다고 생각했습니다.
    • 하지만 새로운 기술을 습득하는 것은 백엔드 개발에 초점을 흐리게 할 수 있기 때문에 가장 익숙하게 사용한 타임리프를 선택하게 되었습니다.
[어떤 이점이 있었나요?]
  • 가장 먼저 자바17을 사용함으로써 레코드와, 개선된 스위치문을 사용할 수 있었습니다.
    • 레코드를 적극적으로 사용하여 코드의 간결함과 불변성의 이점을 얻을 수 있었습니다.
    • 개선된 스위치문을 통해 보다 더 간결한 코드를 작성할 수 있었습니다.
  • 자신이 개발한 API가 아닌 팀원이 만든 API에 대해 페이지를 개발하는 규칙을 정했었습니다.
    • 페이지 개발까지 신경을 쓰면서 프론트 입장에서 한번 생각해 볼 수 있는 경험이 되었습니다.
  • Flyway 도입으로 Database 설계가 변경 될 시 유연하게 대응할 수 있었으며 변경 이력 확인이 가능하여 편리함을 얻을 수 있었습니다.

5️⃣  기여한 역할

  • 스크럼 진행 및 프로젝트 전반적인 문서화 관리
    • 스크럼 마스터의 역할로써 프로젝트 기간동안 매일 스크럼을 진행하여 프로젝트의 진행상황 및 공유사항을 전달하였습니다.
    • 프로젝트 문서의 최신화를 위해 전반적인 문서화가 항상 최신화가 되어 팀원간의 리소스 발생을 최소화도록 하였습니다.
  • 이미지 업로더 구현
    • 게시글에 올라가는 프로필 이미지, 게시글 이미지를 로컬에 저장하는 코드를 작성하였습니다.
      • 서비스 레이어에서 데이터베이스 or 로컬에 이미지 저장이 실패할 때 롤백이 될 수 있도록 작성하였습니다.
  • API 구현
    • 게시글 작성 API, 썸네일 조회 API, 게시글 조회 API
      • 게시글 조회는 JPA의 Criteria를 사용하여 동적쿼리로 커서 페이징 방식을 적용하였습니다.
  • 테스트코드 작성
    • 서비스 테스트코드 작성
  • 기술문서화
    • Criteria 사용방법
    • RestDocs 사용방법
    • Flyway 사용방법
 

6️⃣  트러블 슈팅

🧐  게시글에 이미지들 중 하나라도 업로드에 실패하면 어떻게 해야할까?

[문제점]
  • 게시글의 내용이 먼저 데이터베이스에 저장한 후에 이미지를 저장하는 흐름으로 개발을 진행하였습니다.
  • 하지만 게시글의 테이블과 게시글 이미지 테이블이 따로 존재했기 때문에 이미지가 하나라도 업로드에 실패하면 롤백을 해줘야 하는 문제점이 생겼으며 이미 저장된 이미지들을 다시 지우는 작업을 해줘야 한다고 생각했습니다.
[해결]
  • 저장된 파일의 path를 리스트로 보관하며 중간에 실패하면 rollback 메서드를 만들어 지우도록 구현하였습니다.
notion image
notion image
 

🧐  동적 쿼리로 커서페이징 처리를 어떻게 해야하지?

[고민한점]
  • 게시글을 최신 순으로 커서 페이징을 처리해야 하는데 동적쿼리로 어떻게 처리할지 고민을 많이 하였습니다.
[해결]
  • 저희는 이번 프로젝트에서 순수 배운 기술로만 프로젝트를 진행하는게 목표였기 때문에 JPA의 Criteria를 사용하였습니다.
notion image
  • 다음 페이지가 있는지 없는지에 대한 동적쿼리를 적용하여 JPA의 exsitsBy처럼 사용하기 위해서는 다음 데이터가 있는지 없는지에 대한 쿼리를 한번 더 수행해야 하며 하나라도 있으면 true로 반환하도록 하였습니다.
    • 실제 JPA의 exsistBy도 동일하게 사용하고 있는 부분을 참고하였습니다.
notion image
 

7️⃣ 프로젝트 회고

🎾
프로젝트 최종 회고

8️⃣  프로젝트를 하면서 느낀점

  • 처음으로 팀 프로젝트를 진행하게 되었는데 Jira와 스프린트라는 것을 처음 경험하였고 협업 프로세스가 이루어지는 전반적인 과정을 몸으로 느낄 수 있었습니다.
  • 제한된 기술에서 요구사항을 충족시키는 과정에서 할 수 있었던 고민들이 더욱 성장할 수 있도록 만들어 준 것 같았습니다.