전체 글

네, 저 밑바닥에서 왔습니다
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 레이어드 아키텍처(Layered Architecture)란? 레이어드 아키텍처(Layered Architecture)는 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미함 => 여기서 관심사는 유사한 책임들을 의미(ex. DB 접근과 관련된 책임들을 하나의 관심사로 볼 수 있음) 즉, 각 계층에 유사한 책임(관심사)을 모아 하나의 레이어로 분리하고, 상위 레이어에서 하위 레이어로만 의존성(방향성)을 가짐 레이어드 아키텍처(Layered Architecture)의 구성 레이어드 아키텍처의 대표적인 구성에는 3가지 레이어가 존재함 표현 계층(Present..
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 싱글턴 패턴(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 인스턴스를 클러스터..
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 동시성을 구현하는 방식에는 여러 가지가 있지만, 대표적인 두 가지는 스레드 기반의 처리 방식과 코루틴 기반의 비동기 처리 방식임=> 특히 Kotlin 환경에서는 코루틴이 점점 더 많이 채택되고 있음 메모리 사용량 스레드 스레드는 생성될 때 운영체제가 고정 크기의 스택 메모리를 할당함(JVM에서는 기본적으로 1MB 정도의 스택 크기를 가짐) 스레드 하나가 1MB를 차지한다고 가정하면, 1000개의 스레드를 생성하면 약 1GB의 메모리를 소비하게됨 코루틴 코루틴은 별도의 스택을 갖지 않으며, 메모리 사용량이 훨씬 작음단지 몇 KB 수준의 힙 메모리만 사용하고, 필요한 경우에..
·🌊 Infra/AWS
0. AWS ECR이란? Amazon ECR (Elastic Container Registry)는 AWS에서 제공하는 완전 관리형 Docker 컨테이너 이미지 저장소임 AWS 인프라와 긴밀하게 통합되어 있기에 ECS, EKS와의 통합 : ECR에 저장된 이미지는 ECS나 EKS에서 바로 가져다 쓸 수 있어 CI/CD 파이프라인과의 연동이 수월함=> EC2 인스턴스가 ECR에 접속해서 이미지를 push/pull 할 수도 있음IAM 기반 권한 제어 : 태그를 이용해 이미지 버전 관리를 할 수 있음보안 검사 기능 : 이미지에 보안 취약점이 있는지 자동으로 분석해주는 기능도 제공비용 효율성 : 저장 용량과 데이터 전송량에 따라 과금되며, 기본적으로는 사용한 만큼만 비용을 지불하면됨 다음과 같은 장점이 있음 =>..
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 웹은 기본적으로 stateless(기억을 못하는) 구조이기에 어떤 사용자가 로그인했다고 해도, 다음 요청에서는 "누가 로그인했는지" 기억하지 못함 => 그래서 필요한게 쿠키와 세션 (상태를 유지하기 위한 기술) 쿠키(Cookie)란? 쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 조각으로 웹 서버가 "이 정보를 기억해줘" 라고 하면서 브라우저에게 데이터를 넘겨주면, 브라우저는 그걸 저장해 뒀다가 다음요청마다 자동으로 서버에 보냄 쿠키의 특징 저장 위치 : 클라이언트(브라우저)에 저장됨보안성 : 사용자가 직접 수정 가능해서 민감한 정보 저장은 위험 => 클..
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 "어떤 코드가 왜 CPU에서 더 빠르게 실행되는 걸까?" 에 대한 이유 중 하나는 명령어 파이프라이닝이라는 CPU의 동작 원리 덕분임 => 백엔드관련 업무를 한다면 높은 성능과 효율을 위해 로우레벨 시스템이 어떻게 동작하는지 이해하는 것이 특히 중요!! 명령어 파이프라이닝이란? 명령어 파이프라이닝(instruction pipelining) 은 CPU가 여러 명령어를 동시에 겹쳐서 처리할 수 있도록 각 명령어를 여러 단계로 분할하여 처리하는 기술임 => 즉, 하나의 명령어를 처리하는 동안, 다음 명령어의 일부도 미리 수행해 전체 처리 속도를 높이는 것이 핵심 전..
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 시작하기전에 Bean은 Spring Container에 의해 관리되는 객체를 말함=> Spring이 생성하고, 초기화하고, 주입하고, 소멸까지 책임지는 객체 UserService userService = new UserService(); 일반적인 Java 프로젝트에서는 개발자가 위와 같이 직접 new 키워드로 객체를 생성하는데 @AutowiredUserService userService; Spring에서는 객체를 직접 만들지 않고, Spring이 대신 만들어주고 관리하며 필요할 때 위와 같이 주입해줌(여기서 UserService는 Spring이 만든 Bean임) @Se..
·💻 CS
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 참조 지역성의 원리란? 참조 지역성의 원리(Locality of reference)는 CPU가 메모리에 접근할 때 특정 메모리 영역을 반복적으로 접근하는 경향이 있다는 원리를 의미하며, 주로 캐시 메모리의 적중률을 높여 CPU의 메모리 접근 횟수를 줄이는 데 이용됨 => 크게 시간 지역성과 공간 지역성이 존재함 시간 지역성 (Temporal locality) 시간 지역성(Temporal locality) 이란 CPU는 최근에 접근한 데이터를 가까운 시점에 다시 접근할 가능성이 높다는 성질임 int sum = 0;for (int i = 0; i 여기서 array[10]은 ..
application.yml 이란? application.yml은 Spring Boot 어플리케이션의 설정(Configuration)을 담당하는 파일임=> 서버 포트, DB 연결 정보, 로깅 레벨, 외부 API Key 등 다양한 환경 설정값들을 담을 수 있음 기본 경로는 src/main/resources/application.yml 에서 설정을 로드하며, 환경에 따라 다른 설정을 주입하고 싶을 땐 프로파일(profile)을 이용함 왜 환경별로 설정을 분리해야 할까? 운영 환경에서 필요한 설정과 로컬 개발 환경의 설정은 분명히 다를 수 밖에 없음 환경 (프로파일명)설명local개발자가 로컬에서 실행 (IDE로 실행, H2 DB 등)dev테스트 서버, 개발팀이 실제 서버에 배포해서 기능 테스트stage 또는..
·🫧 Database/SQL
매일메일 백엔드 질문을 참고해 개인적으로 학습한 내용을 정리하였습니다.오류가 있다면 언제든 피드백 주시면 바로 반영하겠습니다..! 예시 쿼리 SELECT pFROM Post pWHERE p.id NOT IN :postIds 위 쿼리는 특정 ID 목록(:postIds)에 포함되지 않은 게시글(Post)를 조회하는 아주 직관적인 방식임 발생할 수 있는 문제점 1. 전체 테이블 스캔 (Full Table Scan), 인덱스 풀 스캔(Full Index Scan) NOT IN은 부정 조건이라서 DB 옵티마이저가 효율적인 실행 계획을 세우기 어려움 => 전체 테이블 스캔이나 인덱스 풀 스캔을 유발함 DB 옵티마이저는 SQL 쿼리를 실행할 때, 가장 빠르고 효율적인 실행 계획을 세우는 DB의 두뇌같은 역할임DB는 ..