본문 바로가기

Server Development

(64)
DBCP DBCP = Database Connection Pool 이번 블로그에서는 DBCP에 대해서 정리해보고자 한다. 1. 기존의 애플리케이션과 DB간 통신 방법 클라이언트가 API 요청 애플리케이션과 DB 간에 TCP 신뢰성 연결 응답을 위해 DB에 리소스 요청 리소스 응답 애플리케이션과 DB 간에 TCP 신뢰성 해제 클라이언트에 전달 - 항상 리소스를 받기위해 DB와 TCP 기반의 신뢰성 있는 통신을 하는데 연결할때는 3웨이 핸드셰이크, 연결해제시에는 4웨이 핸드셰이크가 매번 발생하고 이는 시간적으로 비효율적이다. 2. DBCP 동작 방식 - 위의 시간 낭비를 해결하기 위해 사용 - TCP 기반의 DB 커넥션을 미리 만들어 두고 사용함으로 TCP 연결 생성 및 해제 시간 단축 애플리케이션 시작전에 TCP ..
Nginx 이번 블로그에서는 Nginx에 대해서 알아보려고 한다. 1. 특징 높은 성능 : 경량 서버이며, 이벤트 기반 아키텍처를 기반으로 하여 매우 빠른 성능을 제공하고 비동기 및 다중 프로세스 모델을 사용하므로 많은 동시 연결을 처리할 수 있다. 리버스 프록시 : 요청을 웹 어플리케이션 서버로 전달하는 역할을 한다. 이를 통해 로드 밸런싱, SSL 종료 및 캐싱을 구현 가능하다. 정적 파일 캐싱 : 정적파일(HTML, CSS, JS, 이미지 등)을 효율적으로 제공하는 데 특화되어 있다. 확장성 : 수평적으로 확장이 가능해 더 많은 트래픽을 처리하기 위해 서버 클러스터를 만들 수 있다. 즉, Nginx가 관리하는 서버의 수를 늘리거나 줄이는 작업에 용이하다. 높은 가용성 : 다중 서버간의 로드 밸런싱을 구성하여 ..
REAL MYSQL 정리 이번 블로그에서는 Mysql에 대해서 상세히 기록해보려고 한다. 내용 : Mysql 8.0을 기반으로한 REAL MYSQL을 참고하여 제작하였습니다. 1. Mysql Architecture ★★★★★ 구성 : Mysql서버, 응용프로그램, Mysql 엔진, 스토리지 엔진, 운영체제, 하드웨어 Mysql 엔진 구성 - 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러 - Cache, Buffer, SQL Interface - SQL파서 및 전처리기 - 옵티마이져 - 실행 엔진 - Mysql 엔진은 하나만 존재 스토리지 엔진 - SQL문장을 분석 및 최적화하여 실제 데이터를 읽고 쓰기 작업을 수행 - 여러개 존재하고 동시 동작 가능 - Mysql 5.5버전 이후부터는 MyISAM 스토리지 엔진보..
java.lang.IllegalArgumentException: org.hibernate.query.SemanticException: query specified join fetching, but the owner of the fetched association was not present in the select list 해당 오류는 조인 관계에서 발생하는 오류로 만약, select의 주체로 조인의 주인이 조회되지 않는 경우, 발생합니다. 예를 들어, 부모-자식이 있고 from에 부모가 있다고 가정했을 때, 부모 자체를 조회하지 않았을 때 발생하는 오류입니다.
Git Branch 전략 1. 개요 - 한 프로젝트를 개발하는데는 많은 개발자가 동원되어 코드를 수정하는 작업을 하는 것이 일반적이다. 혼자서 진행하는 개인프로젝트인 경우에는 master 브랜치에 수정 후 commit을 하거나 하나의 브랜치만 제작해 수정 후 삭제하더라도 크게 문제되는 부분은 없다. 하지만 개발자가 늘어날수록 브랜치간 충돌, 브랜치가 너무 많아지거나 의미를 파악하기 어려운 상황을 겪게 될 것이다. 따라서 프로젝트나 기업마다 브랜치 전략을 사용해 이를 해결한다. 2. Branch 전략 종류 Github flow Git flow GitLab flow 3. Github Flow - 깃허브에서 만든 단순하고 간결한 브랜치 구조를 의미한다. - Master 브랜치를 중심으로 운영 - 기능 추가, 버그 수정 등 간단한 브랜..
Git Basic 이번 포스트에서는 Git 사용에 대한 전체적인 기본 개념들에 대해서 정리해보고자 한다. 1. GIt 저장소 생성 깃허브를 사용하기 위해서는 기본적으로 회원가입을하고 저장소를 생성한다. 기초 용어 - Repository Name : 저장소 이름 - Description : 저장소 설명 - Public/Private : 오픈소스로 설정할 것인지, 공개하지 않을 것인지 설정 - README : 저장소 상세 설명 - .gitignore : 올리지 않을 파일 설정 - license : 해당 저장소의 라이센스 -> 해당 오픈소스 사용시 자신의 저작물 또한 공개할지 안할지 등을 결정한다. 이 후, 깃을 내 컴퓨터에 설치해 git 명령어를 사용하게 설정을하면 기본적인 세팅이 끝난다. 추가용어 정리 컨트리뷰터 : 해당 ..
Docker Basic 도커 (Docker) - 리눅스가 아닌 운영체제에서 리눅스 환경을 가상으로 구축하고 여러 애플리케이션을 설치하여 실행시키는 방법 - 운영체제의 의존도가 줄어든다. - VM과 달리 운영체제 전체를 설치하는 것이 아닌 운영체제의 기능 일부분만을 가져와 사용한다. " 예를 들자면, Docker의 컨테이너 서버에서 데이터를 저장시 명령을 호스트 운영체제의 리눅스 커널을 공유하며 명령을 하고 호스트 운영체제는 HDD 또는 SSD에 데이터를 저장한다. " SSD : 플래시 메모리로 하드디스크와 같이 비화발성이지만 좀 더 빠른 고성능을 제공한다. 특징 - 컨테이너 기반의 오픈소스 가상화 플랫폼 - 프로그램을 외부 환경과 격리시켜 구동 가능하게 해주는 플랫폼 - 서버 운영시 예를 들어, 서버를 구동하는 컴퓨터 위에 도..
Integration Test 통합 테스트란? - 각 모듈들이 서로 상호작용이 잘 이루어지는지 검증하는 테스트 과정으로, 모듈을 통합하는 과정에서 발생하는 오류들을 발견할 수 있다. - 스프링 부트에서 통합테스트는 Controller -> Service -> Repositorty에 거친 하나의 API에 대해서 각 모듈들이 잘 연결되어 있는지 체크할 수 있다. - 블랙박스 테스팅(E2E(end to end), 실제 사용자의 환경과 거의 동일한 환경에서 테스팅)을 가능하게 한다. 장, 단점 장점 : UI 없이 테스팅 가능, 모든 빈을 컨트롤러에 올려 테스트하기에 실제와 유사한 환경 제공 단점 : 모든 빈을 올리기에 시간이 오래걸리며, 특정 빈이나 계층에서 발생하는 오류를 디버깅하기가 까다롭다. 설정 1. @SpringBootTest ->..