Giter Club home page Giter Club logo

style-guide's Introduction

RIDI Style Guide

κ·œμΉ™μ„ μ •ν•˜λŠ” κ·œμΉ™ (메타 κ·œμΉ™)

1. ν•­λͺ©μ˜ 수λ₯Ό μ΅œμ†Œν™”ν•  것

  • λ°˜λ“œμ‹œ μ§€μΌœμ Έμ•Ό ν•˜λŠ” 것 μœ„μ£Όλ‘œ μ •ν•  것
  • ꢌμž₯ ν•­λͺ©μ€ κ·œμΉ™μ— ν¬ν•¨ν•˜μ§€ 말 것

2. μ˜¬λ°”λ¦„μ„ 좔ꡬ할 것

  • μ‰½μ§€λ§Œ 잘λͺ»λœ κ²ƒλ³΄λ‹€λŠ” 어렡더라도 μ˜¬λ°”λ₯Έ μͺ½μ„ 택할 것

3. 기호의 좩돌이 λ°œμƒν–ˆμ„ λ•Œμ—λŠ” κ°„κ²°ν•œ μͺ½μ„ 택할 것

  • 간결함이 동일할 λ•Œμ—λŠ” 일관성이 μžˆλŠ” μͺ½μ„ 택할 것
  • 일관성이 동일할 λ•Œμ—λŠ” λŒ€μ€‘μ„±μ΄ μžˆλŠ” μͺ½μ„ 택할 것

4. 만μž₯일치둜 진행할 것

  • 이해관계에 ν¬ν•¨λœ νŒ€ 리더듀 μ „μ›μ˜ λ™μ˜λ₯Ό ꡬ할 것

Communication

Language

Platform

  • Android - Kotlin, Java, XML μ½”λ”© μŠ€νƒ€μΌ
  • iOS - Swift, Objective-C μ½”λ”© μŠ€νƒ€μΌ
  • Qt - C++, XML μ½”λ”© μŠ€νƒ€μΌ
  • CMS - λ‚΄λΆ€ μ‹œμŠ€ν…œ 개발 κ°€μ΄λ“œ

Frameworks

style-guide's People

Contributors

boridevna avatar davinahn avatar freekering avatar genesos avatar gyujincho avatar hannahsung avatar hans-olsen avatar incleaf avatar jaeyeonling avatar jspiner avatar kyungmi avatar luaneyed avatar m0ai avatar namenu avatar ryandev421 avatar sinoru avatar stacyyya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

style-guide's Issues

UI ν…μŠ€νŠΈ κ°€μ΄λ“œ λ†’μž„λ§ μ‚¬μš© κ΄€λ ¨ λ‚΄μš©

@jaeminbae UI ν…μŠ€νŠΈ κ°€μ΄λ“œλ₯Ό μ‘°κΈˆμ”© λ°˜μ˜ν•˜κ³  μžˆλŠ”λ°μš”,
μ•„λž˜ λ¬Έμž₯듀을 μˆ˜μ • 쀑에 λ†’μž„λ§ μ‚¬μš©μ— λŒ€ν•œ λ‚΄μš©μ΄ μ—†μ–΄μ„œ 이슈λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.

- λ‹€μš΄λ‘œλ“œν•  책을 μ„ νƒν•˜μ„Έμš”. 
- μ‚­μ œν•˜μ‹€ λ„μ„œλ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”. 
- 책은 ꡬ맀 λͺ©λ‘μ—μ„œ 영ꡬ히 μ‚­μ œλ˜λ©° λ‹€μ‹œ ꡬ맀해야 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? 
- κΈ°κ°„λ§Œλ£Œλœ 책은 λ‹€μš΄λ‘œλ“œ ν•˜μ‹€ 수 μ—†μŠ΅λ‹ˆλ‹€.

κ°€μ΄λ“œ λ‚΄μ˜ μ˜ˆμ‹œλ“€μ„ μ‚΄νŽ΄λ³΄λ©΄

1. μ§€κΈˆ λ°”λ‘œ μ‚¬μš©μžκ°€ μ·¨ν•΄μ•Ό ν•˜λŠ” 행동이 어미에 μ˜€λŠ” 경우 μ—λŠ” λ†’μž„λ§μ„ μ‚¬μš©ν•˜κ³ 

- 책을 μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
- 결제λ₯Ό μ·¨μ†Œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
- ν‚€μ›Œλ“œλ₯Ό λ‹€μ‹œ μ„ νƒν•΄μ£Όμ„Έμš”.

2. 직접 행동을 μš”μ²­ν•˜κ±°λ‚˜ λ˜λ¬»λŠ” μ–΄λ―Έκ°€ μ•„λ‹Œ 경우 μ—λŠ” λ†’μž„λ§μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것 κ°™μ€λ°μš”.

- κ³΅μΈμΈμ¦μ„œκ°€ 없어도 κ°„νŽΈν•˜κ²Œ μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- β€˜μ±…μž₯ λͺ©λ‘μ—μ„œ μ›ν•˜λŠ” μ±…μž₯을 μ„ νƒν•΄μ£Όμ„Έμš”.β€™μ—μ„œ β€˜μ›ν•˜λŠ”β€™
- β€˜λ§€μ›” 1일 μžλ™μΆ©μ „ μ„€μ •ν•˜κ³  λ”λΈ”ν¬μΈνŠΈ 적립 λ†“μΉ˜μ§€ λ§ˆμ„Έμš”!β€™μ—μ„œ β€˜μ„€μ •ν•˜κ³ β€™

μœ„μ™€ 같이 μƒκ°ν•˜κ³  μΆ”κ°€λ‘œ 'μ±…'을 ν†΅μΌν•˜λ©΄ μˆ˜μ •λœ λ¬Έμž₯은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

