REST API

API(Application Programming Interface)(https://ko.wikipedia.org/wiki/API)

  • APIλŠ” κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄ μ»΄ν“¨ν„°λ‚˜ 컴퓨터 ν”„λ‘œκ·Έλž¨ μ‚¬μ΄μ˜ 연결을 λ§ν•œλ‹€. μΌμ’…μ˜ μΈν„°νŽ˜μ΄μŠ€μ΄λ©° λ‹€λ₯Έ μ’…λ₯˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄μ— μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 경계면이닀. 이 API의 κ΅¬ν˜„μ€ APIλ₯Ό μ‚¬μš©ν•˜λŠ” μ»΄ν“¨ν„°λ‚˜ μ‹œμŠ€ν…œμ΄ ν•˜κ²Œ λœλ‹€. μ‚¬λžŒκ³Ό 컴퓨터λ₯Ό μž‡λŠ” 것은 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λΌκ³  ν•˜μ§€λ§Œ, μ§€κΈˆ λ§ν•˜λŠ” APIλŠ” 컴퓨터와 컴퓨터 ν˜Ήμ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μž‡λŠ” 역할을 ν•œλ‹€.

  • API의 λͺ©μ  쀑 ν•˜λ‚˜λŠ” λ‚΄λΆ€μ˜ μ„Έμ„Έν•œ 것듀을 μˆ¨κΈ°λŠ” 것이닀. μ΄λ ‡κ²Œ 되면 λ‚˜μ€‘μ— λ³€κ²½λ˜λ”λΌλ„ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. μš”μ¦˜μ—λŠ” ν”νžˆ API라면 μ›Ή APIλ₯Ό μ˜λ―Έν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

  • Communication : μ„œλ‘œ κ°„μ˜ μ†Œν†΅μ„ ν•˜λŠ” κΈ°λŠ₯이닀.

  • Specification : μ†Œν†΅μ„ μœ„ν•΄ ν•„μš”ν•œ κ²ƒλ“€μ˜ λͺ…μ„Έ

  • Information Hiding(Principle)

    • APIλŠ” μ„œλ‘œ μ†Œν†΅ν•˜κΈ° μœ„ν•œ μ΅œμ†Œν•œμ˜ λͺ…μ„Έλ§Œ μ•Œλ €μ£ΌκΈ° λ•Œλ¬Έμ— μ„Έμ„Έν•œ μ •λ³΄λŠ” μ€λ‹‰ν•œλ‹€.

    • ν‚€λ³΄λ“œλ₯Ό λˆ„λ₯΄λ©΄ λ‚΄λΆ€μ μœΌλ‘œ λ³΅μž‘ν•œ μ‹ ν˜Έκ°€ μ˜€κ°€κ² μ§€λ§Œ, κ²‰μœΌλ‘œλŠ” ν‚€λ₯Ό λˆ„λ₯΄λ©΄ μž…λ ₯이 λ˜λŠ” κ²ƒλ§Œ μ•Œκ³ λ„ μ‚¬μš©ν•  수 μžˆλ“―μ΄ μ‚¬μš©μ— ν•„μš”ν•œ μ •λ³΄λ§Œ μ•Œλ €μ£Όκ³  λ‚΄λΆ€μ˜ μ •λ³΄λŠ” μ€λ‹‰ν•œλ‹€.

    • 숨기고자 ν•˜λŠ” 정보λ₯Ό λ’€λ‘œ μˆ¨κΈ°λŠ” κ°œλ…

    • μžλ°”μ—μ„œλŠ” 객체에 속성에 직접 μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ μˆ¨κΈ°λŠ” 것 (private μ ‘κ·Όμ œμ–΄μž)

  • Encapsulation

    • μœ„μ—μ„œ λ§ν•œ μ •λ³΄μ€λ‹‰μ˜ 방법 μ€‘μ˜ ν•˜λ‚˜

    • 정보λ₯Ό ν•œκ³³μœΌλ‘œ λ¬Άκ³ , λ“œλŸ¬λ‚΄κ³ μž ν•˜λŠ” μ •λ³΄λ§Œ 외뢀에 λ…ΈμΆœμ‹œν‚€κ³  μ€λ‹‰ν•˜λ €λŠ” μ •λ³΄λŠ” 내뢀에 μˆ¨κΈ΄λ‹€.

    • μ—°κ΄€μžˆλŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό 클래슀둜 λ¬ΆλŠ” μž‘μ—…

  • Implementation : λ©”μ„œλ“œμ˜ κ΅¬ν˜„μ„ λ§ν•œλ‹€.

좜처 - https://ko.wikipedia.org/wiki/API

정보은닉(Information Hiding)κ³Ό μΊ‘μŠν™”(Encapsulation)

  • 정보은닉

    • 정보은닉은 λ³΅μž‘ν•˜κ±°λ‚˜ λ³€κ²½ κ°€λŠ₯ν•œ 섀계 결정을 μ•ˆμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€ λ’€λ‘œ μˆ¨κΈ°λŠ” 섀계원리이닀.

    • 정보 μ€λ‹‰μ˜ λͺ©μ μ€ 변경에 λŒ€ν•œ μœ μ—°μ„±μ„ μ œκ³΅ν•˜λŠ” 것이닀.

    • 정보 μ€λ‹‰μœΌλ‘œ 인해 변경에 λŒ€ν•œ νŒŒκΈ‰νš¨κ³Όκ°€ 지역적이기 λ•Œλ¬Έμ— 변경에 λ”°λ₯Έ λΉ„μš©μ„ 쀄일 수 μžˆλ‹€.

    • 적절히 λͺ¨λ“ˆν™”λœ μ½”λ“œλŠ” μ‹œμŠ€ν…œμ˜ μ£Όμ–΄μ§„ 일뢀λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ •λ³΄μ˜ 양을 μ΅œμ†Œν™”ν•¨μœΌλ‘œμ¨ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ β€œμΈμ§€ν•˜λŠ” λΆ€ν•˜β€λ₯Ό 쀄여쀀닀. 잘 μ„€κ³„λœ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λͺ¨λ“ˆ κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€κ°€ κ°€λŠ₯ν•œ β€œμ’μœΌλ©°(즉, κ°„λ‹¨ν•˜λ©°)” 변경될 수 μžˆλŠ” 섀계적 κ²°μ • 사항은 ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ— μˆ¨κ²¨μ§„λ‹€. μ—¬κΈ°μ„œ λͺ¨λ“ˆμ— 숨겨져 μžˆλ‹€λŠ” 것이 μ€‘μš”ν•œλ°, λŒ€λΆ€λΆ„μ˜ μƒμš© μ†Œν”„νŠΈμ›¨μ–΄λŠ” 처음의 κ°œλ°œλ³΄λ‹€ μœ μ§€λ³΄μˆ˜(였λ₯˜ μˆ˜μ •κ³Ό κ°œμ„ )에 λ“€μ–΄κ°€λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹œκ°„μ΄ 훨씬 더 많기 λ•Œλ¬Έμ΄λ‹€.

    • μ •λ³΄μ€λ‹‰μ΄λž€ λ³€κ²½κ°€λŠ₯성이 높은 섀계λ₯Ό λΆ„λ¦¬ν•˜λŠ” 원칙이며, 변경될 경우 ν”„λ‘œκ·Έλž¨μ˜ λ‹€λ₯Έ 뢀뢄이 κ΄‘λ²”μœ„ν•˜κ²Œ μˆ˜μ •λ˜μ§€ μ•Šλ„λ‘ λ³΄ν˜Έν•˜λ„λ‘ ν•˜λŠ” 원칙이닀.

  • 정보은닉은 μ›μΉ˜μ•ŠλŠ” μ •λ³΄λŠ” λ’€λ‘œ μˆ¨κΈ°λŠ” κ°œλ…μ΄λ©°, μΊ‘μŠν™”λŠ” μ •λ³΄μ€λ‹‰μ˜ 방법 μ€‘μ˜ ν•˜λ‚˜μ΄λ‹€.

  • μžλ°” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ •λ³΄μ€λ‹‰μ˜ 기법은 3κ°€μ§€κ°€ μžˆλ‹€.

    • 객체의 ꡬ체적 νƒ€μž… 은닉(μ—…μΊμŠ€νŒ…) : νƒ€μž…μ„ μ—…μΊμŠ€νŒ…ν•˜μ—¬ λΆ€λͺ¨ 클래슀 νƒ€μž…μœΌλ‘œ ν†΅ν•©ν•˜λ©΄ μžμ‹ν΄λž˜μŠ€μ˜ μ„ΈλΆ€ νƒ€μž…μ„ 은닉할 수 μžˆλ‹€.

    • 객체의 ν•„λ“œ 및 λ©”μ†Œλ“œ 은닉(μΊ‘μŠν™”, μ ‘κ·Όμ œμ–΄μž μ‚¬μš©) : 클래슀의 멀버λ₯Ό private을 μ΄μš©ν•˜μ—¬ μ ‘κ·Όμ œν•œμ„ ν•˜λ©΄ ν•„λ“œλ₯Ό 은닉할 수 μžˆλ‹€.

    • κ΅¬ν˜„ 은닉(μΈν„°νŽ˜μ΄μŠ€ & 좔상 클래슀) : μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 ν΄λž˜μŠ€μ— μ„ μ–Έν•œ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜κ³ , κ΅¬ν˜„λœ 클래슀의 νƒ€μž…μ€ μΈν„°νŽ˜μ΄μŠ€λ‚˜ μΆ”μƒν΄λž˜μŠ€ νƒ€μž…μœΌλ‘œ λŒ€μ²΄ν•¨μœΌλ‘œ μ„ΈλΆ€ κ΅¬ν˜„μ„ 은닉할 수 μžˆλ‹€.

  • 이 κΈ€μ—μ„œ 잘 μ •λ¦¬λœ λ‚΄μš©μ„ λ³Ό 수 μžˆμ—ˆλ‹€.

Architecture와 Architecture Style의 차이

  • 아킀텍쳐(Architecture)λŠ” μ‹œμŠ€ν…œ μ „λ°˜μ  λ””μžμΈκ³Ό ꡬ쑰λ₯Ό λ§ν•œλ‹€. μ—¬κΈ°μ—λŠ” κ΅¬μ„±μš”μ†Œ, λͺ¨λ“ˆ, μΈν„°νŽ˜μ΄μŠ€μ™€ κ·Έ μ‚¬μ΄μ˜ 관계성도 ν¬ν•¨ν•œλ‹€. μ•„ν‚€ν…μ³λŠ” 전체적인 λ””μžμΈμ„ ν¬κ΄„μ μœΌλ‘œ λ§ν•œλ‹€.

  • 아킀텍쳐 μŠ€νƒ€μΌμ€ μ‹œμŠ€ν…œμ˜ 아킀텍쳐λ₯Ό λ””μžμΈν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” νŠΉμ •μ›μΉ™μ΄λ‚˜ νŒ¨ν„΄ 및 관행을 λ§ν•œλ‹€. 아킀텍쳐 μŠ€νƒ€μΌμ€ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜λŠ” νŠΉμ • λ°©μ‹μ΄λΌλ˜μ§€, κ΅¬μ‘°ν™”ν•˜λŠ” 방법을 κ°€λ¦¬ν‚€λŠ” κ°œλ…μ΄λ‹€.

  • 아킀텍쳐 μŠ€νƒ€μΌμ˜ μ˜ˆμ‹œ

    • ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ 아킀텍쳐(client-server architecture) : μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ λ„€νŠΈμ›Œν¬ ν†΅μ‹ ν•˜λŠ” 방식

    • MSA (Microservices architecture) : μ‹œμŠ€ν…œμ„ μž‘κ³  독립적 μ„œλΉ„μŠ€λ‘œ λΆ„ν• ν•˜κ³  μ„œλ‘œ 간에 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 ν†΅μ‹ ν•˜λŠ” 방식

    • 이벀트 기반 아킀텍쳐(Event-driven architecture) : 이 μŠ€νƒ€μΌμ€ μ‹œμŠ€ν…œμ„ 이벀트 κ°œλ…μ„ μ€‘μ‹¬μœΌλ‘œ κ΅¬μΆ•ν•œλ‹€. 그리고 μ‹œμŠ€ν…œ λ³€κ²½μœΌλ‘œ 인해 λ°œμƒλ˜λŠ” μ΄λ²€νŠΈλ“€μ„ μ‚¬μš©ν•΄μ„œ λ‹€λ₯Έ μž‘μ—…μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό νŠΈλ¦¬κ±°ν•˜λŠ” 방식이닀.

      • μ΄λ²€νŠΈλž€?

      • 이벀트(Event)λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ—μ„œ λ°œμƒν•˜λŠ” μ€‘μš”ν•œ λ™μž‘ λ˜λŠ” 사건을 λ‚˜νƒ€λ‚΄λŠ” κ°œλ…μ΄λ‹€. 일반적으둜 μ‹œμŠ€ν…œμ˜ μƒνƒœ λ³€ν™”, λ³€κ²½ 데이터 λ“±κ³Ό 같은 μ™ΈλΆ€ μž…λ ₯에 μ˜ν•΄ λ°œμƒλœλ‹€. μ΄λŸ¬ν•œ 이벀트λ₯Ό μ΄μš©ν•΄μ„œ 이벀트 기반 μ‹œμŠ€ν…œμ„(Event-Driven System) κ΅¬μ„±ν•˜κΈ°λ„ ν•˜λŠ”λ° 이것은 μ‹œμŠ€ν…œ κ°„μ˜ 이벀트 λ°œμƒμ— μ˜ν•΄ μ—°κ³„λ˜μ–΄ μž‘μš©ν•˜λ„λ‘ ν•˜λŠ” λŠμŠ¨ν•œ 결합을 μ œκ³΅ν•œλ‹€. 덕뢄에 ν™•μž₯성을 높일 수 μžˆλ‹€.

  • μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ΄λž€, κ·Έ μŠ€νƒ€μΌμ„ λ”°λ₯΄λŠ” μ•„ν‚€ν…μ²˜κ°€ μ§€μΌœμ•Ό ν•  μ œμ•½μ‘°κ±΄λ“€μ˜ 집합이닀.

REST(Representational State Transferf)(7κ°€μ§€ μ œμ•½ 쑰건 μœ„μ£Όλ‘œ 정리)

  • Representational State Transfer의 μ€„μž„λ§

  • 웹을 μœ„ν•œ λ„€νŠΈμ›Œν¬ 기반 μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌ

  • Roy Fielding이 그의 λ°•μ‚¬ν•™μœ„ λ…Όλ¬Έμ—μ„œ 처음 μ†Œκ°œν–ˆλ‹€. (β€œArchitectural Styles and the Design of Network-based Software Architectures”)

  • λ„€νŠΈμ›Œν¬ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜μ˜ 관심사항듀

    • μ„±λŠ₯

    • 규λͺ¨ν™•μž₯μ„±

    • λ‹¨μˆœμ„±

    • μˆ˜μ •μš©μ΄μ„±

    • κ°€μ‹œμ„±

    • 이식성

    • μ‹ λ’°μ„±

정보은닉과 μΊ‘μŠν™”, 그리고 아킀텍쳐와 아킀텍쳐 μŠ€νƒ€μΌμ˜ 차이, REST에 κ΄€ν•΄μ„œ λ‹€μ‹œ 정리가 ν•„μš”ν•  것 κ°™λ‹€.

Last updated