본문 바로가기

배운내용 정리

(29)
인프라 분산 구현 하나의 서버 EC2에 집중되어 있던 서비스와 컨테이너를 분리 진행했다.기존의 서버 구성은 다음과 같다servicepostgismemcachednginxcertbot 위 5개의 컨테이너를 아래와 같이 분산 구현하려고 한다1번 EC2: service, nginx, certbot2번 EC2: postgis3번 EC2: memcahced  인프라를 분산하여 구현하려는 이유는 다음과 같다.1. 성능 향상 및 확장성service, Nginx, Certbot 인스턴스웹 애플리케이션과 관련된 모든 것이 한 곳에 있기 때문에, 웹 트래픽을 쉽게 관리하고, 애플리케이션의 로드 밸런싱을 구현 가능필요에 따라 인스턴스를 수평적으로 확장하여 더 많은 트래픽을 처리 가능memcached 인스턴스캐시 서버를 별도로 둬서 캐시의 부..
Github Actions + Docker compose 버전관리 + nginx Github Actions + Docker compose를 통해 버전을 관리하려고 한다Github Actions의 tag 기능을 통해 Docker compose로 버전을 넘겨서 컨테이너로 버전을 적용시키는 방법을 사용해보려고 한다.버전관리의 이점은 다음과 같다. 명확한 버전 관리:각 릴리스마다 고유한 태그를 할당하여, 특정 버전의 소스 코드에 쉽게 접근할 수 있다.버전 태그를 통해 배포된 버전과 코드를 쉽게 추적할 수 있다.자동화된 배포:GitHub Actions와 함께 사용하면, 특정 태그가 생성될 때 자동으로 배포 파이프라인을 트리거할 수 있다.EX) v1.0.0 태그가 생성되면 해당 태그에 맞는 배포 작업이 자동으로 실행되도록 설정할 수 있다.릴리스 관리 용이:태그를 사용하여 릴리스를 관리하면, 릴..
Nginx + Certbot을 통한 Https 및 TimeZone 적용 기존에 배포한 서버에서 Nginx + Certbot을 통해 서비스에 https를 적용해 보려고 한다.Nginx경량 웹서버 event-driven 구조로 동작하여 하나 또는 고정된 개수의 프로세스만 생성 따라서 동시성으로 처리 적은 자원으로 효율적Nginx는 master process와 요청을 처리하는 worker process로 구성 Nginx는 event-driven모델 사용하여  worker process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘 사용Worker process의 개수는 설정 파일에서 적용 및 정의된 프로세스 개수와 사용가능한 CPU 코어 숫자에 맞게 자동으로 조정CertbotHttps를 사용하려면 CA(인증기관)에서 가져온 인증서 필요certbot은 개방형 무료..
Github Action CI/CD + Docker 새로운 프로젝트에 앞서서 배포를 진행하기에 Github Actions + Docker를 통해 배포를 진행해보려고 한다. 순서는 다음과 같다.1. Docker-compose.yml 작성- 서비스에 필요한 인프라 이미지 작성 - ex) postgis, memcached 작성 서비스할 Dockerfile에 관련된 설정 작성- ※주의 사항 host는 Docker compose 파일에서 정의한 서비스 이름으로 사용 application.yml의 각 인프라의 url 호스트명은 docker 컨테이너 명으로 설정- 기술적 의사결정Docker network 사용 Docker network 사용하여  관리 및 유지보수를 용이하게 함version: "3"services: postgresql: image: postgi..
JDBC 1. JDBC 등장배경 2. JDBCTemplate 1. JDBC 등장배경 애플리케이션 서버에서 DB에 접근 하기 위해서는 여러가지 작업이 필요합니다. 우선 DB에 연결하기 위해 커넥션을 연결해야한다. SQL을 작성한 후 커넥션을 통해 SQL을 요청한다. 요청한 SQL에 대한 결과를 응답 받는다. 기존에 사용하던 MySQL 서버를 PostgreSQL 서버로 변경한다면 무슨일이 발생할까? MySQL과 PostgreSQL은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법 모두 다를 수 있다. 따라서 애플리케이션 서버에서 작성했던 DB 연결 로직들을 전부 수정해야한다. 이러한 문제를 해결하기위해 JDBC 표준 인터페이스가 등장했다. JDBC는 Java Database Connectivi..
Spring IoC와 DI 1. IoC 2. DI 3. 제어의 역전 1. IoC IoC(Inversion of Control) 컨테이너가 코드 대신 오브젝트의 제어권을 갖고 있어 IoC(제어의 역전)이라 한다. 예를 들어, 서블릿 클래스는 개발자가 만들지만, 그 서블릿의 메서드를 알맞게 호출하는 것은 WAS이다. 이렇게 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해 주는 것을 제어의 역전이라고 한다. IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF 의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다. 이 둘을 더 자세하게 구분해 보자면 IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당한다. 2. DI DI(Dependency Injection) DI는 의존성 주입이란 뜻을 가지고 있으며, Sp..
Spring MVC 1. Spring MVC 2. DispatcherServlet 3. Front Controller 1. Spring MVC MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나 MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리 Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나, "Spring MVC"로 더 일반적으로 알려져 있다. Spring MVC는 중앙에 있는 DispatcherServlet이 ..
REST 1. Rest 2. Rest의 구성 3. REST의 속성 4. REST API 5. RESTful API 1. Rest Representational State Transfer(Rest)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다. REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다. 개념 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 정보 전달 방식 CRUD Operation Create : 생성(POST) Read : 조회(GET) Update : ..