본문 바로가기

분류 전체보기

(93)
DB - 복합키 순서 데이터베이스에서 키를 생성할 때 기본키를 구성하는 컬럼을 복수로 지정하거나, 여러 필드를 조합하여 기본키 역할을 할 수 있게하는등의 개념을 복합키라고한다. 그리고, 여러 개의 컬럼으로 구성할 때는 당연히 컬럼 순서가 자연스럽게 정의가 될 것인데, 이 순서를 설계 시점부터 고민해야할 것이다. 복합키를 어떤 기준으로 정하면 좋을까? 일반적으로는 카디널리티가 큰(중복도가 낮은) 순서대로 구성하되, 조회/입력 방법에 따라서 적절히 순서를 바꿔서 구성하거나 새로운 인덱스를 추가하는 방향으로 기준을 잡아보면 좋다. CREATE TABLE `ys-lab`.`student` ( `school_code` INT(11) NOT NULL COMMENT '학교코드', `student_grade` SMALLINT(3) NOT..
쿠버네티스(Kubernetes) - k8s에서 Docker 컨테이너 사용하기 쿠버네티스에서 도커 이미지를 이용한 파드 생성 https://gitlab.com/nodo3482/ys-k8s/-/tree/main/config VagrantFile을 통해 노드를 생성하면서 우리는 install_pkg.sh에 이미 git, docker 패키지를 설치하였다. 따라서 노드에 접속하여 docker관련 명령어를 사용하는 것이 가능하다. - 마스터노드 접속해서 docker ps 명령어를 실행한 모습. Dockerfile로 Build하여 deployment 파드 생성하기 = Dockerfile FROM openjdk:8 LABEL description="Java Application builder" EXPOSE 60433 RUN git clone https://github.com/iac-source..
Docker - DockerFile DockerFile이란? 도커이미지를 생성하기 위한 스크립트(설정파일)이다. 스크립트는 빌드용 DSL(Domain-Specific Languages, 도메인 특화 언어)로 구성되어있다. 여러가지 명령어를 DockerFile에 작성하면 Docker는 명령문을 차례대로 수행하며 DockerImage를 생성해준다. DockerFile의 장점 1] 이미지가 어떻게 만들어졌는지 기록이 가능 2] 배포에 용이함 3] 컨테이너가 특정 행동을 수행하도록 함 DockerFile 예시 FROM openjdk:8 LABEL description="My Java Application" EXPOSE 60431 COPY ./target/my-java-application.jar /opt/my-java-application.jar..
Spring Cloud - (1장) 마이크로서비스를 위한 스프링 & 소개 마이크로서비스란? IT 시스템 아키텍처 접근 방식 중 하나로, 비즈니스 요구사항을 구현한 하나의 애플리케이션을 느슨하게 연결된 여러 애플리케이션으로 쪼개는 것을 말함. 그래서.. 마이크로서비스의 장점은? 1] 대규모의 복잡한 애플리케이션을 지속해서 배포하는 능력이 있다. 2] 소스 코드 규모가 상대적으로 작아서 프로젝트에 새로 참여하는 개발자가 이해하기 쉽다. 3] 분리. 복잡한 엔터프라이즈 시스템을 대룰 때 서브시스템에 따라 시스템을 나누는데 계속 하위 시스템을 만들다보면 개발자가 조직에 새로운 들어온 직원인 경우에는 더욱 이해하기 어려워지는 문제를 해결할 수 있다. 이전까지는 마이크로 서비스 환경을 지원하는 안정적인 프레임워크가 많지 않았는데, 스프링 클라우드에서는 - 서비스 레지스트리 - 컨피규레이..
쿠버네티스(Kubernetes) - 오브젝트 오브젝트란? 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이다. 하나의 의도를 담은 레코드이며, 영속성의 특징에 따라 오브젝트 생성을 보장하기 위해 지속적으로 작동한다. 이 오브젝트를 생성함으로써 클러스터의 워크로드를 어떤 형태로 보이고자 하는지에 대해 효과적으로 쿠버네티스 시스템에 전한다. - 컨테이너화된 애플리케이션이 동작중인지 (그리고 어느 노드에서 동작 중인지) - 애플리케이션이 이용할 수 있는 리소스 - 애플리케이션이 어떻게 재구동, 업그레이드, 내고장성(시스템의 일부가 고장이 나도 전체에는 영향을 주지 않고, 항상 시스템의 정상 작동을 유지하는 능력)과 같은 부분들을 동작해야 하는지에 대한 정책 즉, 오브젝트는 가장 기본적인 구성 단위가 된다. 그리고 이 오브젝트를 생성,수정,삭제 동작을 입력..
Server - DNS란 무엇인가 요즘 기본기가 많이 부족하다는 생각이들어서.. 정말 기본적인 것들도 한번 짚고 넘어가기로했다. 오늘은 DNS에 대해서 정리해보겠다. DNS란? Domain Name System의 약자로, IP 네트워크에서 사용하는 시스템이다. IP는 숫자체계로 구성이 되어있는데 (ex) IPv4기준: 200.123.432.111) 이 서버주소 IP를 외우기는 쉽지 않으며, 의미도 알기가 힘들다. 따라서 DNS는 주소체계를 사람이 의미를 알아보고 또 기억하기 쉽도록 문자열로 나타낸다. - https://xggames.tistory.com - https://www.naver.com - https://www.google.com 와 같이 주소 URL을 입력하면, 해당하는 IP주소를 찾아서 사이트를 연결해준다. telnet으로 ..
DB - Replication DataBase에서의 Replication이란? 복제를 의미하며, 2대 이상의 DBMS를 나누어서 데이터를 저장하는 방식이다. master - slave 방식을 주로 사용하며 master - master, 다중 slave 방식으로도 사용한다. 어플리케이션 서버와 데이터베이스간에 기본적으로 아래와같이 심플하게 구성을 한다고 해보자. 보통 개발환경에서는 단순한 모델을 가지고 구축을 진행한다. 하지만 실제 운영환경에서 트래픽이 증가하여 데이터베이스가 많은 Query를 처리를 하게되면, 부하가 걸릴 것이다. 이 때 Repliaction을 진행하여 분리한다면 데이터베이스의 부하분산 처리 효과를 가져갈 수 있다. Master와 Slave 위의 그림처럼 Master DB와 Slave DB를 나누어서 분산처리 하는 모..
DB - 정규화(Normalization) 정규화(Normalization)란? 관계형 데이터베이스에서 데이터의 중복을 최소화하기 위한 목표를 가지고 컬럼의 관계를 고려하여 테이블을 설계를 재구성하는 프로세스이다. 일반적으로 테이블을 여러개로 분해하게되면 속도는 상대적으로 느려질 수 있지만, 아래와 같은 문제들이 발생하게 된다. - 데이터를 저장할 때 원하지 않는 정보가 함께 추가 - 삽입 이상 - 레코드(=튜플)을 삭제함으로써 유지되어야 하는 정보까지도 연쇄적으로 삭제될 수 있음 - 삭제 이상 - 중복된 레코드들 중 일부의 속성만 갱신 시킴으로써 정보의 모순성이 발생 - 갱신 이상 정규화는 테이블을 분해하는 단계가 정의되어 있는데, 어떻게 분해하는지에 따라 그 단계가 달라진다. 제1 정규화 (1NF(=First Normal Form)) "관계형..
Spring - 스케줄러 중복실행 이슈분석 Spring 프레임워크에는 linux에서 제공하는 배치(일정주기 혹은 특정시간에 자동실행)와 같은 라이브러리를 제공한다. 이를 스프링 스케줄러라고 한다. 배치프로그램은 실무에서 필수적으로 굉장히 많이 쓰이며 스프링에서는 간단하게부터 시작해서 스프링 배치 프레임워크와 연계하여 안정적인 대용량처리 프로그램을 작성할 수 있다. (스케줄러와 스프링 배치는 같은 개념이 아니다! 스케줄러로 스프링 배치를 수행한다) 스프링 스케줄러 Spring 프레임워크 (spring-boot-starter) 내에 기본적으로 포함되어있으므로 의존성 추가는 필요하지 않다. (Quarts를 사용하는 경우에는 의존성추가 필요. 하지만 이번 글에서는 다루지 않는다) 기본적인 사용방법이다. import net.javacrumbs.shedlo..
DB - 실행계획(explain) 보는방법 DataBase 질의(SQL) 실행계획(explain)을 확인하는 방법을 정리하였다. -- 실행계획 explain [select ... from ... where ...]; -- 실행계획 + mysql의 최종 형태 확인 explain extended [select ... from ... where ...]; show warnings; 구분 = id: select 아이디로 select를 구분하는 번호 = select_type: select에 대한 타입 구분 설명 SIMPLE UNION이거나 서브쿼리가 없는 단순 SELECT를 의미 PRIMARY 서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT ex) SELECT * FROM ( SELECT * FROM tab01 ) sub DERIVED FROM절 안의..