전체 글 36

[13] 인증(Authentication)과 인가(Authorization)

01. 세션 기반 인증과 토큰 기반 인증1. 세션 기반 인증 (Stateful Architecture)세션 기반 인증은 서버가 사용자의 인증 정보를 직접 관리하는 방식을 뜻한다. 즉, 세션 기반 인증 방식은 사용자가 로그인에 성공하면, 서버가 메모리(DB / Redis)에 세션 저장소를 생성하고 사용자 정보를 저장하는 방식을 의미한다. 이렇게 저장된 사용자 정보는 무작위 문자열인 세션 ID에 의해 식별되며, 클라이언트는 해당 세션 ID를 브라우저의 쿠키에 저장한다. 클라이언트는 매 요청마다 HTTP 헤더에 쿠키를 담아 보내며, 서버는 HTTP 요청 헤더에 포함된 세션 ID를 기반으로 세션 저장소에서 사용자를 조회하여 인증을 수행한다. 또한 이러한 세션 기반 인증은 크게 다음과 같은 세 가지 보안 고려사항..

[12] AWS의 RDS와 Github Actions

01. AWS RDS vs EC2 직접 설치AWS에서 데이터베이스를 구축하는 방법은 크게 가상 서버인 EC2에 직접 설치하는 방식과 관리형 서비스인 RDS를 활용하는 방식으로 나뉜다. 이 두 방식은 관리 책임의 범위 (Shared Responsibility Mode)에서 가장 큰 차이를 보인다. 1. EC2 (Elastic Compute Cloud) 란?EC2란 클라우드에서 제공하는 가상 서버 그 자체를 뜻하는, IaaS의 대표적인 모델이다. 즉, 사용자는 AWS 데이터 센터에 있는 물리적 자원을 논리적으로 쪼개어, 원하는 사양(CPU, RAM 등)의 가상 컴퓨터를 할당 받는 것을 의미한다. 이러한 EC2는 웹 서버, 연산 서버, 커스텀 DB 환경 등에 활용된다. 사용자는 할당 받은 가상 서버에 운영체제..

[11] Container 와 Doker, 그리고 Orchestration

01. Container vs Docker1. 컨테이너 (Container)컨테이너란 운영체제 환경에서 리눅스 커널의 기능을 활용하여 프로세스를 격리하는 가상화 기술을 의미한다. 즉, 컨네이너 내부에서 실행되는 애플리케이션은 마치 독립된 OS 위에서 실행되는 것처럼 보이지만, 실제로는 호스트 OS를 공유하고 있는 기술을 뜻한다. OS를 전체를 가상화하는 가상 머신(Virtual Machine)과 달리 필요한 자원만 격리하여 가볍고 빠르다는 특징이 있다. 2. 도커 (Docker)도커(Docker)란 컨테이너 기술을 손쉽게 사용할 수 있도록 만들어진 오픈소스 플랫폼을 의미한다. 즉, 개발자가 만든 애플리케이션을 빠르게 배포 및 실행할 수 있도록, 컨테이너 기술을 사용자 친화적으로 포장한 도구를 뜻한다. 이..

[10] 계층별 입력값 검증과 Mockito

01. 계층별 입력값 검증의 범위와 책임주로 상위 계층인 컨트롤러(Controller)에서 형식을 걸러내고, 하위 계층인 서비스(Service)와 엔티티(Entity)에서는 의미를 검증한다. 이러한 전략은 중복 검증을 방지할 뿐만 아니라, 핵심 비지니스 규칙을 하위 계층에서 한 번 더 보호함으로써 객체의 무결성을 보장하고 안정성을 확보한다. 계층범위책임 컨트롤러(Controller)문법적 검증(Syntactic validation)값의 공백 / 형식 / 범위 등 검증@Valid 및 Bean Validation 활용서비스(Service)논리적 / 도메인 검증(Semantic Validation)시스템 상태와 관련된 검증DB 조회가 필요한 비지니스 규칙엔티티(Entity)객체의 무결성 보장객체 유효성 검증 ..

[09] JPA의 N+1 문제, 그리고 트랜잭션의 ACID

01. JPA N+1 문제1. N+1 문제란?연관 관계가 설정된 엔티티를 조회할 때, 의도하지 않은 추가 쿼리가 조회된 데이터 개수(N)만큼 발생하는 현상을 뜻한다. 예를 들어, 10개의 게시글을 조회한 뒤 각 게시글의 작성자를 출력하고자 할 때, 게시글을 가져오는 쿼리 1번 외에 작성자를 찾기 위한 쿼리가 10번 더 실행되는 것이 대표적인 N+1 문제라고 할 수 있다. 이러한 N+1 문제는 JPA가 JPQL을 실행할 때, 연관 관계 데이터를 고려하지 않고 주 객체를 우선 조회하기 때문에 발생한다. 즉, JPA는 먼저 연관된 데이터를 프록시(가짜 객체)로 채워 주 객체를 조회한 후에, 실제 연관 데이터가 사용되는 시점에 각각 추가 쿼리를 실행한다. 이러한 동작은 결과적으로 한 번의 쿼리로 처리할 수 있는..

