안녕하세요! 데브옵스를 공부하고 있는 부현수 입니다. 저는 대덕 소프트웨어 마이스터고등학교에 재학중이며 학교 학생들이 개발에 집중할 수 있도록 배포 자동화, 모니터링 등을 플랫폼을 통해 제공하고 있습니다. 인프라를 구축하는 과정에서 일어났던 간단한 문제점을 소개하고, 오픈소스 기여까지 하게된 이야기를 소개해드리려고 합니다. 문제상황 인프라 팀은 학교 예산을 지원받아, 한정된 예산으로 환경을 만들어야 했기 때문에, Spot Instance를 사용하며 Deployment의 Replica 또한 1개로 유지하였습니다. Replica의 개수가 1개인 탓에 새로운 버전의 파드가 올라왔을때 서버가 실행되는 과정동안 Downtime이 생기는 것을 확인했습니다. 대안 도출 이를 해결하기 위한 대안의 폭은 그리 넓지 않다..
Spring Cloud Eureka 란? Spring Cloud Eureka는 서비스 디스커버리 패턴을 구현하는 데 사용되는 오픈소스 도구입니다. 서비스 디스커버리는 마이크로서비스 간의 통신을 지원하고, 서비스 인스턴스의 위치 정보를 실시간으로 전달합니다. Eureka 서버는 서비스가 서로를 찾을 수 있도록, 등록 및 검색 기능을 제공합니다. 서비스 디스커버리 패턴이란? 분산 애플리케이션에 포함된 여러 서비스 간의 통신이나 상호작용을 자동화하기 위한 아키텍처 패턴입니다. 마이크로서비스 아키텍처에서 여러 컴포넌트들은 위치 정보, 상태 변경, 내부 설정 등을 수시로 변경하기 때문에 이러한 변경사항을 신속하게 감지하여 처리할 필요가 있습니다. - 서비스 디스커버리 서버 : 서비스의 인스턴스들이 위치 정보를 등..
API Gateway 최근 많은 기업들이 독립적인 기능을 수행하는 Mircro Service가 여러개로 구성된 MSA가 많이 사용되고 있습니다. 하지만 여기서 MIcro Service가 50, 100 그 이상이 된다면 어떨것 같나요? 이 많은 서비스의 엔드포인트를 관리하기 힘들것이고 서비스마다 인증과 인가 과정이 있다면, 이것또한 중복이 된다는 문제점이 있습니다. 이러한 문제점을 해결하기 위해 API Gateway가 등장하게 되었습니다. API Gateway 는 클라이언트와 서비스 사이에서 클라이언트의 요청을 받고 설정에 따라 각 엔드포인트로 대신 요청을 보냅니다. 응답을 받으면 다시 클라이언트에게 응답을 보내는 프록시 역할을 합니다. API Gateway 는 클라이언트의 요청을 라우팅해주는것 뿐만 아니..
글을 읽기 전에 질문에 대답해보고 글을 읽어보세요! HTTP, HTTPS HTTP 와 HTTPS는 웹 브라우저와 웹 서버간의 리소스를 주고받기 위해 사용됩니다. HTTP란? 웹 문서를 서버와 클라이언트 간에 주고받을 수 있는 프로토콜입니다. HTTP 요청 및 응답 메시지를 사용해서 웹 리소스를 전송합니다. 웹 리소스로는 html, css, javscript, 이미지, 비디오 등의 웹 콘텐츠를 말합니다. HTTPS란? HTTPS는 HTTP에 Security가 추가된 보안계층입니다. SSL/TLS를 사용하여 웹 서버와 브라우저간 전송되는 데이터를 보호합니다. 이로 인해 중간자 공격과 같은 위협으로부터 안전하게 보호할 수 있습니다. Security HTTP 프로토콜은 암호화되지 않은 텍스트 형태로 데이터를 전..
EC2 - AWS의 핵심 서비스로 가상 서버 호스팅 및 클라우드 컴퓨팅을 제공합니다 클라우드 컴퓨팅이란 인터넷을 통해 컴퓨팅 자원과 관련된 기능을 사용자에게 제공하는 서비스입니다. 클라우드 컴퓨팅은 온프레미스 환경에서 발생하던 비용과 복잡성을 줄이도록 설계되었습니다. 대표적으로 다음 3가지로 분류됩니다. IaaS(Insfrastructure as a Service) PaaS(Platform as a Service) SaaS(Software as a Service) 가상 서버 호스팅이란 물리적인 서버를 가상화하여 다수의 가상 서버를 생성하고 호스팅하는 서비스입니다. 이를 통해 여러 사용자가 하나의 물리적인 서버의 리소스를 공유하며 각자 독립적인 환경에서 서비스를 운영할 수 있습니다. 클라우드 컴퓨팅도 가상..
글을 읽기 전에 질문에대한 대답을 생각해 보시고 글을 읽어주세요! 3-way handshake란 무엇인가요? 클라이언트와 서버 사이에 TCP/IP 프로토콜을 사용하여 송수신하기 전에 안정적인 연결을 수립하기 위해 진행되는 과정입니다. 1단계 - 클라이언트가 서버에게 연결 요청을 보냅니다. 이때 SYN flag가 설정된 패킷을 보냅니다. - 이 패킷은 플라이언트의 초기 순서 번호(Initial Sequence Number, ISN)도 포함하고 있습니다. SYN flag : SYN flag 는 3-way handshake에서 첫번째 단계인 클라이언트의 연결 요청을 나타냅니다. 클라이언트는 패킷에 SYN flag가 설정된 패킷을 보내면서 서버와의 안정적인 연결을 수립하겠다는 의지를 표현합니다. 초기 순서 번호..
아키텍처란? [ Architecture ] 아키텍처라는 용어는 건축물 설계에 사용됩니다. 소프트웨어에서는 약간 다른 의미를 가집니다. 소프트웨어에서의 아키텍처는 시스템의 전체적인 구조와 주요 구성 요소, 그리고 구성 요소간의 관계를 말합니다. 소프트웨어 아키텍처란? [ Software Architecture ] 앱을 더 부드럽고 유연하게 설계하는 것을 소프트웨어 아키텍처라고 합니다 소프트웨어 아키텍처를 사용해서 프로그래머의 생산성을 높이는 설계 방법을 말합니다. 클린 아키텍처 [ Clean Architecture ] 클린 아키텍처를 사용하면, 더 효율적인 프로그램 구현이 가능할 것 2012년에 Uncle Bob 아저씨는 새로운 소프트웨어 아키텍처를 발표했습니다. 클린 아키텍처를 사용해서 계층을 분리해 더..
문제 풀이 일반적인 BFS 방식이다. 먼저 말처럼 이동할 수 있는 횟수가 정해져 있는데 이걸 큐에 저장하면서 말의 능력을 몇번 썼는지 확인하며 말의 능력을 쓸 수 있다면 먼저 말의 능력을 쓴다. 그리고 말의 능력을 썼을때와 쓰지 않았을때, 또 말의 능력을 쓴 횟수가 다를때의 visited는 다르기 때문에 3차원 배열을 이용해서 말의 방문 확인을 한다면 쉽게 풀 수 있다 #include using namespace std; int graph[200][200]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; int dxHorse[8] = { -1, -2, -2, -1, 1, 2, 2, 1 }; int dyHorse[8] = { -2, -1, 1, 2, 2, 1, -1,..
데이터베이스 [ Database ] 데이터베이스는 조직화되고 구조화된 데이터의 집합입니다. 이 데이터는 쉽게 접근이 가능하고 데이터 검색, 업데이트 할 수 있습니다. 데이터베이스 관리 시스템 [ DBMS ] DBMS는 데이터베이스를 관리하는 데 필요한 소프트웨어 도구의 집합입니다. DBMS는 CRUD를 제공합니다. MySql, PostgreSQL, MongoDB 등등이 있습니다. 데이터 모델 데이터 모델은 데이터를 조직하고 표현하는 방법에 대한 설명입니다. RDB모델은 데이터를 테이블로 구성하고, 이 테이블 간에 관계가 있습니다. 관계형 데이터베이스 [ RDB ] 관계형 데이터베이스는 데이터를 테이블로 저장하는 방식을 사용합니다. 각 테이블은 행과 열로 구성되고, 각 행은 고유한 식별자 PK를 가지고 테..