전체보기(194)
-
AOP
1. AOP란 프로그래밍을 하다 보면, 공통적인 기능이 많아집니다. 이러한 공통기능을 모듈에 적용하기 위한 방법으로 상속을 이용할 수 있습니다. 하지만 JAVA에서는 다중 상속이 불가능합니다. 그리고 이러한 모듈을 계속 상속받아 공통 기능을 부여하기에는 한계가 있을 뿐더러 보기에도 불편하고 효율성도 떨어집니다. 이를 해결하기 위해 나타난 AOP는 핵심 기능과 공통 기능을 분리해, 공통 기능을 필요로 하는 핵심 기능들에 적용하는 방식입니다. 아래 그림과 같이, 붉은 상자에 있는 공통 부분들을 분리해내는 것입니다. 2. AOP의 용어 Aspect: 공통 기능의 모듈 Advice: Aspect를 구현한 객체 JoinPoint: Advice를 적용해야 하는 부분(ex: 필드, 메소드 - spring에서는 메소드..
2020.04.18 -
@Transactional
1. 트랜잭션의 성질 원자성 한 트랜잭션 내에서 실행한 작업들은 하나로 간주합니다. 일관성 트랜잭션은 일관성 있는 데이터베이스 상태를 유지합니다. 격리성 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리합니다. 지속성 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 합니다. 2. 스프링에서 트랜잭션 처리 방법 스프링은 트랜잭션 처리를 지원합니다. 일반적으로 @Transactional을 선언하여 사용하는 선언적 트랜잭션을 사용합니다. 클래스, 메소드 위에 @Transactional이 추가되면, 이 클래스에 트랜잭션 기능이 적용됩니다. 이 객체는 @Transactional이 포함된 메소드가 호출 될 경우, 구현된 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, ..
2020.04.17 -
NDC와 MDC
1. NDC란 요즘 사용되는 웹 어플리케이션은 멀티 스레드로 동작합니다. 서블릿은 어떤 클라이언트에 호출되더라도 같은 로그 기록을 남기는데, 이렇게 할 경우에 오류가 발생했을 때 어떤 클라이언트를 담당하는 스레드에서 오류가 발생했는지 알기 힘듭니다. 이를 해결하기 위해 로깅 출력에 클라이언트에 대한 특징적인 정보를 같이 출력하는 방법을 사용합니다. NDC는 각 클라이언트에 대한 특징 정보를 지정하기 위한 클래스입니다. NDC 클래스의 메소드 // diagnostic을 출력할 때 사용 public static String get(); // NDC에 있는 최상위에 있는 콘텍스트를 제거 public static String pop(); // 현재 쓰레드를 위한 diagnostic 콘텍스트 추가 public s..
2020.04.11 -
.map()과 .flatMap()의 차이
1. .map() .map()은 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 변환하는 중간 연산을 담당합니다. 객체에서 원하는 원소를 추출해는 역할을 한다고 말할 수 있습니다. 아래의 예시를 살펴보겠습니다. Person.java class Person { int age; String name; ... } MapTest.java List sample = Arrays.asList( new Person(20, "park"); new Person(35, "kyung"); new Person(67, "seok"); new Person(10, "test man"); new Person(45, "test woman"); ); //List -> Stream -> map -> Stream Stream..
2020.04.10 -
QueryString과 Path Variable은 각각 언제 사용하는가
1. Query String이란 Query String이란 서버에게 무엇이 필요한지, 혹은 클라이언트에게 무엇이 필요한지 묻는 문자열을 의미합니다. Query String은 아래와 같은 형태로 구성됩니다. # id가 444인 게시글을 가져옵니다. /board?id=444 위의 예시에 나타나듯이 주소 뒤에 ‘?’를 붙여서 표현합니다. ‘key=value’ 형태로 키와 값을 작성하고 여러 개를 보내기 위해 ‘&’를 붙여줍니다. 2. Path Variable이란 Path Variable이란 Query String과 같이 데이터를 넘기는 방법 중의 하나로 경로를 변수처럼 사용하는 것을 의미합니다. Path Variable은 아래와 같은 형태로 구성됩니다. # id가 444인 게시글을 가져옵니다. /board/4..
2020.04.09 -
XSS
1. XSS란 XSS란 웹 어플리케이션에서 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우, 공격자가 입력이 가능한 폼에 악의적인 스크립트를 삽입합니다. 그리고 해당 스크립트가 희생자 측에서 동작하도록 하여 악의적인 행위를 수행하는 취약점입니다. 공격자는 취약점을 이용해 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹 페이지 변조 등의 공격을 수행합니다. 일반적으로 자바 스크립트를 사용하여 공격하는 경우가 많습니다. 2. XSS 공격 종류 Stored XSS 공격자가 취약한 웹 서버에 악성 스크립트를 저장하면 희생자가 해당 자료를 요청할 때, 해당 악성 스크립트가 삽입된 응답 페이지가 전달되어 클라이언트 측에서 동작하는 방식입니다. Reflected XSS 외부에 있는 악성 스크립트..
2020.04.07