Giter Club home page Giter Club logo

yona-archive's People

Watchers

Suwon Chae avatar

yona-archive's Issues

2022년 Yona 사용실태 보고서

@doortts (doortts) 님이 작성한 이슈입니다.
---

2022년 Yona 사용실태 보고서

Yona 는 크게 두 가지 방식으로 현재 유저들이 사용하고 있습니다.

  1. Demo 서버
  2. 배포 설치형

2022년 7월 14일 기준 지난 90일간 사용 내용을 정리합니다.
매년 몇 가지 이유로 Report를 만들곤 하였지만 공개적으로 오픈하는 것이 좋겠다는 생각이 들어 여기에 정리합니다.

사용자수 (최근 90일 기준)

  • Demo 서버

    • 약 7,900 명의 고유 사용자가 이용했습니다
      ![Google Chrome-2022-07-14-165429.png](../wiki/files/16533/Google Chrome-2022-07-14-165429.png)
  • 배포 설치형

    • 약 16,000 명의 고유 사용자가 활용했습니다
      ![Google Chrome-2022-07-14-165605.png](../wiki/files/16534/Google Chrome-2022-07-14-165605.png)
  • Yona 제품의 특징상 소규모 팀에서 주로 사용하고 또한 많은 경우 업무용으로 활용하기 때문에 절대적으로 적은 숫자라고 볼 수 없는 숫자라고 생각합니다.

  • 다만, 기존 분기대비 데모서버 및 설치형 서버의 사용자 수가 6~9 퍼센트 정도 감소한 것을 볼 수 있습니다.

History

  • 최초 외부 공식 릴리즈는 2014년에 시작되었고, 현재 약 8년의 시간이 지났습니다.
  • Yobi 라는 이름으로 공개되어, 2016년 2월에 공식 배포 중단이 된 이후 커뮤니티 프로젝트로 Yona 라는 이름으로 fork 된지 햇수로 7년째가 되었습니다.
  • 많은 분들의 도움으로 이어져 올 수 있었고, 공식 Supporter 인 NAVER LABS 와 개발환경과 테스트 환경, 데모서버등을 지원해 주신 NAVER Cloud로 부터 많은 도움을 받아 왔습니다.

여전히 많이 부족한 SW이지만 이를 통해 조금이나마 더 나은 세상을 만들어 갈 수 있도록 도움 주신 모든 분들께 항상 감사하고 있습니다. 고맙습니다.

--- attachments ---
[Google Chrome-2022-07-14-165429.png](../wiki/files/16533/Google Chrome-2022-07-14-165429.png)
[Google Chrome-2022-07-14-165605.png](../wiki/files/16534/Google Chrome-2022-07-14-165605.png)

리뷰어 지정기능

@doortts (doortts) 님이 작성한 이슈입니다.
---

코드 리뷰어를 지정하거나 진행중인 리뷰어 좀 더 잘 보이게 만드는 기능

예전에 만들던것을 다시 끌어올릴지(refloat) 아니면 다시 만들지는 고민해 보기로

메일 문의

@mnctjeodyd (바론시스템 서대용) 님이 작성한 이슈입니다.
---

데모버전으로 요나를 사용중에 있습니다.
이슈등록후에 업무대상자 메일수신이 안되고있습니다.
확인좀 부탁드립니다.
@yona-projects/yona

관리자 계정은 어떻게 생성 및 확인이 가능한가요?

@feelongpark (박필홍) 님이 작성한 이슈입니다.
---

요나를 우여곡절끝에 설치하였고 테스트 하였습니다

처음에 계정을 생성하였고 이런저런 테스트를 진행하던중

관리자 기능이 없는거 같아 검색해보니,

처음에 관리자 설정창이 뜬다고 하였습니다.

헌데 저는 그런 화면을 확인 못하였는데

혹시 기본적으로 생성되어 있는 admin 계정이나 비밀번호가 있으면

좀 알려주시면 감사하겠습니다.

yona 데모에서 사용한 데이터 백업.. 가능할까요?

@mnctjeodyd (바론시스템 서대용) 님이 작성한 이슈입니다.
---

안녕하세요
yona를 데모버전에서 프로젝트 관리를하였습니다..

이번에 서버를 구축하여 관리하려고 yona를 사내서버로 구축하였습니다.

혹시나.. 데모 버전에서 사용했던 프로젝트 데이터를 백업해주실수 있으실까요?

비용이 들더라고 부탁드리고싶습니다..

가능할까요?... 부탁드립니다!!

이슈 테이블, 커멘트 테이블 정보를 excel 추출해주시면 될것같습니다 ㅠㅠ 안될까여?

@doortts

20배 빨라진 요나! (20x faster Yona!)

@doortts (doortts) 님이 작성한 게시글입니다.
---

목차

  • fork 이후 작업내용
  • 접근방법
  • 지금까지는 그럼 왜? (어른들의 사정)
  • 향후 추가 성능 개선 방향 및 계획

fork 이후 작업내용

1. 밀렸던 기능들 merge
    - 그 동안 만들었지만 merge 하지 못했던 코드들
    - 만들면 금방인데 이런저런 이유로 못했던 기능 작성
3. h2 버전과 분리. MariaDB 로 이전
   - MySQL과 차이점 및 버전 비교
    - 성능자료 및 라이선스 확인
4. 성능 튜닝

성능 튜닝 접근방법

제목은 거창하지만 실제로 한 일은 그저 아주 교과서적인 내용을 그대로 진행했을 뿐입니다.

  • 사람보다 기계를 믿는다.
    • DDL auto generation
    • optimization commands
  • 설정 정리
    • connection pool 확인
    • thread pool 확인
  • 동시처리가 더 좋은 DB 사용 (H2 -> Maria)
    • 해당 DB의 특성 확인
    • 처리 옵션 확인
  • 느린곳을 찾는다. -> 해결가능한가 살펴본다 -> 인덱스, 캐시, 로직우회, 불필요한 요청 skip 등등을 적용해보고 테스트 해본다. -> 기본적으로는 apache bench 를 이용해서 1 user 부터 40~50 user까지 테스트 해본다 -> 테스트 장비가 full load가 걸려서 test 시에 performance drain이 생기지 않게 유의 -> 반복

DB

  • engine option 및 collation type에 따른 성능 확인
    • utf8mb4_bin, utf8mb4_unicode_ci
  • pk, fk에 인덱스가 잘 걸려 있는지 확인
  • 느린쿼리 찾기
    • MariaDB에서 옵션을 설정해서 sql trace
      #General Query Log
      general_log
      
      #Error Log
      
      #Slow Query Log
      slow_query_log = 1
      log-queries-not-using-indexes
      
    • full scan 제거
    • function index 처리 가능확인
      • Mariadb virtual column 테스트
  • 다량 쿼리 찾기
    • trace option 을 통해 페이지별 실행 sql 확인
    • memoization 등을 통해 쿼리 줄이기
  • connector 옵션 확인 후 테스트
  • pool size, timeout 조정하면서 테스트
  • DB block size 확인
  • column data compression 부하 확인
      row_format=compressed, key_block_size=8
    
  • DB lock 발생부분 확인
    • Next-key Locks, Gap lock 발생 부분 확인하기
      • @Transcational 영향 확인
      • 필요시에만 호출되게 하고 akka/promise로 동작하도록 변경

Application

  • CPU 사용이 많은 부분 찾아서 우회하거나 캐싱하기
    • 대체 모듈/엔진 테스트 (rihino, nashorn, marked.js front, markedj 등)
  • 자주 호출되는 메소드 확인
    • 필요할때만 호출되도록 변경
  • 권한에 따른 탐색이 깊어지고 쿼리가 다량 호출 되는 부분 확인
    • early return
    • memoization
  • Cache 사용 (HashMap memoization, guava cache)
    • 캐싱데이터도 zip 압축해서 메모리 사용량 줄이고 원본대비 사이즈 확인 (20% ~ 40% 사이즈 감소)
      • 느려지는 속도도 확인 (10% drain, 10ms -> 11ms)
    • 페이지 캐시는 나중으로 미루고 아직 적용하지 않음.
  • js/css등의 리소스 병합(resource concatenation)
    • latency sum이 줄어들고 page loading 시간 감소. 브라우저로 테스트 및 확인
  • 배경 이미지 사이즈 조절

튜닝결과

  • Concurrency는 높이고 CPU 사용은 줄이고 SQL call 분량도 줄게 되었습니다.
  • 일부 기능/페이지에 있어서는 Embedded 로 동작하는 H2 DB의 수준을 넘어서게 되었고
  • H2 기반으로 동작할때 조차도 기존보다 훨씬 빠르게 동작하게 되었습니다. (Yona H2 버전에 반영)
  • 처리한 내용 각각에 대해서는 AB(Apache Bench) 테스트 결과와 함께 다시 따로 항목별로 정리하기로 하겠습니다.

특히 worst 경우에 해당하는 '본문 + 댓글 55개'의 페이지의 단순 렌더링 처리부분에서만도

warm-up 상태 기준

기존 상태 BEST

Document Length:        880592 bytes

