|
1 | 1 | # TermLens_BE |
| 2 | + |
2 | 3 | 약관 요약과 중요 조항에 대한 평가를 제공합니다. |
| 4 | + |
3 | 5 | # 아키텍처 |
4 | | -- AWS Lambda |
5 | | -- AWS Bedrock |
| 6 | + |
| 7 | +TermLens의 백엔드 아키텍처는 아래의 요소로 구성됩니다. |
| 8 | + |
| 9 | +- AWS |
| 10 | + - Lambda |
| 11 | + - S3 |
| 12 | + - DynamoDB |
| 13 | + - Bedrock (with Claude 3.5 Haiku) |
| 14 | + |
6 | 15 | # 테스트 |
| 16 | + |
7 | 17 | LocalStack의 실행을 위해 docker 설치가 필요합니다. |
| 18 | + |
8 | 19 | ## LocalStack 설치 |
9 | | -```bash |
10 | | -# pipx 설치 |
11 | | -sudo apt update |
12 | | -sudo apt install pipx |
13 | | -# 잘 설치되었는지 확인 |
14 | | -pipx --version |
15 | | - |
16 | | -# LocalStack, awslocal 설치 |
17 | | -pipx install localstack --include-deps |
18 | | -pipx install awscli-local[ver1] --include-deps |
19 | | -source ~/.bashrc |
20 | | -# 잘 설치되었는지 확인 |
21 | | -localstack --version |
22 | | -awslocal --version |
23 | | -``` |
24 | 20 |
|
25 | | -wsl 환경에서 `pip install` 명령을 전역으로 쓸 수 없어 pipx를 사용합니다. 전역으로 localstack 및 awslocal을 설치하여 사용 가능한 경우 pipx의 설치가 필요하지 않습니다. |
| 21 | +`scripts/install.sh` 명령으로 pipx와, pipx를 통해 localstack, awslocal이 설치됩니다. |
| 22 | + |
| 23 | +이후 `aws configure` 명령을 통해 가짜 aws credentials를 설정합니다. s3 및 DynamoDB 사용에 필요합니다. 각 요소는 다음과 같이 설정합니다. |
26 | 24 |
|
27 | | -이후 아래 명령을 통해 가짜 aws credentials를 설정합니다. s3 및 DynamoDB 사용에 필요합니다. |
28 | 25 | ```bash |
29 | | -aws configure |
30 | 26 | AWS Access Key ID [None]: test |
31 | 27 | AWS Secret Access Key [None]: test |
32 | 28 | Default region name [None]: us-east-1 |
33 | 29 | Default output format [None]: json |
34 | 30 | ``` |
| 31 | + |
35 | 32 | ## 로컬 테스트 |
| 33 | + |
36 | 34 | **docker가 실행된 상태에서** `localstack start` 명령으로 LocalStack을 구동합니다. 이후 터미널에 `Ready`가 나타나면 다른 터미널 창을 열고, 프로젝트 디렉토리에서 아래 작업을 수행합니다. |
37 | 35 |
|
38 | | -우선, LocalStack에 업로드할 zip파일을 생성합니다. |
39 | | -```bash |
40 | | -pip install -r requirements.txt -t build/ --upgrade |
41 | | -cp src/*.py build/ |
42 | | -cd build |
43 | | -zip -r ../test-package.zip . |
44 | | -cd .. |
45 | | -``` |
| 36 | +**스크립트들은 `scripts/스크립트_이름.sh`로 프로젝트 최상위 디렉토리에서 실행해주세요.** |
46 | 37 |
|
47 | | -ARM 환경에서는 `pip install...` 명령 대신 아래의 명령을 사용해주세요. LocalStack 및 AWS Lambda 환경에서는 amd64(x86-64)을 기반으로 작동하나, ARM 기반 기기에서 해당 명령으로 설치하게 되면 ARM용 바이너리를 받아와 LocalStack에서 실행하지 못합니다. 아래 명령으로 생성된 `build/` 디렉토리 및 `test-package.zip` 파일은 삭제 시 root 권한이 필요합니다. |
48 | | -```bash |
49 | | -docker run --platform linux/amd64 --rm -v "$(pwd)":/var/task --entrypoint "" public.ecr.aws/lambda/python:3.12 /bin/sh -c "pip install -r requirements.txt -t build/ --upgrade && cp src/*.py build/ && cd build && dnf install -y zip && zip -r ../test-package.zip . && cd .." |
50 | | -``` |
| 38 | +우선, LocalStack에 업로드할 `test-package.zip` 파일을 `scripts/make_zip.sh`을 사용해 생성합니다. docker를 사용해 arm 환경에서도 amd64용 바이너리를 받아오도록 했습니다. |
51 | 39 |
|
52 | | -그 다음 아래의 명령을 통해 람다 함수, S3 버킷, DynamoDB 테이블을 생성합니다. |
53 | | -```bash |
54 | | -awslocal lambda create-function \ |
55 | | - --function-name analyzeTermsOfServices \ |
56 | | - --runtime python3.12 \ |
57 | | - --timeout 120 \ |
58 | | - --zip-file fileb://test-package.zip \ |
59 | | - --handler lambda_function.lambda_handler \ |
60 | | - --role arn:aws:iam::000000000000:role/lambda-role \ |
61 | | - --environment Variables='{GEMINI_API_KEY=여기에_KEY값을_넣어주세요,LLM_PROVIDER=GEMINI}' |
62 | | - |
63 | | -awslocal s3api create-bucket --bucket inha-capstone-20-tos-content |
64 | | - |
65 | | -awslocal dynamodb create-table \ |
66 | | - --table-name inha-capstone-20-tos-analysis \ |
67 | | - --key-schema AttributeName=url,KeyType=HASH \ |
68 | | - --attribute-definitions AttributeName=url,AttributeType=S \ |
69 | | - --billing-mode PAY_PER_REQUEST \ |
70 | | - --region us-east-1 |
71 | | -``` |
| 40 | +그 다음 `scripts/init.sh` 명령을 통해 람다 함수, S3 버킷, DynamoDB 테이블을 생성합니다. **localstack을 새로 실행할 때마다** 진행해 주셔야 합니다. |
72 | 41 |
|
73 | | -생성된 함수의 호출은 다음과 같이 할 수 있습니다. |
74 | | -```bash |
75 | | -awslocal lambda invoke --function-name analyzeTermsOfServices \ |
76 | | - --payload '{"queryStringParameters": {"url" : "www.example.com"}, "body" : "약관 텍스트" }' output.json |
77 | | -``` |
78 | | -이후 `output.json` 파일에서 응답을 확인할 수 있습니다. |
| 42 | +생성된 함수의 호출은 `scripts/invoke.sh "www.test.com" "test_tos.txt"`와 같이 할 수 있습니다. 약관 텍스트 파일은 프로젝트 최상위 디렉토리(`.../TermLens/TermLens_BE`)에 넣어주세요. |
| 43 | + |
| 44 | +localstack이 실행 중이고 함수가 만들어진 상태에서 **변경된 코드를 적용**하려면 다시 `test-package.zip` 파일을 만든 뒤 `scripts/update.sh` 명령으로 업데이트합니다. |
79 | 45 |
|
80 | | -함수가 생성된 상태에서 변경하기 위해서는 `update-function-code`를 사용합니다. |
81 | | -```bash |
82 | | -awslocal lambda update-function-code \ |
83 | | - --function-name analyzeTermsOfServices \ |
84 | | - --zip-file fileb://test-package.zip |
85 | | -``` |
86 | 46 | ## AWS 환경에서 테스트 |
| 47 | + |
87 | 48 | 로컬에서는 작동만을 확인하고, 답변 품질에 대한 테스트는 AWS Lambda에, 테스트용 함수에 배포하여 수행합니다. |
| 49 | + |
88 | 50 | # 컨벤션 |
| 51 | + |
89 | 52 | ## 커밋 메시지 |
| 53 | + |
90 | 54 | 커밋 메시지의 작성법은 [컨벤셔널 커밋](https://www.conventionalcommits.org/ko/v1.0.0/)을 따릅니다. `feat: `, `fix: `, `test: ` 등의 접두사 뒤에 설명을 덧붙이는 방식입니다. 한국어로 작성합니다. |
| 55 | + |
91 | 56 | ## 브랜칭 전략 |
92 | | -[깃허브 플로우](https://docs.github.com/ko/get-started/using-github/github-flow)와 유사하게, 개별 작업마다 연관된 새로운 브랜치를 생성하고, 해당 브랜치에서 작업 후 main 브랜치에 병합하는 방식으로 개발을 진행합니다. 이때 브랜치의 이름은 `작업 종류/이슈번호-짧은-설명` 으로 합니다. |
| 57 | + |
| 58 | +[깃허브 플로우](https://docs.github.com/ko/get-started/using-github/github-flow)와 유사하게, 개별 작업마다 연관된 새로운 브랜치를 생성하고, 해당 브랜치에서 작업 후 main 브랜치에 병합하는 방식으로 개발을 진행합니다. 이때 브랜치의 이름은 `작업 종류/이슈번호-짧은-설명` 으로 합니다. |
0 commit comments