문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
web:신규서비스 [2021/11/09 15:06] kwon37xi [API Gateway] |
web:신규서비스 [2021/12/04 19:42] kwon37xi [Logging] |
||
---|---|---|---|
줄 239: | 줄 239: | ||
* 이런 작업은 항상 batch 를 통해 비동기로 처리하도록 한다. | * 이런 작업은 항상 batch 를 통해 비동기로 처리하도록 한다. | ||
- | ===== 캐시 ===== | + | ===== Backend |
* Local 캐시는 변화가 적고, 일시적인 값 Mismatch는 상관 없고 성능이 더 중요할 때 | * Local 캐시는 변화가 적고, 일시적인 값 Mismatch는 상관 없고 성능이 더 중요할 때 | ||
* 분산 캐시를 사용하면 성능은 떨어지만 '' | * 분산 캐시를 사용하면 성능은 떨어지만 '' | ||
줄 256: | 줄 256: | ||
* 컨텐츠는 시간이 지나면 점점 액세스가 줄어든다. | * 컨텐츠는 시간이 지나면 점점 액세스가 줄어든다. | ||
* 접근이 적은 썸네을을 삭제하는 방식으로 용량을 줄일 수 있고, 업로드 시간도 확보 가능할 것으로 보임. | * 접근이 적은 썸네을을 삭제하는 방식으로 용량을 줄일 수 있고, 업로드 시간도 확보 가능할 것으로 보임. | ||
+ | * Javascript 등을 캐시하면, | ||
+ | * 따라서 filehashing 혹은 timestamp 등을 파라미터로 붙이는 기법을 각 JS framework 별로 제공해주므로 해당 방법으로 배포시마다 캐시를 무력화해줘야 한다. | ||
===== HTML ===== | ===== HTML ===== | ||
* HTML과 유사하게 꺽쇠(''<>'' | * HTML과 유사하게 꺽쇠(''<>'' | ||
줄 284: | 줄 286: | ||
* 뭔가를 막아야할 때는 blacklist 보다는 whitelist 방식 권장. blacklist 는 또 다시 막아야할 것이 발견될 가능성이 높다. | * 뭔가를 막아야할 때는 blacklist 보다는 whitelist 방식 권장. blacklist 는 또 다시 막아야할 것이 발견될 가능성이 높다. | ||
* 문자 필드에 어떤 문자를 사용할 수 없게 해야하는 상황일 경우에도, | * 문자 필드에 어떤 문자를 사용할 수 없게 해야하는 상황일 경우에도, | ||
+ | * 인증 토큰(token) 은 변조가 불가하면서 애플리케이션 사용에 필요한 최소한의 데이터를 담도록 한다. [[web: | ||
===== 서버 운영 ===== | ===== 서버 운영 ===== | ||
* 절대로 여러 사람이 공유하는 공용 계정으로 서버를 관리하지 말라(AWS 등 포함). 이는 치명적인 보안 사고로 이어진다. | * 절대로 여러 사람이 공유하는 공용 계정으로 서버를 관리하지 말라(AWS 등 포함). 이는 치명적인 보안 사고로 이어진다. | ||
줄 323: | 줄 326: | ||
* 이렇게 해야 '' | * 이렇게 해야 '' | ||
* 절대로 예외를 먹지 말것. 정말 특별한 경우가 아니면 항상 예외의 stacktrace까지 모두 남길것. 특별한 경우에는 왜 특별한지 주석 달 것. | * 절대로 예외를 먹지 말것. 정말 특별한 경우가 아니면 항상 예외의 stacktrace까지 모두 남길것. 특별한 경우에는 왜 특별한지 주석 달 것. | ||
+ | * UI 관점에서 사용자 행위 로그를 꼭 남기도록 하고 이를 분석하여 개선 방향을 도출할 수 있도록 한다. | ||
===== Production Server ACL ===== | ===== Production Server ACL ===== | ||
* 운영 시스템에 대한 ACL은 개발 초기부터 망 분리 등을 통해 운영시스템에서만 접속가능하도록 하고 **절대 개발자 PC, 테스트 시스템 등에서는 접속이 불가능**하도록 구성한다(여기서 말하는 접속은 서버에 대한 SSH 접속이 아니라 DB,Redis,MQ 같은 시스템, API 서버 등에 대한 접속을 뜻한다). | * 운영 시스템에 대한 ACL은 개발 초기부터 망 분리 등을 통해 운영시스템에서만 접속가능하도록 하고 **절대 개발자 PC, 테스트 시스템 등에서는 접속이 불가능**하도록 구성한다(여기서 말하는 접속은 서버에 대한 SSH 접속이 아니라 DB,Redis,MQ 같은 시스템, API 서버 등에 대한 접속을 뜻한다). | ||
줄 417: | 줄 420: | ||
* Sprint 를 1주 단위 정도로 잘게 쪼개는 게 좋다. 목표를 명확히 가시화 한다. | * Sprint 를 1주 단위 정도로 잘게 쪼개는 게 좋다. 목표를 명확히 가시화 한다. | ||
* 스프린트당 통합 테스트를 목표로 정하는게 좋다. 허접해도 통합해서 뭔가를 보는게 좋다. | * 스프린트당 통합 테스트를 목표로 정하는게 좋다. 허접해도 통합해서 뭔가를 보는게 좋다. | ||
+ | |||
+ | ===== 외부 연결 정보와 인증서 관리 ===== | ||
+ | * 외부 API 연동 Key 혹은 HTTPS 인증서 등의 목록을 면밀히 관리해야 한다. | ||
+ | * 특히 인증서 자체의 숫자가 늘어나서 관리가 안 될 수 있기 때문에 소스코드에 API Key 등을 두지 말고, 특정 저장소에서 일관되게 사용할 수 있게 해야 한다. | ||
+ | * HTTPS SSL 인증서의 경우 만료일 관리 스케줄링을 하고, 관리 주체를 명확히 가져가도록 한다. | ||
+ | |||
===== 신규 개발 조직 구축시 먼저 할 일 ===== | ===== 신규 개발 조직 구축시 먼저 할 일 ===== | ||
줄 434: | 줄 443: | ||
* [[: | * [[: | ||
* [[java: | * [[java: | ||
+ | * 개발 시간도 아니면서 개발 시간이 부족하게 만드는 요소들(배포 복잡도로 인한 배포 시간이 너무 오래걸린다던가, | ||
* 기술 선언서를 만든다. | * 기술 선언서를 만든다. | ||
* 장애대응 방법과 태도(비난하지 말고 함께 문제를 해결한다던가) | * 장애대응 방법과 태도(비난하지 말고 함께 문제를 해결한다던가) | ||
줄 446: | 줄 456: | ||
* Test 방법 | * Test 방법 | ||
* 그리고 지속적인 회고로 기술 선언서를 개선한다. | * 그리고 지속적인 회고로 기술 선언서를 개선한다. | ||
+ | |||
+ | |||
===== 지속적인 업그레이드 ===== | ===== 지속적인 업그레이드 ===== |