Concurrency Level:      10
Time taken for tests:   6.064 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      8807700 bytes
HTML transferred:       8805920 bytes
Requests per second:    1.65 [#/sec] (mean)

Percentage of the requests served within a certain time (ms)
  50%   4783
  66%   4822
  75%   5005
  80%   5038
  90%   6063
  95%   6063
  98%   6063
  99%   6063
 100%   6063 (longest request)

BAD (튜닝전 H2 DB)

Document Length:        892908 bytes

Concurrency Level:      10
Time taken for tests:   20.210 seconds

그리고 경우에 따라 warm-up 상태, worst는 (튜닝전 MariaDB)

Document Length:        878772 bytes

Concurrency Level:      10
Time taken for tests:   54.772 seconds
Complete requests:      10

Percentage of the requests served within a certain time (ms)
  50%  47777
  66%  51844
  75%  51844
  80%  51844
  90%  54771
  95%  54771
  98%  54771
  99%  54771
 100%  54771 (longest request)

였으나 튜닝 후 -->

Document Length:        892908 bytes

Concurrency Level:      10
Time taken for tests:   1.513 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      8930670 bytes
HTML transferred:       8929080 bytes
Requests per second:    6.61 [#/sec] (mean)
Time per request:       1513.419 [ms] (mean)
Time per request:       151.342 [ms] (mean, across all concurrent requests)
Transfer rate:          5762.69 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%   1476
  66%   1487
  75%   1497
  80%   1507
  90%   1512
  95%   1512
  98%   1512
  99%   1512
 100%   1512 (longest request)

수준으로 떨어졌습니다.

단순 비교만으로도 기존 best 상태기준 동일시간 처리량이 4배가 되었습니다. (여기에는 커넥션 요청 감소등 기타 리소부분 튜닝은 제외한 상태입니다.)
그리고 동일자원에서 동시 처리 가능한 접속자 숫자도 늘었고 네트워크 자원은 덜 쓰며 페이지는 더 빨리 열리게 바뀌었습니다.

지금까지는 그럼 왜?

  • 음.. 막상 쓰려고 보니.. 음.. 반성의 마음 뿐이라 할말이 없네요..
  • (...반성.. 반성..)

향후 추가 성능 개선 방향 및 계획

사실 현재정도면 이미 충분히 안정적이 되었고 빨라 졌기 때문에 당분간은 성능을 좀 더 쥐어짜내지 않아도 될 것 같습니다.
(Yona H2 버전 자체도 더더 빨라졌기때문에 말이죠.) 그럼에도 몇 가지 더 정리한다면

  • network을 통한 resource 요청을 좀 더 줄이기
  • EBean(ORM) 쿼리량을 좀 더 줄이기
  • 댓글 유저가 많을 경우 각 유저의 avatar image 요청과 확인(304가 나오더라도 latency가 생기니까)을 어떻게 줄일까에 대한 고민
  • 권한체크의 깊이를 더 줄이고 불필요한 체크를 최소화 하기
    정도를 생각하고 있습니다.

위에 기술한 작업들 각각에 대해서는 진행하면서 raw data를 최대한 남겨 놓았기 때문에 시간되는대로 다시 정리해서 공유하도록 하겠습니다.
(그래 봐야 스스로 반성만 깊어질테니.. 의미가 있나 싶기도 하지만..)

ps.

밤에 집에와서 하려면 참 에너지도 없고 힘들긴 하네요. 크~
(느릿느릿~)

MariaDB 팁

@doortts (doortts) 님이 작성한 게시글입니다.
---

mysqlcheck -uroot  --analyze --all-databases

가끔 한 번씩 해주면 좋음

왜 Yona를 써야 하나? (Why Yona?)

@doortts (doortts) 님이 작성한 게시글입니다.
---

Yona: 설치형 이슈트래커 + 코드 저장소

요약

- 메일기반보다 이슈트래커를 기반으로 일을 하게되면 여러가지 효율이 증가 됩니다. 
- 네이버는 몇 년 전 부터 이 제품을 기반으로 SW개발 뿐 아니라 일반 업무진행까지 사내 업무의 다수를 진행하고 있습니다.
- 그 외에도 게임회사, 통신회사 고객센터, 투자사, 학교, 기업등에서 실제 사용되고 있는 Real World Application 입니다

왜 Yona를 써야 하나?

  • 함께 일하면서 찾아가는 진정한 가치, 소통과 협업
    • 팀 업무 및 회사의 업무 생산성이 높아지며 정보의 생성, 축적, 공유가 훨씬 좋아집니다.
    • Yobi는 시작단계에서부터 프로젝트이슈, 담당자라는 최소한의 장치로 최대의 효율을 얻을 수 있도록 설계되어 있습니다.
  • 개발조직/비개발조직 간의 진정한 협업을 지향
    • 세상엔 다양한 도구들이 있지만, 개발팀 위주의 기능으로 만들어져 있거나 혹은 비 개발자/스텝들만이 사용할 수 있는 제품이 대다수입니다.
    • 코드를 참조해서 이야기하고, 디자인 시안을 같이 보고, 만들어진 HTML/CSS 파일을 별도의 서버 없이 바로 보며 함께 이야기할 수 있는 도구는 거의 없습니다.
    • Yona는 기획자부터 시작해서 코드를 커밋하는 개발자까지 한 플랫폼에서 서로 공간을 오가며 막힘없이 같이 일할 수 있는 SW입니다.
  • 쉬운 화면 간단한 사용방법
    • 직관적인 메뉴 구성, 불필요한 메뉴 제거, 간편한 파일 첨부, 공유 등을 매우 쉽게 사용할 수 있습니다.
  • 모든 데이터/업로드된 파일/소스코드 등에 대한 완전한 소유 및 접근
    • Yona는 설치형으로 제공됩니다.
    • 따라서 필요한 만큼 보완수준을 높이거나 낮출 수 있으며
    • 데이터 및 자료에 대한 확실한 보호 및 원하는 형태로의 모든 접근이 가능합니다.
    • 또한, 외부 서비스의 정책 변경, 종료 등 다양한 의도치 않은 상황에 Yona 사용조직은 충격을 받지 않게 됩니다

믿고 쓸만 한가?

  • 엔터프라이즈 레벨의 실적용 사례 기반 SW
    • Yona의 전신인 Yobi는 이미 '네이버'내부에서 수천 명이 수천 개의 프로젝트를, 수년간 매일같이 실제 제품, 서비스를 만드는 데에 사용해 왔습니다.
    • 또한, 비 개발팀/Staff 조직 등 다양한 조직에서도 진입장벽 없이 사용될 수 있게 구성되어 있으며
    • 메일로 진행하던 업무를 이슈 기반으로 변경하는 등 전반적인 업무스타일에 변화를 가져올만큼 쉽게 강력하게 사용되고 있습니다.
      • 현재 약 40% 가량의 프로젝트는 code가 존재하지 않는 공동 업무 진행을 위해 만들어진 이슈 트래킹 프로젝트입니다.
      • TF, 문서저장소, 스터디, 개인 학습정리용 등등 사용이 쉽고 강력해서 많은 팀들이 코드 없는 프로젝트로 불필요한 메뉴를 감추고 사용하고 있습니다.
    • 현재 약 200여개의 사이트에서 Yona의 전신인 Yobi가 운영되고 있습니다.
  • 더 나은 Yobi
    • Yona는 속도, 안정성, 기능, UI 등 모든 면에서 더 나은 Yobi입니다.
  • 수정 가능하고 공개된 코드
    • 오픈소스로 제공되기 때문에 필요하면 코드를 고쳐서 사용할 수 있습니다.
  • 라이선스 관리
    • Yona는 기본적으로 Apahce2 라이선스를 준수하며
    • Yona를 사용하는 조직이 그 자체를 상용화해서 판매해도 문제가 없을 정도로 사용 라이브러리 및 설치 사용 시의 라이선스 관리에 주의를 기울이고 있습니다.

Synology Docker 에서 GUI로 yona 실행

@witbox (witbox) 님이 작성한 이슈입니다.
---

Synology Docker GUI

예전에 Synology docker 에서 yona를 실행하려고 시도했지만, 말이 synology docker였지 예전방법을 그대로 cui로 진행했어야 했습니다.

이번에는 100% GUI로 실행이 가능하도록 만들어보았습니다.

pokev25 님의 docker-yona 와 nayasis 님의 yona_script를 참조하였습니다.

저 혼자 쓰려고 만든거라, 문서는 없으니 궁금한 점이 있으시면 이 이슈에 댓글로 남겨주세요.

네트워크 생성

가장 첫 순서로 네트워크를 추가합니다. 저는 yona 로 만들었습니다.

21993-2021-5-13-18-15.png

mariadb 컨테이너 생성

이미지 --> 추가 --> URL에서 추가

witbox/mariadb 추가

10.3 선택 후 추가
31677-2021-5-13-18-18.png

다운로드가 완료되면 이미지를 실행하세요.

컨테이너 이름이 중요합니다. 나중에 yona에서 db 접속 시 컨테이너의 이름으로 접속합니다.

저의 경우에는 yona_mariadb 라는 이름으로 만들었습니다.

고급설정에서

  1. 볼륨
  • 파일폴더: Synology Docker의 mysql 폴더
  • 마운트 경로: /var/lib/mysql (컨테이너 내부의 경로)
  1. 네트워크
  • 윗 단계에서생성한 네트워크 선택
  1. 환경변수 설정. 아래의 각각의 항목에 임의의 값을 넣어줍니다.
    MYSQL_USER 와 MYSQL_DATABASE는 application.conf 에 들어갈 항목입니다.
  • MYSQL_ROOT_PASSWORD
  • MYSQL_PASSWORD
  • MYSQL_USER
  • MYSQL_DATABASE

생성이 되고 실행이 정상적으로 되는지 확인합니다.

3469-2021-5-13-18-23.png

yona 컨테이너 생성

witbox/yona 추가
18186-2021-5-13-18-25.png

이미지로 이동해서 실행하세요.

고급설정에서

  1. 포트설정
  • 로컬: 9000 또는 임의의 포트
  • 컨테이너: 9000
  1. 볼륨
  • 파일폴더: Synology Docker 의 data 폴더
  • 마운트 경로: /yona/data
  1. 네트워크
  • 위와 동일한 네트워크 선택

생성이 되면 실행합니다.

처음 실행하면 잠시 실행되다가 컨테이너가 정지합니다.
54559-2021-5-13-18-26.png

application.conf 설정

File Station 에서 yona_data/conf/application.conf 파일을 찾아가서 편집합니다.

131번째 줄부터 있는 내용을 수정합니다.

# MariaDB
db.default.driver=org.mariadb.jdbc.Driver
db.default.url="jdbc:mariadb://yona_mariadb:3306/yona?useServerPrepStmts=true"
db.default.user=yona
db.default.password="패스워드"

중요: 기존의 jdbc:mariadb://127.0.0.1:3306 에서 jdbc:mariadb://yona_mariadb:3306 로 변경합니다.

127.0.0.1 대신 위 mariadb 의 컨테이너 이름이 들어가야 합니다.

그리고 위의 MYSQL_USER 와 MYSQL_PASSWORD 의 값을 넣어줍니다.

나머지 필요한 설정을 하고 저장한 다음 컨테이너를 시작합니다.

26405-2021-5-13-18-29.png

웹 브라우저에서 접속

정상적으로 시작 되면 웹브라우저에 http://호스트IP:9000 (또는 임의의 설정한 포트) 로 접속이 가능합니다.

누군가에겐 도움이 되시길 바랍니다.

--- attachments ---
yona-db.png
21993-2021-5-13-18-15.png
31677-2021-5-13-18-18.png
3469-2021-5-13-18-23.png
18186-2021-5-13-18-25.png
54559-2021-5-13-18-26.png
26405-2021-5-13-18-29.png

1.16 업데이트 후 초안 글등록 후 목록에서 안보이는 오류

@gusdn1024 (이현우) 님이 작성한 이슈입니다.
---

@doortts
1.16 업그레이드 후 초안 글등록 후 목록에서 안보입니다.

1.15.1 버전 후 1.16으로 업그레이드 하여 테스트 서버 후 배포 예정 중인데 현재 1.16으로
진행하고 아래와 같은 문제점으로 인하여 업데이트 진행을 못하고 있습니다.
환경설정파일은 별도로 건들지 않고 있습니다.

  • 증상(초안으로 저장)
    25367-2023-3-2-14-36.png
    5272-2023-3-2-14-36.png

  • 목록화면
    19418-2023-3-2-14-37.png

--- attachments ---
25367-2023-3-2-14-36.png
5272-2023-3-2-14-36.png
19418-2023-3-2-14-37.png

Update README.md

@doortts (채수원) 님이 작성한 게시글입니다.
---

Yona는 개발 중단된 Yobi를 이어나가기 위해 만들어진 fork 프로젝트입니다. 아직 하단 문서의 이름표기는 update 되어 있지 않습니다.

Yobi 에서 Yona 로 변경 방법

  • 새로 설치하는 분은 본문의 내용대로 파일을 내려 받아서 설치하면 됩니다.
  • 기존 yobi를 설치해서 사용하시는 분들은 아래 설정을 수정하시면 이후 yona 버전으로 업데이트를 받으실 수 있습니다.

application.conf

  • 추가
application.update.check.use = true
  • 값 변경
# Application feedback url at top layout menu. You can remove feedback menu by commenting it.
application.feedback.url="https://github.com/yona-projects/yona/issues"

application.update.repositoryUrl = "https://github.com/yona-projects/yona"
application.update.releaesUrlFormat = "https://github.com/yona-projects/yona/releases/tag/v%s"

git remote 변경

git remote set-url origin https://github.com/doortts/yona

이하는 이전 README 내용입니다.


[한국어]
Yobi

Build Status

Yobi is a web-based project hosting software.

What is Yobi?

Yobi is a web-based project hosting software.
To increase productivity and quality of your software Yobi offers many features including

  • Issue tracker to manage bugs and issues
  • Bulletin board to share documents
  • Git/SVN support embedded
  • Pull-request for collaborative coding

License

Copyright 2015 NAVER Corp. under the Apache License, Version 2.0

How to install

Install from binary

Install

Download the latest version of Yobi from http://yobi.io/yobi.zip and unzip it.
If you have wget and unzip:

wget http://yobi.io/yobi.zip
unzip yobi.zip

Start

Go the directory and start Yobi. If the directory is yobi-1.0.0:

cd yobi-1.0.0
bin/yobi

Note: If you are using Windows, run "bin/yobi.bat" instead of "bin/yobi".

Open http://127.0.0.1:9000 with your web browser then you can see the welcome
page.

Upgrade

Download the latest version of Yobi and unzip it.

Note: Don't overwrite or delete yobi.h2.db file, repo & uploads directory!

Build from source

Check JDK version

java -version
javac -version

JDK version 7(1.7) or 8(1.8) is required.

Download Play Activator

curl -O http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

or

wget http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

or using web browser (for windows)

http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

Unzip

unzip typesafe-activator-1.2.10-minimal.zip

Change directory to unzipped directory

cd activator-1.2.10-minimal

Download Yobi

Case1. Using git client (recommended)

git clone https://github.com/naver/yobi.git

or

Case2. Just download the latest stable release
If you want to download one of the stable releases, you can download a compressed file by clicking the URL below. And then name it a yobi and unzip it.

https://github.com/naver/yobi/archive/master.zip

Caution! In case2, You might come across troubles when you try to upgrade Yobi.

You can locate your own Yobi directory in any other place. Please note that you must add Play Activator home path to $PATH environment in that case.

Change directory to cloned Yobi directory (or cd to your unzipped file directory)

cd yobi

Run Play Activator

../activator

or (for windows)

..\activator

Required files will be download automatically. In the first time, it may take about 10 min or more.

Type start command in console

start

It will download additional files and compile sources.

If you want to run Yobi in development mode, use run. You can see more detailed errors and can use dynamic compilation.

Connect with browser

http://127.0.0.1:9000

If you want to change port, check your permission to use 80 port. See 'Options' section for more information.

Upgrade Yobi

Case1. Using git client (recommended)
In installed directory, just type git update command.

git pull https://github.com/naver/yobi.git master

Case2. Download zip file

In installed directory, download the latest release file and unzip it.

https://github.com/naver/yobi/archive/master.zip

Be careful! Don't overwrite or delete yobi.h2.db file, repo & uploads directory!

If you are installing Yobi in Windows system, you may need set applyEvolutions.default Java property to true. See 'Options' section for more information

Options

When start yobi, You can specify the home directory to contain data for Yobi.
If you want to use /home/user/.yobi as the home directory, set 'yobi.home'
property as follows:

bin/yobi -Dyobi.home=/home/user/.yobi

Note: Yobi doesn't load the configuration files from the home directory. If you
want to do that, specify the path to the config files as follows:

bin/yobi -Dyobi.home=/home/user/.yobi -Dconfig.file=/home/user/.yobi/conf/application.conf -Dlogger.file=/home/user/.yobi/conf/application-logger.xml

You can also specify Java options with _JAVA_OPTIONS environment variable. If
the memory of your system equals to or greater than 4GB, we recommend to start
Yobi as follows:

_JAVA_OPTIONS="-Xmx2048m -Xms2048m" activator "start -DapplyEvolutions.default=true -Dhttp.port=9000"

Linux and OSX

When start yobi, you can specify the home directory to contain data, the
database file and configuration files for Yobi. For example, if you want to
use /home/user/.yobi as the home directory, set YOBI_HOME as follows:

YOBI_HOME=/home/user/.yobi bin/yobi

You can also specify Java options with _JAVA_OPTIONS environment variable. If
the memory of your system equals to or greater than 4GB, we recommend to start
Yobi as follows:

_JAVA_OPTIONS="-Xmx2048m -Xms2048m" bin/yobi

Yobi use 9000 port for HTTP connection by default. If you want to use another
port, set http.port Java property.

_JAVA_OPTIONS="-Dhttp.port=80" bin/yobi

Windows

When start yobi, you can specify the data directory, the config file, the
config file for logger with yobi.home, config.file and logger.file as follows:

SET JAVA_OPTS=-Dyobi.home=/home/user/.yobi -Dconfig.file=/home/user/.yobi/conf/application.conf -Dlogger.file=/home/user/.yobi/conf/application-logger.xml
bin\yobi.bat

You can specify the database file in application.conf as follows:

db.default.url="jdbc:h2:file:/home/nori/.yobi/yobi"

You can also specify Java options with _JAVA_OPTIONS environment variable. If
the memory of your system equals to or greater than 4GB, we recommend to start
Yobi as follows:

SET JAVA_OPTS=-Xmx2048m -Xms2048m
bin\yobi.bat

Yobi use 9000 port for HTTP connection by default. If you want to use another
port, set http.port Java property.

_JAVA_OPTIONS=-Dhttp.port=80
bin\yobi.bat

If you are upgrading Yobi from the previous version, the upgrade may fail with
a warning message that says you need migration as follows:

[warn] play - Your production database [default] needs evolutions!

In such case, set applyEvolutions.default Java property to true and restart
Yobi.

SET JAVA_OPTS=-DapplyEvolutions.default=true
bin\yobi.bat

For more information about options

See http://www.playframework.com/documentation/2.3.6/Production.

Backup

Copy the below file and directories to another place.

file: yobi.h2.db
directory: repo, uploads



for korean

[English]

Yobi

협업 개발 플랫폼

Official Site: http://yobi.io

Yobi 소개

Yobi (구 nFORGE)는 협업 개발을 위한 프로젝트 호스팅 SW입니다.

  • 버그나 이슈를 관리할 수 있는 이슈 트래커
  • 각종 문서와 정보를 간편하게 공유할 수 있는 게시판
  • 소스코드의 변경내역을 편리하게 관리할 수 있는 형상관리 도구 git/svn 기본 내장
  • 협업개발을 위한 코드 주고받기

등을 비롯하여 팀 개발을 위한 다양한 기능을 포함하고 있습니다.

라이선스

Yobi는 Apache 2.0 라이선스로 제공됩니다.

설치하기

다운받아 설치하기

설치

Yobi 최신 버전을 http://yobi.io/yobi.zip 에서 다운받아 압축을 풉니다. 예를 들어
wget으로 받아서 unzip으로 압축을 푼다면:

wget http://yobi.io/yobi.zip
unzip yobi.zip

실행

압축이 풀린 디렉터리로 이동해서 yobi를 실행합니다. 디렉터리가 yobi-1.0.0 이라면:

cd yobi-1.0.0
bin/yobi

주의: 윈도우 사용자는 bin/yobi 대신 bin/yobi.bat을 실행해야 합니다.

이제 웹 브라우저로 http://127.0.0.1:9000 에 접속하면 환영 페이지를 보실 수 있습니다.

업그레이드

설치할 때와 똑같이, 최신 버전을 내려받아 Yobi가 설치된 디렉터리에 압축파일을
풉니다. 주의사항! yobi.h2.db 파일, repouploads 디렉터리를 삭제하거나
덮어쓰지 않도록 주의하세요!

소스 코드에서 빌드하기

JDK version 확인

java -version
javac -version

JDK 7(1.7) 혹은 8(1.8) 이어야 합니다.

Play Activator 내려 받기

curl -O http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

혹은

wget http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

웹 브라우저에서 (이를테면, MS윈도우즈 사용자일 경우)

http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

압축 풀기

unzip typesafe-activator-1.2.10-minimal.zip

압축을 푼 다음 하위 디렉터리로 이동

cd activator-1.2.10-minimal

Yobi 소스 내려 받기

case1. git 클라이언트를 이용한 다운로드 (추천)

git clone https://github.com/naver/yobi.git

case2. 단순히 최신 안정버전을 내려받고자 할 때는 아래 링크를 이용해서 압축파일을 내려받은 다음 yobi를 폴더이름으로 해서 해제합니다.

git pull https://github.com/naver/yobi.git master

주의! case2의 경우, 업그레이드 할 때 문제가 생길 수 있습니다.

임의의 장소에 Yobi 디렉터리를 위치시킬 경우에는 activator 실행파일이 있는 Play Activator 디렉터리를 $PATH 환경변수에 추가해 주세요.

clone 받은 Yobi 디렉터리로 이동

(혹은 압축을 해제한 디렉터리로 이동)

cd yobi

상단에 있는 activator 실행파일 실행

../activator

혹은 (윈도우 사용자일 경우)

..\activator

실행하면 필요한 파일들을 web에서 내려받습니다. 첫 실행 시 네트워크 상황에 따라 10여 분 가까이 소요될 수 있습니다.

콘솔이 뜨면 start 명령어로 기동

start

추가로 필요한 파일들을 web에서 내려받은 다음 소스 파일들을 컴파일 후 운영 모드(production mode)로 실행합니다.
개발 모드(development mode)로 실행하고자 할 경우에는 start 명령어 대신에 run 명령어로 실행합니다.

주의사항: 설정 파일 및 데이터가 기본적으로 target/universal/stage 디렉터리에
저장됩니다. 이 디렉터리는 activator clean 실행 시 모두 삭제되므로, 아래의 옵션
설정방법을 보고 데이터가 저장될 디렉터리를 설정하시는 것이 좋습니다

브라우저로 접속

http://127.0.0.1:9000

80 포트 등으로 포트를 변경하고 싶을 경우에는 해당 포트가 사용 가능한지 확인한 다음 80 포트를 사용할 수 있는 계정으로 실행합니다. 포트 변경 방법에 대해서는 '옵션' 문단을 읽어주세요.

업그레이드하기

case1. git 클라이언트를 이용 (추천)
설치된 디렉터리에서, 아래와 같은 git 명령어를 이용합니다

git pull https://github.com/naver/yobi.git master

case2. 압축파일을 내려받을 경우

설치된 디렉터리에서, 최신 릴리즈의 압축파일을 내려받아 Yobi가 설치된 디렉터리에 압축파일을 풉니다.

https://github.com/naver/yobi/archive/master.zip

주의사항! yobi.h2.db 파일, repouploads 디렉터리를 삭제하거나 덮어쓰지 않도록 주의하세요!

윈도에서 업그레이드하는 경우, -DapplyEvolutions.default=true 설정이 필요할
수 있습니다. 자세한 것은 아래 옵션 설정 설명을 보세요

옵션

Linux, OSX의 경우

YOBI_HOME 속성을 통해 Yobi가 데이터, 데이터베이스, 설정파일을 불러오고 저장할
홈 디렉터리를 지정할 수 있습니다. 예를 들어, /home/user/.yobi를 홈 디렉터리로
사용하려면 Yobi를 시작할 때 다음과 같이 지정합니다.

YOBI_HOME=/home/user/.yobi bin/yobi

_JAVA_OPTIONS 환경변수를 이용해 자바 환경 변수를 지정할 수도 있습니다. 시스템
메모리가 4기가 이상이라면, 다음과 같은 옵션으로 실행하는걸 권장합니다.

_JAVA_OPTIONS="-Xmx2048m -Xms2048m" bin/yobi

기본적으로 9000번 포트를 사용하지만, 다른 포트를 사용하고 싶다면 http.port 자바
환경변수를 수정합니다.

_JAVA_OPTIONS="-Dhttp.port=80" bin/yobi

Windows의 경우

Yobi를 시작할 때, 데이터 디렉터리, 설정파일, 로그 설정파일의 위치를 각각
yobi.home, config.file, logger.file 자바 프로퍼티로 지정할 수 있습니다.

SET JAVA_OPTS=-Dyobi.home=/home/user/.yobi -Dconfig.file=/home/user/.yobi/conf/application.conf -Dlogger.file=/home/user/.yobi/conf/application-logger.xml
bin\yobi.bat

데이터베이스가 저장될 파일은 다음과 같이 application.conf 설정 파일에서 지정할
수 있습니다.

db.default.url="jdbc:h2:file:/home/nori/.yobi/yobi"

_JAVA_OPTIONS 환경변수를 이용해 자바 환경 변수를 지정할 수도 있습니다. 시스템
메모리가 4기가 이상이라면, 다음과 같은 옵션으로 실행하는 걸 권장합니다.

SET JAVA_OPTS=-Xmx2048m -Xms2048m
bin\yobi.bat

기본적으로 9000번 포트를 사용하지만, 다른 포트를 사용하고 싶다면 http.port 자바
환경변수를 수정합니다.

_JAVA_OPTIONS=-Dhttp.port=80
bin\yobi.bat

업그레이드를 하는 경우 다음과 같이 데이터베이스 스키마 마이그레이션이
필요하다는 경고 메시지와 함께 실행되지 않는 상황을 겪을 수 있습니다.

[warn] play - Your production database [default] needs evolutions!

그런 경우에는 자동으로 마이그레이션이 되도록 다음과 같이
applyEvolutions.default 자바 프로퍼티를 true로 설정합니다.

SET JAVA_OPTS=-DapplyEvolutions.default=true
bin\yobi.bat

옵션에 대한 더 자세한 설명

http://www.playframework.com/documentation/2.3.6/Production 부분을 확인해 주세요.

백업하기

특별히 외부 DB를 사용하지 않는다면 아래 내용을 잘 백업해서 보관해 주시면 됩니다.

file: yobi.h2.db
directory: repo, uploads

이하 내용은 alzkdpf님께서 보충해 주신 0.7.3 에서 0.8.x로 업데이트 방법 가이드이며 소스코드를 이용해서 Yobi를 설치한 경우를 가정해 설명되어 있습니다.
(고맙습니다 alzkdpf님)

0.7.3 에서 0.8 업데이트 방법

DB 백업 방법

!! [주의사항] 백업 및 복구 작업은 절대로 운영중에 수행하지 마세요 !!

Yobi 0.7.3이 설치된 디렉토리(예: ~/play-2.1.0/yobi)에서:

방법 1. 단순 파일 복사를 이용한 백업 (yobi.h2.db 사본 생성)

cp yobi.h2.db yobi.h2.db.bak

방법 2. DB 전체를 sql 파일로 추출하는 방법

java -cp ../repository/local/com.h2database/h2/1.3.168/jars/h2.jar org.h2.tools.Recover

방법 3. sql을 파일을 추출하면서 압축까지 하는 방법

java -cp ../repository/local/com.h2database/h2/1.3.168/jars/h2.jar org.h2.tools.Script -url jdbc:h2:file:yobi -user "" -script ./backup_file_name.zip -options compression zip

Note: 단순 파일 복사는 운영중에는 사용하지 않는걸 권합니다. 운영상태에서는 sql 파일이나 zip파일로 백업하는 방법을 권장드리며 추후에도 h2 라이브러리를 활용해 백업 및 복원을 추천드립니다.

DB 복원 방법

!! [주의사항] 백업 및 복구 작업은 절대로 운영중에 수행하지 마세요 !!

Yobi 0.8이 설치된 디렉토리(예: ~/activator-1.2.10-minimal/yobi)에서:

방법 1. 단순 파일 복사를 이용한 백업 (yobi.h2.db 사본을 이용)

cp yobi.h2.db.bak yobi.h2.db

방법 2. 추출한 sql 파일을 이용해서 복원하는 경우

java -cp ./target/universal/stage/lib/com.h2database.h2-1.3.176.jar org.h2.tools.RunScript -url jdbc:h2:file:yobi -user "" -script yobi.h2.sql

방법 3. zip 으로 압축된 형태의 sql 파일을 이용해서 복원 할 경우

java -cp ./target/universal/stage/lib/com.h2database.h2-1.3.176.jar org.h2.tools.RunScript -url jdbc:h2:file:yobi -user "" script ./backup_file_name.zip -options compression zip

application.conf 설정

application.secret을 사용하던 0.7.3 버전에서 확인후 0.8 로 붙여넣기 합니다.

DB관련 작업을 한 후 정상적으로 페이지가 뜨지 않을 경우 아래 항목을 확인해 주세요.

  • application.conf 가 제대로 읽히는지
  • application.secret 적용여부
  • db.default.url 확인

기타 관련해서는 이슈 #924을 참고해 주세요

Yobi에서 Yona 마이그레이션하는 방법

@doortts (채수원) 님이 작성한 게시글입니다.
---

Yobi 에서 Yona로 Migration 하는 방법

Yona는 더 나은 환경을 제공하기 위해 기본 DB를 H2 Embedded에서 MariaDB로 교체했습니다.
관련해서는 'Yona가 MariaDB를 기본 DB로 사용하게 된 이유'항목을 참고해 주세요.

본 가이드는 Yobi의 마지막 공식 릴리즈인 v0.8.2에서 Yona 1.0으로 마이그레이션(Migration)하는 방법을 기술합니다.
만약 0.7.x 이하의 yobi를 사용하고 계시다면 우선 v0.8.2로 업그레이드를 먼저 해주세요
yobi 0.7x 에서 yobi 0.8.x 로 업그레이드 하기

전체적인 진행 방법에 대한 개요는 아래와 같습니다.

  1. yobi-data-export 버전을 내려 받습니다.
  2. yobi 0.8.2 에서 admin 유저로 설정화면에서 data 를 export
  3. yobi 접속을 차단하고 yobi 중단
  4. 새로 설치한 yona v1.0 디렉터리로 repo, uploads 폴더를 복사
  5. yona 를 실행시킨 다음 admin 유저로 data 를 import

상세내용

  1. yobi-data-export 버전을 내려 받습니다.
    yobi-data-export.zip
    해당 파일은 v0.8.2에 export/import 기능이 추가된 버전입니다.
  2. yobi 0.8.2 에서 admin 유저로 설정화면에서 data 를 export
  • yobi-data-날짜.json 파일을 내려받게 됩니다.
    1217306738593.png
    543339801203.png
  1. yobi 접속을 차단하고 yobi 중단
  • 유닉스 계열일 경우 kill 명령으로 죽입니다. (kill -9를 사용하지 마세요!)
  • DB 데이터에 따라 kill 명령으로의 중단에 수분에서 최대 수십분가까이도 걸릴수도 있으니 차분히 기다려야 합니다.
  1. 새로 설치한 yona 디렉터리로 repo, uploads 폴더를 복사
  2. yona v1.0을 실행시킨 다음 admin 유저로 data 를 import
    609457180545.png

끝.

--- attachments ---
1217306738593.png
543339801203.png
609457180545.png

yona-1.13.0 -> yona-1.14.0 업데이트 문의

@k9943004 (강성원) 님이 작성한 이슈입니다.
---

yona-1.13.0 버전을 사용하고 있는데요. 1.14.0 버전으로 업데이트 하려면 어떻게 버전을 업데이트 하면 되는지 문의 드립니다.

리눅스 OS 에 수동으로 설치한 상태입니다.

Yona v1.0.0 !!!

@doortts (doortts) 님이 작성한 게시글입니다.
---

Yona v1.0.0

중요 변경점

  • Yobi 에서 Yona 로 포크되었습니다.
  • 성능과 안전성이 대폭 증가되었습니다.
    • H2 DB에서 MariaDB를 사용하게 되면서 데이터의 안정성이 증가되었고 다양한 DB 지원도구의 혜택을 누릴 수 있게 되었으며 수 천명 이상이 동시 사용 가능한 제품이 되었습니다.
    • DB와 Application 양쪽 모두 튜닝이 진행되었습니다. 기존 대비 최소 10배 이상 빨라졌습니다.
  • 모바일 페이지를 지원합니다. (패드류는 아직 가로모드만 지원합니다)
  • 가독성이 더 높아지고 더욱 정교하게 가듬어진 마크다운 페이지 (Sophisticated markdown page)

배포파일

beta나 rc(release candidate)등의 글자는 제외하고 설명합니다.

  • yona-v1.0.0-bin.zip
    • 바이너리 실행파일로 제공되는 기본 배포파일
  • yona-h2-v1.0.0-bin.zip
    • 바이너리 실행파일로 제공되는 H2 DB용 배포파일
    • 기본적으로 yobi v0.8.2 이하 사용자는 MariaDB로의 이전을 권장합니다
    • 부득이한 경우 이 파일로 1.0.0으로 업그레이드 가능합니다.
    • 다만 h2-v1.0.0 에서 MariaDB로의 이전을 지원계획이 없으니 유의하세요!
  • yobi-data-export.zip

주의사항

  • Yona는 v1.0 부터 MariaDB를 기본 DB로 사용합니다.
  • Java 8 이상에서 동작합니다.
    • Java 7은 2015년 5월을 끝으로 공식 업데이트 중단이 선언되었습니다. 참고

기능추가

  • 그룹 내의 이슈나 게시글을 한 번에 볼 수 있는 메뉴가 추가되었습니다. [image] 539997a

  • 게시글에도 라벨을 붙일 수 있게 되었습니다. 5e7f61e

  • 이슈/게시판/코드주고받기 등에서 머릿말로 제목 헤더를 간단히 구분해 줄 수 있습니다.

    [Mailbox] 이메일로 등록된 댓글
    

    예를 들면 제목을 위 내용처럼 작성하면 머릿말이 링크로 변하고 클릭해서 바로 검색이 가능합니다. [image]

  • 본인이 작성한 글에 대해서 알림 메일을 발송하지 않는 옵션이 추가되었습니다. [image] 5f64376

  • 프로젝트 이름을 변경하거나 이전했을때 기존 접근url들이 깨지지 않고 변경된 위치로 redirect 시켜줍니다. fd191e6

  • 다른 프로젝트의 라벨을 복사해서 가져오는 기능이 추가되었습니다. [image] ce7677e

  • 프로젝트 생성 시, 멤버 추가시에 기본적으로 해당 프로젝트가 watch 됩니다. facd4b6

  • 그룹프로젝트에서 자신이 지켜보기를 켠 프로젝트를 좀 더 쉽게 확인할 수 있습니다. [image]

  • push commit webhook을 지원합니다. 6ca0edd

  • 본문 및 코멘트의 Header 항목들에대한 링크가 표시됩니다.

변경이 일어난 부분

  • 자신이 작성한 글 대신 자신이 언급한 댓글이 highlight 되어서 표시됩니다. e3f1e14
    • 댓글이 많을 경우 스크롤시에 쉽게 eye catch 가능해졌습니다.
  • 프로젝트 기본 배경, 그룹 기본 배경 및 로고가 변경되었습니다. c3332d1
  • 승인 후 활동가능한 사이트로 운영시에는 가입화면에서 해당 내용을 표시합니다. e9a2dd6

버그픽스

  • 윈도우즈에서 mac 유저의 첨부파일 이름 자소가 분리되어 보이는 현상 44ab8e3
  • 메일서버에 따라 보내는 사람의 한글이름이 정상적으로 표시되지 않는 현상 8896dff

Yona-H2 버전 한정 변경점

**주의! H2 버전은 v.1.0.0 이후로는 소극적으로 버전업이 될 가능성이 높으며 이후 MariaDB로의 이전은 지원하지 않습니다! **

개인용이 아닌 복수개의 팀에서 사용하는 상황이라면 MariaDB 버전으로 업그레이드를 먼저 진행하시길 강력 권장합니다.
Yobi 에서 Yona로 Migration 하는 방법

  • 기능추가/성능개선을 비롯한 Yona 기본 버전(MariaDB)에 포함된 대부분의 업데이트가 반영되었습니다.
  • local h2 db를 접속할 수 있는 스크립트가 추가되었습니다. 2b025b8
  • 일정 규모 이상의 사용시에도 DB 응답속도가 빨라지도록 기본 DB Cache 사이즈를 130M로 늘렸습니다. 9567e9
    따라서 기본 실행시 필요 메모리가 좀 더 필요해 졌습니다. 2G 이상의 시스템에서 사용을 추천합니다.

이외에 다양한 수정과 튜닝이 적용되었습니다.

MariaDB 설정시 에러가 납니다.

@interstander (Jeong cheon uk) 님이 작성한 이슈입니다.
---

마리아DB는 10.3.10 버전을 사용중이며
Yona 설치 매뉴얼에 따라 설치 중입니다.
그런데
set global innodb_file_format = BARRACUDA;
set global innodb_file_format_max = BARRACUDA;
set global innodb_large_prefix = ON;

명령어 입력시
/* SQL 오류 (1193): Unknown system variable 'innodb_file_format' */
메시지가 나오면서 실행이 안됩니다만
검색 해보면 https://mariadb.com/kb/en/changes-improvements-in-mariadb-103/ 문서에서
Remove deprecated variables innodb_file_format, innodb_file_format_check, innodb_file_format_max and innodb_large_prefix.

해당 변수가 제거되었다고 나오는데
그러면 저 명령 없이도 사용이 가능한건지 아니면 다른 대체법이 있는지 궁금합니다.

개발환경 세팅 중 activator HTTPS 오류 조치방안 문의

@leroro (임미선) 님이 작성한 이슈입니다.
---

안녕하세요?
일전에 요나 이슈제보도 한번 드렸었는데, 빠른 답변 주셔서 정말 감사했습니다.

이번에 일부 UI 디자인을 커스텀해 보고자 로컬에 개발환경 설정 중에 있는데,
가이드에서 '만약 HTTPS 관련 오류가 발생한다면'에 해당하는 오류를 만난 것 같습니다.

만약 HTTPS 관련 오류가 발생한다면 ~/.sbt/repositories 파일에 https 주소의 maven central url을 아래 내용처럼 추가해주세요

[repositories]
  maven-central: https://repo1.maven.org/maven2

위 안내에 따라 repositories 파일이 있는지 검색해 봤는데 파일을 찾을 수 없어 막힌 상태입니다.
제가 UI개발자 이다보니 서버쪽 관련 지식이 미천해 조금 더 설명이 필요하네요 😢
어디 부분을 수정해야할지 조금만 더 자세히 알려주실 수 있을까요?

제 상황에 대한 정보는 아래와 같습니다.

Report

  • OS: Window 10
  • java version
    0510-2021-10-18-7-25.png
  • 개발도구 : VSCode
  • 현재 상태
    요나 소스코드 clone 후 activation 단계에서 막힘
    오류구문 아래와 같이 출력됨
:: problems summary ::
:::: WARNINGS
                module not found: org.fusesource.jansi#jansi;1.11

        ==== local: tried

          C:\Users\Administrator\.ivy2\local\org.fusesource.jansi\jansi\1.11\ivys\ivy.xml

          -- artifact org.fusesource.jansi#jansi;1.11!jansi.jar:

          C:\Users\Administrator\.ivy2\local\org.fusesource.jansi\jansi\1.11\jars\jansi.jar

        ==== activator-local: tried

          file:////C:/Users/Administrator/Documents/activator-1.2.10-minimal/repository/org.fusesource.jansi/jansi/1.11/ivys/ivy.xml

        ==== Maven Central: tried

          http://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.11/jansi-1.11.pom

          -- artifact org.fusesource.jansi#jansi;1.11!jansi.jar:

          http://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.11/jansi-1.11.jar

        ==== typesafe-releases: tried

          http://repo.typesafe.com/typesafe/releases/org/fusesource/jansi/jansi/1.11/jansi-1.11.pom

          -- artifact org.fusesource.jansi#jansi;1.11!jansi.jar:

          http://repo.typesafe.com/typesafe/releases/org/fusesource/jansi/jansi/1.11/jansi-1.11.jar

        ==== typesafe-ivy-releasez: tried

          http://repo.typesafe.com/typesafe/ivy-releases/org.fusesource.jansi/jansi/1.11/ivys/ivy.xml

                ::::::::::::::::::::::::::::::::::::::::::::::

                ::          UNRESOLVED DEPENDENCIES         ::

                ::::::::::::::::::::::::::::::::::::::::::::::

                :: org.fusesource.jansi#jansi;1.11: not found

                ::::::::::::::::::::::::::::::::::::::::::::::


:::: ERRORS
        SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.11/jansi-1.11.pom

        SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.11/jansi-1.11.jar

        Server access Error: Connection refused: connect url=http://repo.typesafe.com/typesafe/releases/org/fusesource/jansi/jansi/1.11/jansi-1.11.pom

        Server access Error: Connection refused: connect url=http://repo.typesafe.com/typesafe/releases/org/fusesource/jansi/jansi/1.11/jansi-1.11.jar

        Server access Error: Connection refused: connect url=http://repo.typesafe.com/typesafe/ivy-releases/org.fusesource.jansi/jansi/1.11/ivys/ivy.xml


:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.fusesource.jansi#jansi;1.11: not found
Error during sbt execution: Error retrieving required libraries
  (see C:\Users\Administrator\.sbt\boot\update.log for complete log)
Error: Could not retrieve jansi 1.11

--- attachments ---
0510-2021-10-18-7-25.png

ubuntu 20.04 요나 자동 백업

@joonshin79 (Yoonsik Shin) 님이 작성한 게시글입니다.
---

아래 작성후 crontab 등록

#!/bin/bash

sourcePath=/var/www/
backupPath=/var/www/backup/
backupDate=$(date +%Y%m%d)

USERNAME=yona
PASSWORD=DB패스워드
DATABASE=yona

cd $sourcePath
tar -zcvf $backupDate'_'$DATABASE.tar.gz html
mv $backupDate'_'$DATABASE.tar.gz $backupPath
cd $backupPath

mysqldump -u$USERNAME -p$PASSWORD $DATABASE > $backupPath/$backupDate'_'$DATABASE.sql

# 5일까지만 보관 이전 파일들 삭제
find $backupPath* -mtime +5 -name "*backupDate*" -exec rm {} \;

yona v1.3.2의 DB를 mysql로 사용하고 싶습니다.

@freedom4867 (SEONHO SON) 님이 작성한 이슈입니다.
---

안녕하세요~

yona v1.3.2의 DB를 mysql로 사용하고 싶습니다.

conf/application.conf파일에 MySQL 설정을 default설정으로 사용하려 셋팅 했습니다만

아래와 같은 에러가 발생하네요.... java8은 설치했습니다만...

Oops, cannot start the server.
Configuration error: Configuration error[Driver not found: [com.mysql.jdbc.Driver]]
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
at play.api.Configuration.reportError(Configuration.scala:743)
at play.api.db.BoneCPApi.register(DB.scala:285)
at play.api.db.BoneCPApi.createDataSource(DB.scala:300)
at play.api.db.BoneCPApi.setupDatasources(DB.scala:412)
at play.api.db.BoneCPApi.(DB.scala:419)
at play.api.db.BoneCPPlugin.play$api$db$BoneCPPlugin$$dbApi$lzycompute(DB.scala:211)
at play.api.db.BoneCPPlugin.play$api$db$BoneCPPlugin$$dbApi(DB.scala:211)
at play.api.db.BoneCPPlugin.onStart(DB.scala:238)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
at scala.collection.immutable.List.foreach(List.scala:318)
at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.Play$.start(Play.scala:90)
at play.core.StaticApplication.(ApplicationProvider.scala:55)
at play.core.server.NettyServer$.createServer(NettyServer.scala:253)
at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:289)
at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:284)
at scala.Option.map(Option.scala:145)
at play.core.server.NettyServer$.main(NettyServer.scala:284)
at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at play.api.db.BoneCPApi.register(DB.scala:280)
... 21 more