- λ‹€μš΄λ‘œλ“œν•  책을 μ„ νƒν•˜μ„Έμš”. > λ‹€μš΄λ‘œλ“œν•  책을 μ„ νƒν•΄μ£Όμ„Έμš”.
- μ‚­μ œν•˜μ‹€ λ„μ„œλ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”. > μ‚­μ œν•  책을 μ„ νƒν•΄μ£Όμ„Έμš”.
- 책은 ꡬ맀 λͺ©λ‘μ—μ„œ 영ꡬ히 μ‚­μ œλ˜λ©° λ‹€μ‹œ ꡬ맀해야 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? > μœ μ§€
- κΈ°κ°„λ§Œλ£Œλœ 책은 λ‹€μš΄λ‘œλ“œ ν•˜μ‹€ 수 μ—†μŠ΅λ‹ˆλ‹€. > κΈ°κ°„ 만료된 책은 λ‹€μš΄λ‘œλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μœ„μ™€ 같이 κ΅¬λΆ„ν•˜λŠ”κ²Œ λ§žμ„μ§€, 그리고 λ†’μž„λ§ κ΄€λ ¨ λ‚΄μš©μ„ μΆ”κ°€ν•˜λ©΄ 어떨지 κ²€ν†  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

API μŠ€νŽ™λ¬Έμ„œ μž‘μ„± 방법

λ¬Έμ„œμ— 보면 Public API의 κ²½μš°μ— Blueprint μŠ€νŽ™μ„ μž‘μ„±ν•˜λΌκ³  λ˜μ–΄ μžˆλŠ”λ°,
Protected APIλŠ” 이전과 λ™μΌν•˜κ²Œ RAML둜 μž‘μ„±ν•˜λ©΄ λ˜λŠ”κ±°μ£ ?

EditorConfig 파일 제곡

μ•ˆλ…•ν•˜μ„Έμš”.

저희 νŒ€ μ €μž₯μ†Œμ—μ„œ μ΄λ²ˆμ— EditorConfig λΌλŠ” 에디터 μŠ€νƒ€μΌ μ •μ˜ νˆ΄μ„ λ„μž…ν–ˆλŠ”λ°, μŠ€νƒ€μΌ κ°€μ΄λ“œμ—μ„œλ„ μ œκ³΅ν•˜κ²Œ 되면 쒋을것 κ°™μ•„ 글을 λ‚¨κΉλ‹ˆλ‹€.

IDE κΈ‰μ˜ μ„Έμ„Έν•œ μ½”λ“œ μŠ€νƒ€μΌ 룰은 μ•„λ‹ˆμ§€λ§Œ:

  • indent νƒ€μž… / μ‚¬μ΄μ¦ˆ
  • character set
  • λ§ˆμ§€λ§‰ κ°œν–‰ μ—¬λΆ€
  • etc

같은 κ°„λ‹¨ν•œ 룰듀을 νŒ¨ν„΄μœΌλ‘œ κ΅¬λΆ„λœ νŒŒμΌλ³„λ‘œ μ •μ˜ν•΄ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ IDE, 에디터 에 ν”ŒλŸ¬κ·ΈμΈμ΄ 쑴재 ν•˜κ³ , 그쀑 μΌλΆ€λŠ” λ‚΄μž₯λ˜μ–΄ μžˆλŠ” κ²½μš°λ„ μžˆμ–΄ λ³„λ„μ˜ ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜λ‚˜ μ„€μ •νŒŒμΌ import λ“±μ˜ 과정을 μƒλž΅ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

κ²€ν† λ₯Ό λΆ€νƒλ“œλ¦½λ‹ˆλ‹Ή. μ•„λž˜λŠ” 저희 파이썬 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” μ„€μ •μž…λ‹ˆλ‹€.

root = true

[*]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8

# Docstrings and comments use max_line_length = 79
[*.py]
max_line_length = 140
balanced_wrapping = true

# Use 2 spaces for the HTML files
[*.html]
indent_size = 2

.swiftlint.yml μΆ”κ°€

@DavinAhn μ–Έμ–΄λ³„λ‘œ lint 섀정을 κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ”λ°, Swift 버전도 등둝 κ°€λŠ₯ν•œ μƒνƒœμΌκΉŒμš”?

Android drawable λ¦¬μ†ŒμŠ€ 넀이밍 κ°œμ„ 

졜근 μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈμ—μ„œ μ»¬λŸ¬μ‹œμŠ€ν…œμ„ λ³€κ²½ν•˜κ²Œλ˜λ©΄μ„œ, κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ“€λ„ λ‹€μ‹œ μ œμž‘μ΄ ν•„μš”ν•΄ μ‘ŒμŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •ν• λ•Œ κ·Έ λ¦¬μ†ŒμŠ€κ°€ μ •ν™•νžˆ 어디에 쓰이고 μžˆλŠ”μ§€ νŒŒμ•…μ— μ–΄λ €μš΄ 뢀뢄듀도 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ°μœ„ν•΄ λ¦¬μ†ŒμŠ€ 넀이밍 κ·œμΉ™μ„ 기쑴보닀 쑰금 더 λͺ…ν™•ν•˜κ³  μžμ„Έν•˜κ²Œ κ·œμ •ν•˜λ €κ³  μ€€λΉ„μ€‘μž…λ‹ˆλ‹€.

AWS API Gateway의 μ œμ•½ 사항에 λ”°λ₯Έ κ²€ν† 

#22 의 μ—°μž₯선상에 μžˆλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

