간단하다. 가장 편리하고 편하게 사용할 수 있는 결제 방식이다. 무엇보다 결제에 관한 기능들을 한 번씩 테스트 해보는 것은 이후에 좋은 경험이 될 것이다.
1.1 API 연동 흐름

// 클라이언트에서 받은 paymentKey, orderId, amount 를 기반으로 서버 요청
paymentService.confirmPayment(paymentKey, orderId, amount);
// TossApiClient.java
public TossPaymentResponse confirmPayment(String paymentKey, String orderId, int amount) {
// HTTP 요청 구성 후 Toss로 전송
}
// PaymentService.java
paymentRepository.save(new Payment(...)); // JPA 엔티티 저장
// PaymentService.java
user.setMembershipLevel(PRO);
userRepository.save(user);



무료로 기능을 사용할 수 있다는 장점이 있다. (무료로 월 2000회 까지 가능 및 1초에 1번 가능). 게다가 쿼리 기반 검색을 진행하는 우리 프로젝트에 맞춰 간단한 쿼리로도 많은 검색 정보를 찾을 수 있는 브레이브 서치가 적절하다고 판단했다.BraveSearchResponseDto response = braveSearchService.searchBrave(userQuery);
docker-compose.yaml을 통해 여러 서비스를 한 번에 실행합니다.ankane/pgvector)EXPOSE 8080 포트 설정build: 도커 이미지 빌드 경로 지정depends_on: 의존 서비스 정의volumes: DB 데이터 영속성 유지networks: 서비스 간 통신을 위한 네트워크 설정services:
postgres:
image: ankane/pgvector:latest
ports:
- "${POSTGRES_PORT}:5432"
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- devmountain-postgres-volume:/var/lib/postgresql/data
redis:
image: redis:7.2
ports:
- "${REDIS_PORT}:6379"
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "${APP_PORT}:8080"
environment:
SPRING_PROFILES_ACTIVE: prod
POSTGRES_HOST: postgres
REDIS_HOST: redis
ci.yml)test 제외)name: CI - Build and Test
on:
push:
branches:
- "main"
- "develop"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'corretto'
- name: Build
run: ./gradlew clean build -x test
- name: Run Tests
run: ./gradlew test
cd.yml).env, application-prod.yml 파일 생성name: CD - Deploy to EC2
on:
push:
branches:
- "main"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Create .env file
run: echo "${{ secrets.DOTENV_FILE }}" > .env
- name: Create application-prod.yml
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_PROD_YML }}" > src/main/resources/application-prod.yml
- name: Set up SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.EC2_PRIVATE_KEY }}" > ~/.ssh/devmountain-key.pem
chmod 600 ~/.ssh/devmountain-key.pem
- name: Deploy to EC2
run: |
ssh -o StrictHostKeyChecking=no -i ~/.ssh/devmountain-key.pem ubuntu@${{ secrets.EC2_HOST }} << 'EOF'
cd ~/devmountain
git reset --hard HEAD
git clean -fd
git pull origin main
docker-compose down
./gradlew build -x test
docker-compose up -d --build
EOF

실제 서비스를 만들면서 느낀 점
개발자는 시간과의 싸움이 중요하다고 느꼈다. 내가 구현했다고 끝나는 것이 아니라 다른 사람들이 구현한 내용을 총 관리해야하는 리더의 역할이 중요함을 느꼈다. 지금 팀의 리더나 부리더 같은 경우 이에 관한 관리가 많이 부족한 상태임을 알고 있지만 자신이 맡은 임무도 제대로 끝내지 못해서 다른 사람들의 작업에 대해 왈가왈부 하는 것에 상당히 부담감을 느끼는 것이 좋지 않은 상황임을 인지했다. 내 개인적으로도 직접 회의를 이끌어가며 호응을 이끌어 내려 해도 다들 의견을 표출하지 않으려는 상황이 많이 답답하고 힘들었다. 하지만 분명 나도 완벽한
개선해야 할 점 & 다음 목표
이후에는 각자 맡은 업무를 언제까지 끝낼 수 있을지 (마감일), 매일 진행 상황에 대해 브리핑을 진행하도록 회의 방향을 바꿀 것을 제안했고 모두가 이 제안을 받아들여 좀 더 협업을 소통을 통해 진행하도록 계획했다. 다음 목표의 경우 이제 MCP 클라이언트 기능을 써 볼 예정이다. 그리고 기능 개선과 직접 서버 배포 설정을 해 볼 예정이다.