전체 글579 정규화 정규화 데이터베이스 설계는 어떤 데이터를 어떻게 저장할 것인가에 대한 결정하는 것입니다 그 중에서도 '정규화’와 '반정규화’는 데이터베이스의 효율성과 성능에 큰 영향을 미칩니다 정규화(Normalization) 정규화란 '중복을 최소화하는 것’입니다. 간단하게 말해서, 동일한 데이터를 여러 곳에 반복하여 저장하지 않는 원칙입니다. 이는 데이터베이스 내에서 데이터의 일관성을 유지하는 데 중요합니다. 예를 들어, 사용자의 주소 정보가 변경되었을 때 정규화된 데이터베이스에서는 해당 사용자의 주소 정보를 단 한 번만 변경하면 되지만, 중복이 허용된 데이터베이스에서는 모든 중복된 주소 정보를 찾아 변경해야 합니다. 하지만 이 방식은 트레이드 오프가 있습니다. 데이터를 읽을 때 항상 원본 데이터를 참조해야 하기 때.. DEV/Backend 2023. 6. 1. 소프트 파싱과 하드 파싱 Soft Parsing과 Hard Parsing 데이터베이스에서의 쿼리 실행에는 Soft Parsing과 Hard Parsing이라는 두 가지 과정이 있습니다. Soft Parsing Soft Parsing은 쿼리가 이전에 실행되어 이미 Parsing 정보가 캐시에 저장된 경우를 의미합니다. 이런 경우에는 SQL 문장을 파싱하고 옵티마이저를 거치는 과정을 생략하고 바로 쿼리를 실행하게 됩니다 이를 통해 시스템 리소스를 절약하고 응답 시간을 단축시킬 수 있습니다. Hard Parsing Hard Parsing은 쿼리가 처음 실행되거나, 캐시에 파싱 정보가 없는 경우에 이루어집니다. 이 때는 SQL 문장을 파싱하고, 옵티마이저를 거쳐 실행 계획을 작성한 후 쿼리를 실행하게 됩니다. 이 과정은 시스템 리소스를.. DEV/Backend 2023. 6. 1. MySQL 아키텍처 MySQL 아키텍처 일반적으로 MySQL 서버와 통신을 할 때는 위와 같은 그림으로 동작합니다 웹 서버에서는 MySQL 서버와 통신하기 위한 컴포넌트인 커넥터를 사용합니다 커넥터는 MySQL 서버와의 연결을 설정하고, 쿼리 및 다른 데이터베이스 작업을 수행하기 위한 인터페이스를 제공하죠 그 대표적인 예시로 JDBC가 있습니다 MySQL 서버 아키테처를 이해하기 위해서는 주요한 컴포넌트들을 알아야 합니다. 이는 MySQL 엔진, 스토리지 엔진, 운영체제, 그리고 디스크로 구성되어 있습니다. MySQL 엔진 MySQL 엔진은 쿼리 파서, 전처리기, 옵티마이저, 그리고 쿼리 실행기로 구성되어 있습니다. 쿼리 파서 쿼리 파서는 사용자로부터 입력 받은 SQL을 파싱하여 Syntax tree를 생성합니다 이 과정에.. DEV/Backend 2023. 6. 1. 대용량 시스템 아키텍처 대용량 시스템 아키텍처 왜 대용량 처리는 어려운가? 부하가 상당하여 단일 서버나 데이터베이스로는 감당하기 어려운 상황에서, 서버의 스케일 업과 스케일 아웃에서 고민했듯이 다수의 서버와 데이터베이스를 하나처럼 운영해야 한다. 하지만, 동기화와 데이터 일관성 문제 등이 복잡하게 얽혀있다 게다가, 웹 서비스들은 24시간 무중단 운영을 전제로 하므로, 잘못된 코드 한 줄이 서비스 전체에 영향을 미치는 범위가 큽니다. 그리고, 서비스 간 복잡하게 얽힌 의존성은 시스템 복잡도를 급격히 증가시킵니다. 대용량 처리시 지켜야 할 점 고가용성 사용자는 언제든지 서비스를 이용할 수 있어야 합니다. 장애 점을 최소화하고 복구 시간을 단축하는 데에 중점을 두어야 합니다. 확장성 시스템 규모와 사용자 수가 증가하면서 데이터와 트.. DEV/Backend 2023. 6. 1. 서버의 스케일 업과 스케일 아웃 스케일 업과 스케일 아웃 클라이언트 입장에서 서비스는 항상 일관된 결과를 반환해야 합니다 하지만 서비스가 발전하면 시스템은 복잡해집니다 또한, 웹 서버를 단순히 늘리는 것만으로는 성능 향상의 한계에 부딪히게 되죠 부족한 리소스를 극복하기 위해 서버의 갯수를 늘리느냐, 크기를 키우느냐에 엔지니어들은 직면하게 됩니다 오늘은 이 문제에 대해 이야기 해봅시다 스케일 업과 스케일 아웃 정의 스케일 업(Scale-Up) 스케일 업이란 하나의 서버의 성능을 향상시키는 방식을 의미합니다. 예를 들면, 서버에 CPU나 RAM을 추가하거나, 디스크 용량을 확장하는 방식이 있습니다. 이런 방식은 설계가 간단하고 데이터의 일관성 유지가 비교적 쉽다는 장점이 있지만, 서버 자체의 물리적 한계가 있고 비용이 많이 들 수 있다는 .. DEV/Backend 2023. 6. 1. 프로그래밍 언어론 - 포괄 부프로그램 프로그래밍 언어론 - 포괄 부프로그램 다양한 타입의 매개변수를 허용하는 부프로그램을 의미한다. Ada 예를 통한 이해 : 두 예가 거의 유사 → 이때 포괄 부프로그램을 사용 Ada generic이라는 예약어를 이용해서 포괄 부프로그램을 생성 generic type Element is private; procedure exchange(x, y: in out Element); procedure exchange (x, y: in out Element) is temp: Element; begin temp := x; x := y; y := temp; end exchange; integer, float, character 타입의 데이터를 교환하는 swap이라 불리는 3개의 부프로그램이 정의 procedure swa.. Computer Science/프로그래밍 언어론 2023. 5. 30. 프로그래밍언어론 - 중복 부프로그램 프로그래밍언어론 - 중복 부프로그램 같은 이름을 갖는 두 개 이상의 부프로그램들을 의미한다 단 모든 중복 부프로그램은 매개변수 내용이 달라야 한다 C++, Java, Ada 등에서 중복 부프로그램 기능을 지원 C언어에서는 허락하지 않아서 에러가 발생…! C++에서는 가능…! 주의 사항 : 중복 부프로그램이 매개변수까지 동일하면 안된다 부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :> Computer Science/프로그래밍 언어론 2023. 5. 30. 프로그래밍언어론 - 매개변수 전달 방식 프로그래밍언어론 - 매개변수 전달 방식 값 전달 실 매개변수의 값을 형식 매개변수에 저장하고 형식 매개변수를 부프로그램의 지역 변수로 사용하는 방식이다 실 매개변수와 형식 매개변수는 별개의 변수이므로 형식 매개변수의 어떠한 변화도 실 매개변수에는 아무런 영향을 미치지 않는다 C와 Java, C++는 값 전달이 기본 방식, Ada의 in 매개변수가 값 전달 방식이다. in 매개 변수를 이용해서 값 전달을 보여주는 Ada의 예 Ada in 매개변수의 특이점은 값을 배정 할 수 없다는 점이다. with TEXT_IO; use TEXT_IO; procedure parameter is package INT_IO is new TEXT_IO.INTEGER_IO (integer); use INT_IO; a, b: in.. Computer Science/프로그래밍 언어론 2023. 5. 30. 프로그래밍언어론 - 부프로그램 프로그래밍언어론 - 부프로그램 부프로그램이란, 프로그램에서 호출에 의해 실행되도록 만들어진 일련의 코드를 의미한다 부프로그램의 정의와 호출 부프로그램은 실행 할 내용을 기술한 일련의 코드로 머리부와 본체로 구성 되었다 부 프로그램은 코드 흐름 상, 순차적으로 실행 되던 중 함수, 프로시져 등 프로그램 흐름을 변경해서 기능하는 것들을 일컫는 것이라 이해했다 부프로그램의 머리 부분은 예약어, 부프로그램의 이름, 매개변수들의 이름과 타입, 반환 값의 타입 등을 기술한다 부프로그램의 정의 방법 부프로그램 선언 부프로그램이 정의되어 있다는 것을 컴파일러에게 알리는 역할 부프로그램의 머리부는 제공하지만, 부프로그램 몸체를 포함하진 않음 void sub(int, int); 부 프로그램 호출 FORTRAN에서 SUB .. Computer Science/프로그래밍 언어론 2023. 5. 30. 프로그래밍언어론 - 반복문 프로그래밍언어론 - 반복문 반복문이란, 특정 부분을 반복 실행되게 하는 문장을 의미한다. 예시 : FORTRAN의 DO문 변수가 초기 값을 갖고 한 번씩 반복할 때마다 증가 값만큼 증가되면서, 종료 값보다 작거나 같은 동안 문장들을 실행 증가 값은 생략 가능, 생략하면 반복 할 때마다 변수 값은 1씩 증가 While 문 식이 참인 동안 문장을 반복해서 실행 C/C++/Java의 while 문 while(Expression) 문장; EBNF -> while() Ada의 while 문 while(Expression){ 문장 1; 문장 2; ... } with Ada.Text_IO; use Ada.Text_IO; procedure Sum is package Int_IO is new Ada.Text_IO.Int.. Computer Science/프로그래밍 언어론 2023. 5. 30. 프로그래밍 언어론 - 조건문 프로그래밍 언어론 - 조건문 조건문을 사용하면 조건에 따라 둘 이상의 실행 경로 중 하나를 선택할 수 있습니다. 프로그래밍에서 의사 결정 논리를 구현하기 위한 수단을 제공합니다. 두 가지 일반적인 유형의 조건문이 있습니다. “if” 문 if 문은 조건이 참인지 거짓인지에 따라 특정 실행 경로를 선택합니다. if 문은 FORTRAN 프로그래밍 언어에서 처음 도입되었습니다. “case” 또는 “switch” 문 case 또는 switch 문을 사용하면 서로 다른 조건에 따라 여러 경로 중 하나를 선택할 수 있습니다. 표현식을 평가하고 값을 다른 케이스 레이블과 일치시킵니다. 일치하는 경우에 따라 해당 코드 블록이 실행됩니다. If 문 FORTRAN If 문은 FORTRAN에 도입 처음 도입하였습니다 식의 결.. Computer Science/프로그래밍 언어론 2023. 5. 30. 정규 언어, 정규 문법, 유한 오토마타의 동치 관계 정규 언어, 정규 문법, 유한 오토마타의 동치 관계 전체 문법이 주어지면 문법으로 부터 토큰들을 분리해내고 이 토큰들을 정규 문법으로 표현 토큰에 대한 정규 문법을 정규 표현으로 표시. 이 정규 표현을 인식하는 인식기를 만들면 을 주면 언어가 주어지면, 이를 정규표현으로 변환 정규표현을 인식하는 NFA을 구성, NFA를 DFA로 변환, DFA를 최소화 하면 어휘 분석기 를 만들 수 있음 정규 문법, 정규 표현, 유한 오토마타의 관계가 서로 동치관계 임을 증명 정규문법 ⇒ 정규표현 정규표현 ⇒ 유한오토마타 유한 오토마타 ⇒ 정규문법 정규문법 ⇒ 정규표현으로변환 정규표현에의해서 정의된 문법G에 의해 생성 되는 언어 L(G)가 무엇인지를 알기 위해서는, 정규 문법을 정규 표현으로 변환 정규 문법을 계수(coe.. Computer Science/프로그래밍 언어론 2023. 5. 28. 이전 1 ··· 23 24 25 26 27 28 29 ··· 49 다음