# Development/Methodologies (7) 썸네일형 리스트형 [REST API] API 문서 작성 API 문서 작성 API 문서란? API 문서는 개발자와 사용자가 원활하게 API를 파악하고 사용할 수 있도록 돕는 문서다. API의 기능, 데이터 형석, 사용 방법, 오류와 같이 API를 사용하기 위해서 알아야하는 제약들을 명시한다. 좋은 내부 API에 문서는 개발이 원활히 진행될 수 있도록 도와준다. 고려해야 하는 사항 1. 출력 형식이 바뀌어도 쉽게 적응할 수 있어야 한다. 2. 작성하는 사람이 뭘 써야 하는지 쉽게 알 수 있어야 한다. 작성 방법 개발 시작 전 각 API의 기능, 이를 위해 사전에 필요한 사항, 주고받을 데이터 등이 포함된 API 문서 초안을 작성한다. 이를 통해 API 개발의 방향을 명확히 할 수 있으며, 문서 초안 공유 후 피드백을 받을 수도 있다. 포함되어야 하는 항목 개요 .. [성능 테스트] Throughput(TPS), Latency Throughput(TPS), Latency: API 성능 테스트 성능테스트란? 제작한 웹 서버(API)가 얼마나 많은 사용할 수 있는지 테스트하거나, 두가지 설계에 대해 어떤 설계가 더 좋은 성능을 내는지 확인하는 테스트이다. 성능의 지표 Throughput (시간당 처리량) 서비스가 1초당 처리할 수 있는 작업량이다. 단위로는 주로 TPS(Transaction per seconds)를 사용함 Throoghput이 클수록 작업이 더 빨리 끝남 높은 수치일수록 성능이 좋음 Latency (지연시간) 시스템이 클라이언트로부터 Request를 받아서 Response를 보내주기까지 걸리는 시간을 의미한다. 특정 작업을 얼마나 빨리 처리할 수 있는지 나타내는 성능 지표 Latency가 작을수록 더 빨리 응답함 .. [클린 코드] 에러 핸들링 클린 코드: 에러 핸들링 1. 오류 코드 보다는 예외(Exception)을 사용한다. try, except를 사용하면 오류인지 확인하는 불필요한 로직을 줄일 수 있다. ### as-is from enum import Enum class ErrorCodes(Enum): VALUE_ERROR="VALUE_ERROR" def we_can_raise_error(): ... return ERROR_CODES.VALUE_ERROR def use_ugly_function(): result = we_can_occur_error() if result == ErrorCodes.VALUE_ERROR: # 처리 코드 ... ### to-be def we_can_raise_error(): if ... raise ValueErr.. [클린 코드] 클래스 클린 코드: 클래스 1. 단일 책임 원칙(SRP)을 지킨다. 하나의 클래스는 하나의 책임만 가진다. 2. 응집도를 높인다. 응집도가 높을수록 클래스의 메서드들은 인스턴스 변수들을 많이 사용한다. ### as-is class LowCohesion: def __init__(self): self.a = ... self.b = ... self.c = ... def process_a(self): print(self.a) def process_b(self): print(self.b) def process_c(self): print(self.c) ### to-be class HighCohesion: def __init__(self): self.abc = ... def process_a(self): self.abc.p.. [클린 코드] 함수 클린 코드: 함수 1. 하나의 역할만 수행한다. (Single Responsibility Principle) 함수의 역할이 많아지면 안좋은점 가독성이 떨어진다. 오류가 생길 가능성이 커진다. 함수에 대한 테스트를 진행하기 어려워진다. ### as-is def create_user(email, password): # validation 로직 if "@" not in email or len(password) < 6 : raise Exception("유저 정보를 제대로 입력하세요") user = {"email" : email, "password" : password} database = Database("mysql") database.add(user) email_client = EmailClient() ema.. [클린 코드] 주석 & 포맷팅 클린 코드: 주석 & 포맷팅 주석을 사용 할 때 1. 법적인 정보를 담을 때 # Copyright (C) 2021 ... 2. 의도를 명확하게 설명할 때 # throughput을 늘리기 위해 스레드를 10개까지 늘린다. for idx in range(10): thread = threading.Thread(target=...) thread.start() ... 3. 중요성을 강조할 때 # 최종 결제를 하기 전에 진행해야 하는 validation 함수 def validate_buyable(wallet, price, ...): ... 4. 결과를 경고할 때 # WARNING: API 서버가 항상 양호한지 알 수 없음. 관용적으로 사용되는 키워드 TODO : 당장은 아니지만 다음에 해야 할 때 FIXME : 치.. [클린 코드] 네이밍 클린 코드: 네이밍 Convention의 종류 snake_case: Python, Ruby 등에서 권장 camelCase : Java, Javascript 등에서 권장 PascalCase : 대부분의 프로그래밍 언어에서 클래스를 네이밍할 때 사용 kebab-case: HTML Element를 표현할 때 사용 변수와 상수 변수와 상수를 네이밍 할 때는 명사 혹은 형용사를 사용한다. user_date = ... #명사 is_valid = ... #형용사 함수와 메서드 함수와 매서드를 네이밍할 때는 동사 혹은 형용사 구문 형태를 사용한다. def send_data(): ... def input_is_valid(): ... 클래스 클래스 이름을 네이밍할 떄는 명사 구문 형태를 사용한다. class Client:.. 이전 1 다음