Kubernetes 기반 NGINX 리버스 프록시와 HPA를 이용한 API 서버 자동 확장 (+부하테스트)
·
DevOps
테스트용 api 서버와 nginx는 이전 포스팅의 설정을 바탕으로 실습을 진행했습니다. Docker를 이용한 간단한 리버스 프록시 Path-based Routing 실습 (+ nginx, docker-compose)리버스 프록시란?클라이언트 대신 백엔드 서버로 요청을 전달하고, 그 응답을 다시 클라이언트에게 반환해주는 서버보안성 및 분산 처리에 유리함 !!실습 구조[ Client ] ──▶ [ NGINX (리버스 프dstrace.tistory.com Kubernetes HPAHPA(Horizontal Pod Autoscaler)는 쿠버네티스에서 애플리케이션의 부하에 따라 파드 수를 자동으로 늘리고 줄이는 기능. 시스템의 부하를 모니터링하여 CPU 사용률, 메모리 사용률 등의 메트릭을 수집하고, 설정된 ..
Docker를 이용한 간단한 리버스 프록시 Path-based Routing 실습 (+ nginx, docker-compose)
·
DevOps
리버스 프록시란?클라이언트 대신 백엔드 서버로 요청을 전달하고, 그 응답을 다시 클라이언트에게 반환해주는 서버보안성 및 분산 처리에 유리함 !!실습 구조[ Client ] ──▶ [ NGINX (리버스 프록시) ] ──▶ [ API Server (Node.js) ] └─▶ [ Web Server (HTML) ]nginx 서버 및 api, web 서버는 실습상 편의를 위해 모두 docker 컨테이너를 이용특징nginx가 클라이언트를 대신해 요청클라이언트는 백엔드 서버를 몰라도 됨nginx가 요청 흐름을 제어 (다양한 경로, 다양한 서버로 요청을 나누어 전송 가능)응답도 nginx가 전달 (클라이언트는 응답이 어디서 왔는지 알 수 없음.)실..
DDD(Dynamic Developer Designer) 12기 합격 후기 - 서버 파트
·
DDD 12기 (Server)
DDD 지원 이번에 DDD 12기 서버파트로 지원을 했습니다. 여러 IT 연합동아리들 중에 많이 고민했지만, 아무래도 실무에서 뛰고 계신 개발자 분들의 비율이 많다는 것이 큰 경험이 될것이라고 생각해서 DDD를 선택하게 되었습니다.1차 서류접수 1차 서류접수는 대부분의 대외활동에서의 질문과 비슷했습니다. (ex 지원 동기, 열정, 프로젝트 경험 등)경쟁률이 10:1에 육박한다는 얘기를 들었기도 하고 사실 제가 글솜씨가 워낙 떨어지는편이라... 결과가 나오기까지 '최대한 기대를 하지말고 기다려야지'라는 생각으로 기다렸었어요.운영진분들께서 제 지원서를 좋게 봐주셨는지 다행히 합격안내 문자를 받을 수 있었습니다. 합격 문자를 받고도 제가 잘못읽었는지 몇번이나 다시 확인했네요.. 다행 :)2차 면접 면접 일정은..
Spring에서 로깅이 필요한 이유 (SLF4J, Logback, Lombok)
·
BackEnd
Spring에서 로깅이 필요한 이유와 SLF4J, Logback, Lombok 정리Spring 기반 애플리케이션을 개발할 때는 System.out.println() 대신 로깅 프레임워크를 사용하는 것이 일반적입니다. 로깅이 필요한 이유1. 운영 환경에서 디버깅'System.out.println()'은 개발 중에는 간편하지만, 운영 서버에서는 로그 수준 조절, 저장, 관리가 어렵습니다. print와 log의 성능 수준도 매우 크게 차이가 나기 때문에 성능에도 큰 영향을 미칩니다.로깅 프레임워크는 애플리케이션의 동작 흐름을 파악하고 문제를 분석하는 데 필수적입니다. 2. 로그 레벨 제어TRACE, DEBUG, INFO, WARN, ERROR 등 다양한 로그 레벨을 제공환경에 따라 로그 수준을 조절할 수 있..
데이터베이스와 CRUD (JPA 개념)
·
BackEnd
데이터베이스와 CRUD데이터베이스와 CRUD가 필요한 이유는?대량의 데이터를 체계적으로 저장, 관리, 조작하여 정보의 무결성과 일관성을 유지하면서 실제 애플리케이션 개발에서 사용자의 다양한 데이터를 안정적으로 처리하기 위한 기본 기술이기 때문관계형 데이터베이스(RDS)관계형 데이터베이스(RDS)란?행(Row)과 열(Column)으로 구성된 표형태로 저장하고 관리하는 데이터베이스. 다른 테이블과 '관계'라는 개념으로 연결되어 구조적으로 데이터를 관리할 수 있음.스키마(schema)스키마는 데이터베이스의 전체 설계도와 같음. 테이블 사이의 관계나 규칙이 무엇인지를 정의하고 데이터베이스에 대한 전반적인 정의가 포함됨컬럼(column)테이블 안에서 데이터를 저장하는 세로 방향의 필드. 각 컬럼은 특정한 데이터 ..
(C++) BOJ 백준 1525 퍼즐 / BFS, unordered_map
·
Algorithm
문제 설명 입력에서 무작위로 섞어져있는 3x3 퍼즐을 입력으로 준다. 이 퍼즐을 문제 맨 위에 있는 그림과 같이 초기 상태로 만드는데에 걸리는 최소 횟수를 구하는 문제다.문제 풀이 기본적인 BFS 문제와 같이 visit 처리를 해주면서 초기상태와 같아졌을때에 depth 혹은 count를 출력하면 된다.하지만 보드가 2차원 배열에 해당하기 때문에 이를 unordered_map의 키값으로 visit 처리를 해주기 위해서 2차원 배열의 숫자를 문자열로 바꿔주는 함수를 추가해서 visit 처리와 bfs의 값으로 이용하는 과정에서 사용했다.코드#include #include #include using namespace std;#define FOR(i,N) for(int i=1; i board_map;void pr..
Github Actions + Docker + EC2 로 테트리스 게임 배포하기
·
DevOps
목차1.  배포환경에 대한 테스트를 위해서 로컬의 도커를 이용하여 테트리스 띄우기 (Dockerfile 테스트)2. Github Actions workflow 작성3. Github Actions secrets 작성4. EC2 설정(Docker 설치)5. 실행 테트리스는 html/javascript 로 간단하게 만들어둔 레포를 깃허브에서 fork해서 사용합니다. GitHub - jakesgordon/javascript-tetris: A simple javascript tetris gameA simple javascript tetris game. Contribute to jakesgordon/javascript-tetris development by creating an account on GitHub.gi..
스프링 빈(Spring Bean)과 의존성 주입(DI: Dependency Injection)
·
BackEnd
스프링 빈과 의존성 주입스프링 빈이란?스프링 컨테이너에 의해 관리되는 객체를 스프링 빈이라고 함. 스프링 빈으로 등록된 클래스는 스프링 어플리케이션 실행 시 컨테이너가 자동으로 생성하고, 필요할때 의존성 주입까지 자동으로 하게 된다.스프링 빈(Spring Bean)개념스프링 컨테이너에 의해 관리되는 객체. 개발자가 직접 객체를 생성하고 관리하지 않아도 된다.기본적으로 스프링 빈의 인스턴스는 싱글톤으로 관리되기 때문에 트래픽이 많은 환경에서도 메모리 부담을 최소화할 수 있다.싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되도록 구현한 디자인 패턴. 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이며, 가장 처음 호출된 생성자만 객체 인스턴스를 반환하고 이후에는 기존의 인스턴스를..
디자인 패턴과 패키지 구조
·
BackEnd
디자인 패턴과 패키지 구조디자인 패턴이란?디자인 패턴은 프로그램을 개발하는 과정에서 자주 발생하는 구조 문제를 정리해서 상황에 따라 사용할 수 있는 몇 가지의 패턴으로 정리한 것장점코드의 재사용성 증가일관된 개발 스타일 유지협업 시 원활한 유지보수 및 확장 용이패키지 구조란?패키지 구조는 특정 기준에 따라 클래스들을 패키지(폴더)로 나누어 관리하는 것을 의미함2가지 구조게층형 구조객체가 수행하는 역할을 계층형으로 구분도메인형 구조도메인 모델에 따라 패키지를 구분하고 도메인 별 계층을 같은 패키지 내에서 관리하는 방법MVC 패턴(Model-View-Controller)실제로는 매우 다양한 종류의 디자인 패턴이 존재하지만, 스프링을 사용하는 백엔드 개발자들이 자주 접하게 되는 MVC패턴을 다루기로 했습니다!..
API의 구현과 API 명세서-2
·
BackEnd
API 구현과 API 명세서 - 2RequestMapping을 이용한 HTTP method 처리 구현@RequestMappingHTTP 메서드와 Controller의 메서드를 연결하는 가장 기본적인 방법파라미터에 URL과 HTTP메서드의 종류를 전달하여 연결함.@PostMappingPOST 요청과 Controller의 메서드를 연결하는 방법.파라미터에 URL을 전달하여 연결함.메서드의 파라미터에 @RequestBody 어노테이션을 추가하여 POST 요청의 body를 자바 객체로 받아옴@GetMappingGet요청과 Controller의 메서드를 연결하는 방법파라미터에 URL을 전달하여 연결함.@PathVariable 또는 @RequestParam 어노테이션을 이용하여 쿼리스트링을 자바의 문자열로 받아옴@..