프로젝트 경험기 12

[기타] 슬랙 커스텀 앱 봇 만들기

셋팅 방법 1. 슬랙 워크 스페이스의 앱에 대한 기본 Key 및 옵션 설정 다음 링크 참조 2. 최종 Key 획득 다음 key들은 프로젝트 내 환경변수로 관리 SIGNING SECRET : ... hash SLACK_BOT_TOKEN : xoxb- ... SLACK_APP_TOKEN(=Socket Token) : xapp-... 3. 로컬 프로젝트 생성 슬랙 API 에서 공식 지원하는 - Bolt Python 으로 작성 [링크] 슬랙 API 사용 중 필요 권한은 1. 에서 계속 추가 설정 코드 배포 4. 슬랙 채널에 앱 추가 5. 트러블 슈팅 설치할 봇 사용자가 없습니다. : 앱 명을 자꾸 바꾸다가 발생하였었음

[기타] 임시 저장 서비스 경험기

임시 저장 서비스 사내에서 임시 저장 서비스를 구현하면서, 어떻게 할 것인가.. 어떤 방법이 좋은가에 대해 고민했던 부분을 공유해보려고 한다. 결과적으로, 설계 당시에 선택한 방법이 가져올 문제점 등에 대해 충분히 고려하지 못해 나중에 수고스러워 지는 부분도 있었던 것도 같고, 다음에 구현하게 될 때 좀더 빠르고 정확하게 할 수 있도록 기록을 남겨 보려 한다. 임시 저장 서비스 기능 요구 사항 상태 : 임시 저장, 생성 완료 임시 저장 데이터 : 생성, 수정, 삭제, 조회 가능 완성 데이터 : 생성, 수정, 삭제, 조회 가능 데이터 목록 : 임시 저장, 완성 데이터는 같이 조회가능 해야 함 중요 : 완성 데이터가 있어도 임시 저장 데이터가 유효 해야 함 중요 : 사용자는 하나의 객체에 대해서만 생서/수정..

[기타] 에러 핸들링 (Error Handling) 처리 경험기

에러 핸들링 구현기 프로젝트를 진행하며 초기 셋팅시, 에러에 대한 핸들링 처리를 통해 서버에 대한 신뢰도와 안정성을 높이는 작업을 진행하였고, 해당 과정에서 최종 정의한 에러 범위에 대한 정의, 정의 간 고려사항, 처리 방법 등에 대해 정리 해보았다. 에러 핸들링 처리는 목적은 다 똑같지만.. 범위나 방법 등에 대해서는 기업마다 팀마다 다를 것이라고 생각한다. 에러 핸들링 이란? 런타임 과정, 혹은 특정 예외 상황에서 발생하는 에러/비정상적인 상황들 (ValidationError, AuthError, ServiceLogicError 등)에 대해 직접 의도된 동작으로 처리 하는 기술 에러 핸들링의 주요 목표는 다음과 같다. - SW의 비정상적인 종료들로 인한 사용자 경험 저해 방지 - 프로그램에 대한 안정..

[리팩토링] 리팩토링 경험기 (2) 가독성 높이기 - 함수명 개선

