목록분류 전체보기 (29)
배움과 기록의 장
대규모 서비스를 운영하거나 설계할 때 고려해야 할 핵심 요소로는 서버 확장 방식, 데이터베이스 가용성, 부하 분산, 캐시 전략 등이 있다. 이 글에서는 실무에서 자주 접하게 되는 클라우드 및 시스템 아키텍처 설계 방식을 정리한다. 🖥️ 서버확장방식서버 확장 방식은 크게 수직 확장(Vertical Scaling)과 수평 확장(Horizontal Scaling)으로 나뉜다.수직 확장(Vertical Scaling): 하나의 서버에 CPU나 RAM 등의 자원을 추가하여 성능을 높이는 방식이다.수평 확장(Horizontal Scaling): 서버 인스턴스를 여러 대로 늘려 트래픽을 분산시키는 방식이다.실무에서는 대부분 수평 확장을 적용한다. 이때 세션 상태를 서버가 들고 있으면 로드 밸런서가 올바른 서버로 요..

🚨 인터럽트(Interrupt)란?시스템의 내부나 외부에서 예기치 못한 이벤트가 발생한 경우, 현재 CPU가 수행 중인 작업을 일시 중단하고 해당 이벤트를 먼저 처리하도록 신호를 보내는 메커니즘을 인터럽트라고 한다. 예를 들어, 키보드를 누르거나 네트워크 패킷이 도착했을 때 인터럽트를 통해 CPU에게 이를 알리는 것을 말한다. 인터럽트는 크게 '하드웨어 인터럽트'와 '소프트웨어 인터럽트'로 구분된다.구분하드웨어 인터럽트 (HW Interrupt)소프트웨어 인터럽트 (SW Interrupt)발생 원인외부 장치 (키보드, 마우스, 타이머 등)프로그램 내부 (시스템 콜, 예외 발생 등)예시디스크 I/O 완료, 타이머 알림 등int 0x80 호출, 0으로 나누기 등목적외부 이벤트 처리시스템 서비스 요청, 예외..

📌 쿠키와 세션을 사용하는 이유 (with HTTP 특징)쿠키와 세션을 사용하는 이유를 알기 위해 우선 HTTP 프로토콜의 특징을 이해해보자HTTP의 대표적인 특징1. 무상태성 Stateless서버가 클라이언트의 상태를 저장하지 않는 것을 의미한다. 클라이언트로부터 첫번째 요청 이후 두번째 요청이 왔을 때, 서버는 첫번째 요청의 상태 정보를 알지 못한다. 즉, 로그인을 하였더라도 다음 요청에서 클라이언트가 누군지 알지 못하는 상황이 발생한다.2. 비연결성 Connectionless서버가 클라이언트의 요청에 대한 응답을 보낸 이후 바로 연결을 종료하는 것을 의미한다. 불필요한 연결을 하지않아 서버 자원을 효율적으로 사용할 수 있다는 장점이 있다. 위와 같은 HTTP 프로토콜의 특징으로 인해 각각의 htt..

