목록분류 전체보기 (32)
dev-sohee 님의 블로그
스프링을 이해하는 데는 POJO(Plain Old Java Object)를 기반으로 스프링 삼각형이라는 애칭을 가진 IoC/DI, AOP, PSA라고 하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필수입니다. 스프링 삼각형을 이해하지 않은 상태에서 스프링 프레임워크를 학습하는 것은 알파벳을 모르고 영어를 공부하는 것과 마찬가지입니다. * IoC/DI (Inversion Of Control/Dependency Injection)* AOP(Aspect-Oriented Programming)* PSA(Portable Service Abstraction) # IoC/DI IoC/DI(Inversion Of Control/Dependency Injection)란 해석하면 제어의 역전/의존성 주입입니다. 해석..
개발자로서의 능력을 검증할 수 있는 가장 쉬운 수단은 어플리케이션의 성능입니다. 어플리케이션의 성능에 영향을 미치는건 네트워크, 코드 최적화, 데이터베이스 등 매우 많지만 오늘은 그 중에서 데이터베이스, 특히 데이터베이스 엔진에 대해 알아보겠습니다. 엔진은 데이터베이스의 성능, 확장성, 안정성을 직접적으로 결정하는 중요한 요소이기 때문에 적절한 엔진을 선택하고 최적화하는 능력은 필수적입니다.* InnoDB* MyISAM DB엔진데이터베이스 엔진(DataBase Engine) 또는 스토리지 엔진(Storage Engine)은 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제하는데 사용하는 기본 소프트웨어 컴포넌트입니다. MySQL에서 테이블을 생성하면 실제로..
개발자들이 데이터베이스, 혹은 DB라는 단어를 자주 사용하는 것을 들어봤을 것입니다. 그렇다면 데이터베이스와 데이터의 차이는 무엇일까요? 데이터베이스란 여러 사람이 공유하여 사용할 목적으로 데이터를 체계적으로 저장하고 관리할 수 있도록 구조화된 시스템입니다. 데이터를 저장, 검색, 수정, 삭제할 수 있도록 설계되어있는 것이 데이터베이스입니다. 데이터베이스는 그 구조와 사용 목적에 따라 여러 가지로 분류될 수 있습니다. 오늘은 그 중에서 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL)를 CAP 이론의 관점에서 알아보겠습니다.* CAP 이론* RDB* NoSQL # CAP 이론 Consistency(일관성): 사용자가 분산 데이터베이스 상의 어떤 노드와 통신하든지 같은 데이터를 조회할 수 있..
'웹 보안의 취약점 1탄 : XSS, CSRF 공격기법'에서 공격기법에 대해 알아봤으니 이번엔 방어기법 중 하나인 CORS에 대해 알아보겠습니다. # CORSCORS는 한국어로 직역하면 '교차 출처 리소스 공유'라고 해석할 수 있습니다. 여기서 '교차 출처(Cross-Origin)'이란 '다른 출처'를 의미합니다. 즉, 도메인이 다른 서버끼리 리소스를 주고 받을 때 보안을 위해 설정된 정책이라고 생각하시면 됩니다. 예를 들어, 웹 사이트 A가 API 서버에서 데이터를 가져오려 할 때, API 서버에서 CORS 허용 설정이 되어 있지 않으면 웹 브라우저에서 API 접근이 거부될 수 있습니다. CORS 설정은 API 서버에서 HTTP 응답 헤더에 "Access-Control-Allow-Origin" 항목..
자바 웹 개발을 하다보면, 공통적으로 처리해야 할 작업들이 많습니다. 예를 들어 로그인 관련(세션 관리), 권한 체크, XSS 방어, 페이지 인코딩 변환 등이 있습니다. 공통업무에 관련된 코드를 모든 페이지 마다 작성한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도 있으며, 소스 관리도 힘들어질 것입니다. 그래서 공통된 부분은 따로 관리하는 것이 좋습니다. 이러한 공통 업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 있는데 바로 Filter, AOP, Interceptor, Dispatcher Servlet입니다. * Dispatcher Servlet* Filter* AOP(Aspect-Oriented Programming)* Int..
데이터베이스에서 트랜잭션은 여러 작업을 하나의 논리적 단위로 묶어, 모두 성공하거나 모두 실패하도록 보장합니다. 이를 통해 데이터의 일관성과 무결성을 유지할 수 있습니다. 하지만 여러 트랜잭션이 동시에 실행될 때, 데이터의 일관성을 어떻게 유지할지가 중요한 문제가 됩니다. 이때 등장하는 개념이 바로 트랜잭션 격리 수준(Isolation Level)입니다. 격리 수준은 각 트랜잭션이 다른 트랜잭션의 중간 결과를 얼마나 볼 수 있는지를 결정하며, 성능과 데이터 무결성 사이의 균형을 맞추는 데 중요한 역할을 합니다.* 트랜잭션 격리 문제* 트랜잭션 격리 수준 예를 들어, 다음과 같은 상황에서 트랜잭션 격리가 필요합니다. 사용자 A가 자신의 계좌에서 B의 계좌로 2000원을 이체하려고 합니다. 이 작업은 두 개..
세션 불일치 문제는 단일 서버 환경에서는 발생하지 않으므로 따로 걱정하지 않아도 됩니다. 하지만, 최근 웹 서비스는 일반적으로 수평 확장된 다중 서버 환경일 것입니다. 이런 다중 서버 환경에서는 세션 불일치 문제가 발생할 수 있습니다. 기본적으로 세션은 서버의 물리적 메모리(RAM)에 저장되기 때문입니다.예를 들어, 서버를 수평적으로 확장하기 위해 A, B, C 총 3대의 서버를 설치했다고 가정하겠습니다. 이때, 클라이언트의 요청이 들어올 때 마다 A → B → C → A … 순서대로 요청을 분산합니다. 이런 환경에서 클라이언트의 로그인 요청이 A 서버로 전달되었습니다. 클라이언트의 세션 정보는 A서버에 생성됩니다. 그리고 직후에 해당 클라이언트의 글 작성 요청이 B 서버로 전달되었다고 합시다. 하지만..
웹의 가장 큰 장점 중 하나는 인터넷 연결만 있으면 언제 어디서나 접근할 수 있다는 것입니다. 하지만 이 말은 곧 그만큼 보안이 취약하다는 뜻이기도 합니다. 당장 브라우저의 개발자 도구만 열어도 DOM이 어떻게 작성되어 있는지, 어떤 서버와 통신하는지 등의 각종 정보들을 열람할 수 있고 쿠키 값도 변경하여 클라이언트의 요청을 위변조할 수 있습니다. 오늘은 웹 보안 취약점을 이용한 XSS, CSRF 공격 기법과 웹 보안 기법 중 하나인 CORS에 대해 알아보겠습니다.* XSS(Cross Site Scripting)* CSRF(Cross Site Request Forgery) # XSSXSS란 Cross Site Scripting의 약자로 CSS라고 하는 것이 맞지만 CSS가 이미 Cascading Styl..