[08] DDL과 DML, 그리고 역정규화

01. DDL과 DML1. 데이터 정의어 (DDL, Data Defination Language)데이터 정의어란 주로 DB를 설계 및 관리하는 사람이 사용하는 언어로, 데이터베이스 구조를 생성 / 수정 / 삭제하는 언어를 뜻한다.DDL 예시CREATE데이터베이스 구조 생성CREATE INDEX 인덱스 이름] ON [테이블(속성)]ALTER데이테베이스 구조 수정ALTER TABLE [테이블] ADD [속성 이름] [속성 타입]DROP데이버테이스 구조 삭제DROP [테이블]TRUNCATE데이터베이스 구조는 냅두되, 내용만 삭제TRUNCATE [테이블] 2. 데이터 조작어 (DML, Data Manipulation Language)데이터 조작어란 주로 데이터베이스 구조 내 테이블에 저장될 데이터를 생성 / 수..

[07] 웹 API의 발전 과정과 HTTP 요청의 흐름

01. 웹 API의 발전 과정1. SOAP(Simple Object Access Protocol)이란?SOAP이란 서로 다른 환경에서 실행되는 애플리케이션이 네트워크를 통해 정보를 교환할 수 있게 해주는 HTTP 기반의 통신 프로토콜을 의미한다. 이러한 SOAP는 Envelope, Header, Body 세 부분으로 구성되며, 각 부분은 XML 형식으로 구성되어 엄격한 구조와 명확한 명세를 가진다. 2. SOAP의 문제점SOAP의 문제점 무겁고 제한된 데이터 형식오직 XML 형식 만을 지원하여, 데이터 전송 양이 많아질 뿐만 아니라 네트워크의 속도 또한 저하됨복잡한 명세데이터를 주고 받는 규칙(WSDL)이 복잡하여, 개발자가 학습하고 구현하는데 오랜 시간이 걸림하드웨어 자원 소모XML을 해석하는 과정에..

[06] AOP와 MVC

01. AOP가 필요한 이유1. AOP(Aspect Oriented Programming)이란?AOP란 관점 중심 프로그래밍의 약자로, 핵심 비지니스 로직과는 별개인 공통 기능을 하나의 모듈로 분리하여 관리할 수 있게 해주는 프로그래밍 패러다임을 의미한다. 즉, 관점 중심 프로그래밍이란 여러 계층 또는 컴포넌트에 걸쳐 반복적으로 나타나는 관심사를 하나의 모듈로 분리하여 관리하는 것을 뜻한다. 핵심 관심사(Core Concerns)횡단 관심사(Cross-Cutting Concerns)개념본질적인 비지니스 로직여러 모듈에서 공통적으로 적용되는 부가 기능특징특정 모듈이 달성해야 하는 고유한 목표시스템 전반에 걸쳐 반복적으로 나타남관리 방식각 기능 별로 개별 관리한 곳에서 집중 관리코드의 위치각 서비스나 컨트..

[05] 웹 서버와 WAS, 그리고 Bean 등록

01. 웹 서버와 WAS1. 현대 아키텍처현대적인 아키텍처는 보통 [Web Server → WAS → DB]의 구조를 가지며, 웹 서버와 WAS를 구분짓는 이유는 다음과 같다. 웹 서버와 WAS를 구분짓는 이유 효율적인 부하 분산(Efficiency)정적 파일은 웹 서버가 복잡한 동작은 WAS가 처리하도록 하여, 시스템 전체의 속도 형상보안(Security)웹 서버가 프록시(Proxy) 역할을 수행함으로써, WAS 내 데이터베이스 보호장애 극복(Failover)하나의 WAS에 여러 개의 웹 서버를 연결하여 부하 분산(Load Balancing) 수행 2. 웹 서버 vs WAS 웹 서버(Web Server)WAS(Web Application Server)역할클라이언트의 HTTP 요청에 맞는 응답을 제공>>..

[04] Spring Framework의 탄생 배경과 Java 라이브러리

01. Spring Framework가 탄생 배경 및 문제점1. EJB(Enterise JavaBeans)EJB란 예전 Java EE 환경에서 사용된 기술로, 기업 환경의 대규모 애플리케이션을 구축하기 위해 만들어진 자바의 서버측 컴포넌트 모델이다. 즉, EJB는 복잡한 기능은 컨테이너가 맡고, 개발자는 비지니스 로직에 집중할 수 있도록 하는 구조를 뜻한다. EJB가 제공한 기능 예시트랜잭션 관리여러 DB 작업을 하나로 묶는 기능을 자동으로 처리계좌 이체 시 둘 다 성공해야 함분산 객체 기술여러 서버에 흩어진 객체들을 연결분산 시스템에서 다른 서버와 통신보안 및 상태 관리사용자 인증이나 세션 관리권한 없는 사용자는 접근 불가 2. EJB의 문제점기존의 EJB는 복잡한 기능을 제공하는 대신 개발자가 종속적..