학습 9

쿠버네티스 실습해보기 - POD

[[#1.쿠버네티스 설치|1.쿠버네티스 설치]][[#1.쿠버네티스 설치#1.1. 쿠버네티스 종류|1.1. 쿠버네티스 종류]][[#1.쿠버네티스 설치#1.2. 도커 데스크탑 쿠버네티스 사용하기|1.2. 도커 데스크탑 쿠버네티스 사용하기]][[#2. Nginx Pod 실습|2. Nginx Pod 실습]][[#2. Nginx Pod 실습#2.1. 매니페스트 파일|2.1. 매니페스트 파일]][[#2.1. 매니페스트 파일#2.1.1. apiVersion|2.1.1. apiVersion]][[#2.1. 매니페스트 파일#2.1.2. kind|2.1.2. kind]][[#2.1. 매니페스트 파일#2.1.3. metadata|2.1.3. metadata]][[#2.1. 매니페스트 파일#2.1.4. spec|2.1.4..

학습 2024.12.09

쿠버네티스, 맛보기

[[#1. 쿠버네티스란|1. 쿠버네티스란]][[#1. 쿠버네티스란#1.1. 쿠버네티스 이전 컨테이너 관리|1.1. 쿠버네티스 이전 컨테이너 관리]][[#1.1. 쿠버네티스 이전 컨테이너 관리#1.1.2. 전통적인 배포 시대|1.1.2. 전통적인 배포 시대]][[#1.1. 쿠버네티스 이전 컨테이너 관리#1.1.3. 가상화된 배포 시대|1.1.3. 가상화된 배포 시대]][[#1.1. 쿠버네티스 이전 컨테이너 관리#1.1.3. 컨테이너 개발 시대|1.1.3. 컨테이너 개발 시대]][[#1. 쿠버네티스란#1.2. 쿠버네티스|1.2. 쿠버네티스]][[#2. 쿠버네티스의 기본 구성|2. 쿠버네티스의 기본 구성]][[#2. 쿠버네티스의 기본 구성#2.1. 노드|2.1. 노드]][[#2.1. 노드#2.1.1. 마스터 ..

학습 2024.12.02

Spring 의존성 끊어내기 DIP, Event, AOp

1. 서론여러 프로젝트를 하면서 의존성을 분리하려고 여러가지 패턴, 스택을 사용해왔다. 특히 이번 Mafia Together에서 SSE를 적용하면서 SSE를 관리하는 로직들이 Game에 있게 되면서 타 어그리게이트에서 SSE 통신하기 위해서는 Game에 의존을 하게 되었다. 이러한 상황에서 Game은 거의 모든 클래스에 의존성을 가지고 있어 순환 참조가 될 것으로 예상이 되었다. 그래서 우리는 이 SSE 를 분리할 필요가 생겼다. 그동안 사용한 의존성 분리에는 DIP, Event, AOP가 있었는데 이번 기회에 어떤 상황에 어떤 방법을 사용할지 생각해보면 좋을 것 같아 적게되었다.2. 의존성이란의존성이란 의존하는 대상의 변화가 본인에게 영향을 줄 가능성이 있는 경우를 말한다.예를 들어 A와 B가 다음과 ..

학습 2024.11.01

Block/Non-block vs Sync/Async

서론개발공부하다가 항상 Block, Non-Block Sync Async 이 개념에 가장 헤깔리는 개념같다읽어도 뭔지 몰겠음걍 똑같은거 같음.... 하면 하수겠지그래서 이참에 정리하고 가고자 한다.Block, Non-Block, Sync, AsyncBlock, Non-BlockBlock과 Non-Block의 차이는 A함수가 B함수를 호출 후 B함수 작업 중 A함수의 작업여부라고 말하면된다.Sync, Asyns동기 비동기의 차이는 요청한 작업의 완료 여부에 따라 순차적으로 일을 실행한다 이다.즉 동기는 순서가 보장되는 것이고, 비동기는 이 순서를 보장하지 않는다는 것이다.Sync == Block ?????저 말만 잘 들으면 결국 하나 실행될때 다른게 실행 안된다는 뜻이야? 같은 말이자나 할 수도 있다.나는..

학습 2024.10.31

Java로 Redis lock 구현하기

읽기 전에Redis의 락 레디스의 락에 대해서 정리한 글이다Spring의 Redis FrameworkSpring의 레디스 프레임 워크는 크게 3가지가 있다.Jedis , Lettuce, Redisson이렇게 있다. JedisRedis 동기식 Java 클라이언트, 비교적 간단하고 쉽다LettuceRedis 비동기 및 반응형 연결 Java 클라이언트, netty (자바 비동기 이벤트 기반 네트워크 애플리케이션)기반으로 이루어져 있다Reddisonnetty 기반의 고성능 비동기 및 락프리 Java 클라이언트, 락프리란 락을 사용하지 않고도 공유 자원에 대하여 여러 스레드 접근시 데이터의 일관성을 보장하는 프로그래밍 기법JedisRedis 용 비 동기식 Java 클라이언트라고 설명하며 비교적 간단하고 쉽게 사용..

학습 2024.10.21

Redis의 Lock

서론마피아 투게더를 개발하면서 Redis를 도입했다.Redis를 도입한 이유는 다음과 같다JVM 내부 세션 방식으로 관리하는 것보다 분산환경에 더 유연하게 설계 가능RDBMS보다 더 빠른 인메모리 DB하지만 여러가지 문제에 봉착하게 되었다.바로 동시성 문제에 봉착한 것이다.대표적인 예시로동시에 A, B가 마지막 멤버로 들어오면서 A가 사소한 차이로 먼저 들어왔을때A의 입장 요청이 B의 findRoom(참여인원 정보)보다 먼저 들어갈 경우 방의 입장정보를 계속 받고 있던 다른 유저는 마지막 유저가 A -> B로 바뀌는 동시성 이슈를 맛보게 될것이다.또한 DB(Redis)에는 해당 테이블에 먼저 입장한 A가 아닌 B가 최종적으로 저장되게 된다.이러한 문제는 @Transactional로 격리하여 해결할 수 있..

학습 2024.10.19

[면접복기] 쓰레드와 프로세스의 차이는 무엇인가요?

서론쓰레드와 프로세스의 차이에 대한 면접 질문을 받았었다CS 스터디할때 분명 한 기억은 있는데 너무 횡설수설 대답한 것 같았다 쓰레드운영체제에서의 작은 실행의 최소 단위 하나의 프로세스에서는 여러개의 스레드가 메모리를 공유하여 사용할 수 있다생성 속도가 빠르고 작은 메모리를 소모하며 정보 교환이 쉽고 컨텍스트 스위치가 빠르다자원 선점과 동기화 문제가 있다 프로세스프로세스또한 실행의 단위중 하나이다쓰레드보다는 큰 개념이라고 생각하면 좋다 차이가 있다면 프로세스는 독립적인 단위이다각각의 프로세스가 메모리를 공유하지 않고 각자의 데이터와 스택을 가지고, 보호받는다.쓰레드와 다르게 생성시 운영체제에게 PCB (Proccess Control Block)과 메모리 영역을 할당받고 초기화를 해야한다 또한 ..

학습 2024.09.17

[면접 복기] HTTP와 TCP 의 차이

서론하반기 첫 면접에서 좀 심하게 넘어지면서 여태까지 한 내용들을 정리할 필요를 느끼게 되었다그때 가장 잘못 대답한 부분이 바로 TCP 와 HTTP 에 대해서 말을 잘 못한것 같다때문에 이 부분을 더 정리해서 말해야 할 것 같았다우선적으로 제일 기본이 되는 통신에 대해서 정리해 보자우리가 흔히 통신에 대해서 얘기할때 2가지의 기술에 대해서 얘기를 한다TCP/IP 통신, UDP, 그리고 HTTP 통신오늘은 이것들에 대해서 정리해보도록 한다TCP == HTTP?TCP 프로토콜과 HTTP는 같은것인가?이 질문에 대한 대답은다른 것이다. 하지만 더 정확히는 HTTP 프로토콜은 TCP에 의존하여 통신을 한다. 라고 하면된다그럼 이 질문에 대해 더 자세히 알기 위해 각각이 무엇인지 알아보자TCPTCP는 애플리케이션..

학습 2024.09.15

Redis란

서론마피아 투게더라는 프로젝트를 진행하면서 기존 JVM 메모리로 관리하고 있던 게임내의 데이터 Repository를 Redis로 바꾸게 되면서 이에 대한 학습을 진행하였다.기존 JVM 인메모리로 관리하던 것이 문제가 된다고 생각한 것은모놀로식 서버에서 모든 데이터를 관리하는 것이 단일 장애점(SPOF)을 유발MSA 아키택처로 변경하거나 혹은 스케일 아웃 진행시 데이터 관리에 문제가 발생이라고 판단하였다.그렇다면 DB로 어떤 스택을 사용해야 하는 것일까?우리는 영속성 DB와 인메모리 기반의 DB를 고민하게 되었다.이중에서 영속성 DB를 채택하지 않은 이유는 우리의 서비스는 인증 인가의 과정이 없는 서비스 이기 때문에 이전 유저의 기록을 영구 저장할 필요가 없다고 판단했기 때문이다. 때문에 에초에 영속성 계..

학습 2024.07.22