분류 전체보기240 [Spring] PSA (Portable Service Abstraction) 스프링 3대 특징(IoC/DI, AOP, PSA) 중 PSA에 알아본다. 개념 PSA는 Portable Service Abstraction으로 일관성 있는 서비스 추상화이다. 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것을 서비스 추상화라고 한다. 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 서비스 추상화(Service Abstraction)이라 한다. 서비스 추상화(Service Abstraction)로 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 갖고 있는 것이 Portable Service Abstraction이다. Spring은 Spring Web MVC, Spring Transacti.. 2021. 5. 2. CSRF(Cross-site Request Forgery) 공격 개념 Cross-site Request Forgery(사이트 간 요청 위조)의 약어로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹 페이지를 보안에 취약하게 하거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법. 공격 난이도가 높지 않아 흔히 사용된다. XSS을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, CSRF는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 공격 과정 만일, 웹 페이지가 독자적 개발이 아닌 외부에서 이미 개발된 웹 어플리케이션을 사서 조금 수정한 것이라면, 공격자는 경우에 따라 해당 웹 어플리케이션을 구매하여 개인 서버에 설치한다. 그 다음에 공격 가능 패턴을 분석한다. 주로 공격자들이 찾는 것은 사용자 패스워.. 2021. 4. 25. XSS(Cross-site Scripting) 공격 개념 Cross-site Scripting의 약자로 게시판이나 웹 메일 등에 스크립트 코드를 삽입해 개발자가 고려하지 않은 기능이 작동하게 하는 웹 해킹 공격 기법이다. 주로 사용자를 대상으로 한 공격이다. SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종이다. 주로 CSRF를 하기 위해서 사용되기 때문에 종종 CSRF와 혼동되는 경우가 있으나, XSS는 스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시키는 것이므로 다르다. (CSS는 Cascading Style Sheets의 약어로 사용되고 있어 XSS라고 한다.) 종류 Reflected XSS Stored XSS 1. Reflected XSS 보통 URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 .. 2021. 4. 25. [Design Pattern] 프록시 패턴(Proxy Pattern) 개념 일반적으로 사용하는 프록시라는 용어는 클라이언트와 사용 대상 사이의 대리 역할을 맡은 오브젝트를 두는 방법을 총칭하는 반면, 디자인 패턴에서 말하는 프록시 패턴의은 프록시를 사용하는 방법 중에서 타깃에 대한 접근 방법을 제어하려는 목적을 가진 경우를 가리킨다. 프록시 패턴의 프록시는 타깃의 기능을 확장하거나 추가하지 않는다. 클라이언트가 타깃에 접근하는 방식을 변경한다. 타깃 오브젝트를 생성하기가 복잡하거나 당장 필요하지 않은 경우에는 꼭 필요한 시점까지 오브젝트를 생성하지 않는 편이 좋다. 그런데 타깃 오브젝트에 대한 레퍼런스가 미리 필요할 수 있다. 이럴 때 프록시 패턴을 적용하면 된다. 클라이언트에게 타깃에 대한 레퍼런스를 넘겨야 하는데, 실제 타깃 오브젝트 대신 프록시를 넘겨준다. 그리고 프.. 2021. 4. 25. [DB] 트랜잭션 격리 수준(Transaction Isolation Level) 개념 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정한다. 데이터베이스는 ACID 특징과 같이 트랜잭션이 독립적인 수행을 하도록 Locking을 통해, 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하도록 막는 것이 필요하다. 하지만 무조건 Locking으로 동시에 수행되는 수많은 트랜잭션들을 순서대로 처리하는 방식으로 구현하게 되면 데이터베이스의 성능은 떨어지게 된다. 하지만, 성능을 높이기 위해 Locking의 범위를 줄인다면, 잘못된 값이 처리될 문제가 발생할 수 있다. 따라서 최대한 효율적인 Lock.. 2021. 4. 23. [DB] 트랜잭션(Transaction) 개념 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산을 의미한다. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다. 상태변화 : SQL질의어(SELECT | INSERT | UPDATE | DELETE)를 통해 DB에 접근하여 데이터베이스 상태가 변화하는 것 작업 단위 : 일련의 연산(SQL 명령문 집합). 사람이 정하는 기준(하나의 논리적 기능을 수행하기 위한)에 따라 정의함 하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 많은 이점을 가져다.. 2021. 4. 23. [Spring] AOP 개념 AOP(Aspect Oriented Programming) 의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 모듈화를 통해 핵심적인 기능에서 부가적인 기능을 분리한다. 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈 형태로 만들어서 설계하고 개발하는 방법 핵심기능에서 부가기능을 분리해서 Aspect형태로 모듈화하는 것 핵심기능 : 업무 로직을 포함하는 기능을 핵심기능(Core Concerns) 부가기능 : 핵심기능을 도와주는 부가적인 기능(로깅, 보안 등)을 부가기능(Cross-c.. 2021. 4. 18. [Web] param vs query vs body 개념 Request 객체는 API를 컨트롤하기 위한 메소드로 아래 세가지를 담고 있다. param query body req.param 주소에 포함된 변수를 담는다. 예를 들어 https://naver.com/post/12345 라는 주소가 있다면 12345를 담는다. 서버에서 Path Variable 로 칭한다. req.query 주소 바깥, ? 이후의 변수를 담는다. 예를 들어 https://naver.com/post?post_id=12345 일 경우 Node.js를 담는다. &로 연결하여 여러 개의 데이터를 넘길 수 있다. https://naver.com/post?post_id=1235&key=value 서버에서 Query parameter 로 칭한다. req.body XML, JSON, Multi.. 2021. 4. 18. [DB] 캐시, Redis 캐시란? 한번 읽은(처리한) 데이터를 임시로 저장하고 필요에 따라 전송,갱신,삭제하는 기술로 보통은 데이터의 보관장소로 서버의 메모리를 사용하는 경우가 많다. 그렇기 때문에 디스크에서 정보를 얻어오는 것보다 훨씬 빠른 I/O성능을 얻을 수 있으나 서버가 다운되거나 재부팅되는 경우 사라지는 성격의 휘발성을 가지고 있어 영속적으로 보관할 수 없는, 말 그대로 임시적으로 보관하고 빠르게 그 정보에 접근하기 위한 용도로 사용해야 한다. 물론 정보의 성격에 따라 별도의 디스크백업 및 TTL등의 설정으로 영구보관이나 오랜기간 유지가 가능하다. 단 이런 설정들이 꼭 필요하다면 Cache를 적용하는게 맞는지 한 번도 타당성을 검토해 보는게 좋겠다. 목적 서버간 불필요한 트래픽을 줄일 수 있고, 그로 인해 웹어플리케이션.. 2021. 4. 18. 이전 1 ··· 3 4 5 6 7 8 9 ··· 27 다음