ubuntu 20.04 요나 설치

@joonshin79 (Yoonsik Shin) 님이 작성한 게시글입니다.
---

ssh root 계정 활성화

$ sudo passwd root
$ 패스워드 입력후 새로운 root 패스워드 입력
$ vi /etc/ssh/sshd_config
PermitRootLogin yes 이렇게 변경
$ systemctl restart sshd

apache, php, mariadb 설치

$ apt install apache2
$ service apache2 start
$ apt install mariadb-server mariadb-client
$ apt install php libapache2-mod-php php-mysql
$ apt install php-{bz2,imagick,imap,intl,gd,mbstring,pspell,curl,readline,xml,xmlrpc,zip}

openjdk-8 설치

$ apt install default-jre
$ apt-get install openjdk-8-jdk
update-alternatives --config java
기본 jdk openjdk-8로 변경

webmin 설치 https://localhost:10000 로 서버 관리

$ vi /etc/apt/sources.list
deb http://download.webmin.com/download/repository sarge contrib # 제일 아래에 추가
$ wget -q -O- http://www.webmin.com/jcameron-key.asc | sudo apt-key add
$ apt update
$ apt install webmin

mariadb root 패스워드 변경

$ mysql -u root
> FLUSH PRIVILEGES;
> USE mysql;
> ALTER USER 'root'@'localhost' IDENTIFIED BY '패스워드 변경';
> quit