μ‹€μ œλ‘œ api.ridibooks.com 에 λŒ€ν•΄ AWS API Gatewayλ₯Ό μ μš©ν–ˆμ„ λ•Œ 경둜 맡핑을 μ΅œμƒμœ„ 경둜 μš”μ†ŒκΉŒμ§€λ§Œ μ§€μ›ν•˜λŠ” μ œμ•½μœΌλ‘œ 인해 각 serviceλ³„λ‘œ APIλ₯Ό κ΅¬μ„±ν•˜κ³  μ—¬λŸ¬ νŒ€μ΄ λ™μΌν•œ APIλ₯Ό 관리해야 ν•˜λŠ” 상황이 λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. 이 경우 μ–΄λ–€ end pointκ°€ μ–΄λŠ νŒ€μ— κ·€μ†λ˜λŠ”μ§€ νŒŒμ•…μ΄ μ–΄λ ΅κ³  κ΄€λ¦¬μƒμ˜ μ‹€μˆ˜λ‘œ 타 νŒ€ end pointλ₯Ό κ±΄λ“œλ¦¬κ²Œ λ˜κ±°λ‚˜ ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이에 따라

  • μ΅œμƒμœ„ API Gateway에 λŒ€ν•œ μˆ˜μ • κΆŒν•œμ„ μ΅œμ†Œν•œμ˜ μΈμ›μ—κ²Œλ§Œ λΆ€μ—¬ν•˜κ±°λ‚˜
  • μ›Ή μ½˜μ†”μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  Terraform λ“±μ˜ 도ꡬλ₯Ό μ΄μš©ν•˜μ—¬ λ°°ν¬ν•˜λ„λ‘ κ°•μ œν•˜κ±°λ‚˜
  • ν˜Ήμ€ μ΅œμ•…μ˜ 경우 addressing 방식을 κ³ μΉ˜κ±°λ‚˜ λ‹€λ₯Έ API Gatewayλ₯Ό κ²€ν† ν•˜κ±°λ‚˜

ν•˜λŠ” λ“±μ˜ λŒ€μ±… 마련이 ν•„μš”ν•΄ λ³΄μž…λ‹ˆλ‹€.

쌍점(콜둠)에 λŒ€ν•œ ν…μŠ€νŠΈ κ°€μ΄λ“œ μΆ”κ°€

쌍점의 μ•žμ€ λΆ™μ—¬ μ“°κ³  λ’€λŠ” 띄어 μ“΄λ‹€.

κ΅­λ¦½κ΅­μ–΄μ›μ˜ ν•œκΈ€ λ§žμΆ€λ²• - 쌍점 νŽ˜μ΄μ§€μ—μ„œ κ°€μ Έμ˜¨ κ·œμ •μž…λ‹ˆλ‹€.

ν˜„μž¬ 이 λ§žμΆ€λ²•μ„ 지킀지 μ•ŠλŠ” κ²½μš°κ°€ μ’…μ’… 보이곀 ν•˜λŠ”λ° μ•„λž˜ λ‚΄μš©μ„ ν…μŠ€νŠΈ κ°€μ΄λ“œμ— μΆ”κ°€ν•˜λŠ” 건 μ–΄λ–¨κΉŒμš”?

쌍점(콜둠)을 μ‚¬μš©ν•˜λŠ” 경우

쌍점 ν‘œκΈ°λ²•μ— λ§žμΆ”μ–΄ μ μŠ΅λ‹ˆλ‹€.

x: 적립 λ¦¬λ””ν¬μΈνŠΈ : 13원
o: 적립 λ¦¬λ””ν¬μΈνŠΈ: 13원

'ꡬ맀'와 '결제' 단어 ꡬ뢄

ꡬ맀 (purchase)

  • 물건 λ”°μœ„λ₯Ό 사듀이닀.
  • ex. μƒν’ˆμ„ κ΅¬λ§€ν•˜λ‹€.
  • ex. λͺ‡ 집이 κ³΅λ™μœΌλ‘œ 물건을 싼값에 κ΅¬λ§€ν–ˆλ‹€.
  • ex. 3만 원 이상 κ΅¬λ§€ν•˜μ‹œλ©΄ λ°°μ†‘λ£Œκ°€ λ¬΄λ£Œμž…λ‹ˆλ‹€.

결제 (payment)

  • <경제> 증ꢌ λ˜λŠ” λŒ€κΈˆμ„ μ£Όκ³ λ°›μ•„ 맀맀 λ‹Ήμ‚¬μž μ‚¬μ΄μ˜ 거래 관계λ₯Ό 끝맺닀.
  • ex. μˆ™λ°•λΉ„λ₯Ό μΉ΄λ“œλ‘œ κ²°μ œν•˜λ‹€.
  • ex. κ·Έ νšŒμ‚¬λŠ” μ–΄μŒμ„ κ²°μ œν•˜μ§€ λͺ»ν•΄ 뢀도 μ²˜λ¦¬κ°€ 됐닀.
  • ex. μ‹ μš©μΉ΄λ“œλ‘œ κ²°μ œν•˜λ‹€.

ꡬ맀: 물건을 μ‚¬λŠ” ν–‰μœ„
결제: 물건을 사기 μœ„ν•œ μˆ˜λ‹¨, λ‚΄μ—­, μ§€λΆˆν•˜λŠ” ν–‰μœ„

'ꡬ맀'와 '결제' 단어 ꡬ뢄을 μ΄λ ‡κ²Œ ν•˜λ©΄ μ–΄λ–¨κΉŒ ν•©λ‹ˆλ‹€.

λ‚΄λΆ€ μ„œλΉ„μŠ€κ°„ μΈκ°€μ—μ„œ "sub"λ₯Ό 지정할 수 μ—†λŠ” 경우

https://github.com/ridi/style-guide/blob/f9c2c0cd9ef152726165a6421cb6ebc1eb8dfd05/API.md#%EC%8B%A0%EB%A2%B0%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4%EA%B0%84%EC%9D%98-%EC%9D%B8%EA%B0%80inter-service-authorization

