서이추 10

[docker] Docker Swarm을 활용한 NFS Volume 생성과 서비스 배포

Introduction Docker Swarm을 활용하여 NFS(Network File System) Volume을 생성하고 서비스를 배포하는 방법에 대해 알아보겠습니다. 이를 통해 여러 Docker 노드 간에 데이터를 공유하고 분산된 서비스를 운영할 수 있습니다. NFS란? NFS(Network File System)은 리눅스와 유닉스 계열 운영체제에서 사용되는 분산 파일 시스템입니다. 파일 및 디렉토리를 네트워크를 통해 다른 컴퓨터에 공유할 수 있게 해주는 프로토콜입니다. Docker Swarm 이란? Docker Swarm은 Docker 컨테이너 오케스트레이션 도구 중 하나로, 여러 Docker 호스트를 하나의 가상화된 호스트로 관리하는 기능을 제공합니다. Swarm을 통해 여러 노드에 걸쳐 컨테이..

DevOps/docker 2024.02.01

[Kafka] Kafka를 활용한 대규모 데이터 실시간 전송 예제 코드

Kafka는 왜 탄생했나? 단방향 통신 App and Services → Relational Data Ware House Source Application, Target Application이 많아지면서 데이터를 전송해지는 라인이 매우 복잡해졌다. Source Application, Target Application이 많아질수록 key value Store 즉, 데이터를 전송해지는 라인도 그만큼 많아졌다. 데이터를 전송해지는 라인이 많아지면 배포와 장애에 대응하기가 어려워진다. 데이터를 전송할 때 프로토콜포멧 파편화가 심해지고 추후 데이터 포멧 내부에 변경사항이 생기면 유지보수하기어려워진다. apache kafka는 위와 같은 어려움을 해결해준다. Source Application과 Target Appl..

DevOps/kafka 2023.05.02

MSA구조를 위한 서버안정화 및 과부하 분산처리를 위한 솔루션 검토

서버 자동 재시작(self- healing) bash와 crontab health Check를 위한 쉘스크립트 function isRunning { if[-s $HITUP_PID_FILE] then ps -p $(cat $HITUP_PID_FILE) > dev/null return $? else return 1 fi } JVM 실행옵션 OutOfMemoryError에러 발생 시 바로 킬하는 옵션 장애 원인을 남기기위해서 heapdump남기는 옵션 java- Xmx10x10m \\ -XX:+HeapDumOnOutOfMemoryError \\ -XX:+ExitOnOutOfMemoryError -jar may_cause_oom.jar 첫번째 OutOfMemoryError 에러가 나면 프로세스가 바로 다운이되고..

DevOps 2023.01.20

AOP 입문자를 위한 기초 개념 : Spring을 사용하지 않는 AOP 구현 방법

