본문 바로가기

Computer Science

(252)
시큐어 코딩(2) 클라이언트-서버 모델을 사용하는 응용프로그램을 작성할 때 사용자 인증 정보와 같은 민감-정보를 클라이언트 측에 저장하면 클라이언트가 공격에 취약할 경우 허가되지 않은 벙법으로 민감-정보가 노출된다. 웹 응용프로그램에서 이 문제에 대한 가장 보편적인 완화책은 쿠키를 클라이언트에게 제공하고 민감-데이터는 서버에 저장하는 것이다. 쿠키는 웹 서버에 의해 생성되고 일정 기간 동안 클라이언트에 저장된다. 클라이언트가 서버에 다시 연결할 때 클라이언트가 서버에게 자신을 식별하도록 하는 쿠키를 제공하면 서버가 민감-정보를 제공하는 것이다. 쿠키는 XSS공격으로부터 민감-정보를 보호하지 못하는데 XSS공격이나 클라이언트를 직접 공격해서 쿠키를 얻을 수 있는 공격자는 쿠키를 이용하여 서버로부터 민감-정보를 탈취한다. 만..
자바 사큐어코드(1) 자바 시큐어 코딩 chapter1의 안전성부분은 자바 프로그래밍 언어와 런타임 시스템은 안전성을 염두에 두고 설계되었다. 예를 들어 프로그래머가 명시적 포인터를 사용하지 않도록 하며 널 포인터를 참조하면 예외(exception)를 발생시킨다. 이와 유사하게 배열이나 문자열의 범위를 벗어나 엑세스해도 예외가 발생된다. 자바는 타입에 대해 엄격하게 처리하는 언어이다 선술타입과 변환에서와 같이 모든 암묵적 타입 변환에 대해 플랫폼을 독립적으로 잘 정의되어 있다. 자바 가상 머신(JVM:Java Virtual Machine)은 바이트코드가 자바 언어 규격을 준수하면서 수행되도록 보장하기 위해 바이트코드 검증기를 내장하고 있다.(Java SE 7에서는 언어에서 정의한 검사가 적절히 이루어져 우회할 수 없도록 한다..
자바 8과 자바 1.8은 동의어인가 오늘은 늘상 궁금했지만 적극적으로 알아보진 않았던 것에 대해 알아보려고 한다. Android에서 Java 8 버전을 쓰려면 build.gradle 파일에 다음과 같은 configuration을 추가해주어야 하는데, 그렇다면 Java 8 버전이라고 하는 게 맞을까? 버전 1.8이라고 하는 것이 맞을까? compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } 어느 것이 더 정확한 표현일까? Java 8 vs. Java 1.8 현재 사용 중인 버전이기 때문에 8 혹은 1.8이라고 표기했지만, 6과 1.6, 7과 ..
AOP와 트랙잭션 1. AOP(Aspect Oriented Programming)란? AOP는 관점 지향 프로그래밍입니다. AOP는 자바와 같은 객체 지향 프로그래밍(OOP)을 더욱 OOP 답게 사용할 수 있도록 도와주는 역할을 합니다. AOP는 여러 개의 핵심 비즈니스 로직 외에 공통으로 처리되어야 하는 로그 출력, 보안 처리, 예외 처리와 같은 코드를 별도로 분리해서 하나의 단위로 묶는 모듈화의 개념으로 생각할 수 있습니다. AOP에서 관점은 핵심적인 관점과 부가적인 관점으로 나눌 수 있습니다. 핵심적인 관점은 핵심 비즈니스 로직을 의미하고, 부가적인 관점은 앞에서 이야기한 공통으로 처리되어야 하는 코드를 의미합니다. 여러분의 쉬운 이해를 위해 이미지를 첨부하도록 하겠습니다. 객체 지향 프로그래밍 (OOP) 각각의 화..
7. 집계 함수 오라클에는 많은 집계 함수들이 존재한다. EX) SUM(), COUNT(), MIN()..... 집계함수의 작동 원리에 대해서 설명해보자 한다. col1 col2 col3 ======================= 10 20 NULL 15 NULL NULL 50 70 20 해당 테이블이 존재한다고 가정하자. 집계함수는 COUNT(*)을 제외하고는 NULL값은 포함시키지 않는다. 따라서 SUM(COL2)를 한순간 20 + NULL(제외) + 70 = 90이 나오게 된다. 여기서 평균을 구하고 싶으면 SUM(COL2) / COUNT(COL2)를 통해 구하면 된다. 하지만 전체 로우 건수를 기준으로 평균을 구하고 싶다면 SUM(COL2)/COUNT(*)으로 구하면된다. SUM(COL + COL2 + COL3)..
스택이란 Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복..
4. 생성자 주입, 의존성 주입 1. 다양한 의존성 주입 방법 [ 1. 생성자 주입(Constructor Injection) ] 생성자 주입(Constructor Injection)은 생성자를 통해 의존 관계를 주입하는 방법이다. @Service public class UserServiceImpl implements UserService { private UserRepository userRepository; private MemberService memberService; @Autowired public UserServiceImpl(UserRepository userRepository, MemberService memberService) { this.userRepository = userRepository; this.memberSer..
3. ioc란 IoC (Inversion of Control) 제어의 역전이라고 불리운다. 제어권이 역전 되었다는 뜻이다. 예전에는 의존관계의 제어를 개발자가 직접 해주었다. 그러나 제어권이 컨테이너로 넘어갔고 객체의 생성부터 생명주기의 관리까지 객체에 대한 제어권이 바뀐것을 IoC라고 한다. 위와 같은 Repository 객체가 있을때 과거에는 아래와 같이 개발자가 직접 제어했다. 하지만 제어권이 컨테이너로 넘어갔고 객체의 생성과 생명주기의 관리까지 할 수 있기때문에 아래와 같은 방식으로 바뀐다. IoC 컨테이너란 ? 핵심 Interface : BeanFactory Application Component 중앙 저장소 Bean 설정 소스로부터 빈 정의를 읽어들여 빈을 구성하고 제공하는 역할을 한다. Spring IoC..