목록웹 (13)
dev-sohee 님의 블로그

RESTful(Representational State Transfer) API는 2000년도에 로이 필딩의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP 사양의 주요 저자 중 한 사람으로 HTTP/1.1의 설계와 관련된 작업 과정에서 웹 아키텍처와 REST의 개념을 발전시켰습니다. REST는 자원(Resource)을 중심으로 설계된 아키텍처로, HTTP와 URI 기반으로 자원에 접근할 수 있도록 하는 인터페이스입니다. HTTP 프로토콜로 API만들 때 URL(URI)로만 API의 역할을 알 수 있게 설계한 것을 RESTful API라고 합니다. 예를 들어, 다음과 같은 URL이 있을 때, https://search.shopping.naver.com/best/today?rankedDat..

개발자에게 아키텍처는 추상적인 개념으로 정의를 내리기가 쉽지 않을 수 있습니다. 그래서 아키텍처의 내용을 먼저 설명해보자면, 시스템 구성 및 동작 원리를 나타내고, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사하고, 시스템 구성 요소에 대한 설계 및 구현을 기술한 것 정도라고 할 수 있습니다. 즉, 아키텍처란 하나의 서비스가 어떻게 구성되며 어떻게 동작하는지를 표현한 것입니다. 좋지 않은 디자인의 소프트웨어는 추후에 기능을 추가하거나 변경하기가 어렵기때문에 유지보수가 점점 어려워집니다. 반면에 좋은 디자인을 가진 소프트웨어는 기능을 추가하고 관리하기가 수월합니다. 소프트웨어가 잘 컴포넌트화 되어 있기 때문입니다. 이것이 바로 소프트웨어 아키텍처가 중요한 이유입니다. 과거에는 어플리케이션이..

'웹 보안의 취약점 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..

웹 어플리케이션 배포는 개발자에게 매우 중요한 단계입니다. 다양한 환경과 서버 구성 요소들, 배포의 자동화, 어플리케이션의 복잡성 등의 영향을 받아 어플리케이션 배포 과정은 복잡할 수 있지만 이를 쉽고 간편하게 처리할 수 있도록 도와주는 도구가 바로 War(Web Application Archive)입니다. 이 글에서는 WAR의 기본 개념과 구조에 대해 자세히 살펴보겠습니다.* WAR란?* WAR의 구조 # WAR란?War(Web Application Archive)는 웹 서버 또는 서블릿 컨테이너에서 실행될 수 있도록 어플리케이션의 모든 구성 요소를 하나의 파일로 묶어 제공하는 파일 형식입니다. WAR 파일은 웹 어플리케이션의 클래스 파일, JSP 파일, 서블릿, 정적 리소스(HTML, CSS, Jav..