매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! RAID(Reduntant Array of Independent Disks)란? RAID는 수 많은 데이터들을 안전하게 저장하거나 성능을 높이기 위해 여러 하드 디스크(HDD)나 SSD를 마치 하나의 장치처럼 사용하는 기술임 => 저렴하거나 독립적인 여러 디스크를 조합해 단일 디스크 이상의 효율을 내기 위해 개발되었음 RAID 구성 방식 RAID 0 - 스트라이핑 (Striping) 원리: 여러 보조기억장치에 데이터를 블록 단위로 나누어 저장하는 구성 방식=> 데이터를 저장할 때 하드 디스크는 각 장치에 번갈아 데이터를 저장장점: 읽기/쓰기 성능 극대화=> 데이터를 분산..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기 전에 영속성 컨텍스트란? 영속성 컨텍스트란, EntityManager가 관리하는 엔티티(데이터)들을 담고 있는 일종의 1차 캐시 같은 공간임 => 쉽게 생각하면 DB에서 조회한 객체들을 잠시 보관하면서 관리해주는 공간 여기서 관리되고 있는 객체는 영속 상태라고 부르는데 영속 상태의 객체는 자동으로 변경사항을 감지해서 트랜잭션이 끝날 때 DB에 반영해줌 @Transactionalpublic void updateUser(Long id) { User user = userRepository.findById(id).get(); user.setName("홍길동");..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 레이어드 아키텍처(Layered Architecture)란? 레이어드 아키텍처(Layered Architecture)는 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미함 => 여기서 관심사는 유사한 책임들을 의미(ex. DB 접근과 관련된 책임들을 하나의 관심사로 볼 수 있음) 즉, 각 계층에 유사한 책임(관심사)을 모아 하나의 레이어로 분리하고, 상위 레이어에서 하위 레이어로만 의존성(방향성)을 가짐 레이어드 아키텍처(Layered Architecture)의 구성 레이어드 아키텍처의 대표적인 구성에는 3가지 레이어가 존재함 표현 계층(Present..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 싱글턴 패턴(Singleton Pattern)이란? 싱글턴 패턴(Singleton Pattern)은 생성자를 여러번 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미함 => 객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환함 public class Singleton { private static final Singleton INSTANCE = new Singleton(); // 생성자 호출 제한 private Singleton() { ... } public static Singleton getInstance() { ..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 헬스체크란? 헬스체크(Health Check)는 현재 서버나 어플리케이션의 상태가 정상인지 파악하는 것을 의미함 => API 엔드포인트를 호출하거나 특정 포트로 TCP 연결을 시도하는 방식을 사용할 수 있으며, Spring Actuator를 활용하여 헬스체크 기능을 사용할 수 있음 이런 헬스체크는 로드 밸런서나 오케스트레이션 도구(ECS, Kubernetes 등)가 서버 상태를 판단하고 트래픽을 효율적으로 분산하는 데에 핵심적인 역할을함 헬스체크가 왜 필요할까? 배포 상태 확인 새로운 버전을 배포한 직후, 어플리케이션이 정상적으로 기동되었는지 자동으로 확인할 수 있음 =..
ECS란? ECS(Amazon Elastic Container Service)는 AWS에서 제공하는 완전관리형 컨테이너 오케스트레이션 서비스임=> 컨테이너를 실행하고 관리하는 데 필요한 인프라 관리를 AWS가 대신해주기 때문에, 사용자는 어플리케이션에 집중할 수 있음 ECS와 함께 나오는 용어로 ECR(Elastic Container Registry)가 있는데, 이는 AWS 제공하는 Docker 이미지 저장소임=> ECS는 컨테이너를 실행하는 서비스이고, 컨테이너 이미지(ex. Spring Boot Docker 이미지)는 ECR에 저장됨(ECS에서 ECR의 이미지를 가져와 실행) ECS 실행 방식 ECS에는 2가지 실행 방식이 있음 EC2 Launch Type : 사용자가 직접 EC2 인스턴스를 클러스터..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 동시성을 구현하는 방식에는 여러 가지가 있지만, 대표적인 두 가지는 스레드 기반의 처리 방식과 코루틴 기반의 비동기 처리 방식임=> 특히 Kotlin 환경에서는 코루틴이 점점 더 많이 채택되고 있음 메모리 사용량 스레드 스레드는 생성될 때 운영체제가 고정 크기의 스택 메모리를 할당함(JVM에서는 기본적으로 1MB 정도의 스택 크기를 가짐) 스레드 하나가 1MB를 차지한다고 가정하면, 1000개의 스레드를 생성하면 약 1GB의 메모리를 소비하게됨 코루틴 코루틴은 별도의 스택을 갖지 않으며, 메모리 사용량이 훨씬 작음단지 몇 KB 수준의 힙 메모리만 사용하고, 필요한 경우에..
0. AWS ECR이란? Amazon ECR (Elastic Container Registry)는 AWS에서 제공하는 완전 관리형 Docker 컨테이너 이미지 저장소임 AWS 인프라와 긴밀하게 통합되어 있기에 ECS, EKS와의 통합 : ECR에 저장된 이미지는 ECS나 EKS에서 바로 가져다 쓸 수 있어 CI/CD 파이프라인과의 연동이 수월함=> EC2 인스턴스가 ECR에 접속해서 이미지를 push/pull 할 수도 있음IAM 기반 권한 제어 : 태그를 이용해 이미지 버전 관리를 할 수 있음보안 검사 기능 : 이미지에 보안 취약점이 있는지 자동으로 분석해주는 기능도 제공비용 효율성 : 저장 용량과 데이터 전송량에 따라 과금되며, 기본적으로는 사용한 만큼만 비용을 지불하면됨 다음과 같은 장점이 있음 =>..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 웹은 기본적으로 stateless(기억을 못하는) 구조이기에 어떤 사용자가 로그인했다고 해도, 다음 요청에서는 "누가 로그인했는지" 기억하지 못함 => 그래서 필요한게 쿠키와 세션 (상태를 유지하기 위한 기술) 쿠키(Cookie)란? 쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 조각으로 웹 서버가 "이 정보를 기억해줘" 라고 하면서 브라우저에게 데이터를 넘겨주면, 브라우저는 그걸 저장해 뒀다가 다음요청마다 자동으로 서버에 보냄 쿠키의 특징 저장 위치 : 클라이언트(브라우저)에 저장됨보안성 : 사용자가 직접 수정 가능해서 민감한 정보 저장은 위험 => 클..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 "어떤 코드가 왜 CPU에서 더 빠르게 실행되는 걸까?" 에 대한 이유 중 하나는 명령어 파이프라이닝이라는 CPU의 동작 원리 덕분임 => 백엔드관련 업무를 한다면 높은 성능과 효율을 위해 로우레벨 시스템이 어떻게 동작하는지 이해하는 것이 특히 중요!! 명령어 파이프라이닝이란? 명령어 파이프라이닝(instruction pipelining) 은 CPU가 여러 명령어를 동시에 겹쳐서 처리할 수 있도록 각 명령어를 여러 단계로 분할하여 처리하는 기술임 => 즉, 하나의 명령어를 처리하는 동안, 다음 명령어의 일부도 미리 수행해 전체 처리 속도를 높이는 것이 핵심 전..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 Bean은 Spring Container에 의해 관리되는 객체를 말함=> Spring이 생성하고, 초기화하고, 주입하고, 소멸까지 책임지는 객체 UserService userService = new UserService(); 일반적인 Java 프로젝트에서는 개발자가 위와 같이 직접 new 키워드로 객체를 생성하는데 @AutowiredUserService userService; Spring에서는 객체를 직접 만들지 않고, Spring이 대신 만들어주고 관리하며 필요할 때 위와 같이 주입해줌(여기서 UserService는 Spring이 만든 Bean임) @Se..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 참조 지역성의 원리란? 참조 지역성의 원리(Locality of reference)는 CPU가 메모리에 접근할 때 특정 메모리 영역을 반복적으로 접근하는 경향이 있다는 원리를 의미하며, 주로 캐시 메모리의 적중률을 높여 CPU의 메모리 접근 횟수를 줄이는 데 이용됨 => 크게 시간 지역성과 공간 지역성이 존재함 시간 지역성 (Temporal locality) 시간 지역성(Temporal locality) 이란 CPU는 최근에 접근한 데이터를 가까운 시점에 다시 접근할 가능성이 높다는 성질임 int sum = 0;for (int i = 0; i 여기서 array[10]은 ..