본문 바로가기

실전 프로젝트27

실전 프로젝트 트래픽 처리 1 이번 프로젝트에서 트래픽 처리와 관련해서는 대략적인 설계 과정에 참여만 하고 실질적으로 구현은 다른 팀원들이 담당했다. 따라서 트래픽처리와 관련된 구체적인 코드를 살펴보고 싶다고 생각해서 프로젝트 코드들을 개인적으로 체크해보는 시간을 가져보고자 한다. 쿠폰 발급과 관련된 트래픽을 처리를 위한 세 가지의 서버를 구성하였다. 쿠폰 서버, 대기열 서버, 스케쥴링 서버다. 대기열 서버의 구성 방식에 대해서는 다양한 논의가 오갔지만 레디스를 활용하여 요청들을 저장하고 스케쥴링 서버가 해당 레디스에서 요청들을 일정한 개수를 가져와 쿠폰 서버에 발급을 요청하도록 하는 것이 가장 안정적이라고 결론을 내릴 수 있었다. 단순히 레디스의 분산락을 이용하여 트래픽 처리를 하게 된다면 서비스 요구사항인 순서보장이 지켜지지 않기.. 2023. 9. 18.
실전 프로젝트 26 - 프로젝트 결과 https://prezi.com/view/uhC7HTYG8MmGtBc9xOev/ MaybeZone Maybe Zone Challenge Team 10 목차 1. 서비스 기획 및 배경 2. 서비스 시연 3. 서비스 아키텍처 4. 기술적 도전 5. 트러블 슈팅 6. 성능 개선 목차 서비스 기획 및 배경 서비스 기획 및 배경 다양한 물품들을 prezi.com https://youtu.be/9Fj70BW8wcc 발표영상. 너무 시간 압박에 시달려서 제대로 못 찍은 것 같다.. 나중에 시간이 되면 추가적으로 다시 찍어야지 싶다. 2023. 9. 9.
실전 프로젝트 25 - 톰캣 쓰레드 설정 톰캣 아파치 소프트웨어 재단에서 개발한 오픈 소스 웹 애플리케이션 서버. 자바 서블릿과 JSP를 실행할 수 있는 환경을 제공한다. 톰캣은 대부분의 운영 체제에서 가용할 수 있으며, 동적인 웹 애플리케이션을 실행하기 위해 사용된다. 웹 애플리케이션은 사용자가 웹 브라우저를 통해 상호 작용할 수 있는 소프트웨어 프로그램이다. 예를 들어, 온라인 쇼핑 사이트나 은행 웹 사이트와 같은 것들이 웹 애플리케이션의 예시라고 할 수 있다. -Servlet은 Java로 작성된 서버 측 프로그램. 웹 애플리케이션의 동적인 부분을 처리하는데 사용된다. -JSP는 JavaServer Pages의 약자로, HTML 내에 Java 코드를 삽입하여 동적인 웹 페이지를 생성할 수 있는 기술. 정리하자면 톰캣은 자바 기반의 웹 애플리.. 2023. 9. 5.
실전 프로젝트 24 - 관심사 분리 가장 고민이 많았던 문제다. 인프라는 기술의 발전 속도 때문에 쉽게 대체될 수 있지만 비즈니스 로직은 특성상 쉽게 변화되지 않는다. 따라서 해당 비즈니스 로직도 변화에 유연한 방식으로 순수한 자바코드를 이용해 작성하는 것이 향후 서비스가 변화해도 유리할 것이라고 자연스럽게 생각할 수 있다. 하지만 기존의 레이어드 아키텍처에서는 경매 조회, 입찰, 낙찰 관련 메서드에 카프카로 이벤트를 발송하는 메서드도 존재하고, OpenFeign을 이용한 코드도 존재하였다. 이러한 코드가 비록 지금 당장은 아무런 문제가 없지만 이후 미래에 발생할 수 있는 기술적 진보를 생각하면 기술 관심사와 비즈니스 관심사를 분리하여 코드를 작성하는 작업이 필요하다. 헥사고날 아키텍처는 이러한 점에서 고려하게 되었으며 비즈니스 로직이 기.. 2023. 9. 2.
실전 프로젝트 23 - Resilence4j 장애 격리 연결되어 있는 서비스들에서 특정 서비스가 장애를 일으키게 되면 장애 전파를 통해 전체 서비스 마비가 발생할 수 있다는 생각을 하게 되었다. 이는 곧 서비스의 장애내성과 회복탄력성이 필요하다는 결론을 내릴 수 있었다. 분리되어 있는 서비스 간의 장애 전파를 막기 위해서는 어떤 방식이 있는지 찾아보는 과정에서 기존 Hystrix라는 기술은 더 이상 update 되지 않아 사실상 deprecated가 되었고 보다 경량화된 Resilience4j를 이용하게 되었다. Resilience4j 서비스가 실패하거나 느려질 때 시스템의 안정성을 유지하고, 복구하는 기능을 제공하는 라이브러리. Resilience4j는 주로 마이크로서비스 아키텍처나 클라우드 네이티브 환경에서 사용되며, 주요한 네트워크 및 외부 .. 2023. 9. 1.
실전 프로젝트 22 - 커넥션풀 커넥션풀 데이터베이스 연결을 캐시로 유지하여 필요할 때마다 새로운 연결을 열거나 닫는 대신 재사용할 수 있도록 연결을 유지한채 존재하는 대기풀 프로그램이 데이터베이스와 상호작용해야 할 때, 일반적으로 데이터베이스 서버에 연결을 설정한다. 이 과정은 DB 서버와 3 way handshake와 같은 네트워크 통신때문에 비교적 시간이 많이 걸리고 자원을 소비하게 된다. 동시에 여러 클라이언트나 프로세스가 데이터베이스에 접근해야 하는 경우, 각 요청마다 새로운 연결을 설정하는 것은 비효율적이며 느릴 수 있다. 커넥션 풀은 이 문제를 해결하기 위해 메모리에 이미 설정된 데이터베이스 연결의 모아둔다. 클라이언트나 프로세스가 데이터베이스에 연결을 요청하면, 풀은 사용 가능한 미사용 연결이 있는지 확인하고, 만약 해당.. 2023. 8. 31.
실전 프로젝트 21 - 동시성 제어 @Transactional(isolation = Isolation.SERIALIZABLE) @Lock(LockModeType.PESSIMISTIC_READ) public ResponseWinningPriceDto bid(Long auctionId, RequestAuctionDto requestAuctionDto, Long memberId) { Auction findAuction = auctionRepository.findById(auctionId).orElseThrow(() -> new IllegalArgumentException("진행중인 경매가 없습니다")); RequestBidDto bidDto = RequestBidDto.builder() .memberId(memberId) .bid(request.. 2023. 8. 30.
실전 프로젝트 20 - 배포 각기 다르게 배포가 된 마이크로서비스들 깃 액션과 도커를 활용한 CI/CD name: CI/CD on: push: branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v3 - name: Setup JDK 17 uses: actions/setup-java@v3 with: java-version: "17" distribution: "temurin" - name: permission for gradlew run: chmod +x gradlew - name: build with gradle run: ./gradlew clean build -x test - name: dockerHub.. 2023. 8. 29.
실전 프로젝트 19 - 분산 추적 분산 추적 여러 마이크로서비스가 함께 구성하는 애플리케이션 간 상호 작용을 모니터링하고 분석하는 기술. 마이크로서비스 환경에서는 애플리케이션이 서로 통신하는 여러 독립적인 서비스로 구성된다. 이러한 아키텍처는 확장성과 유연성과 같은 이점을 제공하지만, 서로 다른 서비스 간 상호 작용 및 전체 성능에 미치는 영향을 이해하는 데 복잡성을 증가시킨다. 분산 추적은 요청이 다양한 마이크로서비스를 통과하는 과정을 시각화하여 개발자와 운영 팀이 전체 시스템의 동작과 성능을 더 잘 이해할 수 있도록 한다. 분산추적을 통해 특정 요청이 어떠한 마이크로서비스를 거쳐가는지에 대한 요청흐름, 각 서비스 및 네트워크 통신에 얼마나 많은 시간이 소요되는 지에 대한 지연분석, 특정 요청이 어떠한 부분에서 오류를 발생시키는지 확인.. 2023. 8. 26.
실전 프로젝트 18 - FeignClient Feign Client Feign은 자바 기반의 오픈 소스 HTTP 클라이언트 라이브러리로, 원격 서버에 HTTP 요청을 보내고 응답을 처리하는 데 사용된다. 주로 마이크로서비스 아키텍처에서 다른 서비스 간의 통신에 사용되며, 개발자가 서비스 간 통신을 더 편리하게 처리할 수 있도록 지원한다. Feign 클라이언트의 주요 특징 선언적 인터페이스 Feign은 자바 인터페이스로 REST API 클라이언트를 정의한다. 이 인터페이스에는 HTTP 요청 메서드, 경로, 파라미터, 헤더 등이 어노테이션으로 정의되어 있다. 자동화된 요청 생성 Feign은 인터페이스에 정의된 메서드를 호출할 때, 해당 요청을 자동으로 생성한다. 이때 메서드의 파라미터와 어노테이션을 기반으로 HTTP 요청이 구성된다. 응답 처리 Fei.. 2023. 8. 24.