목록분류 전체보기 (51)
GiYeong
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/r4BTT/btrLEvuxeod/pZ9ssgH6MNzYrONU7oJAn1/img.png)
HDFS Hadoop의 저장소 (하둡의 계산 -> MapReduce) Hadoop Network에 연결된 기기에 데이터를 저장하는 분산형 파일 시스템이다. 여러 머신에 대용량의 파일들을 나눠서 저장(분산처리)한다. 이를 통해 한 서버에 오류가 발생하더라도 다른 서버에서 복구할 수 있다. (데이터 안정성) 분산형 파일 시스템 분산처리 시스템 여러 대의 머신이 데이터를 처리 일부 머신에 오류가 발생하더라도, 다른 머신에서 데이터를 접근할 수 있다. 일부 머신에 오류가 발생할 경우, 시스템이 동작하지 않음 인터페이스가 복잡하여 프로그래밍이 힘듦 Hadoop Application은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS Client를 이용하며, Client는 API의 형태로 제공된다. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/UkKeP/btrLDGoPOtN/9FVwyaFx6AWmiaHpxQ54nK/img.png)
팩토리 패턴 객체 생성 처리를 서브 클래스로 분리하여 처리하는 패턴 (캡슐화) 객체를 생성하는 Interface는 미리 정의하고, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 결정 즉, 여러 개의 서브 클래스를 가진 슈퍼 클래스가 있을 때, Input에 따라 하나의 자식 클래스의 인스턴스를 반환 사용 이유 어떤 클래스가 자신이 생성해야하는 객체의 클래스를 예측할 수 없을 때 생성할 객체를 기술하는 책임을 자신의 서브 클래스가 지정했으면 할 때 객체 생성의 책임을 서브 클래스에 위임시키고, 서브 클래스에 대한 정보를 은직하고자 할 때 장점 클라이언트 코드에서 서브 클래스의 인스턴스화를 제거함으로써 서로 간의 종속성을 낮추고, 결합도를 느슨하게 하며, 확장을 용이하게 함 클라이언트와 구현 객체들 사이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmqNHt/btrLAzw7bTk/oX6R0nK49k9esuziqyFj30/img.png)
빌더 패턴 생성과 관련된 디자인 패턴으로, 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공 생성해야하는 객체가 Optional한 속성을 많이 가질 때 효율적 사용 이유 많은 Optional한 멤버 변수 또는 파라미터, 지속성 없는 상태 값들에 대해 처리해야하는 문제들을 해결 예를 들어 팩토리 패턴이나 추상 팩토리 패턴에서 생성해야하는 클래스에 대한 속성 값이 많을 때 아래와 같은 이슈가 발생한다. 클라이언트 프로그램에서 팩토리 클래스로 많은 파라미터를 넘겨줄 때, 타입, 순서 등에 대한 관리가 어려워져 에러가 발생할 수 있다. 경우에 따라 필요없는 파라미터들에 대해 팩토리 클래스에 일일히 null 값을 넘겨줘야 한다. 생성해야하는 sub..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zWcSH/btrLEFPIYhB/uTuuM2IjZYHDymkhPDMcYk/img.png)
싱글톤 패턴 객체의 인스턴스가 오직 하나만 생성되는 것을 보장하고, 어디서든 동일한 인스턴스에 접근할 수 있도록 하는 디자인 패턴 디자인 패턴 객체 지향 프로그래밍 설계 중, 자주 발생하는 문제를 해결하기 위해 사용되는 패턴 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // 생성자를 외부에서 호출못하도록 private 으로 지정 } public static Singleton getInstance() { return instance; } public void say() { System.out.println("hi, there"); } } 사용 이유 메모리 낭비 방지 : 최초..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cBVFRt/btrLEcOwbzP/blFXZNjwmQFDcC6Gengmkk/img.png)
@RestController = @Controller + @ResponseBody @Controller Spring MVC의 컨트롤러로서 Model 객체를 만들어 데이터를 담고 View를 반환한다. 또한 @ResponseBody를 사용하여 HTTP Response Body에 데이터를 담아 요청을 완료한다. @Controller로 View를 반환하는 과정 클라이언트가 URI 형식으로 웹 서비스에 요청을 보냄 DispatcherServlet이 요청을 위임할 HandlerMapping을 찾음 HandlerMapping을 통해 요청을 Controller에 위임 Controller는 요청을 처리하여 ViewName을 반환 DispatcherServlet이 ViewResolver를 통해 ViewName에 해당하는 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coqFQu/btrK4Cz2h5R/6zsqp2QMcXrHm1XaJ2pn60/img.png)
N + 1 문제 연관 관계가 설정되어있는 엔티티를 조회할 때, 조회된 데이터의 개수(N개)만큼 연관 관계의 조회 쿼리가 추가적으로 발생하여 데이터를 읽어오는 현상 원인 JPA가 JPQL을 분석하여 SQL을 생성할 때, 글로벌 Fetch 전략을 참고하지 않고 JPQL 자체만을 사용하기 때문에 Fetch 전략이 즉시 로딩(Eager)일 경우 findall() 이 발생하면 [select * from A] 과 같은 JPQL 구문 및 이를 분석하여 생성된 SQL이 실행됨 DB의 결과를 받아 엔티티(A)의 인스턴스들이 생성됨 생성된 엔티티와 연관되어있는 다른 엔티티(B)도 로딩됨 영속성 컨텍스트에 연관되어있는 다른 엔티티(B)가 있는지 확인 영속성 컨텍스트에 없다면 2단계에서 생성된 인스턴스들의 개수와 맞게 [se..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cIys6S/btrK0GpS43c/cTmCNVtFyVWf9nYYdudpLK/img.png)
영속성 컨텍스트 엔티티를 영구적으로 저장하는 환경으로서, App과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저가 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 1개 생성된다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근하고 관리할 수 있다. 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed) : 영속성 컨텍스트에 저장된 상태 준영속(detached) : 영속성 컨텍스트에 저장되어있다가 분리된 상태 삭제(removed) : 삭제된 상태 영속성 컨텍스트 장점 1차 캐시를 통한 성능 향상 : 엔티티 조회시 영속성 컨텍..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/djr8dO/btrK2ni27ni/gliJDtb9zGSZ53rcqEEeu1/img.png)
Redis(Remote Dictionary Storage) NoSQL로서 Key-Value 타입의 저장소이다. 또한 인메모리 DB로써 모든 데이터를 메모리에 저장하고 조회하는 DB이다. 다른 인메모리 DB와의 차이점은 다양한 자료구조를 가지고 있다는 점이다. Redis의 특징 Snapshots : 특정 시점에 데이터를 디스크에 저장하여 파일 보관/복구 가능 복제 : Master-Slave 구조로, 여러 복제본을 만들 수 있다. (DB 읽기 확장을 통해 높은 가용성, 클러스터 제공) 읽기 성능 증대를 위한 서버 측 복제를 지원 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원 다양한 서비스에서 사용되며 검증된 기술 문자열, 리스트, 해시, 셋, 정렬된 셋 등의 다양한 자료구조를 지원함으로서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/p12oo/btrJn6hv7FV/UsMZ3UAXgDVNFCTk427Eg0/img.png)
XSS(CSS, Cross Site Scripting) 웹사이트의 관리자가 아닌 공격자가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점으로 발생되는 공격이다. 공격자가 상대방의 브라우저에 스크립트가 실행되도록 하여 사용자의 세션을 가로채거나, 웹사이트를 변조, 악의적 컨텐츠 삽입, 피싱 공격을 진행하는 것이다. 웹 어플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 발생한다. (게시판에 악성 스크립트가 담긴 글을 올리는 등) 대응방안 모든 입력값에 대한 필터링을 수행(필터 제작) BBCode 사용 쿠키의 보안 옵션 사용 콘텐츠 보안 정책(CSP) 사용 : 스크립트 실행에 대한 정책을 설정하여 출처가 가지 서버인 스크립트만 실행되도록 허용 CSRF(Cross Site Requ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EEftC/btrJk3NmOgT/1PsR8wGmarDQSmAghZMIY1/img.png)
SQL Injection 악의적인 사용자가 보안상의 취약점을 이용하여 임의의 SQL 문을 데이터베이스에 주입 및 실행하여 비정상적인 동작을 하도록 조작하는 행위이다. SQL Injection 공격 기법 Error based SQL Injection : 논리적 에러를 이용 UNION based SQL Injection : 정상적인 쿼리 문에 하나의 추가 쿼리를 합입하여 원하는 정보를 획득 Blind SQL Injection(1) : 특정한 값이나 데이터를 전달받지 않고, 쿼리를 통해 나온 참/거짓 정보를 통해 정보를 취득 Blind SQL Injection(2) : 쿼리 결과를 특정 시간만큼 지연시킴 Stored Procedure SQL Injection : Stored Procedure(저장 프로시저)를..