ν˜„μž¬ "sub"에 λ¦¬λ””λΆμŠ€ ν•Έλ“€(u_id)λ₯Ό λ„˜κΈ°κ³  μΆ”κ°€μ μœΌλ‘œ λΆˆλ³€κ°’μΈ "u_idx"λ₯Ό 지정할 수 있게 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
상황에 따라 λ¦¬λ””λΆμŠ€ 핸듀을 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— u_idxκ°€ μ§€μ •λ˜μ–΄ 있으면 "sub"λ₯Ό λ¬΄μ‹œν•˜λ„λ‘ κ°€μ΄λ“œκ°€ μˆ˜μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

EditorConfig μ‚¬μš© κ²€ν† 

μ΄λ²ˆμ— Kotlin용 linter λ₯Ό μ μš©ν•˜λ‹€ λ³΄λ‹ˆ μ„€μ •μœΌλ‘œ EditorConfig νŒŒμΌμ„ μ‚¬μš©ν•˜κΈΈλž˜ μ’€ λ“€μ—¬λ‹€ λ΄€λŠ”λ°, IDE에 독립적인 μŠ€νƒ€μΌ κΈ°μˆ μ— μ ν•©ν•˜μ§€ μ•Šμ„κΉŒ μ‹Άμ–΄μ„œ μ‚¬μš©μ„ κ²€ν† ν•΄λ³΄λŠ”κ²Œ μ–΄λ–¨κΉŒ ν•©λ‹ˆλ‹€.

μ§€κΈˆ 언어별 μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό 보닀 보면 PHP, Python λ“±κ³Ό 같이 νŠΉμ • IDEμ—μ„œμ˜ μ„€μ • 방법을 κ°€μ΄λ“œμ— λͺ…μ‹œν•˜κ³  μžˆλŠ”λ° κ·Έλ³΄λ‹€λŠ” 훨씬 λ‚˜μ€ 방법이 될 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. (ν˜„μž¬ κ°€μ΄λ“œλ₯Ό λͺ¨λ‘ 컀버할 수 μžˆλŠ”μ§€λŠ” 따져봐야 ν•˜κ² μŠ΅λ‹ˆλ‹€)
Android Studio 에 ν”ŒλŸ¬κ·ΈμΈμ΄ 기본적으둜 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”λ°, ν”ŒλŸ¬κ·ΈμΈμ΄ 있으면 .editorconfig 파일이 μžˆλŠ” 경우 IDE 섀정보닀 이 파일 λ‚΄μš©μ„ μš°μ„ μ‹œν•˜λŠ” μ˜΅μ…˜μ΄ λ””ν΄νŠΈλ‘œ μΌœμ§€κ²Œ λ©λ‹ˆλ‹€. IntelliJ IDEA 기반 IDE 외에 λ‹€λ₯Έ IDEλ‚˜ μ—λ””ν„°μš© ν”ŒλŸ¬κ·ΈμΈλ„ μ œλ²• μžˆλŠ” 편이라 μŠ€νƒ€μΌ κ°€μ΄λ“œκ°€ μ’€ 더 IDE λ…λ¦½μ μœΌλ‘œ 기술될 수 μžˆλŠ”λ°μ— 도움이 λ˜μ§€ μ•Šμ„κΉŒ μ‹ΆμŠ΅λ‹ˆλ‹€.

동일 API의 μ‚¬μš©μž 인증 / μ„œλΉ„μŠ€κ°„ 인증 방식 μ μš©μ— λŒ€ν•΄μ„œ

μ•„λž˜μ—μ„œ λ§ν•˜λŠ” μ‚¬μš©μž 인증은 κΈ°μ‘΄ μ„Έμ…˜ μ‚¬μš© 방식 + λ‚΄λΆ€ μ„œλΉ„μŠ€κ°„μ˜ SSO λ₯Ό,
μ„œλΉ„μŠ€κ°„ 인증은 μ‹ λ’°ν•  수 μžˆλŠ” μ„œλΉ„μŠ€κ°„μ˜ 인가λ₯Ό λœ»ν•©λ‹ˆλ‹€.

1. 동일 APIκ°€ μ—¬λŸ¬ 인증 방식을 μ μš©ν•΄μ•Ό ν•˜λŠ” 경우

