본문 바로가기

IT 지식51

[빅데이터] Hadoop Distributed File Syste (HDFS) HDFS (Hadoop Distributed File System) HDFS는 하둡의 파일 시스템으로, 대용량 파일을 분산된 서버에 저장하고 그 데이터를 빠르게 처리할 수 있도록 만들어진 파일 시스템이다. 하둡의 특성 상 여러 컴퓨터를 병렬적으로 연결하여 데이터를 저장하는데, 이를 위해 만들어진 파일 시스템으로 볼 수 있다. 즉 기존의 DAS, NAS, SAN 등의 대용량 파일 시스템이 하나의 컴퓨터에 파일들을 저장했다면, HDFS는 여러개의 컴퓨터를 이용해 스토리지를 구성하게 된다. HDFS의 특징 1) 블록 구조의 파일 시스템 HDFS는 대용량인 하나의 파일을 특정 크기의 블록으로 나누어 분산된 서버에 저장한다. 블록은 기본적으로 64MB, 하둡2에서는 128MB의 크기를 가진다. 물론 이러한 설정은.. 2021. 7. 29.
[빅데이터] 빅데이터와 하둡 입사 후 첫 프로젝트로 빅데이터 플랫폼 구축 프로젝트에 참가되었다. 빅데이터는 그저 큰 데이터일 뿐이고, 이에 대한 플랫폼은 그저 하둡과, 연관된 오픈 소스 프로그램들만 깔면 된다고 생각했다. 하지만 생각보다 빅데이터의 세계는 심오했고, 무지한 상태에서 무언가를 하려니 잘 되지 않았다. 그래서 프로젝트에 도움이 되기 위해 빅데이터를 공부하고자 한다. 빅데이터란? SNS와 사물 인터넷 등의 기술 발달로 인해 인류는 이전과 달리 엄청난 양의 데이터를 생성하기 시작했다. 이렇게 증가한 데이터양은 기존의 데이터베이스 관리도구로 수용하지 못할 정도로 큰 양을 갖게 되었다. 빅데이터의 개념은 여기서 등장했다. 기존의 데이터베이스로 처리할 수 없을 정도로 방대한 양의 데이터를 바로 빅데이터라 한다. 빅데이터의 3V .. 2021. 7. 29.
[DB] 격리수준 격리수준 (고립수준, Isolation Level) 트랜잭션의 네 가지 주요 성질 중 하나인 고립성에 관한 내용이다. 트랜잭션들의 직렬성이 보장된다면 서로간의 간섭은 없을 것이다. 하지만 병렬로 수행되는 트랜잭션에는 분명 간섭이 존재하고, 이를 격리수준으로 통제하여 얼마만큼의 간섭을 허용할 것인지를 결정하는 것이다. 고립 수준은 병렬적인 트랜잭션을 어느정도 직렬성을 띄게 만들어준다. 그렇기에 당연히 고립 수준이 낮아지면 동시성은 높아지지만 데이터의 정확성은 떨어지게 되고, 고립 수준이 높아지면 데이터 정확성은 높아지지만 동시성은 저하된다. 4가지 격리 수준 격리 수준에는 네 가지가 있다. 1) Read Uncommited 2) Read Commited 3) Repeatable Read 4) Seriali.. 2021. 5. 30.
[DB & BOOT] 트랜잭션 트랜잭션이란? 데이터베이스의 작업 수행 단위이다. 조금 더 상세하게 말하면, 데이터베이스의 상태를 변경시킬 수 있는 모든 연산들을 의미한다. 트랜잭션은 4개의 성질을 가지고 있다. 독립성 (Isolation) : 동시에 실행되어도 서로 영향을 미치지 말아야 한다. 일관성 (Consistency) : 늘 일관성 있는 상태를 유지해야 한다. 영속성 (Durability) : 트랜잭션이 성공적으로 수행되면 그 상태가 영구적으로 반영되어야 한다. 원자성 (Atomicity) : 한 트랜잭션 내의 작업은 하나의 단위로 처리한다. 즉, 일부만 반영되지 않는다. *독일영원으로 암기 트랜잭션은 위의 4가지 성질을 지키며, DB의 상태를 잘 유지해주어야 한다. 그렇다면 Spring Boot에서는 이 트랜잭션을 어떻게 사.. 2021. 5. 30.
[디자인 패턴] Singleton Pattern 한 클래스가 있고, 다섯 명의 사용자가 그 클래스를 이용한다고 하자. 그러면 기존의 자바에서는 각 사용자가 new 키워드를 이용해 그 클래스를 생성하고 이용하는 방식을 활용했다. new 키워드란 무엇인가? 새로운 객체를 만들어내는 키워드이다. 조금 구체적으로 말하자면, 객체에 메모리를 할당하여 새로운 객체를 메모리 상에 올리는 작업이다. 다섯 명이 각자 한 클래스를 new 키워드를 사용해 선언한다면? 당연히 다섯 개의 메모리가 할당된다. 물론 고작 다섯 개 가지고 OOM과 같은 에러가 발생할 리는 없다. 하지만 사용자들이 더 많아지면 당연히 더 많은 메모리가 할당되고, 그 수준이 서버가 감당할 수 없는 수준에 이르면 OOM이 일어나게 된다. 그렇다면 얼마나 많은 메모리를 사용하게 될까? 한 번 확인해보자.. 2021. 5. 24.
[디자인 패턴] MSA 아키텍처 MSA (Micro Service Architecture, 마이크로 서비스 아키텍처) 기존의 아키텍처 스타일은 모노리틱 아키텍처이다. 모노리틱 아키텍처는 모든 기능을 하나의 덩어리로 묶은 아키텍처이다. 예를 들어 쇼핑몰을 구축하는 데 다음의 기능 리스트들이 존재한다고 생각해보자. 1) 회원 관리 1-1) 회원 등록 1-2) 회원 정보 수정 1-3) 회원 탈퇴 1-4) 회원 정보 조회 2) 상품 관리 2-1) 상품 등록 2-2) 상품 수정 2-3) 상품 삭제 2-4) 상품 검색 3) 주문 관리 3-1) 주문 등록 3-2) 주문 수정 3-3) 주문 취소 3-4) 주문 조회 모노리틱 아키텍처는 이러한 기능들을 한 덩어리로 묶는다. 즉, 동일한 개발툴을 사용해 모든 기능을 하나의 어플리케이션으로 구현하고, 각 .. 2021. 5. 17.
Container & Docker Container 프로세스가 격리된 공간에서 동작하도록 하는 기술이다. 즉, 어플리케이션을 라이브러리 등과 한꺼번에 묶어 배포함으로써, 서로 다른 컴퓨팅 환경에 구애받지 않고 어플리케이션이 안정적으로 실행할 수 있게 만드는 기술이다. 컨테이너는 빠른 개발과 배포가 가능하다는 장점이 있다. Docker 도커란 리눅스 상에서 소프트웨어를 라이브러리, 시스템 도구, 런타임 등과 함께 컨테이너로 패키징한 소프트웨어 플랫폼이다. 도커를 사용하면 환경에 구애받지 않고 어플리케이션을 빠르게 개발하고, 배포할 수 있다. 즉, 도커는 컨테이너를 기반으로 하는 오픈소스의 가상화 플랫폼으로 볼 수 있다. 그렇다면 왜 굳이 컨테이너를 토대로 가상화를 수행해야 하는 것일까? 기존의 가상화라 하면 OS를 가상화하는 방법이 있다... 2021. 5. 17.
Kafka Kafka 아파치 카프카(Apache Kafka)는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트이다. 이 프로젝트는 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연시간을 지닌 플랫폼을 제공하는 것이 목표이다. 요컨대 분산 트랜잭션 로그로 구성된[2], 상당히 확장 가능한 pub/sub 메시지 큐로 정의할 수 있으며, 스트리밍 데이터를 처리하기 위한 기업 인프라를 위한 고부가 가치 기능이다. https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EC%B9%B4%ED%94%84%EC%B9%B4 위키피디아의 글을 보면 알 수 있듯, 카프카는 pub-sub 모델의 메시지 큐이다. 분산환경에 특화되어 설계되었고.. 2021. 5. 17.
[운영체제] Linux와 Unix 유닉스 유닉스(영어: Unix)는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 대화식, 시분할처리 시스템용 운영 체제이다.[1] 1970년대 초반 벨 연구소 직원인 켄 톰슨, 데니스 리치 등이 소형 컴퓨터용으로 처음 개발하였다. 오늘날의 유닉스 시스템은 여러 회사들과 비영리 단체들이 이 커널로 활용하여 다양한 운영체제를 개발하고 있다. 출처 : https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4 리눅스 리눅스(Linux)[4]는 1991년 9월 17일 리누스 토르발스가 처음 출시한 운영 체제 커널인[5][6][7] 리눅스 커널에 기반을 둔 오픈 소스 유닉스 계열 운영 체제 계열이다. 출처 : https://ko.wikipedia.org.. 2021. 5. 16.
Git과 Github 두 명 이상의 개발자가 하나의 프로그램을 개발한다고 생각해보자. 예를 들어 10개의 요구사항을 가진 프로그램을 만들기 위해 A 개발자는 1~5 기능을, B 개발자는 6~10 기능을 만든다. 그런데 이를 한 컴퓨터에서 진행할 수는 없다. 그러면 한 명이 컴퓨터를 이용할 때 다른 한 명은 강제로 휴식을 할 수 밖에 없고, 이러한 방법은 당연히 효율적이지 못하니까. 그렇다면 서로 다른 컴퓨터에서 작업을 해야할 것이다. 그런데 이렇게 만들어진 작업물은 결국에는 별도로 만들어진 것이라, 중간중간 테스트를 원한다면, 혹은 서로 연동되어야 하는 기능들이 존재하게 된다면 결국 두 개의 작업물들은 합쳐져야 한다. 그리고 이 과정을 프로그램 개발이 끝날 때까지 반복해야 한다. 이 과정은 너무 귀찮다. 또한 그렇게 합쳐졌을.. 2021. 5. 9.
Spring Framework 프레임워크? 프레임워크란 특정한 목적에 맞게 프로그래밍을 하기 위한 약속이다. 요리를 예시로 들면, 어느 요리던 비록 사람에 따라 다르게 조리되겠지만 반드시 필요한 재료는 존재한다. 예를 들어 김치찌개에는 김치와 돼지고기 정도는 반드시 필요하다. 프레임워크는 이렇게 특정한 목적에 맞는 어플리케이션을 개발하기 위해, 필수적인 것들을 모아놓은 것이다. 프레임워크와 라이브러리 내가 직접 면접에서 받은 질문은 아니고, 잡플래닛의 면접 후기 중에서 해당 질문이 나왔었다는 글이 기억났다. 앞서 설명했듯, 프레임워크는 말 그대로 특정한 목적에 맞는 어플리케이션을 개발하기 위해 필수적인 것들을 모아놓은, 일종의 틀 혹은 뼈대이다. 그에 반해 라이브러리는 단순히 활용 가능한 도구들의 집합으로 볼 수 있다. 쉬운 설명을 .. 2021. 5. 8.
[웹 프로그래밍] 프레임워크와 라이브러리, 스프링 프레임워크 프레임워크 사전적 의미는 '어떤 것을 구성하는 구조 또는 뼈대'이다. 이를 소프트웨어적으로 풀어 사용하면, 클래스나 인터페이스등을 만들어 어느정도 완성된 상태로 제공하는 기능이라 볼 수 있다. 한 마디로 자주 사용되는 클래스나 인터페이스들을 미리 만들어놓음으로써 개발자의 입장에서 자신이 필요로 하는 곳에 언제든지 쉽게 변형하여 사용할 수 있도록 만든 것이다. 프레임워크를 사용하면 일정한 기준에 따라 개발이 이루어지기에 개발 생산성이 올라가고 품질이 보장된다. 라이브러리 활용 가능한 도구들의 집합을 의미한다. 개발자는 미리 작성된 라이브러리를 호출하여 적재적소에 사용할 수 있다. 프레임워크와 라이브러리 흔히 프레임워크를 퍼즐판, 라이브러리를 퍼즐 조각에 비유하곤 한다. 프레임워크는 전체적인 흐름을 미리 정.. 2021. 4. 6.