본문 바로가기

Study

(23)
[JAVA] Serialization 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 가지기 때문에 Reference Type의 데이터들은 인스턴스를 전달할 수 없다. 이 문제를 해결하기 위해서는 주소값이 아닌 Byte형태로 직렬화된 객체 데이터를 전달해야한다. 직렬화 된 데이터들은 모두 Primitive Type이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 형태로 만들어주는 것이 직렬화(Serialization) 이다. 조건 자바에서는 간단히 java.io.Serializable 인터페이스 구현으로 직렬화 / 역직렬화가 ..
[OpenVidu]EC2 + React + Openvidu 적용기 Openvidu를 이용해 webRTC를 구현하기 위해선 일단 websocket 연결을 위해 Frontend에 https가 적용되어야 한다. Nginx + Springboot에 Https 적용하기(nginx, springboot, gradle) Ubuntu에서 Let's Encrypt(Certbot)으로 SSL인증서 발급하기 ubuntu 20.04 LTS 기존 Certbot 제거 $ sudo apt remove certbot Certbot 설치 $ sudo snap install --classic certbot snap은 ubuntu 16.04.4, 18.04,.. skdltm117.tistory.com ubuntu 20.04 LTS 기존 openvidu 관련 docker image가 존재한다면 모두 삭제..
Nginx + Springboot에 Https 적용하기(nginx, springboot, gradle) Ubuntu에서 Let's Encrypt(Certbot)으로 SSL인증서 발급하기 ubuntu 20.04 LTS 기존 Certbot 제거 $ sudo apt remove certbotCertbot 설치 $ sudo snap install --classic certbotsnap은 ubuntu 16.04.4, 18.04, 20.04 버전을 사용한다면 기본적으로 설치되어 있다. Frontend SSL 인증서 발급 후 웹서버 설정 업데이트 nginx가 설치되어 있다고 가정한다. $ sudo certbot --nginxnginx 설정 파일 (/etc/nginx/sites-available/default) server { listen 80 default_server; listen [::]:80 default..
[Spring Security] 인가 인가 (Authorize) 애플리케이션에서 사용자가 접근할 수 있는 리소스를 제어하기 위한 기능. 각 리소스에 대한 접근 정책을 미리 정의, 접근 시 정책 확인해서 허용 여부 결정. 웹 리소스, 자바 메서드, 도메인 객체에 대한 접근 정책 정의 가능. Architecture 동작 과정 1. 클라이언트가 임의의 리소스에 접근하면 FilterSecurityInterceptor 클래스가 가로챈다. 2. FilterSecurityInterceptor 클래스는 AccessDecisionManager인터페이스의 메서드를 호출하고 리소스에 대한 접근 가능 여부를 확인하게 된다. 3. 기본적으로 AccessDecisionManager는 AffirmativeBased클래스에 implements 하여 구현한다. Affir..
[Spring Security] Spring Security와 인증 과정 Spring Security는 Spring 기반 어플리케이션의 보인을 담당하는 Spring 하위 프레임 워크. 인증(Authenticate)과 인가(Authorize)를 담당한다. 인증(Authenticate) : 보호된 리소스에 접근한 대상이 누구인지 확인한다. 즉, 작업을 수행해도 되는 주체인지 확인 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인한다. 즉, 어떤 것을 할 수 있는지 확인 스프링 시큐리티에서는 주로 servlet filter들의 filter chain으로 구성된 위임 모델을 사용한다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안 관련 로직을 작성하지 않아도 되어 편리해진다. 인증 -> 인가 Spring ..
[Pattern] Factory Method Pattern Factory Method Pattern 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 함. 즉, 객체를 만들어내느 부분을 서브 클래스에 위임하는 패턴이다. 부모 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 구조 아래처럼 로봇 객체를 만드는 추상클래스가 있다고 가정했을 때, Robot (추상 클래스) - SuperRobot - PowerRobot RobotFactory (추상 클래스) - SuperRobotFactory ModifiedSuperRobotFactory Robot 각각의 클래스는 아래와 같은 구조라고 하면 public abstract class Robot{ public String getName..
[Pattern] Template Method Pattern Template Method Pattern 로직을 단계 별로 나눠야 하는 상황에서 적용한다. 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있을 경우 더 효율적이다. 즉, 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. 특정 단계들을 다시 정의할 수 있게 해 준다. 조건 클래스는 abstract로 만든다. 단계를 진행하는 메소드는 수정이 불가능하도록 final 키워드를 추가한다. 각 단계들은 외부는 막고, 자식들만 활용할 수 있도록 protected로 선언한다. 예를 들어 A,B,C의 로직이 순서대로 실행되어야 하는 단계로 이루어져 있고 이 단계가 항상 유지되며 순서가 바뀔 일이 없다고 가정해 보았을 때, A,와 C는 변할 일이 없고 설계에 따라 B만 변한다고 해보면 아래와 같이 구..
[Pattern] Singleton Pattern Singleton Pattern 어플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴. 즉, 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것. 생성자가 여러번 호출되더라도 실제로 생성되는 객체는 하나이며 최초로 생성된 이후 호출된 생성자는 이미 생성한 객체를 반환한다. java에서는 생성자를 private로 지정하여 다른곳에서 생성하지 못하도록 만들고, getInstance() 메서드를 통해 받아서 사용하도록 구현한다. 왜 쓸까요? 객체를 생성할 때마다 메모리 영역을 할당받아 사용해야하는데 한번의 new를 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있다. 싱글톤으로 구현한 인스턴스는 전역 이므로 다..