λ·°μ–΄νŒ€ API 쀑 λ™μΌν•œ μž‘μ—…μ„ ν•˜μ§€λ§Œ μ‚¬μš©μž 인증(=λ‚΄λΆ€ μ„œλΉ„μŠ€ κ°„μ˜ SSO)/**μ„œλΉ„μŠ€κ°„ 인증(μ‹ λ’°ν•  수 μžˆλŠ” μ„œλΉ„μŠ€κ°„μ˜ 인가)**이 각각 ν•„μš”ν•œ 것이 μžˆλŠ”λ°μš”. (μ°Έκ³ : https://app.asana.com/0/637011828394799/770740400334179/f)

API 쀑 /user-devices의 경우 ν˜„μž¬κΉŒμ§€λŠ” μ‚¬μš©μž 인증을 톡해 λ””λ°”μ΄μŠ€λ₯Ό μ‘°νšŒν–ˆμ§€λ§Œ, 이제 μ„œλΉ„μŠ€κ°„ μΈμ¦μœΌλ‘œλ„ λ™μž‘ν•˜λ„λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.

(1) μ—”λ“œν¬μΈνŠΈλ₯Ό 두 κ°€μ§€λ‘œ ꡬ뢄해야 할지,
(2) ν•˜λ‚˜μ˜ μ—”λ“œν¬μΈνŠΈμ—μ„œ λ‘κ°œμ˜ 인증 방식을 μš°μ„ μˆœμœ„λ₯Ό 두어 μ²˜λ¦¬ν•΄μ•Ό 할지
κ°€ κ³ λ―Όμž…λ‹ˆλ‹€.

λ§Œμ•½μ— (1)을 μ„ νƒν•˜κ²Œ λ˜μ—ˆμ„λ•Œ μ—”λ“œν¬μΈνŠΈ 넀이밍 룰에 λŒ€ν•΄μ„œλ„ 쑰금 고민이 λ˜κ³ μš”.

ν˜Ήμ‹œ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμ—ˆκ³ , ν•΄κ²°ν•˜μ‹  뢄이 μžˆλŠ”μ§€ κΆκΈˆν•œλ°μš”.
그게 μ•„λ‹ˆλ”λΌλ„ 쒋은 해결책이 μžˆλ‹€λ©΄ λ‹΅λ³€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€~

2. API의 인증 방식 κ²°μ • κΈ°μ€€

좔가적인 μ§ˆλ¬Έμž…λ‹ˆλ‹€.
각 νŒ€μ—μ„œ API의 인증 방식(μ‚¬μš©μž 인증, μ„œλΉ„μŠ€κ°„ 인증)을 κ²°μ •ν•  λ•Œμ˜ 기쀀은 λ¬΄μ—‡μΈκ°€μš”? μ„œλΉ„μŠ€μ˜ λ°±μ—”λ“œμ—μ„œ ν˜ΈμΆœν•˜λŠλƒ, ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ ν˜ΈμΆœν•˜λŠλƒ μ •λ„μ˜ μ°¨μ΄μΌκΉŒμš”?

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ ν˜ΈμΆœν•˜λ”λΌλ„ 자기 μžμ‹ μ˜ λ°±μ—”λ“œλ₯Ό ν”„λ‘μ‹±ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 경우 μ„œλΉ„μŠ€κ°„ 호좜둜 봐야 ν•˜λŠ” κ²ƒμΌκΉŒμš”?
κ·Έλ ‡κ²Œ λ³Ό 수 μžˆλ‹€λ©΄, (쑰금 κ³Όμž₯ν•΄μ„œ) ν˜„μž¬κΉŒμ§€μ˜ λͺ¨λ“  API듀은 (3rd party에 λ…ΈμΆœλ˜μ§€ μ•ŠλŠ” μ΄μƒμ—λŠ”) μ„œλΉ„μŠ€κ°„ ν˜ΈμΆœμ—λ§Œ μ‚¬μš©λœλ‹€κ³  λ³Ό 수 μžˆλŠ”λ°, 이 뢀뢄도 μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹œλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

*_unicode_ci vs *_general_ci

Mysql κ°€μ΄λ“œμ— 보면 Collation으둜 utf8_unicode_ci or utf8mb4_unicode_ciλ₯Ό 쓰라고 λ˜μ–΄ μžˆλŠ”λ°, *_general_ciλ₯Ό 쓰지 μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?
λ³΅μž‘ν•œ μ •λ ¬μ΄λ‚˜ 검색을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ κΌ­ *_unicode_ciλ₯Ό μ‚¬μš©ν•  ν•„μš”λŠ” 없지 μ•Šμ„κΉŒμš”?

OSS on GitLab.com

https://github.com/ridi/style-guide/blob/master/OSS.md#github-%EA%B4%80%EB%A6%AC
μœ„ κ°€μ΄λ“œμ— 따라 λ¦¬λ””μ—μ„œ κ΄€λ¦¬ν•˜λŠ” λͺ¨λ“  μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈλŠ” μ§€κΈˆ GitHubμ—μ„œ ν˜ΈμŠ€νŒ…μ€‘μž…λ‹ˆλ‹€. 그런데 κΈ°μ‘΄ 사내 ν”„λ‘œμ νŠΈλ₯Ό OSS둜 μ „ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ GitLab CI/CD의 νŒŒμ΄ν”„λΌμΈμ— λ¬Άμ—¬μžˆλŠ” κ²½μš°κ°€ μžˆλŠ”λ° 이 κ²½μš°μ—λŠ” μ˜€ν”ˆμ†ŒμŠ€λ‘œ μ „ν™˜μ„ ν•˜κΈ° μœ„ν•΄μ„œ μΆ©λΆ„νžˆ λ§Žμ€ κΈ°λŠ₯을 가진 GitLab CI/CD둜 λ§Œλ“€μ–΄ 놓은 νŒŒμ΄ν”„λΌμΈμ„ ν¬κΈ°ν•΄μ•Όν•©λ‹ˆλ‹€.
마침 μ΄λ²ˆμ— GitLab.com으둜 μ΄μ£Όν•˜λ©΄μ„œ GitLabμ—μ„œ ν˜ΈμŠ€νŒ…μ€‘μΈ ν”„λ‘œμ νŠΈλ„ OSS둜 μ „ν™˜ν•  여지가 μƒκ²ΌλŠ”λ°μš”. GitLabμ—μ„œλ„ OSS ν”„λ‘œμ νŠΈ ν˜ΈμŠ€νŒ…μ„ ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.
μ•„λ‹ˆλ©΄ GitLab.com의 ν”„λ‘œμ νŠΈλ₯Ό GitHub둜 λ―ΈλŸ¬λ§ν•˜λŠ” 것도 μ’‹μŠ΅λ‹ˆλ‹€.

Java non-public 인 경우 m prefix

AOSP κ°€μ΄λ“œμ—μ„œλŠ” μ•„λž˜μ™€ 같은 κ·œμΉ™μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  • Non-public, non-static field names start with m.
  • Static field names start with s.

ν˜„μž¬ Java μ½”λ”© μŠ€νƒ€μΌμ—μ„œ λ³€μˆ˜λͺ… μ•žμ˜ prefixλŠ” λͺ¨λ‘ κΈˆμ§€ν•˜κ³  μžˆλŠ”λ°,
κ·Έ μ΄μœ κ°€ IDE μ—μ„œ ꡬ뢄 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬ΈμΈ 이유 μ™Έμ—λŠ” μ—†λŠ”μ§€μš”?

"MariaDB(MySQL) - DDL, DML μž‘μ„± κ·œμΉ™" κΈ€μž 깨짐

μ•ˆλ…•ν•˜μ„Έμš”.

Language μΉ΄ν…Œκ³ λ¦¬μ— μžˆλŠ” "MariaDB(MySQL) - DDL, DML μž‘μ„± κ·œμΉ™" κΈ€μ˜ κΈ€μžκ°€ κΉ¨μ Έμ„œ λ³΄μž…λ‹ˆλ‹€.

https://ridi.github.io/style-guide/MariaDB(MySQL).md μ—μ„œ .md μ§€μš°κ³  μ ‘μ†ν•˜λ©΄ 잘 λ³΄μ΄λ„€μš”.

쒋은 κΈ€ κ³΅κ°œν•΄μ£Όμ‹œλŠ” μ˜€ν”ˆ μ†ŒμŠ€ μ •μ‹  κ°μ‚¬ν•©λ‹ˆλ‹€ :)

JWT 토큰 μ„œλͺ…에 ES256 μ•Œκ³ λ¦¬μ¦˜ 지원

ν˜„μž¬ μ‚¬μš©λ˜λŠ” ν† ν°μ—μ„œ κ³΅κ°œν‚€μ˜ 크기가 payload의 4λ°° μ΄μƒμœΌλ‘œ μΏ ν‚€μ˜ 크킀 λ˜ν•œ λΆˆν•„μš”ν•˜κ²Œ λΉ„λŒ€ν•¨.

JWT μŠ€νŽ™μ—μ„œλŠ” λΉ„λŒ€μΉ­ν‚€ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ RS256κ³Ό ν•¨κ»˜ ES256 방식을 ꢌμž₯ν•˜κ³  μžˆμœΌλ‚˜1,
졜초 κ°€μ΄λ“œ μž‘μ„± λ‹Ήμ‹œ(#72) λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λ―Έμ„±μˆ™ν•œ μƒνƒœμž„μ„ κ°μ•ˆν•˜μ—¬ RS256λ§Œμ„ μ±„νƒν•˜μ˜€μŒ.

μ—¬μ „νžˆ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©μ€‘μΈ 라이브러리 μΌλΆ€λŠ” 지원이 λ˜μ§€ μ•Šμ§€λ§Œ (예: firebase/php-jwt) λ‚΄λΆ€ κ°€μ΄λ“œμ—μ„œ ES256을 ν—ˆμš©ν•˜μ§€ λͺ»ν•  μ΄μœ λŠ” μ—†λ‹€κ³  νŒλ‹¨λ¨.

Footnotes

  1. https://tools.ietf.org/html/rfc7518#page-6 ↩

no-cond-assign에 λŒ€ν•œ μ˜ˆμ™Έ μΆ”κ°€ μš”μ²­

regexλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό μ“°λŠ”λ°, no-cond-assign에 λŒ€ν•œ μ˜ˆμ™Έ μ²˜λ¦¬λ‚˜ ν˜Ήμ€ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μž‘μ„±ν•˜κΈ° μœ„ν•œ κ°€μ΄λ“œκ°€ ν•„μš”ν•˜λ‹€κ³  λŠκΌˆμŠ΅λ‹ˆλ‹€.

let execResult;
while ((execResult = regex.exec(cond)) !== null) {
  //...
}

.eslintrcμ—λŠ” λ‹€μŒκ³Ό 같이 μΆ”κ°€ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

"no-cond-assign": [2, "except-parens"]

no-plusplusλŠ” λ§μ”€λ“œλ¦¬λ €κ³  ν–ˆλŠ”λ°, 이미 μΆ”κ°€ν•˜μ…¨λ„€μš”. γ…Žγ…Ž

'Ridi' PHP root-level namespace

이제 Ridibooks에 μ΄μ–΄μ„œ RidiSelectλΌλŠ” namespaceκ°€ λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‘˜ λͺ¨λ‘μ— μ†ν•œ 곡톡적인 것듀(우리 νšŒμ‚¬μ—μ„œ μ“°λŠ” PHP μ½”λ“œλΌλ©΄ μ–΄λ””λ‚˜ μ“Έ 수 μžˆμ„λ§Œν•œ 것듀)은 Ridiλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 어떨지 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€.

  1. λ§ˆλ•…νžˆ μ œμ•ˆν•  곳이 μ—†μ§€λ§Œ μ€‘μš”ν•œ 것이라고 μƒκ°λ˜μ–΄μ„œ μ—¬κΈ°μ„œ 확인 λ°›μŠ΅λ‹ˆλ‹€.
  2. style-guide에 PHP root-level namespace κ΄€λ ¨ κ·œμΉ™μ΄ μΆ”κ°€λ˜μ–΄λ„ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

Ridiλ₯Ό μ‚¬μš©ν• λ§Œν•œ κ³³λ“€


(μΆ”κ°€)

Ridi ν•˜μœ„μ—λŠ” 항상 μ„œλΉ„μŠ€ λͺ…을 λ„£λŠ” κ·œμΉ™λ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€. μΆ©λŒμ„ 막을 수 μžˆμŠ΅λ‹ˆλ‹€.
좩돌 방지가 주된 λͺ©μ μ΄κΈ° λ•Œλ¬Έμ—, 이 κ·œμΉ™μ„ 넣을 λ•Œ λΌμ΄λΈŒλŸ¬λ¦¬μ—λ§Œ μ μš©ν•˜κ³  ν”„λ‘œμ νŠΈμ—λŠ” μ μš©ν•˜μ§€ μ•ŠλŠ” 방법도 κ°€λŠ₯ν•  것 κ°™μŠ΅λ‹ˆλ‹€. (μ°Έκ³ : Composer Package Type)

ν”„λ‘œμ νŠΈλ„ 동일 κ·œμΉ™μ„ μ μš©ν•œλ‹€λ©΄, 좔후에 이런 μ‹μœΌλ‘œ 톡합도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • RidiBooks -> Ridi\Books or Ridi\Store
  • RidiSelect -> Ridi\Select

λ˜λŠ”,

  • Ridi\Library\Core
  • Ridi\Library\OAuth2
  • Ridi\Library\Library
  • Ridi\Project\Books
  • Ridi\Project\Select

이런 μ‹μœΌλ‘œ 갈 μˆ˜λ„ μžˆμ§€λ§Œ κΈΈλ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

[Python] νŒ¨ν‚€μ§€ 관리 κ·œμΉ™ μΆ”κ°€

λ³„λ„μ˜ νŽ˜μ΄μ§€μ— 언어별 νŒ¨ν‚€μ§€ μž‘μ„± κ·œμΉ™μ„ μΆ”κ°€ν•˜κΈ° λ³΄λ‹€λŠ”, 이미 μž‘μ„±λœ νŽ˜μ΄μ§€μ— μΆ”κ°€ν•˜λŠ” 것이 λ‚˜μ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

https://github.com/ridi/style-guide/blob/master/Python/README.md

이 곳에 PyPI λ“±κ³Ό κ΄€λ ¨λœ λ‚΄μš©μ„ μΆ”κ°€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

μ½”λ“œ 리뷰 κ·œμ•½ μ΄ˆμ•ˆ μž‘μ„±

ν˜„μž¬ μŠ€ν† μ–΄νŒ€ λ°±μ—”λ“œμ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” μ½”λ“œ 리뷰 κ°€μ΄λ“œλ₯Ό 기반으둜 μ΄ˆμ•ˆ μž‘μ„±μ„ λΆ€νƒλ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

Create pre-commit hooks for PHP

When reviewing the code commenting and fixing that are not properly styled code is quite annoying.
(ex: no spaces around operators)
To minimize these kind of tasks it should be enforced not to commit wrongly styled code.

One of the possible ways is to use "pre-commit hook" to run linter for every changesets.

Per language,

  1. Select a linter.
  2. Add lint configuration files.
  3. Add git hook scripts.

`import/no-extraneous-dependencies` μ˜ˆμ™Έ μΆ”κ°€ μš”μ²­

test κ΄€λ ¨ νŒŒμΌμ—μ„œλŠ” devDependency μ‚¬μš©μ΄ κ°€λŠ₯ν•΄μ•Ό ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

{
  ...,
  // ν…ŒμŠ€νŠΈ λ˜λŠ” κ°œλ°œν™˜κ²½μ„ κ΅¬μ„±ν•˜λŠ” νŒŒμΌμ—μ„œλŠ” devDependency μ‚¬μš©μ„ ν—ˆμš©
  "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js"]}]
}

Eslint: require-jsdoc μ˜΅μ…˜ μΆ”κ°€

μŠ€νƒ€μΌ κ°€μ΄λ“œμ— comment에 λŒ€ν•œ λ‚΄μš©μ΄ μ—†λŠ”λ°μš”.
javascript의 κ²½μš°μ— μ•„λž˜μ™€ 같이 jsdoc을 κ°•μ œν•˜λŠ” 건 μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹œλ‚˜μš”?

/* ESLint Config */
{
    "require-jsdoc": ["error", {
        "require": {
            "FunctionDeclaration": true,
            "MethodDefinition": true,
            "ClassDeclaration": true,
            "ArrowFunctionExpression": true
        }
    }]
}

