spring boot

· Spring Boot
🚀 개요 프로젝트에서 실시간 알림 기능을 구현해야 했다. 초기에 고민하던 중 주기적으로 서버에 요청을 보내는 방식을 택했는데 나중에 알고보니 Short Polling 이라고 불리는 방식이었다. 웹 통신 방식엔 Long Polling과 웹 소켓 방식도 있는데 이 글에서 설명하진 않는다. ⭐ Short Polling 계속 요청과 응답을 반복하는 흔한 방식이다. 주기적으로 요청을 보낸다니 대체 어느 간격으로? 내가 생각한 방법은 5초마다 알림 조회 요청을 보내는 것이었다. 바보가 아닌 이상 이 방법은 동시 사용자가 늘어날수록 요청이 기하급수적으로 비례해 늘어날 것이다. 길게 보면 누가봐도 리소스를 많이 먹는 구조이다. 나는 이렇게 이벤트가 발생해도 바로 안 보내지고 주기적으로 조회해야 하는 방법보다는 서버에서..
· Spring Boot
🚀 개요 프로젝트 진행 중 관리자 페이지에서 여러 조건으로 기업을 검색해야 하는 API가 필요했다. 동적 쿼리를 안 쓰고 단순히 if문으로 분기처리해서 일일이 쿼리문을 날리도록 할 수 있겠지만 service 랑 repository 단 메서드나 코드가 상당히 늘어나기 때문에 지저분해진다. 조건이 4가지여서 repository에 해당 API를 위한 조회 메소드가 16개나 필요했다. 혹여나 조건이 추가되면 점점 관리하기도 어려워질 것이다. 이러한 단점을 해결하기 위해 JPA 동적 쿼리를 활용하기로 했다. JPA에서 동적 쿼리를 생성하는 방법은 보통 JPQL, Criteria, Specification, QueryDSL 이렇게 4가지가 있다. 또다른 방법으론 JPA가 아닌 MyBatis나 검색 기능 자체를 컴포..
· Spring Boot
🚀 서론 프로젝트 진행 중 데이터 수정 시 PUT, PATCH, DELETE를 어느 상황에서 사용해야 되는지 잘 모르고 API를 구현했습니다. 덕분에 프론트엔드님들이 헷갈리신다고 😂😂 (왜냐하면 우린 삭제도 논리적으로 상태만 삭제로 변경하기 때문입니다. 물리 삭제는 일부만 구현한 상황입니다.) 그래서 다시 전체적으로 수정과 삭제 API들을 건드리게 되었습니다. 작업하면서 공부한 내용을 소개하겠습니다. ⭐ PUT과 PATCH 구분하기 PUT, PATCH를 수정 용도로 사용한다고만 알고있어서 차이를 잘 모르고 혼용해서 막 쓰는 경우가 종종 있습니다. 결론부터 말하면 둘은 엄연히 다릅니다. 개쪽이: PUT 요청이든 PATCH 요청이든 결과가 같은데요????? 개쪽아. 그것은 결과만 그렇게 보일 뿐 둘은 대체재..
· Spring Boot
Spring Data JPA는 SQL 중심 개발이 아닌 객체 중심 개발을 위한 자바 ORM(Object-Relational Mapping) 표준 기술입니다. 따라서 테이블을 직접 DB에 먼저 생성하는 방식이 아니라, Spring Boot에서 Entity 객체를 구성하면 JPA에 의해 테이블이 생성됩니다. Entity를 기반으로 DB 설계를 하다 보면 Entity 객체에서 id 값의 타입에 대한 고민을 하게 됩니다. 프로젝트 시 id 값의 타입을 선택할 때, int, long, Long 그리고 UUID 중 어떤 타입을 선택하는 게 적절할까에 대한 고민을 했습니다. 🚀 Int vs long vs Long 데이터의 크기와 데이터의 타입 그리고 디스크 용량의 상관관계는 DB 성능 문제를 일으킬 수 있습니다. 예..