phpmyadmin에서 yona 계정과 db 생성후 요나 설치

$ cd /var/www/html
$ wget https://github.com/yona-projects/yona/releases/download/v1.14.0/yona-v1.14.0-bin.zip
$ unzip yona-v1.14.0-bin.zip
$ cd yona-v1.14.0-bin
$ cd bin
$ ./yona
$ cd /var/www/html/yona-v1.14.0-bin/conf
$ vi application.conf
db.default.password="password" # 패스워드 수정
$ cd /var/www/html/yona-v1.14.0-bin/bin
$ ./yona

Yona가 MariaDB를 기본 DB로 사용하게 된 이유

@doortts (doortts) 님이 작성한 게시글입니다.
---

요약

  • H2 DB가 생각보다 성능이 괜찮고 가볍게 쓰기엔 충분하다.
  • 하지만 대규모 사용자 기반 시스템에서는 안정성, 성능이 부족하다
  • 대안 DB 중에서 PostgreSQL은 잘 몰라서 사용을 못하겠고
  • MySQL은 라이선스 관련해서 공개 배포시에 조금 우려되는 점이 있어
  • MariaDB를 선택했습니다.

본문

1. H2 DB로 지내온 Yobi

이전 Yobi에서는 기본적으로 H2 DB를 Embedded Mode로 사용했습니다.
네트워크 연결비용없이 파일과 메모리만으로 동작하기때문에 굉장히 고속으로 동작하면서도 가벼운 것이 그 특징이었습니다.
실제 회사내에서도 2년가까이 H2 DB를 회사 전체 인원이 업무로 사용하는 Yobi 인스턴스에 적용해서 운영했습니다.
한 동안은 문제 없이 잘 지내왔습니다만 사용자가 수 천명대로 늘고 프로젝트가 그 배의 수 천 개로 늘어나는 과정에서 이런저런 문제가 발생하기 시작했습니다.