airbnb ESLint μ„€μ •μ—μ„œλŠ” "require-jsdoc": "off"둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : http://eslint.org/docs/rules/valid-jsdoc

Restful API κ°€μ΄λ“œμ— 응닡 ν˜•νƒœ μΆ”κ°€ μš”μ²­

Viewer APIλ₯Ό μž¬μ„€κ³„μ€‘μž…λ‹ˆλ‹€. 응닡 ν˜•νƒœλ₯Ό μ•„λž˜μ™€ 같이 ν•˜λ €κ³  생각쀑인데 μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹œλ‚˜μš”? (λ”°λ‘œ μ •λ¦¬λœ λ¬Έμ„œκ°€ μŠ€ν† μ–΄ μ»¨ν”Œλ£¨μ–ΈμŠ€ νŽ˜μ΄μ§€ 밖에 μ—†μ–΄μ„œ κ·Έμͺ½μ„ μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€.)

// Success: result[, total_count] ν•„λ“œ 포함
{ result: [...], total_count: 111 }
{ result: {...} }

// Fail: code, message[, user_messageλŠ” ν•„μš”ν•˜λ‹€λ©΄] ν•„λ“œ 포함
{ code: '...', message: '...in English...'  }

HTTP Status CodeλŠ” 200(, 201, 204), 400, 401, 403, 404(, 409), 500, 503 μ‚¬μš©ν•˜λŠ” μ •λ„λ‘œ μ œν•œν•˜λ©΄ 쒋을 것 같은데, μ•„κΉŒ μ˜κ²¬μ„ λ“€μ–΄λ³΄λ‹ˆ 파일 I/Oκ°€ μΌμ–΄λ‚˜μ•Ό ν•˜λŠ” API의 κ²½μš°μ—λŠ” 423 LOCKEDλ‚˜ 429 TOO MANY REQUESTS 같은 μ½”λ“œλ„ μ‚¬μš©ν•΄μ•Ό ν•  것 κ°™λ”λΌκ³ μš”.