AOP란? 관점 지향 프로그래밍이란 OOP로 독립적으로 분리하기 어려운 부가 기능을 모듈화하는 방식이다. 이 글에서 트랜잭션 관리와 같은 부분이 바로 부가 기능 모듈이며, 이를 Aspect라고 한다. AOP는 핵심 비즈니스 로직과 부가 기능 Aspect를 분리하는 등 OOP를 보완하는 역할을 한다. Cross-cutting-Concern (로그처리, 보안처리, 트렌젝션처리)을 소스코드에 로그처리, 보안처리하는 코드를 다 하나하나 넣어줘야했다. 그러면 필요시에 의해서 하나하나 처리를 해줘야하기 때문에 유지보수가 힘들어진다. 과거의 방식을 유지보수에 용이하게 보완하기 위해 등장한 방법이 바로 AOP이다. Cross-cutting-Concern (로그처리, 보안처리, 트렌젝션처리)과 Core Concern(주..

DesignPattern 2022.12.29

[ProblemSolver] @Transactional(readOnly = true)는 왜 필요한가?

회사에서 소스코드를 분석하고 에제코드를 작성해보면서 단순히 왜 쓰는지에 대해 이해도가 전혀없이 @Transactional(readOnly = true) 을 주었다. 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 별도록 @Transaction 어노테이션을 메서드에 선언해야한다. Class Level에는 공통적으로 적용되는 읽기전용인 @Transacrtion (readOnly = true) 어노테이션을 선언만하고 실행을 시켜본 결과 당연히 되지않았다. 그래놓고 왜 update가 왜 안될까 고민하고 있었다. 아래와 같이 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 @Transactional 어노테이션을 달아줘야한다. @Service @T..

네트워크와 CS 2022.10.24

[queryDsl] queryDsl에서 데이터 insert하는 방법

queryDsl QueryDSL을 사용하여 쿼리를 Build 하기 위해서는 JPAQueryFactory가 필요하다. JPAQueryFactory를 사용하면 EntityManager를 통해서 질의가 처리되고, JPQL을 사용한다. EntityManager? JPAQueryFactory는 insert()를 가지고 있지않기 때문에 insert를 하려면 EnityManager를 사용한다. @Service @Transactional(readOnly = true) class BoardServiceImpl( val boardRepository: BoardRepository, val em: EntityManager ) : BoardService { /** 작성글 작성 **/ @Transactional override ..

[SpringSecurity] 쿼리낭비하지않는 코드: @AuthenticationPrincipal 쓰지않으면서

지난주에는 JWT Token을 이용하여 로그인 기능을 구현하는 연습을 하면서 기본CRUD에 유저정보를 넣는 작업을 하기위해 알아보면서 @AuthenticationPrincipal 어노테이션에 대해 알게되었습니다, 하지만 더 좋은 방법을 동료에게 추천을 받았다. @AuthenticationPrincipal을 함으로서 User엔티티를 한번더 불러와 select쿼리가 낭비되는 것보다는 DTO역할 분리를 하고자하는 로직에 따라 분리하여 충분히 update쿼리 하나만으로도 어노테이션없이 쿼리낭비를 하지않으면서도 효울적이게 코드를 작성할 수 있다. . @AuthenticationPrincipal 기존에는 로그인한 사용자의 정보를 파라메터로 받고 싶을때 @AuthenticationPrincipal 애노테이션을 사용하..

[AWS] EC2 기본 사용법에 대해 알아보자

Elastic Compute Cloud EC2는 컴퓨터를 통째로 빌려주는 컴퓨터 임대 서비스 서비스를 이용한다고 집으로 컴퓨터가 배달되는 것은 아니다. 원격 제어를 이용해서 컴퓨터를 조작하고 더 이상 필요없어지면 언제든지 버릴 수 있는 서비스이다. AWS Mangement Console 사이트 접속 로그인/회원가입 https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#Home: EC2 검색하면 EC2 관련 대시보드 클릭 후 접속 👋🏻 인스턴스? EC2에서는 한대 한대 컴퓨터를 인스턴스라고 부른다. 인스턴스 메뉴를 통해서 내가 생성한 인스턴스들을 관리하고 새로운 인스턴스들을 시작할 수 있는 화면 새로운 인스턴스 만들기 인스..

DevOps/aws 2022.10.10

SOLID 디자인 패턴 : 단일 책임 원칙 (Single Responsibility)

단일 책임 원칙 (Single Responsibility) 위키에 검색해보면 module, class, function은 하나의 파트에 대해서만 responsibility를 가져야한다. 라고 써있다. 매우 쉬운 원칙이기도하고 당연한 원칙이기도한데 프로그래밍을 처음 배우시는 분들이 놓치는 내용이기도하다. 간단한 예를 들어보겠다. 두 수를 더해주는 함수에 add함수와 숫자를 출력해주는 함수 numPrint를 만들 수 있다. def add(num1,num2): return num1+ num2 def numPrint(num): print(num) 두 함수를 보면 add함수는 두수를 더해서 리턴해주고, numPrint함수는 넘겨받은 숫자를 출력해준다. 각각 하나의Responsibility를 가지고 만들어진 함수이..

DesignPattern 2022.10.03