* 김영한님의 '스프링 핵심 원리 - 기본편' 인프런 강의 수강 후 복습을 위해 작성한 글입니다. 작성자의 이해에 따라 쉽게 풀어쓰거나 재구성 될 수 있습니다. 1️⃣ 스프링이란?스프링은 자바 언어 기반의 프레임워크로, 자바의 가장 큰 특징인 객체 지향을 살려 좋은 객체 지향적 애플리케이션을 개발할 수 있도록 돕는 도구이다. 스프링은 이러한 객체 지향 프로그래밍을 위한 노력으로, 다음과 같은 핵심원리를 도입하였다.IoC (Inversion of Control, 제어의 역전)DI (Dependency Injection, 의존성 주입)컨테이너이번 글에서는 각 핵심 원리에 대해 살펴보며, 스프링은 이러한 개념들을 통해 어떻게 객체 지향 프로그래밍을 하고자 하였는지 이해해보자. 2️⃣ 객체 지향 프로그래밍..
🌿 시스템 콜이란사용자 프로그램이 운영체제 커널이 제공하는 서비스를 사용하기 위해 요청하는 인터페이스 사용자 프로그램은 직접 하드웨어 자원에 접근할 수 없기 때문에, 파일 입출력, 프로세스 생성, 네트워크 통신 등과 같은 작업을 하기 위해서 시스템 콜을 통해 운영체제 커널에 요청한다. 다음과 같이 6가지 유형으로 분류할 수 있다. 프로세스 제어(Process Control) : fork(), exec(), exit(), wait()파일 조작 (File Manipulation) : open(), read(), write(), close()장치 조작 (Device Manipulation) : ioctl(), read(), write()정보 유지 (Information Maintenance) : getpid..
깊이 있는 공부를 위해.누군가를 이해시키기 위한 글이라면 깊이 있게 공부해야 하니까. 사실 이전까지는 모르는 게 많으니까 빠르게 학습하는 게 중요하다 생각해서 블로그는 신경 못쓰고 노션에 개인적으로 기록하고 있었다. 그러다 어느순간 내가 가지고 있는 지식의 깊이가 부족하다는 것을 느끼게 되어 다시 블로그를 작성하고자 한다. 왜냐면 누군가 보는 글을 작성하면 제대로 된 지식을 적어야 하기 때문에, 이를 위해 같은 공부를 하더라도 더 깊이 있는 학습이 가능하게 되니까.
2023.2.13 작성 🔸 HTTP 헤더1) HTTP 헤더란?- Http 메시지의 구성요성 중 하나 - 클라이언트의 요청이나 서버의 응답에 포함되어, 부가적인 정보를 HTTP 메시지에 포함할 수 있도록 해줌 2) HTTP의 사용목적?- 클라이언트와 서버 관점에서의 HTTP 헤더 예시내부적으로 가장 많이 사용되는 헤더 정보: 'Content-Type''Content-Type'은 클라이언트와 서버가 주고받는 HTTP 메시지 바디의 데이터 형식이 무엇인지 알려준다.클라이언트와 서버는 'Content-Type'이 명시된 데이터 형식에 맞는 데이터를 주고 받는다. ex.우리는 'application/json'- 개발자들이 실무에서 사용하는 HTTP 헤더 예시개발자들이 직접 코드레벨에서 HTTP 헤더를 컨트롤 ..
2023.2.13 작성 🔸 JDBC란?- Java 기반 애플리케이션의 코드레벨에서 데이터베이스에 있는 데이터를 사용할 수 있게 데이터베이스에 접근할 수 있도록 Java에서 제공하는 표준 사양- Java 초창기(JDK 1.1) 버전부터 제공- 자바개발자는 JDBC API를 사용해서 다양한 벤더(Oracle, MS SQL, MySQL 등)의 데이터베이스와 연동가능( 데이터 액세스 기술의 기본이 되는 저수준(low level) API이기 때문에, JDBC의 구체적인 API 사용법을 알 필요는 없다. 하지만 Sping Data JDBC나 Spring Data JPA 같은 기술에서도 내부적으로는 JDBC를 사용하기 때문에, JDBC 동작 흐름 정도는 알아두면 Spring에서 지원하는 데이터 엑세스 기술을 사용하..
2023.2.13 작성 🔸 API 계층 구현Spring MVC에서 클라이언트 요청의 최종목적지인 API계층, 즉 Controller 클래스를 설계하고 구현한다. 🔸 프로젝트 환경 구성1. 샘플 프로젝트 소개1) 애플리케이션 이름: 커피주문 웹 애플리케이션 (커피 주문을 위해 필요한 정보를 제공하기 위한 서버용 웹애플리케이션)2) 애플리케이션 경계(앱 기능을 특정 범위로 제한하는 것) : 커피만 주문할 수 있도로 기능 제한3) 커피 주문을 위해 필요한 정보: Coffee , Member, Order4) 커피 주문 앱에서 제공할 기능: 주인이 커피정보를 등록,수정,조회,삭제하는 기능 등 2. 샘플 프로젝트 환경 구성- Project: Gradle-Groovy- Language: Java- Sprin..
2023.2.13 작성 🔸 Spring MVC (spring-webmvc 모듈) 란?- 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 편리하게 처리해주는 모듈/프레임워크- 서블릿이란? 클라이언트의 요청을 처리하도록 특정 규약에 맞추어 Java코드로 작성하는 클래스 파일- 아파치 톰캣은 이러한 서블릿들이 웹 애플리케이션으로 실행이 되도록 해주는 서블릿 컨테이너 중 하나 1) Model - 클라이언트에게 응답으로 돌려주는 작업의 처리결과 데이터 2) View - Model 데이터를 이용해 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공하는 역할 - Spring MVC에 포함된 다양한 view기술과 view 형태 HTML 페이지 출력 : HTML를 직접 렌더링해서 클라이언트 ..