목록전체 글 (68)
우당탕탕 개발일지

소켓(Socket)이란?소켓은 프로그램이 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 통신 엔드포인트를 의미한다. C#에서는 System.Net.Sockets 네임스페이스를 사용하여 소켓 프로그래밍을 지원할 수 있다. 소켓 실행 흐름도 소켓은 클라이언트 소켓과 서버 소켓으로 구분된다. 서버와 클라이언트에서 공통으로 구현해야 할 부분은 3가지이다.TCP 소켓을 이용해 데이터를 송수신IP : 127.0.0.1 / PORT : 8888 를 엔드포인트로 사용 (변경 가능)메세지 타입은 String, 인코딩 형식은 UTF-8로 통일 서버는 소켓 생성과 바인딩을 마치면 listen( )로 클라이언트 요청을 대기하고, accept( )로 클라이언트와 연결한다. 연결이 완료되면 ..

프론트는 CloudFront와 S3로, 백엔드는 EC2 내에서 도커로 배포를 진행 후 접속을 했을 때 Mixed Content 에러가 발생하였다. 외부에서는 보안 이슈로 Https를 사용해야 하지만 내부 api 요청까지 굳이 Https로 할 필요는 없다 판단하고 Http로 진행하였지만 Https → Http 요청은 정책상 block 된다. 문제를 해결하기 위해 다음 두 가지 방법을 고려했지만 결론적으로 하나의 도메인으로 프론트, 백엔드 모두 배포하기 위해서는 CloudFront에 추가적인 API Gateway나 서브 도메인이 필요하다. 나는 이 두가지를 모두 진행해보고 비용을 아끼고자 무료 도메인을 발급하였다. 1. Public IP에 SSL 인증서 적용우리가 흔히 사용하는 cerbot은 도메인에만 발급..

데이터베이스 시스템은 데이터베이스 관리 시스템(DBMS), 데이터베이스, 데이터 모델 세 가지로 구성된다. 1) DBMS데이터를 관리하는 소프트웨어 시스템으로, 주기억장치에 상주하면서 사용자와 데이터베이스를 연결해 준다.대표적으로 MySQL, 오라클(Oracle), MariaDB 등이 있다. 2) 데이터베이스 '여러 사람이 공용으로 사용하기 위해 통합하고 저장한 운영 데이터의 집합'데이터를 구조화된 형태로 보관하며, 컴퓨터 내부의 하드디스크에 물리적으로 저장된다. 3) 데이터 모델데이터베이스에 데이터가 어떻게 구조화되어 저장되는지를 결정하며, 현재 가장 많이 사용되는 데이터 모델은 관계 데이터 모델이다. DBMSDBMS는 사용자와 데이터베이스를 연결해 주는 소프트웨어로, 데이터베이스 사용자가 데이터베..

유클리드 호제법이란 두 정수의 최대공약수(GCD)를 구하는 알고리즘으로 나눗셈과 나머지 연산을 반복적으로 사용하여 최대공약수를 계산한다. [백준] 2609 최대공양수와 최소공배수https://www.acmicpc.net/problem/2609 일반적으로 최대공약수를 구하기 위해서는 소인수분해를 진행하여 구한다.소인수분해 방법 import java.io.*;import java.util.*;public class Main { static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int gcd(int n, int m){ int answer = 1; int divisor = 2; ..

도커 컴포즈를 사용하려면 도커 컴포즈가 관리할 docker-compose 파일을 생성해야 한다. 물론 각 서비스들의 도커 파일이 생성되어 있어야 한다. 1. Docker-Compose 파일 작성 로컬에서 MSA를 구성했을 때는 호스트 이름이 localhost 포트 번호가 모두 달랐다. 이전 글에서는 단일 마이크로서비스만 실행했기에 포트 번호를 다르게 해도 됐었지만, MSA는 핵심 서비스를 찾아야 하기에 도커에서 실행할 때는 각 서비스의 호스트 이름이 모두 다르고 포트 번호가 8080으로 같다. 현재 내가 구성하려는 서비스의 각 포트 번호는 다음과 같다.ServicePortEureka8761Api-Gateway8000Hospital-Service9001User-Service9002Emergency-Serv..

MSA 프로젝트 진행 후, 배포에서 가장 어려움을 겪었다. MSA의 의도대로라면 각 서비스를 서비스 단위로 배포를 해야하는데 그렇게 될 경우 ec2의 개수가 10개 이상 필요하고, 그러한 요금을 감당하면서까지 개인 프로젝트를 배포할 필요성은 없다고 판단하였다. 그래서 최대한 AWS 프리티어를 사용하며 배포하기로 결정하였고, 프론트는 CloudFront를, 데이터베이스는 RDS를 사용하였다. Eureka, Api-Gateway 외 다른 서비스는 Docker Compose를 이용할 계획이다. 1. Docker 설치처음에는 ec2 프리티어로 진행하고자 했으나 t2.micro 성능이 너무 작아 컨테이너 두개를 띄우면 멈춰버렸다. 그래서 윈도우에 도커를 직접 설치하여 진행한 후, 완료된 상태를 보고 그에 맞는 ..

이진 탐색이란? 이분 탐색이라고도 불리는 이진 탐색은 정렬된 데이터에서 특정 값을 찾는 탐색 알고리즘이다.탐색 범위를 절반씩 줄여가며 값을 찾기 때문에 시간 복잡도가 O(logn)으로 빠른 탐색이 가능하다. Binary Searchimport java.io.*;import java.util.*;public class Main { static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int[] arr; static boolean binarySearch(int target) { int left = 0; int right = arr.length - 1; ..

서버리스 방식으로 SpringBoot를 쉽게 배포할 수 있는 방법이 없을까 찾아보다가 AWS API Gateway와 Lambda서비스를 사용하기로 하였다. * Lambda로 SpringBoot 실행 시 Cold Start 가 발생하게 되는데, 이 부분 때문에 Snap Start라는 기능이 추가되었다. 즉, SpringBoot 실행이 가능하지만 Snap Start의 경우 Java만 적용이 가능해 컨테이너 진행에 실패하였다. AWS Labda 함수 생성 방식은 3가지가 있었고, 이 중 컨테이너 이미지로 함수 생성을 했다. 기존에 도커 허브에 이미지를 올려뒀었는데, Lambda의 경우 ECR 이미지 URI가 필요하여 ECR로 변경해주었다. Github Action을 통해 Docker 이미지를 생성한 후 ..