(물론 반대로 생각해보면 그 정도 규모가 아니라면 H2 DB로도 충분하다는 이야기이기도 합니다.
사실 초창기엔 Yobi 자체가 수 천명이 동시에 사용하는 시스템을 가정하고 만든 것도 아니었고요. 1~200명 이하의 조직이나 개인이 사용하는걸 목표로 했었습니다
그런데 또 다시 반대의 반대로 생각해 보면 조금만 더 신경써서 DB를 교체하고 몇 가지 옵션을 바꾸면 수 천명이 사용할 수 있는 시스템이 되니까 이왕이면 그 쪽으로... )

우선 global lock 이 걸려서 다른 SQL 파일들의 실행이 멈추는 현상이 발생하기 시작했습니다.

connection pool을 쓴다해도 결국 embedded 상태의 H2 DB의 최종 목적지인 DB file로의 접근은 single point lock 이 발생하였고 그 순간 시스템 전체의 DB 쿼리 수행이 멈칫하게 될 수 밖에 없었습니다. 워낙 고속으로 응답을 주고 받기 때문에 대개의 경우 문제가 없지만 실행시간이 오래 걸리는 트랜잭션의 경우 상태가 심각해 졌습니다. 물론 여러가지 상태를 저장/가정해 줄 수 있는 MVCC(Multiversion Concurrency Control)이 된다면 좀 나아질가 했지만 H2 DB이 MVCC 지원 버전은 그 버전대로의 문제가 심각해서 결국 버전업 관련해서도 개발팀이 큰 고통을 겪게 되었습니다.