μ—λŸ¬ μ½”λ“œ(code) μ •μ˜ 방법도 생각해봐야 ν•  것 κ°™μŠ΅λ‹ˆλ‹€.
κ°€μž₯ 일반적인 ν˜•νƒœκ°€ 읽을 수 μžˆλŠ” λ¬Έμžμ—΄(예: AccountAlreadyExists, MALFORMED_ID) vs μ½”λ“œ ν˜•νƒœμ˜ λ¬Έμžμ—΄ or 숫자(예: BEA-000001, 200003) 인데,
μ €λŠ” prefixκ°€ λΆ™λŠ” μ½”λ“œ ν˜•νƒœκ°€ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

@namenu @freekering

API Addressing κ΄€λ ¨

ν˜„μž¬ RESTful API μž‘μ„± κ°€μ΄λ“œμ—λŠ” μ•„λž˜μ™€ 같은 λ‚΄μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

첫 번째 Path Segment λŠ” μ„œλΉ„μŠ€λͺ…μœΌλ‘œ μ‹œμž‘ν•œλ‹€.
예) api.ridibooks.com/search/

μ΄λŠ” API Gateway (api.ridibooks.com) 을 염두에 두고 μ •ν–ˆλ˜ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ νŒ€μ΄ cross functional ν˜•μ‹μœΌλ‘œ μš΄μ˜λ˜λŠ” ν˜„μž¬ μƒν™©μ—λŠ” 잘 λ§žμ§€ μ•ŠλŠ” 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€.

