본문 바로가기

프로젝트 관련9

프로젝트 일지 - 쿼리 통합: 여러 번의 db접근을 감소시키자(with springboot, mysql, mybatis) 들어가기 현재 진행하는 프로젝트는 지도 위에 게시 글을 작성하는 웹 사이트이다. 게시글 페이지에 접근 시 위도, 경도의 정보와 게시글이 가지는 기본적인 정보 및 좋아요, 댓글, 댓글 좋아요 등 정보들을 확인할 수 있도록 하였다. 사용자가 게시글 페이지에 접근 시, 프론트 서버에서는 백엔드에 한번 접근 시 위 정보들을 모두 얻지만, 백엔드 서버에서 DB에 접근하는 횟수는 4번이다. DB 접근할 때마다 얻는 내용은 아래와 같다. 게시글 상세 정보 조회 게시글에 회원이 좋아요를 눌렀는지 조회 게시글에 달린 댓글 리스트 조회 댓글마다 회원이 좋아요를 눌렀는지 조회 게시글 페이지를 들어갈 시, 위 4번의 DB에 접근하는 메서드가 실행된다. 서버는 DB에 접근하는 경우에 비용이 발생하므로 최적화를 위해선 DB 접근.. 2023. 12. 25.
Springboot With React: 커서 기반 페이징 기법을 통한 댓글 무한 스크롤 구현 들어가기 현재 진행 중인 프로젝트에서는 하나의 게시글에 있는 댓글을 조회할 때, 프론트 단에서 백엔드 단으로 요청을 할 때, 모든 댓글을 한꺼번에 가져오고 있다. 여기서 문제가 하나 있다면, 매우 많은 댓글이 넘어오게 된다면 DB 내에 매우 많은 '랜덤 액세스'가 일어나게 되어 성능적으로 좋지가 않다. 그렇기에 많이 페이징 방식을 사용해서 일부의 데이터를 조금씩 가져와야 한다. 페이징 방식하면 떠오르는 것은 페이지 번호가 있고 원하는 번호를 누르면 해당 번호의 페이지로 넘어가는 방식과 무한 스크롤 방식이 있다. 진행 중인 프로젝트는 모바일 화면에 맞춰서 개발을 하고 있기에 모바일 UI 에 더 익숙한 무한 스크롤 방식으로 댓글 페이징을 진행하고자 한다. 프로젝트에서는 Springboot, Mybatis, .. 2023. 10. 19.
스프링부트 With Mysql - easyRandom을 통한 bulk Insert 및 Index 적용 이 글은 개인적인 생각을 작성한 것이다. 들어가기 데이터베이스에 대해 공부하다 보면 마주치는 것 중 인덱스라는 것을 들어보았을 것이다. 필자 또한 인덱스라는 개념을 책 및 인터넷을 통해 많이 접하았다. 쿼리 최적화에 대해 공부하면서 인덱스 또한 공부도 하였다. 하지만 인덱스를 통해 충분한 성능을 보기 위해서는 충분한 데이터가 있어야 한다고 들었다. 그래서 데이터가 많지 않으니까 다음에 적용하자~! 라는 핑계로 계속 인덱스를 직접 적용해 보는 것을 미뤘었다. 그러던 중 최근에 EasyRandom을 통한 랜덤한 객체를 수백만 건을 생성해 주는 방법을 접하게 되었다. 지금까지 진행하던 테스트에서는 일일이 값을 집어넣어서 객체를 생성하고 테스트를 진행하였다. EasyRandom은 이런 나에게 매우 매혹적으로 보.. 2023. 8. 3.
springboot delete시 DB접근, 쿼리 횟수에 대한 고찰(mybatis, jpa) 이 글은 프로젝트를 진행하면서 delete를 진행 시 mybatis 및 jpa를 사용하였을 때 DB에 접근하는 횟수 및 쿼리 횟수에 대해 비교하여 주관적으로 작성한 글이다. Article 테이블이 DB에 저장되어 있다고 하자. 여기서 Ariticle 하나를 delete 하려고 한다. jpa는 영속성 컨테스트라는 1차 캐시를 가지고 있다. 그렇기에 트랜젝션 안에서 select를 통해 Article 테이블 정보를 객체로 가져오면은 이에 해당하는 정보가 영속성 컨테스트에 저장된다. 그리고 delete를 실행하면 쿼리를 따로 저장해 놓았다가 트랜젝션 종료 시 저장해 놓은 쿼리를 DB에서 전달하여 실행하게 된다. 즉, article를 select하기 위해 DB접근 1회, 쿼리 실행 1회, 트랜젝션이 종료되면 쿼리.. 2023. 6. 24.
sprigboot 프로젝트 진행중 리펙토링 적용 개발을 하는데 있어서 가장 중요하고 자주하는 것이 리펙토링이라 들었다. 지금 작성한 코드가 다른 사람이 볼때 충분히 가독성이 있을지, 객체지향적인 방식을 잘 활용하고 있는지를 확실치 못하고 있었다. 면접을 위한 cs전공지식노트(주홍철)에서 디자인 패턴 중 펙토리 패턴과 전략 패턴에 대해서 적용해보고자 리펙토링을 하게 되었다. 위 패턴들을 적용하려는 이유는 현재 진행중인 프로젝트 중 findArticles가 하나의 메서드로 되있지만 public, private, grouped에 따라 구분을 해야한다. 하나의 메서드로 3개를 경우에 따라 구분을 하는 것보다는 3개의 메서드로 가독성을 향상시키는 것이 좋다고 생각하였기 때문이다. 하지만 이 패턴들을 findArticleService에 막연히 적용하기에는 상당히.. 2023. 4. 1.
Postman API를 통한 API 문서 작성 백엔드 담당으로 팀 프로젝트를 담당하다보면 api를 만들고 프론트한테 api에 대한 것들을 설명해야 할 경우가 많다. 항상 노션이라던가 구두로 이건 어떻게 저건 어떻고 등 설명을 해왔는데 시간도 오래걸리고 프론트단이 한번에 이해못하는 경우가 많았다. 이를 어떻게 해야하나 고민하던 도중 'API문서'라는 것을 알게되었고 적용한 내용을 작성해보고자 한다. 어떤 api는 body안에 어떤 데이터를 제공해야하고 헤더는 어떻고 queryString과 pathVariable은 어떤지, 더욱이 response때 데이터나 헤더는 어떤지 API 유형은 어떤지 등 프론트 단에서는 모든 정보가 다 궁금할 것이다. 정보를 확실히 알아야 적용을 할 수 있으니까 말이다. 그렇기에 백엔드 단에서는 정보들을 문서화에서 제공을 해주는.. 2023. 3. 12.
AWS RDS를 통한 관계형 데이터베이스 구축 및 springboot 연동 들어가기 프로젝트를 진행함에 있어서 가장 중요한 것 중 하나는 데이터베이스이다. 간단히 로컬에서 프로젝트를 진행할 때는 h2를 사용하였고 배포까지 진행할 때는 배포서버 내부에 mariaDB를 설치하여 데이터를 삽입하였다. 그렇다면 aws 프리티어를 사용하고 있을 때는 어떻게할까? 프리티어로 진행한 서버는 내부 용량이 적기 때문에 데이터베이스 크기도 작을 수 밖에 없고 한눈에 데이터들을 파악하기도 힘들다. 그리고 배포 서버에 문제가 생기면 데이터베이스에 접근할 수 없다는 문제도 있다. 이럴때 유용한 것이 aws rds이다. aws rds는 aws에서 rds 전용 서버를 제공을 해주는 서비스이다. 즉, 배포서버에서 데이터를 rds 서버로 저장을 시켜서 데이터를 굳이 배포서버에 저장할 필요가 없어진다. 배포서.. 2023. 2. 22.
Jenkins를 활용한 React, Springboot CI,CD 구현(2) 들어가기 이 글은 Jenkins를 활용하여 React, Sprongboot를 배포하는 CI, CD를 구현하는 과정을 작성한 글이며, CD에 중점을 두어 작성하였다. 이전 내용은 아래의 주소를 참고하길 바란다. https://khdscor.tistory.com/67 aws jenkins(docker)를 활용한 react, springboot CI,CD 구현(1) 팀 프로젝트를 진행하다가 개발회사에 다니시는 분께서 개발 회사에서는 본격적으로 개발하기 전에 테스트 서버라는 것을 만들어서 디자이너, 기획 등 다같이 프로젝트 현황을 볼 수 있도록 한 khdscor.tistory.com Jenkins를 통한 CD 1. Jenkins 설정 이전 글까지 자동 빌드를 구현하였다. 이제 남은 것은 자동 배포이다. reac.. 2023. 1. 21.
Jenkins를 활용한 React, Springboot CI,CD 구현(1) 들어가기 팀 프로젝트를 진행하다가 개발회사에 다니시는 분으로부터 들은 얘기가 있다. 회사에서는 본격적으로 개발하기 전에 테스트 서버라는 것을 만들어서 디자이너, 기획 등 다같이 프로젝트 현황을 볼 수 있도록 한다고 하셨다. 확실히 다른 사람들도 모두 개발 현황을 볼 수 있어야 한다고 생각을 하기에 앞으로는 차후를 위해 프로젝트마다 테스트 서버를 항상 구현할 생각이다. 그리고 이를 위해서는 CI,CD 가 이뤄져있어야 편하게 진행을 할 수 있다고 생각한다. 이 글은 인터넷을 찾아보며 CI,CD 구현을 하고 내 생각에 맞춰 작성한 글이다. CI, CD에 대한 개념이 궁금하다면 https://seosh817.tistory.com/104 를 참고하길 바란다. [CI/CD] CI/CD란? - 지속적 통합(Conti.. 2023. 1. 18.