그래서 H2 DB 의 마지막 Stable 버전이기도 하고 MVCC가 기본상태가 아닌 2014년 4월에 나온 1.3.176에 계속 머무를 수 밖에 없었습니다.

부실한 H2 DB의 관리도구

H2 DB 자체의 성능은 나쁘지 않았지만 점점 중요한 데이터들이 쌓여가기 시작하면서 백업이나 복구 등이 중요해 졌습니다만 관련해서 기능이 매우 부족하다는 것을 알게 되었습니다. 때로는 작은 DB 버전 차이에서조차도 서로 export/import가 호환되지 않거나 recover로 만들어낸 스크립트가 정상 동작하지 않는 경우도 발생했습니다.

단일 파일 기반에서의 처리로 인해 play framework 강제 정지시에 자칫 DB 파일이 깨질 수 있는 문제

Yobi는 기반으로 play 프레임워크를 사용하고 있습니다. 그리고 그 play 프레임워크가 H2 DB를 기본으로 사용하고 있고요.
그런데 간혹 Yobi의 JVM이 hang이 걸려서 강제로 JVM을 중단해야 할 때 kill로 처리가 되지 않아 강제 kill인 kill -9로 종료했을 때 DB파일이 깨지는 현상이 생겼습니다.
경우에 따라 복구에 애를 먹거나 아니면 수 시간 분의 데이터를 날리는 장애를 겪게 되었습니다.

