Storage의 종류와 차이점
파일 스토리지(NAS) 파일 스토리지는 일반적으로 NAS(Network Attached Storage)에 사용되며, 일상적인 컴퓨터 사용 시 볼 수 있는 윈도우의 탐색기, 맥OS의 파인더를 떠올리면 된다. 파일 시스템은 종이 파일 및 폴더가 캐비넷에 정리되는 방식을 모방한 계층적 구조를 가지고 있다. 파일 스토리지는 데이터 양이 늘어나면서 파일과 폴더...
파일 스토리지(NAS) 파일 스토리지는 일반적으로 NAS(Network Attached Storage)에 사용되며, 일상적인 컴퓨터 사용 시 볼 수 있는 윈도우의 탐색기, 맥OS의 파인더를 떠올리면 된다. 파일 시스템은 종이 파일 및 폴더가 캐비넷에 정리되는 방식을 모방한 계층적 구조를 가지고 있다. 파일 스토리지는 데이터 양이 늘어나면서 파일과 폴더...
OSI 모델이란 무엇인가 개방형 시스템 상호 연결(OSI, Open System Interconnection) 모델은 표준 프로토콜을 사용하여 다양한 통신 시스템이 통신할 수 있도록 국제표준화기구에서 만든 개념 모델이다. 쉽게 표현하자면, OSI는 서로 다른 컴퓨터 시스템이 서로 통신할 수 있는 표준을 제공한다. OSI 모델은 컴퓨터 네트워킹의 범용 ...
IP란 무엇인가 IP는 데이터 패킷이 네트워크를 통해 이동하고 올바를 대상에 도착할 수 있도록 데이터 패킷을 라우팅하고 주소를 지정하기 위한 프로토콜 또는 규칙의 집합이다. 인터넷을 통과하는 데이터는 패킷이라고 하는 더 작은 조각으로 나뉜다. IP정보는 각 패킷에 첨부되며, 이 정보는 라우터가 패킷을 올바를 위치로 보내는 데 도움이 된다. 인터넷에 연...
Presentation 계층 개선 이미지, CSS, JavaScript 최적화 이미지를 압축하고, 적절한 포맷(WebP 등)을 사용한다. WebP란? : gif, jpg, png 포맷을 대체하기 위해 구글에서 개발한 이미지 포맷으로, 이미지 품일이 같을 때 WebP 파일의 크기가 다른 포맷의 파일에 비해 훨씬 작다. CSS, JavaScrip...
의존성 역전 원칙 의존성 역전 원칙(Dependency Inversion Principle, DIP)은 소프트웨어 설계의 SOLID 원칙 중 하나로, 구현 세부 사항이 아닌 추상화에 기반을 둔다. 즉, 고수준 모듈(High-level modules)이 저수준 모듈(Low-level modules)에 의존하지 않도록 하는 설계 원칙인데, 왜냐하면 고수준...
3-tier 웹 애플리케이션이란? 3-tier 웹 애플리케이션은 Presentation Layer(표현 계층), Business Logic Layer(비즈니스 로직 계층), Data Layer(데이터 계층)로 구성된 소프트웨어 아키텍처로, 각 계층이 분리되어 자체 인프라에서 실행되기 때문에 동시에 개발이 가능하며 다른 계층에 영향을 주지 않으면서 확장...
OLAP와 OLTP의 비교 목적 OLAP와 OLTP는 데이터베이스 시스템의 두 주요 유형으로, 각각 다른 목적과 최적화 기법을 가지고 있다. OLAP(Online Analytical Processing) 시스템은 분석과 질의 응답에 최적화 되어 있으며, OLTP(Online Transaction Processing) 시스템은 거래 지향적인 작업에 최적...
데이터베이스 확장 하나의 데이터베이스로 다룰 수 없을 만큼 데이터가 많아지게 되면 데이터베이스 읽기/쓰기 성능이 감소하게 되므로 데이터베이스 확장에 대한 고려를 해야 한다. 이 글에서는 고려할 수 있는 방안으로 샤딩(Sharding)과 파티셔닝(Partitioning)을 소개해본다. 샤딩(Sharding)이란? 샤딩은 동일한 스키마를 가지고 있는 여...
Ubuntu v20.04 환경에 Gradle 설치 Ubuntu v20.04 에 Gradle을 설치해보자. 1. wget 설치하기 sudo apt install wget apt를 이용해서 Gradle을 설치하는 방식은 우리가 원하는 버전의 Gradle을 설치 할 수 없으므로 wget을 이용할 것이다. wget이 설치되어 있지 않다면, 위 명령어를 ...
Ubuntu 20.04 “no space left on device” Ubuntu에서 작업을 하다보면 "no space left on device" 라는 팝업이 뜨며 파일 수정 등 작업이 불가한 상황이 발생할 수 있다. 이 경우 아래와 같이 해결 가능하다. 1. 저장 공간을 많이 쓰고 있는 곳 찾기 du -sh * # 해당 경로에서 바로 용량 확인...
현상 확인 아래와 같이 Dockerfile을 작성한 후 소스를 Dockerizing 했을 때 소스 최신화가 안되는 이슈가 발생하였다. FROM bellsoft/liberica-openjdk-alpine:17 CMD ["./gradlew", "clean", "build"] VOLUME /tmp ARG JAR_FILE=build/libs/app.ja...
MDC 요건 배치 job을 실행시킬 때, requestBody 로 batId만을 넘겨주는데, 배치가 실행되는 모든 과정에서 배치job명을 sql쿼리와 함께 로깅하고자 함 문제상황 배치가 내부적으로 run 된 이후에 배치 job명이 로깅되지 않는 문제가 발생했다. SimpleAsyncTaskExecutor로 잡을 실행하며 joblauncher.r...
Job의 생명주기 배치 Job의 실행은 Job runner에서 시작된다. Job runner는 잡 이름과 여러 파라미터를 받아들여 잡을 실행시키는 역할을 한다. CommandLineRunner: 스크립트를 이용하거나 명령행에서 직접 잡을 실행할 때 사용 JobRegistryBackgroundJobRunner: 스프링을 부트스트랩에서 시동한...
mybatis Interceptor 사용하여 실행 쿼리 로깅하기 mybatis Interceptor를 등록하면 DB 쿼리 실행 전/후로 등록한 Interceptor를 수행하여 특정 작업을 할 수 있다. 내 경우에는 실행된 쿼리문을 로깅하는데 사용했다. 설정 방법 mybatis-config.xml 생성 아래와 같은 설정 파일을 생성하고, plugins...
Interceptor 동작 방식 이미지 출처 DispatcherServlet Spring MVC 구조의 핵심 객체 HttpServlet을 상속받아 Servlet으로 동작 Spring Boot는 DispatcherServlet을 Servlet으로 자동 등록하면서 모든 경로에 대해서 매핑 doDispatch()를 호출함으로써 클라이언트의...