동아리 홈페이지 투표 개발 1 - 개요 및 설계 개요 동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈페이지에는 존재하지 않았던 새로운 기능을 woo-chang.tistory.com 저번 글에 의해 실시간 투표 현황 조회 개발에 대해 설명해 드리고자 합니다. 투표 권한을 가진 클라이언트가 투표를 하는 경우 즉각적으로 투표 현황 통계의 변경이 발생하고 이를 통계 페이지에 접속해 있는 모든 클라이언트가 확인할 수 있어야 합니다. 이를 위해서는 클라이언트의 Request가 있어야 서버에서 Response를 응답하는 프로토콜인 HTTP로는 해결할 수 없습니다. 다른 클라이언트가 투표한 시점을 알 수 없기에 언제 클라이언트에서 R..
개념 관점은 도메인 안에 존재하는 개념과 개념들의 관계를 설명하는 것입니다. 명세 관점은 도메인에 초점을 맞추는 것이 아닌 객체들의 책임에 초점을 맞추게 되고 무엇에 집중합니다. 구현 관점은 실제 작업을 수행하는 것과 관련 있습니다. 어떻게 수행할 것인가에 초점을 맞히게 됩니다. 클래스 설계의 방법이 다른 것이 아닌 설계를 진행할 때 위와 3가지 관점 모두 고려해서 설계해야 합니다. 커피 전문점 도메인 커피 주문하는 과정을 천천히 생각해 보세요. 손님이 들어가고 메뉴판을 확인 후 선택한 메뉴를 바리스타에게 주문하게 됩니다. 객체 지향적인 관점으로 해석하면 커피 가게 객체, 손님 객체, 메뉴판 객체, 커피 메뉴 객체, 바리스타 객체가 각자의 역할을 수행하며 협력하고 있는 것으로 해석할 수 있습니다. 객체의..
개요 동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈페이지에는 존재하지 않았던 새로운 기능을 추가해 보고자 하였습니다. 여러 가지 아이디어들이 나오게 되었고 저가 맡게 된 부분은 투표 기능 개발이었습니다. 기존에는 동아리 임원진(회장, 부회장, 총무)을 동아리 카카오 채널을 통해 투표하는 방식이었으나 홈페이지에 투표 기능을 추가하여 홈페이지를 조금 더 활성화하고 투표 현황, 투표 결과도 시각적으로 보여주고자 하는 것이 개발 목표였습니다. 설계 하나의 기능이 추가될 때 크게 3파트의 개발이 진행됩니다. 해당 기능에 필요한 데이터를 위한 DB 설계 클라이언트에게 보여주기 위한 프런트 개발 기능의 비즈니스 로직을 처리하기 위..
배경 홈페이지에 선거 기능을 추가하고자 API 개발 도중 데이터베이스 설계상 컬럼 2개를 사용하여 복합키를 가지는 테이블을 발견하였습니다. 이전까지의 테이블은 하나의 컬럼을 통해 데이터를 식별하도록 설계하였기에 @Id 어노테이션을 사용하여 간단히 엔티티로 생성할 수 있었지만 복합키를 가지는 경우는 처음 마주쳤기에 이를 해결하는 과정을 정리해보고자 합니다. 복합키 단점 1. FK를 맺을 때 사이드 이펙트가 크다 CREATE TABLE library ( region_no varchar(10), library_name varchar(50), CONSTRAINT PK_library PRIMARY KEY (region_no, library_name) ); CREATE TABLE book ( book_id int,..
이번 장에서는 코드 냄새에 관해서 얘기하고 있습니다. 직접 리팩토링하면서 겪은 경험에 관해 얘기하고 있는 부분이기에 어쩌면 이번 책에서 가장 핵심적인 내용이라고 볼 수 있습니다. 읽으면서 기록으로 남길만한 정보들은 남겨보도록 하겠습니다. 주석 부적절한 정보 다른 시스템에 작성될 정보를 코드 주석으로 다는 것은 적절하지 않습니다. 굳이 작성한다면 작성자, 최종 수정 일자, 소프트웨어 번호 등과 같은 메타 정보만 주석으로 작성합니다. 주석은 코드와 설계에 대한 설명을 부연하는 수단입니다. 환경 여러 단계로 빌드하고 테스트해야 한다 가장 이상적인 빌드는 명령어 하나로 빌드가 이루어지는 것입니다. 빌드를 하기 위해서 이것저것 파일을 찾고 명령어를 칠 필요가 존재하지 않아야 합니다. 요즘은 IDE가 이러한 빌드를..