1. μ§€κΈˆμ²˜λŸΌ API Gateway λ₯Ό μ‚¬μš©ν•  경우

  • μž₯점:
    • μœ μ—°ν•˜κ³  μΌκ΄€μ„±μžˆλŠ” API 섀계 κ°€λŠ₯
  • 단점:
    • μ˜€λ„ˆμ‰½μ— λ”°λ₯Έ 배포 문제
    • μ„±λŠ₯ 문제
    • κ³ κ°€μš©μ„± 문제

2. API Gateway λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우 (my-service.api.ridibooks.com)

  • μž₯점:
    • 1번 λ°©μ‹μ˜ 단점을 극볡할 수 있음
  • 단점:
    • HTTPS ν”„λ‘œν† μ½œ μ‚¬μš©μ΄ 어렀움
    • Public API λ…ΈμΆœμ‹œ 일관성이 떨어짐
    • DNS 관리 λΉ„μš© 증가

각각의 κ²½μš°μ— λŒ€ν•œ μ˜κ²¬μ„ μ·¨ν•©ν•˜μ—¬ 우리 상황에 λ§žλŠ” μ˜μ‚¬κ²°μ •μ„ ν•˜κ³ μž ν•©λ‹ˆλ‹€.

shell script μŠ€νƒ€μΌ κ°€μ΄λ“œ μΆ”κ°€

졜근 μ‰˜ 슀크립트λ₯Ό μž‘μ„±ν•˜λ‹€κ°€ 문득 μ°Ύμ•„λ³΄λ‹ˆ μ‰˜ μŠ€ν¬λ¦½νŠΈμ™€ κ΄€λ ¨λœ 전사 κ°€μ΄λ“œ λ¬Έμ„œλŠ” μ—†λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

κ΄€λ ¨ν•΄μ„œ 널리 μ•Œλ €μ§„ μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό μ°Ύμ•„λ³΄λ‹ˆ ꡬ글 μ‰˜ 슀크립트 μŠ€νƒ€μΌ κ°€μ΄λ“œ λ¬Έμ„œκ°€ μžˆλ„€μš”.

별 λ‹€λ₯Έ νŠΉλ³„ν•œ μΆ”κ°€ μ œμ•½μ‚¬ν•­μ΄ μ—†λ‹€λ©΄ κ·Έλƒ₯ μ „μ‚¬μ μœΌλ‘œ ꡬ글 μ‰˜ 슀크립트 μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό κ·ΈλŒ€λ‘œ λ”°λ₯Έλ‹€λŠ” λ‚΄μš©μ˜ 짧은 κ°€μ΄λ“œ λ¬Έμ„œλ₯Ό μΆ”κ°€ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

ν˜Ήμ‹œ 더 κ³ λ €λ˜κ±°λ‚˜ μΆ”κ°€λ˜μ–΄μ•Ό ν•  사항은 μ—†μ„κΉŒμš”? (ν•œ μ€„μ§œλ¦¬ λ¬Έμ„œλ₯Ό μΆ”κ°€ν•˜κΈ°κ°€ 살짝 λ»˜μ­˜ν•΄μ„œ.. λ¬Έμ„œ λ‚΄μš© λ³΄κ°•μ°¨μ›μ—μ„œ 이슈 μƒμ„±ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€ ^^;;)

[PHP] 듀여쓰기에 TAB 문자 κΈˆμ§€

ν˜„μž¬μ˜ λ“€μ—¬μ“°κΈ° 기쀀은 ν”„λ‘œμ νŠΈμ— 따라 space(4) ν˜Ήμ€ tab 문자λ₯Ό λͺ¨λ‘ ν—ˆμš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
https://github.com/ridi/style-guide/tree/master/PHP#μˆ˜μ •-psr-2

λΆˆν•„μš”ν•œ diffκ°€ λ°œμƒν•  것이 μš°λ €λ˜μ–΄ μΆ”κ°€ν•œ κ·œμΉ™μ΄μ§€λ§Œ, tab으둜 μ‹œμž‘ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈλ„ 많이 μƒκΈ°λ©΄μ„œ ν”„λ‘œμ νŠΈλ§ˆλ‹€ IDE 섀정을 달리 ν•΄μ•Ό ν•˜λŠ” λΆˆνŽΈν•¨μ΄ μƒκ²ΌμŠ΅λ‹ˆλ‹€.

이에 ν•΄λ‹Ή κ·œμΉ™μ„ μ—†μ• κ³  PSR-2 κΈ°μ€€μœΌλ‘œ space(4)둜 ν†΅μΌν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€.

PS. diff λ¬Έμ œλŠ” git blame -w λ“±μœΌλ‘œ μš°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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.