2. 대안들

Yona(yobi)는 배포 설치형 오픈소스로 만들었기 때문에 DB선정이 조금 까따로웠습니다. 그렇다고 여러 DB를 지원할 여력도 안되고요.

PostgreSQL

우선 물망에 올랐던건 세상에서 가장 앞서있는 오픈소스 DB(the world's most advanced open source database)라고 자신을 칭하는 PostgreSQL 이었습니다.
그런데 개발팀 어느 누구도 PostgreSQL 을 써본사람이 없었고 사내에서도 관련 경험자니 팀의 지원을 받을 수가 없었습니다.

MySQL

그래서 MySQL로 사내 Yobi 인스턴스는 이전하게 되었습니다.
안전성과 성능이 대폭 향상되게 되었습니다.

MariaDB (Yona의 기본 DB)

https://mariadb.com/

Yona는 외부 오픈소스이고 2차 배포시에도 문제가 없도록 만든 제품이라 MySQL에 종속적인 제품을 만들어 배포하는건 라이선스에 문제가 있다는 걸 알게되었습니다.
그래서 비슷한 이유로 Fork해서 만들어진 MariaDB로 Yobi의 fork 버전인 Yona도 따라가기로 마음먹었습니다.

특히 라이선스 관련해서

  • MariaDB는 라이선스 문제를 회피하기 위해 InnoDB 대신 XtraDB 를 사용하고
  • 특히나 문제의 소지가 큰 MySQL Connector 대신 MariaDB Connector를 사용하기 때문에
    필수 의존 DB로 MariaDB를 선택하기에 좋았습니다. (기타 MariaDB에 대해서는 wikipedia::MariaDB를 참고해 주세요.)

MariaDB는 기본 성능도 좋지만 JDBC 커넥터도 MySQL 커넥터에 비해 성능이 좋습니다.

기존보다 3배 빨라졌다고 광고하는 MySQL최신인 5.7
514820385637.png

하지만 일반 하드웨어서의 MariaDB와서 Benchmark에서 결과는..
15642889040.png

Yona가 기본으로 권장 사용하고 있는 MariaDB 10.1.x에 비해 5~10% 정도 성능이 낮습니다.

https://mariadb.org/maria-10-1-mysql-5-7-commodity-hardware/

3. 결론

Yona는 DB관련 문제를 최소화 하면서도 안정성과 성능을 높이며 수 천명이 함께 사용해도 문제 없는 환경을 제공하기 위해서 MariaDB를 선택했습니다.
그리고 다른 서비스나 제품을 만들때도 소스 공개 및 2차 배포를 염두에 두고 만든다면 MySQL 대신 MariaDB를 선택하게 될 것 같습니다.

--- attachments ---
15642889040.png
514820385637.png

webhook 실행 순서 및 동작 유무 확인 요청

@saydeicide (이근영) 님이 작성한 이슈입니다.
---

안녕하세요.
사용버전은 최근 pre/mariadb 버전 입니다.

  1. webhook 실행 순서
    webhook를 이용해서 후처리하는 로직을 만들고 있습니다만, 이슈 등록/수정 및 파일등록보다 webhook이 먼저 발생해서 webhook 요청을 받아 db를 열어보면 db가 업데이트가 안되어 있는 경우가 많습니다.
    수정시 특히 그런 경우가 더 많습니다.
    일단 db를 열기전 2초 thread.sleep를 주어 처리하고 있습니다만 모든 처리가 끝난 후 webhook이 발생하면 안될까요?

  2. webhook 동작
    테스트해보니 webhook는 메인 이슈/sub task의 등록, 본문의 수정, 삭제 및 댓글 등록/수정 시에만 동작하는 것으로 보입니다.
    해당 이슈가 다른 이슈의 sub task로 이동 시에도 webhook를 줄수 있나요? 해당 케이스도 잡아서 처리를 해야하는데 call이 없어 처리를 못하고 있습니다.

추가로 혹시 다른 프로젝트 이슈의 sub task로 한번에 이동할수는 없을까요?
이슈 옵션을 열었을 때 다른 프로젝트를 선택 시 해당 프로젝트의 이슈는 보이지가 않아서 다른 프로젝트의 sub task로는 이동이 안되네요.

소스코드를 직접 내려 받아서 실행하기

@doortts (doortts) 님이 작성한 게시글입니다.
---

소스코드를 직접 내려 받아서 실행하기

자신의 입맛에 맛게 코드를 직접 수정해서 작업하거나 코드를 기여하고 싶을 경우에는 코드 저장소로부터 코드를 직접 내려받아서 빌드/실행하는 것도 가능합니다.

JDK version 확인

java -version
javac -version

JDK 8(1.8) 이상이어야 합니다.

Play Activator 내려 받기

curl -O http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

혹은

wget http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

웹 브라우저에서 (이를테면, MS윈도우즈 사용자일 경우)

http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-1.2.10-minimal.zip

압축 풀기

unzip typesafe-activator-1.2.10-minimal.zip

압축을 푼 다음 하위 디렉터리로 이동

cd typesafe-activator-1.2.10-minimal

Yona 소스 내려 받기

case1. git 클라이언트를 이용한 다운로드 (추천)

git clone https://github.com/yona-projects/yona.git

case2. 단순히 최신 안정버전을 내려받고자 할 때는 아래 링크를 이용해서 압축파일을 내려받은 다음 yona를 폴더이름으로 해서 해제합니다.

git pull https://github.com/yona-projects/yona.git master

주의! case2의 경우, 업그레이드 할 때 문제가 생길 수 있습니다.

임의의 장소에 Yona 디렉터리를 위치시킬 경우에는 activator 실행파일이 있는 Play Activator 디렉터리를 $PATH 환경변수에 추가해 주세요.

clone 받은 Yona 디렉터리로 이동

(혹은 압축을 해제한 디렉터리로 이동)

cd yona

상단에 있는 activator 실행파일 실행

../activator

혹은 (윈도우 사용자일 경우)

..\activator

실행하면 필요한 파일들을 web에서 내려받습니다. 첫 실행 시 네트워크 상황에 따라 10여 분 가까이 소요될 수 있습니다.

만약 HTTPS 관련 오류가 발생한다면 ~/.sbt/repositories 파일에 https 주소의 maven central url을 아래 내용처럼 추가해주세요

[repositories]
  maven-central: https://repo1.maven.org/maven2

그럼에도 오류가 지속될 경우

개발환경을 직접 설정하다 오류

개발환경을 직접 설정 중 오류가 지속적 발생하는 경우를 대비히 아래와 같은 환경파일들을 미리 받아놓은 파일들을 복사해서 쓸 수 있도록 저장소를 준비해 놓았습니다.

https://github.com/yona-projects/yona-dev-env

.ivy2 // maven dependency files
.sbt

하위에 있어야 하는 파일들을 모아 놓은 저장소인데 사용하시는 OS 에 맞게 각각의 폴더로 해당 파일들을 복사해서 실행

콘솔이 뜨면 start 명령어로 기동

start

추가로 필요한 파일들을 web에서 내려받은 다음 소스 파일들을 컴파일 후 운영 모드(production mode)로 실행합니다.
개발 모드(development mode)로 실행하고자 할 경우에는 start 명령어 대신에 run 명령어로 실행합니다.

주의사항: 설정 파일 및 데이터가 기본적으로 target/universal/stage 디렉터리에
저장됩니다. 이 디렉터리는 activator clean 실행 시 모두 삭제되므로, 아래의 옵션
설정방법을 보고 데이터가 저장될 디렉터리를 설정하시는 것이 좋습니다

브라우저로 접속

http://127.0.0.1:9000

80 포트 등으로 포트를 변경하고 싶을 경우에는 해당 포트가 사용 가능한지 확인한 다음 80 포트를 사용할 수 있는 계정으로 실행합니다. 포트 변경 방법에 대해서는 '옵션' 문단을 읽어주세요.

업그레이드하기

case1. git 클라이언트를 이용 (추천)
설치된 디렉터리에서, 아래와 같은 git 명령어를 이용합니다

git pull https://github.com/yona-projects/yona.git master

case2. 압축파일을 내려받을 경우

설치된 디렉터리에서, 최신 릴리즈의 압축파일을 내려받아 Yona가 설치된 디렉터리에 압축파일을 풉니다.

https://github.com/yona-projects/yona/archive/master.zip

주의사항! yona.h2.db 파일, repouploads 디렉터리를 삭제하거나 덮어쓰지 않도록 주의하세요!

윈도에서 업그레이드하는 경우, -DapplyEvolutions.default=true 설정이 필요할
수 있습니다. 자세한 것은 아래 옵션 설정 설명을 보세요

옵션

간단한 재시작 쉘 예제

배포버전 만들기

activation dist

를 실행하시면 현재 소스를 기준으로 target/universal 폴더에 build.sbt 에 지정한 version 이름으로 배포용 zip 파일이 생성됩니다.

  • 해당 파일은 linux/unix 용으로는 바로 압축 해제하셔서 사용할 수 있습니다.
  • 단 윈도우용 배포파일은 조금 더 단계가 필요합니다.
    • 압축을 푼다.
    • bin/yona.bat 을 에디터로 연다
    • APP_CLASSPATH 가 표시되어 있는 150번째 줄을 지운다 (실행파일 아래쪽에 한 번 더 나오기때문에 지워도 무방합니다.)
      546-20188-10-1111-0.png
    • 다시 압축을 해서 배포한다.

참고: https://www.playframework.com/documentation/2.3.x/ProductionDist

--- attachments ---
546-20188-10-1111-0.png

프로젝트를 따로 파트별로 관리가 가능할까요?

@feelongpark (박필홍) 님이 작성한 이슈입니다.
---

좋은 프로그램 감사합니다

설치가 완료되어 예전 프로젝트들을 등록하고 있습니다.

프로젝트들을 현재 진행중, 진행 예정, 완료의 세 파트로 나눠서 표시를 하고 싶습니다.

혹시 프로젝트를 등록할때 이렇게 카테고리를 나눠서 등록하는 방법이 있을까요?

이제 막 처음 시작하여 모르는 점이 많습니다.

도움 부탁드립니다.

docker-compose 로 yona 1.14 한방에 올리기

@witbox (witbox) 님이 작성한 이슈입니다.
---

docker-compose

# cat docker-compose.yml

version: '3.1'
services:
  yona-mariadb:
    image: witbox/mariadb:10.3-focal
    container_name : yona_mariadb
    networks:
    - yona
    environment:
      MYSQL_DATABASE: yona
      MYSQL_USER: yona
      MYSQL_PASSWORD: jonathan
      MYSQL_ROOT_PASSWORD: jonathan
    volumes:
    - ./mysql:/var/lib/mysql

  yona:
    image: witbox/yona:1.14.0
    restart: always
    container_name : yona
    ports:
    - "9000:9000"
    networks:
    - yona
    depends_on:
    - yona_mariadb
    environment:
      YONA_DATA : /yona/data
    volumes     :
    - ./data:/yona/data

  adminer:
    image: adminer
    container_name: yona_adminer
    restart: always
    networks:
    - yona
    ports:
    - 9001:8080
networks :
  yona :

docker-compose up

# docker-compose up

에러 확인 후 ctrl + c 로 docker 종료

application.conf 수정

DB 연결 및 설정 변경

docker-compose up

# docker-compose up -d

yona start

http://server-ip:9000/

yobi 0.7x 에서 yobi 0.8.x 로 업그레이드 하기 의 링크가 잘못되었습니다.

@holyachon (holyachon) 님이 작성한 이슈입니다.
---

https://repo.yona.io/yona-projects/yona/post/1 에서
"yobi 0.7x 에서 yobi 0.8.x 로 업그레이드 하기" 에 걸린 링크가,
https://repo.yona.io/yona-projects/yona/post/1 여기로 걸려 있어서 계속 똑같은 페이지로 이동하게 됩니다.
https://github.com/yona-projects/yona/wiki/yobi-0.7x-%EC%97%90%EC%84%9C-yobi-0.8.x-%EB%A1%9C-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0
링크가 이곳으로 바뀌어야 할 것 같습니다 ^^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.