Project 8

인덱스를 통한 목록 조회 성능 개선

https://github.com/kkumta/Time-Deal-Shop/pull/38 Closes #37 refactor: product 테이블에 closeDate 인덱스 추가 by kkumta · Pull Request #38 · kkumta/Time-Deal-Shop 상품 구매 마감일을 기준으로 하는 상품 목록 조회 성능을 개선했습니다. 구체적으로, 상품 구매 마감일을 기준으로 하는 상품 목록 조회 API의 응답 속도를 1/2 가량으로 단축했습니다. github.com 해당 작업과 관련된 회고입니다. 타임딜 서버를 개발하면서, 많은 상품이 존재하는 경우 상품 목록 조회 속도가 생각보다 느리다는 것을 확인했습니다. 그러다 이런 경우에 어떻게 조회 성능을 개선할 수 있을지 고민해봤고, 인덱스를 떠올리게..

넘블 타임딜 서버 구축하기 챌린지 회고

3주 전 금요일, 넘블 타임딜 서버 구축하기 챌린지를 시작했다. 챌린지 마감인 오늘까지도 모든 요구가 구현된 상태가 아니라 조금 부끄럽다. 그래도 마감일이 다가왔으니 회고를 작성하고, 이후에 프로젝트를 더 보충해나가는 것으로 해본다. 나는 이 챌린지에 4가지 목표가 있다고 생각한다. 그 목표는 다음과 같다. Java+Spring을 통한 쇼핑몰 API 구현, 상품 수량 동시성 문제 해결, CI/CD 구축, 성능 테스트 및 모니터링을 통한 성능 개선 이 목표들을 달성하기 위해 마일스톤을 통해 3주의 시간을 관리했다. 1주차: 설계 및 환경 구축 API 설계, ERD 설계, 와이어프레임 설계, 프로젝트 생성, CI/CD 구축 등 프로젝트를 진행하기 위한 기반을 마련했다. 첫째로, 와이어프레임을 그리면서 동시에..

deleteUser(회원 탈퇴)를 어떻게 구현할 것인가

타임딜 서버는 3개의 엔터티로 이루어져 있다. User, Order, Product가 그 엔터티이다. 이 애플리케이션에서 deleteUser를 구현하려면 어떻게 해야 할까? 이는 과거 다른 애플리케이션을 구현할 때도 고민했던 문제이다. 회원 탈퇴 구현 방식은 크게 hard delete와 soft delete로 나뉜다. 그렇다면 타임딜 서버는 어떤 delete 방식을 택하는 게 좋을까? 한국의 개인정보 보호법 제21조(개인정보의 파기)에 따르면, 개인정보처리자는 보유기간의 경과, 개인정보의 처리 목적 달성 등 그 개인정보가 불필요하게 되었을 때에는 지체 없이 그 개인정보를 파기하여야 한다. 때문에 타임딜 서버에서는 deleteUser를 hard delete 방식으로 구현하기로 했다. 단, 회원 탈퇴 이후에..

Puru Board: 2.5차 배포 - 댓글 수정 시 버그 해결(기능 개선)

해결 과정을 시간 순서대로 따라가보자. 1. 댓글 수정 기능을 개발했으나, thymeleaf를 이용해서 댓글 수정 textarea에 댓글을 출력하고, 그 댓글을 바로 수정할 수 있는 방법을 못 찾았다. 내가 실현 가능한 방법은 아래의 2가지였다. th:text를 이용해서 댓글을 불러온 뒤 댓글을 수정해서 댓글의 content를 Post Mapping을 하는 updateReply Controller에 보내면 content가 null이라고 뜬다. 즉, 댓글 수정 화면은 보이지만 실제로는 수정한 댓글이 반영되지 않는다. th:field를 이용하면 댓글 수정 textarea에 댓글이 불러와지지 않았다. 이건 내가 GetMapping Controller의 Model Attribute 값과 th:each문의 변수 ..

Project/Puru Board 2022.12.30

Puru Board: 2차 배포 완료(댓글 수정·삭제 기능 추가)

1차 배포 후 알고리즘, 운영체제, 그리고 Spring MVC 강의에 집중하다보니 Puru Board 개발이 다소 정체되는 것 같아서 일단 개발이 완료된 댓글 수정, 삭제 기능을 포함하여 2차 배포를 했다. 3차 배포는 Valid를 통한 검증 기능을 구현한 뒤 시도할 예정이다. 1월 6일쯤에는 배포하고 싶다. 3차 배포 이후 기회가 된다면 회원가입, 로그인·로그아웃, 게시글 CRUD, 댓글 CRUD, 성능 개선과 관련해서 주제별로 글을 작성해보고 싶다.

Project/Puru Board 2022.12.30

Puru Board: 1차 개발 및 배포 후기

Puru Board는 게시물, 댓글, 회원 3개의 테이블로 이루어진 작은 프로젝트이다. 지난 기간동안 익힌 Java, Spring, JPA, MySQL, AWS 관련 기술로 실질적인 무언가를 만들어보고 싶어서 기획했다. 프로그램의 ERD는 다음과 같다. 초기 기능은 다음과 같다. 회원 가입, 로그인(일반·리멤버 미), 로그아웃 게시글 조회, 작성, 수정, 삭제 댓글 조회, 작성, 수정, 삭제 다음으로 각 기능의 특징을 살펴본다. 회원 회원 정보 중 비밀번호 정보는 bcrypt 방식으로 암호화를 한 뒤 데이터베이스에 저장하는 방식을 취한다. 로그인, 로그아웃 관련 기능은 스프링 시큐리티의 세션을 활용한다. AuthenticationProvider을 커스터마이징해서 구현하여 사용한다. RememberMe 기..

Project/Puru Board 2022.12.19

국립중앙도서관 Open API 활용 중 시행착오

내가 개발하고 있는 중고 서적 직거래 플랫폼은 사용자가 중고 서적을 판매하거나 구매할 수 있어야 한다. 사용자가 중고 서적을 판매할 때에는, 책에 관한 정보를 필수적으로 입력해야 하는데, 이 정보를 국립중앙도서관 Open API를 통해 찾아서 자동으로 등록되게끔 한다. 즉, 사용자가 대략적인 책의 제목이나 지은이 정보로 도서 검색을 하면, 우리 플랫폼에서 확실한 책의 정보들을 보여주어 그 중 하나를 선택할 수 있게끔 하는 것이다. 이를 위해 국립중앙도서관에서 Open API를 발급받아 사용하였다. https://www.nl.go.kr/NL/contents/N31101030500.do 국립중앙도서관 국립중앙도서관에 오신 것을 환영합니다 www.nl.go.kr 국립중앙도서관에서 제시한 요청 URL의 예시는 ..