본문 바로가기

분류 전체보기

[Spring + Kafka] 간단 실습 * 본 글에서는 Spring + Kafka를 매우 간단하게 적용해 볼 예정이다. kafka 간단 정리 Porudcer는 Topic에 데이터를 적재하고, Consumer는 Topic에서 데이터를 가져와 처리한다. Topic은 키 값에 따라 여러 파티션으로 나눠서 적재(파티셔닝)되고, Consumer Group의 포함된 하나의 Comsumer가 하나의 Partition을 담당하여 데이터를 처리한다. Consumer가 데이터를 처리하면, ACK를 날려 데이터를 처리했다고 표시한다. ACK를 날리는 방법은 여러 가지가 존재한다. Kafka의 자세한 설명은 다음 링크를 통해서 확인할 수 있다.https://yeongchan1228.tistory.com/52 [Kafka] Apache Kafka란? 데이터가 흐르는.. 더보기
[Spring] 알림 기능에 SSE 적용하기 * 주기적으로 Client에서 데이터를 가져와야 하는 경우 사용할 수 있는 방법 Polling 일정 주기를 가지고 서버의 API를 호출하는 방법 실시간으로 데이터가 업데이트 되지 않는다는 단점 존재 불필요한 요청이 발생하기 때문에 서버 부하 발생 호환성이 좋다는 장점을 가짐 Long-Polling 서버로 요청이 들어올 경우, 일정 시간 동안 대기 했다가 요청한 데이터가 업데이트 된 경우 서버에서 웹 브라우저로 응답을 보냄 연결이 된 경우 실시간으로 데이터가 들어올 수 있다는 장점이 존재 Polling보다 개선된 형태이지만, 데이터의 업데이트가 빈번한 경우 Polling과 유사하다는 단점이 존재 SSE (Server-Sent Event) 서버에서 웹 브라우저로 데이터를 보냄. 웹 브라우저에서 서버 쪽으로 .. 더보기
Redis + Spring 설정 및 간단한 실습 Redis 환경 준비하기 환경: Unubunt 20.04 LTS Unubunt 20.04 LTS EC2 인스턴스에서 다음 명령어를 사용하여 Docker로 Redis 컨테이너를 구동한다. docker run -d -p 6379:6379 --name=redis redis 해당 명령어를 입력하면, 다음과 같이 구동 중인 Redis 컨테이너를 확인할 수 있다. 다음 명령어를 사용하여 redis-cli에 접속한다. docker exec -it redis redis-cli Spring Boot Project 환경: Spring Boot 2.7.5 build.gradle에 다음과 같은 dependency를 추가한다. implementation 'org.springframework.boot:spring-boot-sta.. 더보기
MicroService 정리 MicroService는 애플리케이션을 느슨한게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. 애플리케이션을 더 조그마한 여러 서비스로 분해할 때의 장점 모듈성을 개선할 수 있다. 애플리케이션의 이해, 개발, 테스트를 더 쉽게 할 수 있다. 애플리케이션의 침식에 더 탄력적으로 만들어 준다. MicroService의 특징 빠르게 개발해 지속적으로 배포할 수 있다. 수동 혹은 자동으로 쉽게 스케일링 할 수 있다. 명확한 인터페이스를 통해서만 통신한다. 개별적인 런타임 프로세스로 배포할 수 있다. 성능(대기 시간)이나 데이터 일관성을 저해하지 않을 정도의 규모를 가진다. Spring Cloud를 사용한 MicroService Architecture.. 더보기
[Junit5] JPA metamodel must not be empty! Spring-Boot 환경에서 Junit5를 사용한 Controller 단위 테스트를 진행하는 도중, 다음과 같은 에러가 발생하였다. Caused by: java.lang.IllegalArgumentException: JPA metamodel must not be empty! Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: JPA metamodel must not be empty! 원.. 더보기
[Junit5] org.mockito.exceptions.misusing.MissingMethodInvocationException AuthService 단위 테스트를 작성하던 도중 JwtTokenUtils 내부의 static method를 mocking하고 테스트를 진행하니 다음과 같은 에러가 발생하였다. org.mockito.excptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'. For example: when(mock.getArticles()).thenReturn(articles); Also, this error might show up because: 1. you stub either of: final/private/equals()/hashCode() method.. 더보기
[소프트웨어 분석] Sonarqube 정적 분석 VS 동적 분석 구분 정적 분석 동적 분석 분석 대상 소스 코드 또는 컴파일된 바이너리 프로그램 실행 환경 테스트 범위 소스 코드의 모든 부분 실행 가능한 경로 활용 코드 상의 문제나 실수를 찾기 테스트, 모니터링 정적 분석은 주로 개발 단계에서 코드의 구조적 문제를 파악할 때 사용한다. 동적 분석은 주로 테스트나 모니터링에 사용한다. Sonarqube 정적 분석을 도와주는 대표적인 도구 프로젝트 코드 품질 측정 프로젝트 코드의 품질 정보 측정 빌드 및 통합 후 품질 변화 측정 폴리그랏 언어별 Rule 지원 Java, GO 언어 등 언어별 Rule 지원 Jacoco 등 분석 플러그인 지원 Quality Profiles 관리 분석 Ruleset 정의 및 적용 Ruleset 기반 Profile 구.. 더보기
[DB] MySQL vs PostgreSQL 요즘 PostgreSQL을 사용한다는 이야기를 많이 들어, 기존에 팀 프로젝트에서 자주 사용하던 MySQL과 어떤 점이 다른지 알아보고 정리하였다. MySQL과 PostgreSQL 차이점 MySQL PostgreSQL DB 특성 RDBMS ORDMBS 방식 멀티 쓰레드 멀티 프로세스 사용 환경 OLTP OLTP, OLAP MVCC 지원 UndoSegemnt 방식 MGA 방식 UPDATE 방식 UPDATE INSERT & DELETE 지원되는 JOIN NL JOIN, HASH JOIN NL JOIN, HASH JOIN, SORT JOIN Parallel Query for Select 지원한다. 지원한다. Default Transaction Isolation REPEATABLE READ READ COMMIT.. 더보기