백엔드 개발 포트폴리오 | 반려동물 자랑 커뮤니티

내일배움캠프 4기 웹 개발 과정 Spring 트랙 수료생 최종 프로젝트 '펫팸'을 소개합니다.
Aug 17, 2023
백엔드 개발 포트폴리오 | 반려동물 자랑 커뮤니티
 

🛠️ 아키텍쳐

notion image

🛠️ 기술적 의사결정

사용 기술
기술 설명
MySql
우리 프로젝트가 게시판 기능을 중심으로 구성되어 있기 때문에, 사용자들이 작성한 글과 댓글 등의 데이터를 안정적으로 저장하고 관리해야 했고, MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로 효율적인 서버관리를 위하여 관계형 DB를 선택했습니다.
S3
S3는 AWS기반으로 용량을 무제한으로 확장 할 수 있기 때문에, 트래픽이 늘어나더라도 서버 리소스를 추가로 할당하지 않아도 되는 장점이 있을 뿐더러, AWS의 보안 기능을 활용, S3는 암호화된 데이터 전송을 제공, 데이터를 두 번 이상 복제하여 내구성 역시 보장되고, 사용한 만큼만 값을 지불하면 되는 비용 효율성 때문에 선택했습니다.
Cookie
클라이언트에 저장되기 때문에 서버의 자원을 사용하지 않음. 따라서 서버의 부하를 줄일 수 있다는 점과 쿠키는 웹에서 일반적으로 사용되는 기술이므로 다양한 브라우저에서 일관된 동작을 보장할 수 있기 때문에 선택했습니다.
 

🎯 트러블 슈팅

Cascade
❓이미 작성된 게시글에 댓글이 달려있는 경우 삭제가 되지 않음
❗️cascade 옵션을 주지 않아서 생긴 문제로, 옵션을 주고나니 해결
notion image
CORS
❓프론트엔드 서버와 백엔드 서버를 구분하는 과정에서 두 서버의 IP가 달라 CORS오류가 발생
❗️백엔드 서버에서 securityFilter에 cors를 허용해줌으로써 해결
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.cors().and().csrf().disable(); // 중간 코드 생략 } @Override public void addCorsMappings(CorsRegistry corsRegistry) { corsRegistry.addMapping("/**") .allowedOrigins("http://localhost:8080", "http://127.0.0.1:5500/") .allowedMethods("GET", "POST", "PATCH", "DELETE", "OPTIONS", "HEAD") .exposedHeaders(AUTHORIZATION_HEADER,REFRESH_AUTHORIZATION_HEADER) .allowCredentials(true) .maxAge(3600); }
EC2 프리티어 메모리부족
❓배포시에 aws EC2인스턴스프리티어 기본 램이 1GB밖에 되지 않아서 프로그램이 실행되다가 서버가 다운되는 경우가 자주 발생했다.
❗️SWAP메모리를 활용해서 EC2인스턴스에 가상 램공간을 2GB를 확보해 주었다. 그 이후로 서버를 보다 안정적으로 실행하는것이 가능했다.
notion image

📌 주요 기능

🧩 메인 페이지

  • 매달 좋아요 갯수가 많은 순서로 3개 글을 불러옴
  • 반려동물 자랑 카테고리 중 최신 6개 글을 불러옴
notion image
notion image
notion image
 

🧩 카테고리 별 페이지

  • 글 작성 시 분류한 카테고리 별, 최신순으로 페이징 된 글 목록을 불러옴.
  • 각 글의 좋아요 수와, 조회수를 볼 수 있음.
notion image
 
 

🧩 상세 페이지

  • 게시물 수정/삭제 기능 모두 가능
  • 한사람 당 한 게시물, 한 댓글, 한 대댓글에 좋아요를 누를 수 있음
    • 한번 더 누를시 좋아요 취소 가능
  • 게시물과 댓글은 1대다, 댓글과 대댓글도 1대다 관계를 가짐
notion image
 

🧩 관리자 페이지

  • 전체 가입 유저 목록을 볼 수 있음
  • 목록 클릭할 시 유저 정보 상세 페이지로 이동
Share article
Subscribe to our newsletter

내일배움캠프 블로그