当前位置: 首页 > 软件库 > Web应用开发 > >

event-recommender-festa

授权协议 Readme
开发语言 Java
所属分类 Web应用开发
软件类型 开源软件
地区 不详
投 递 者 东方和惬
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

�� FESTA! ��

사용자가 설정한 지역의 이벤트와 행사를 추천해주는 서비스 입니다.
백엔드 로직에 집중하기 위해서 화면은 프로토타입으로 설계하였으며REST API 서버로 대용량 트래픽을 고려한 애플리케이션으로 개발하였습니다.보다 더 자세한 사항은 WIKI 에서 확인이 가능합니다.


�� 프로젝트 사용기술



�� 전체 프로젝트의 구조

image



�� WIKI

화면설계에 대한 kakao oven 프로토타입 디자인과 Usecase를 보실 수 있습니다.API에 대한 상세하게 설명해두었으며 기술적인 문제에 부딪혀 해결한 이야기에 대한 개인 테크블로그의 주소도 포함되어있습니다.



�� 프로젝트 주요 관심사

✔️ 대용량 트래픽의 상황에서 지속적인 서버 성능을 개선하기 위해 노력하였습니다.
✔️ 클린코드를 위한 꾸준한 코드 리팩토링을 진행 중입니다.
✔️ 이유와 근거가 명확한 기술의 사용을 지향합니다.
✔️ 객체지향적 개념을 이해하고 이를 코드에 녹여내어 의미있는 설계를 지향하였습니다.
✔️ 성공만 하는 테스트 보단 실패할 만한 단위 테스트를 작성하였습니다.
✔️ 반복적인 작업은 자동화하여 개발의 효율을 높이기 위해 노력하였습니다.


�� Git-Flow 브랜치 전략

Git-Flow 브랜치 전략에 따라 기능별로 브랜치를 나누어 작업하고 있고모든 브랜치에 대해 pull request를 통한 리뷰 완료 후 Merge를 하고 있습니다.


image


master : 제품으로 출시될 수 있는 브랜치를 의미합니다.
develop : 다음 출시 버전을 개발하는 브랜치입니다. feature에서 리뷰완료한 브랜치를 Merge하고 있습니다.
feature : 기능을 개발하는 브랜치
release : 이번 출시 버전을 준비하는 브랜치
hotfix : 출시 버전에서 발생한 버그를 수정하는 브랜치


참고문헌


�� PR 규칙

  • 신규개발 건은 develop 을 base로 feature/#이슈번호 의 브랜치명으로 생성 후 작업한 다음 PR을 날립니다.
  • 아직 개발 진행 중이라면 In Progress 라벨을 달고, 코드리뷰가 필요한 경우 Asking for Review 라벨을 답니다. 리뷰 후 리팩토링이 필요하다면 추가로 refactoring 라벨을 달아 진행합니다.
  • 모든 PR은 반드시 지정한 리뷰어에게 코드리뷰를 받아야만 합니다.
  • 리뷰어 중 1명 이상의 Approve 를 받아야 Merge pull request 를 할 수 있습니다.
  • commit 을 할 때마다 Jenkins CI가 자동으로 실행되며 단위테스트, 통합테스트에 모두 통과되어야 Merge pull request가 가능합니다.

�� Jenkins CI/CD

빌드와 테스트를 자동화 하여 개발 효율성을 높일 수 있도록 젠킨스를 활용하였습니다.아래의 주소를 통해 젠킨스 status 확인이 가능합니다.

젠킨스 주소 바로가기

✔️ Jane096's Jenkins : http://34.64.107.105:8081/
✔️ Yo0oN's Jenkins : http://34.64.243.124:8082/


�� nGrinder 성능테스트

네이버에서 개발한 오픈소스 플랫폼인 nGrinder를 이용해 성능테스트를 진행 중입니다.



�� 화면 구성도

image



image



�� DB ERD 구조

event-recommender-festa-erd

DB 테이블 설계: https://docs.google.com/spreadsheets/d/19-vpLojODE6La68Jk_XspwSI7-4wW4TMxH7wVmMMXQU/edit?usp=sharing



 相关资料
  • Type: DOMEvent MooTools的DOMEvent方法。 DOMEvent Method: constructor 语法: new DOMEvent([event[, win]]); 参数: event - (event, required)HTMLEvent对象。 win - (window, optional: defaults to window)事件的上下文。 属性: pag

  • 组件 触发字符 mui.on(事件绑定) mmon mui.off(事件取消) mmoff mui.trigger()(事件触发) mtrigger mui.fire()(自定义事件) mfire document.getElementById() dg document.querySelector() ds document.querySelector().addEventListener()

  • Swoole扩展还提供了直接操作底层epoll/kqueue事件循环的接口。可将其他扩展创建的socket,PHP代码中stream/socket扩展创建的socket等加入到Swoole的EventLoop中, 否则第三方的$fd如果是同步IO会导致Swoole的EventLoop得不到执行,参考案例。 !> Event模块比较底层,是epoll的初级封装,使用者最好有IO多路复用编程经验。 事

  • 描述:描述一个事件。 语法 @event <className>#[event:]<eventName> 概述 描述一个事件。@event标签允许您描述一个可触发的事件,一个典型的事件是由对象定义的一组属性来表示。 标签来定义事件的具体类型,您可以使用@fires标记,以表明这个种方法可以触发该事件。你还可以使用@listens标签,以指示表明用这个表示来侦听该事件。 JSDoc自动预先考虑命名空

  • Event::fire('foo.bar', array($bar)); // 注册一个事件监听器. // void listen(string|array $events, mixed $listener, int $priority) Event::listen('App\Events\UserSignup', function($bar){}); Event::listen('foo.*',

  • 此绑定用于侦听特定的DOM事件以及基于它的与处理程序函数关联的调用。 Syntax event: <{DOM-event: handler-function}> Parameters 参数包含一个JavaScript对象,包含将被侦听的DOM事件和一个需要根据该事件调用的处理函数。 这个函数可以是任何JavaScript函数,也不一定是ViewModel函数。 Example 让我们看一下下面的