0. 배경작성된 게시글에 댓글을 작성하는 기능을 추가하였고, 알람 기능이 존재하지 않아 실시간으로 확인이 불가능하여 불편함을 겪는 사용자가 존재한다고 생각했습니다. 요구사항에 따라 알람 기능을 추가하면서 문제가 발생했습니다. 현재 제가 짠 로직은 댓글 작성 로직과 알람 발송 로직이 하나의 트랜잭션 안에서 처리되었습니다.외부 API - FCM과, Alarm Entity저장 그리고 댓글 작성을 하나로 처리하였을 때 발생할 수 있는 문제는 FCM과 알람 저장 기능에 문제가 생겼을 때 댓글 저장도 롤백되어버리는 문제입니다. 비즈니스 중요도를 고려하면 사용자 편의를 위한 부가적인 알림 기능(서비스 로직)이 댓글 작성(도메인 로직)이라는 메인 기능에 영향을 미치는 것이 부자연스럽다고 판단해 트랜잭션 분리를 고려하게..
0. 배경JPA로 개발을 하면서, 페이징을 사용하지 않았을 때 성능 저하, 서비스 장애로 이어질 수 있는 부분을 깨닫고 정리하였습니다. 1. Paging을 사용하지 않고 모든 게시글을 불러왔을 때 문제 발생데이터가 많으면 장애 발생프로젝트에서 사용한 코드@Query(value = "select p.*, COUNT(pl.post_like_id) as LikeCount " + "from post p " + "inner join post_like pl on p.post_id = pl.post_id " + "group by p.post_id " + "order by LikeCount Desc, p.post_id Desc", nativeQuery = true)Li..
배경 현재 제가 진행 중인 프로젝트 Test 상황입니다. Persistence Layer와 Business Layer에서 스프링을 통으로 띄워서 통합테스트를 진행했습니다. 그리고 기존 Presentation Layer 테스트를 작성할 때 같은 환경에서 테스트를 진행했습니다. 이러한 방식은 서버를 띄우는 시간과 사용 중인 Bean을 모두 불러오고 중복된 테스트 작성이 발생하기 때문에 시간이 오래 걸리고 비효율적인 테스트 작성입니다. Presentation Layer 테스트 범위에 대한 생각과 리팩토링 과정을 작성하겠습니다. Presentation Layer에서 무엇을 테스트할까? 진행 방식 Presentation Layer를 테스트 할 땐, Persistence Layer와 Business Layer를 M..
배경 토큰을 어디에 저장하는 것이 좋은지 찾다가 관련된 보안 내용이 많아서 정리하게 되었습니다. Cookie를 이용하여 XSS 공격을 막는 방법은 작성하였고, CSRF 공격에 대한 방어가 필요하기 때문에 추가 학습 후 작성하였습니다. CSRF 공격에 대해 알아본 후, 어떤 방법으로 토큰을 효율적으로 관리하고 CSRF 공격을 방어하는지에 대해 알아보겠습니다. http.csrf(AbstractHttpConfigurer::disable) CSRF란? 사이트 간 요청 위조(Cross-site request forgery, CSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. - 위키백과 일반 ..
배경 JWT토큰을 어디에 보관해야 되는지 제대로 알아보고 싶었습니다. 구글에 검색을 했을 때 대부분 LocalStorage에 보관하여 사용하는 글들이 정말 많습니다. 저도 생각없이 똑같이 구현했었습니다. 이러한 방식이 잘못되었다는 것을 깨닫고, 다른 사람들에게 공유하고 싶어서 글을 작성했습니다. 간단한게 LocalStoage가 뭔지 설명하고, 왜 LocalStoarge를 사용하면 안 되는지 설명하겠습니다. LocalStoarge 로컬스토리지 객체는 웹 스토리지(WebStorage) 중 하나입니다. 로컬스토리지 객체를 통해 브라우저 내에 키-값(key-value) 데이터 쌍을 저장할 수 있습니다. 데이터 공유 여부 데이터를 브라우저에 반영구적으로 저장하며, 브라우저를 종료 후 재시작해도 데이터가 남아있습니..