개요 @GetMapping("/{userId}/followers") public ResponseEntity getFollowers( @PathVariable("userId") Long userId, @PageableDefault(size = 10, sort = "userId", direction = Direction.ASC) Pageable pageable ){ User user = userFindService.findById(userId); List response = followService.getFollowers(user, pageable); return ResponseEntity.ok(response); } 프로젝트 코드 리뷰를 진행하면서 위와 같은 코드를 확인할 수 있었다. 서비스 레이어에는 @..
Asciidoctor는 문서 모델로 구문을 분석하고, HTML과 같은 출력 형식으로 빠르게 변환하기 위한 텍스트 프로세서이다. Spring Rest Docs는 Spring으로 개발한 Rest API를 자동으로 문서화해주는 도구이다. 테스트 코드로부터 생성 시작되며, 테스트가 성공해야 만들어지기 때문에 아래의 장점이 있다. 운영 코드에 영향을 주지 않는다. 테스트 코드로 인해 안정적이고, 유지보수에 용이하다. build.gradle [플러그인 추가] plugins { // ... id 'org.asciidoctor.jvm.convert' version '3.3.2' } Asciidoctor 플러그인을 적용한다. Gradle 7 버전 이상일 때 org.asciidoctor.jvm.convert 3.3.2 버..
동아리 홈페이지 투표 개발 2 - WebSocket과 STOMP 동아리 홈페이지 투표 개발 1 - 개요 및 설계 개요 동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈 woo-chang.tistory.com 홈페이지 투표 개발의 마지막 글입니다. 앞서 설명해 드렸던 내용을 바탕으로 실제 어떻게 개발을 진행하였는지 알려드리고자 합니다. 저희 홈페이지 백엔드 서버는 Spring Boot 기반으로 동작하고 있기에 Spring에서 WebSocket을 설정하고 클라이언트와 연결하고 요청과 응답이 실시간으로 이루어지도록 코드를 작성해야 합니다. Spring에서 WebSocket을 사용하고 있는 예시를 우선 확인하고 비슷한 방법으로 ..
동아리 홈페이지 투표 개발 1 - 개요 및 설계 개요 동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈페이지에는 존재하지 않았던 새로운 기능을 woo-chang.tistory.com 저번 글에 의해 실시간 투표 현황 조회 개발에 대해 설명해 드리고자 합니다. 투표 권한을 가진 클라이언트가 투표를 하는 경우 즉각적으로 투표 현황 통계의 변경이 발생하고 이를 통계 페이지에 접속해 있는 모든 클라이언트가 확인할 수 있어야 합니다. 이를 위해서는 클라이언트의 Request가 있어야 서버에서 Response를 응답하는 프로토콜인 HTTP로는 해결할 수 없습니다. 다른 클라이언트가 투표한 시점을 알 수 없기에 언제 클라이언트에서 R..
개요 동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈페이지에는 존재하지 않았던 새로운 기능을 추가해 보고자 하였습니다. 여러 가지 아이디어들이 나오게 되었고 저가 맡게 된 부분은 투표 기능 개발이었습니다. 기존에는 동아리 임원진(회장, 부회장, 총무)을 동아리 카카오 채널을 통해 투표하는 방식이었으나 홈페이지에 투표 기능을 추가하여 홈페이지를 조금 더 활성화하고 투표 현황, 투표 결과도 시각적으로 보여주고자 하는 것이 개발 목표였습니다. 설계 하나의 기능이 추가될 때 크게 3파트의 개발이 진행됩니다. 해당 기능에 필요한 데이터를 위한 DB 설계 클라이언트에게 보여주기 위한 프런트 개발 기능의 비즈니스 로직을 처리하기 위..