• [Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리

    [Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리

    배경 Gasip 프로젝트를 진행하던 도중 게시글 조회수를 올릴 때 동시성 문제를 해결하고자 조사하고 고민한 방법을 공유하고자 합니다. 조사하면서 정말 다양한 방법이 있었고, 저는 왜 이런 방법을 선택했는지도 함께 풀어서 설명해보겠습니다. 해결하고자 하는 문제는 당연히 조회수 동시성 문제입니다. 로컬 환경에서 JMeter를 활용하여 500개의 멀티쓰레드 환경에서 동시에 게시글을 조회한 결과,조회수가 500만큼 오르는 것이 아닌 200~250내외로 조회수가 오르는 것을 확인할 수 있었습니다. 당시 조회수를 올리는 로직은 아래와 같습니다. 서비스 레이어에서 게시글을 조회하는 메서드 내에서 위 increaseView를 호출했습니다. @Transactional public BoardReadResponse find..

  • [Gasip] 게시글 조회수 중복 방지 처리 로직 구현

    [Gasip] 게시글 조회수 중복 방지 처리 로직 구현

    자세한 코드는 깃허브 주소를 참고 부탁드립니다. (BoardService.java) https://github.com/GASIP-PROJECT/gasip-service/tree/develop/src/main/java/com/example/gasip/board gasip-service/src/main/java/com/example/gasip/board at develop · GASIP-PROJECT/gasip-service 가천 수강 프로젝트 입니다. Contribute to GASIP-PROJECT/gasip-service development by creating an account on GitHub. github.com 1. 배경 조회수 기능을 개발 중입니다. 서비스를 개발하면서, 특정 사용자에 의해..

  • 스프링 빈이란??

    1. 스프링 빈? 정의(What?) IoC 컨테이너(스프링 컨테이너) 안에 들어있는 객체로, 필요 시 스프링 컨테이너에서 가져와서 사용한다. 싱글톤으로 저장되기 때문에 객체의 재사용이 가능하다. 왜써?(why?) 스프링 컨테이너에서 개발자 대신 객체를 관리하도록 하기 위함. 객체를 개발자가 직접 생성하고 관리하는 것이 아니라 스프링 컨테이너에 스프링 빈으로 등록하고 컨테이너가 연관관계를 맺고 관리하도록 할 수 있다. 스프링 빈을 등록하는 방법은 아래와 같다. 1. @Bean 어노테이션 + ComponentScan 어노테이션 @ComponentScan(basePackages= {"com.example.myapp"}) @ImportResource(value= {"classpath:application-con..

  • 스프링 컨테이너 DI와 IoC

    1. IoC (Inversion Of Control) 제어의 역전이란? 정의(What?) 프로그램의 메서드나 객체를 개발자가 직접 제어하는 것이 아니라 외부(스프링 컨테이너)에서 관리하도록 하는 것 왜 써?(Why?) 개발자는 비즈니스 로직 구현에만 집중할 수 있기 때문 또한 제어의 역전을 통해 SOLID 원칙 중 DIP(의존관계 역전 원칙)를 준수할 수 있다. SoccerPlayer라는 인터페이스가 있다고 가정해보자. 아래 코드는 DIP를 위반한 상태이다. DIP는 추상화에 의존해야하지 구체화에 의존하면 안된다는 원칙인데, 아래 코드에서 Coach 클래스는 현재 체력 훈련 세션 객체를 의존하고 있다. 다른 훈련세션으로 변경하기 위해선 코드를 직접 수정해야하기 때문이다. public class Coach..

  • 객체지향 설계원칙 : SOLID 란?

    객체지향 설계원칙 : SOLID 란?

    SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙이다. 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)으로 이루어져 있다. SOLID를 지킨다면 프로그램이 복잡해져도 변경에 용이하고 유지보수와 확장이 쉬운 소프트웨어를 개발할 수 있을 것이다. 1. SRP(단일 책임 원칙, Single Responsibility Principle) 정의(what?) 하나의 클래스는 하나의 책임을 가져야한다는 뜻이다. 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하기 위해 집중되어야 한다. 왜 써?(why?) 책임의 영역이 확실해지기 때문에 어떤 클래스의 책임이 변경되어야한다해도 다른 클래스의 책임에는 ..