배경 몇달간의 프로젝트를 진행 후에, 서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고, 2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '가독성 높이기 - 함수명 개선' 에 대한 경험을 공유 하려 한다. 가장 큰 목적은 여럿이서 작성한 다양한 함수명 틀을, 조금이나마 비슷하게 맞춰 가독성을 높이는데 중점을 두었다. 함수명 개선 간 나름 정한 규칙은 다음과 같다 - Service Class 명도 해당 함수에 같이 의미 해석 된다. - check, validate, in 등의 비슷한 결의 함수명을 가지게 함 사례 1 - 함수명 개선 하기 👉 프로젝트 구조 설명 router.py (요청) -> service.py (비즈..

[리팩토링] 리팩토링 경험기 (1) 공통 코드 줄이기

배경 몇달간의 프로젝트를 진행 후에, 서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고, 2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '공통 코드를 줄이는 것' 에 대한 경험을 공유 하려 한다. 과정 👉 리팩토링 전 프로젝트 구조 router/ : api 및 service/ return 값에 따른 error handling 수행 service/ : 비즈니스 로직 작성 및 결과에 따른 return 성공 여부 반환 즉 router에서 service 로직을 호출하여 수행하다가, 성공 여부를 router로 반환해, 핸들링 된 에러로 유저에게 응답하는 방식 초기에 이렇게 작성했던 이유는 api 별로 error 흐름을 파악..

[MSA 경험기] 모아 구독 (7) 메일 서비스 비동기 전환 (by. FastAPI, Celery, Rabbitmq)

지난 글 이전 글에서는 검색 히스토리 서비스를 구현하며, DB 선택 과정과 Singleton 패턴을 적용한 경험에 대해 작성하였다. https://yubi5050.tistory.com/225 [MSA 경험기] 모아 구독 (6) 검색 히스토리 서비스 (by. NoSQL, Singleton) 지난 글 이전 글 에서는 Query Profiling을 통한 Query 시간 최적화에 대해 작성하였었다. https://yubi5050.tistory.com/223 [MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화 지난 글 이전 글 에서는 조회수 yubi5050.tistory.com 이번 글 에서는 기존에 동기로 이루어지던 메일 서비스를 비동기로 전환하면서 고민하였던 부분들과 과정에 대해 작..

[MSA 경험기] 모아 구독 (6) 검색 히스토리 서비스 (by. NoSQL, Singleton)

지난 글 이전 글 에서는 Query Profiling을 통한 Query 시간 최적화에 대해 작성하였었다. https://yubi5050.tistory.com/223 [MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화 지난 글 이전 글 에서는 조회수 구현시 동일 유저의 반복 접근 이슈를 쿠키를 활용하여 해결 방법에 대해 작성하였다. https://yubi5050.tistory.com/222 [MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키 yubi5050.tistory.com 이번 글 에서는 '검색 히스토리 서비스 - 최근 검색어, 추천 검색어'를 구현하면서 고민하였던 부분들에 대해 작성해 보려고 한다. BE에서는 검색 결과에 대한 구독 상품 조회 API와 검색 ..

[MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화

지난 글 이전 글 에서는 조회수 구현시 동일 유저의 반복 접근 이슈를 쿠키를 활용하여 해결 방법에 대해 작성하였다. https://yubi5050.tistory.com/222 [MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키와 동시성) 지난 글 이전 글 에서 사실 조회수 구현에 대해 쿠키와 동시성을 같이 설명하려고 했으나, 동시성을 설명하는 과정이 길어져, 두 편에 나눠서 쓰게 되었다. (사실 조회수 기능을 구현했던 시간 yubi5050.tistory.com 이번 글에서는 프로젝트를 진행하면서 Query Profiling을 통해 수행 시간을 줄인 경험에 대해 작성해보려고 한다. Query Profiling 도구 - Django debug toolbar Profiling Tool로는 일전에..

[MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키와 동시성)

지난 글 이전 글 에서 사실 조회수 구현에 대해 쿠키와 동시성을 같이 설명하려고 했으나, 동시성을 설명하는 과정이 길어져, 두 편에 나눠서 쓰게 되었다. (사실 조회수 기능을 구현했던 시간 보다 글로 정리하는 시간이 더 길어진 것 같은..) 여튼 이전 글에서는 조회수를 구현하기 위한 동시성 이슈를 해결하기 위해, F객체의 사용으로 Python 메모리에 로딩 없이 DB직접 반영하는 것과, Transaction 격리 수준 까지 알아보았다. https://yubi5050.tistory.com/221 [MSA 경험기] 모아 구독 (3) 조회수 구현 1 (by. 쿠키와 동시성) 지난 글 이전 글 에서는 페이지 네이션, 캐싱을 적용한 상품 리스트 조회를 구현하면서 고민했던 부분에 대해 적어보았었다. https://..

[MSA 경험기] 모아 구독 (3) 조회수 구현 1 (by. 쿠키와 동시성)

지난 글 이전 글 에서는 페이지 네이션, 캐싱을 적용한 상품 리스트 조회를 구현하면서 고민했던 부분에 대해 적어보았었다. https://yubi5050.tistory.com/220 [MSA 경험기] 모아 구독 (2) 페이지 네이션, 캐싱을 적용한 상품 조회 지난 글 이전 글 에서는 MSA 프로젝트를 시작한 계기와 프로젝트 기획 및 설계에 대해 작성했었다. https://yubi5050.tistory.com/218 [MSA 경험기] 모아 구독 (1) 프로젝트 기획 및 설계 MSA 프로젝트 시작 계 yubi5050.tistory.com 이번 글 에서는 '조회 서비스 - 구독 상품 상세 조회'의 조회수를 구현하면서 이슈가 되었던 부분과 해결 방법에 대해 이야기 해보려고 한다. (해당 글에서는 첫번째 이슈에 대..