최근 업로드
-
JAVA
[JAVA] Serialization
자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 가지기 때문에 Reference Type의 데이터들은 인스턴스를 전달할 수 없다. 이 문제를 해결하기 위해서는 주소값이 아닌 Byte형태로 직렬화된 객체 데이터를 전달해야한다. 직렬화 된 데이터들은 모두 Primitive Type이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 형태로 만들어주는 것이 직렬화(Serialization) 이다. 조건 자바에서는 간단히 java.io.Serializable 인터페이스 구현으로 직렬화 / 역직렬화가 ..
-
OpenVidu
[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가 존재한다면 모두 삭제..
-
SSL
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..
-
BackEnd
[Spring Security] 인가
인가 (Authorize) 애플리케이션에서 사용자가 접근할 수 있는 리소스를 제어하기 위한 기능. 각 리소스에 대한 접근 정책을 미리 정의, 접근 시 정책 확인해서 허용 여부 결정. 웹 리소스, 자바 메서드, 도메인 객체에 대한 접근 정책 정의 가능. Architecture 동작 과정 1. 클라이언트가 임의의 리소스에 접근하면 FilterSecurityInterceptor 클래스가 가로챈다. 2. FilterSecurityInterceptor 클래스는 AccessDecisionManager인터페이스의 메서드를 호출하고 리소스에 대한 접근 가능 여부를 확인하게 된다. 3. 기본적으로 AccessDecisionManager는 AffirmativeBased클래스에 implements 하여 구현한다. Affir..
-
BackEnd
[Spring Security] Spring Security와 인증 과정
Spring Security는 Spring 기반 어플리케이션의 보인을 담당하는 Spring 하위 프레임 워크. 인증(Authenticate)과 인가(Authorize)를 담당한다. 인증(Authenticate) : 보호된 리소스에 접근한 대상이 누구인지 확인한다. 즉, 작업을 수행해도 되는 주체인지 확인 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인한다. 즉, 어떤 것을 할 수 있는지 확인 스프링 시큐리티에서는 주로 servlet filter들의 filter chain으로 구성된 위임 모델을 사용한다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안 관련 로직을 작성하지 않아도 되어 편리해진다. 인증 -> 인가 Spring ..
-
BaekJoon
[백준] 21939번 - 문제 추천 시스템 Version1 (java)
Baekjoon 21939 - 문제 추천 시스템 Ver.1 (클릭 시 이동) 문제 tony9402는 최근 깃헙에 코딩테스트 대비 문제를 직접 뽑아서 "문제 번호, 난이도"로 정리해놨다. 깃헙을 이용하여 공부하시는 분들을 위해 새로운 기능을 추가해보려고 한다. 만들려고 하는 명령어는 총 3가지가 있다. 아래 표는 각 명령어에 대한 설명이다. recommend x x가 1인 경우 추천 문제 리스트에서 가장 어려운 문제의 번호를 출력한다.만약 가장 어려운 문제가 여러 개라면 문제 번호가 큰 것으로 출력한다. x가 -1인 경우 추천 문제 리스트에서 가장 쉬운 문제의 번호를 출력한다.만약 가장 쉬운 문제가 여러 개라면 문제 번호가 작은 것으로 출력한다. add P L 추천 문제 리스트에 난이도가 L인 문제 번호 ..
-
BaekJoon
[백준] 10282 - 해킹 (java)
Baekjoon 10282 - 해킹 (클릭 시 이동) 문제 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 그로부터 일정 시간 뒤 a도 감염되고 만다. 이때 b가 a를 의존하지 않는다면, a가 감염되더라도 b는 안전하다. 최흉최악의 해커 yum3이 해킹한 컴퓨터 번호와 각 의존성이 주어질 때, 해킹당한 컴퓨터까지 포함하여 총 몇 대의 컴퓨터가 감염되며 그에 걸리는 시간이 얼마인지 구하는 프로그램을 작성하시오. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 8400 3321 2347 38.425% 입력 첫째 줄에 테스트 케이스의 개수가..
-
BaekJoon
[백준] 22252번 - 정보상인호석 (java)
Baekjoon 22252 - 정보 상인 호석 (클릭 시 이동) 문제 암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 "정보 상인"이 되고 싶다. 정보 상인은 정보를 사고파는 사람을 의미한다. 호석이는 아직 상인계의 새싹이기 때문에, 초기 투자를 통해서 여러 명의 "정보 고릴라"들로부터 정보를 모으려고 한다. 정보 고릴라란 여기저기서 정보를 수집하는 사람들을 의미한다. 일단 정보를 긁어모으기 위해서 호석이는 여러 정보 고릴라들에게 정보를 구매하려고 한다. 암흑가의 연락망은 빼곡하기 때문에 누가 어떤 정보를 얻었는지에 대한 찌라시들이 수시로 퍼진다. 찌라시로 알 수 있는 것은, 어떤 이름을 가진 고릴라가 C_1,..
-
BaekJoon
[백준] 14221번 - 편의점 (java)
Baekjoon 14221 - 편의점 문제 영선이는 이사할 일이 생겨 집을 알아보고 있다. 영선이는 혼자 살기 때문에, 편의점에서 대충 때울 때가 많아, 집을 고르는 기준을 편의점과의 거리가 가장 가까운 곳으로 하려한다. 영선이가 이사할 도시는 정점과 간선으로 표현할 수 있는데, 이사가려 하는 집의 후보들과 편의점은 정점들 위에 있다. 영선이는 캠프 강사 준비로 바쁘므로, 대신하여 집을 골라주자. 만약 거리가 같은 지점이 여러 개라면 정점 번호가 가장 낮은 곳으로 골라주자. 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 512 MB 402 85 54 22.222% 입력 처음 줄에는 정점의 개수 n, 간선의 개수 m이 주어진다.(2 ≤ n ≤ 5,000, 1 ≤ m ≤ 100,000) 다음..
-
BaekJoon
[백준] 11967번 - 불켜기(java)
Baekjoon 11967 - 불켜기 (클릭 시 이동) 문제 농부 존은 최근에 N × N개의 방이 있는 거대한 헛간을 새로 지었다. 각 방은 (1, 1)부터 (N,N)까지 번호가 매겨져있다(2 ≤ N ≤ 100). 어둠을 무서워하는 암소 베시는 최대한 많은 방에 불을 밝히고 싶어한다. 베시는 유일하게 불이 켜져있는 방인 (1, 1)방에서 출발한다. 어떤 방에는 다른 방의 불을 끄고 켤 수 있는 스위치가 달려있다. 예를 들어, (1, 1)방에 있는 스위치로 (1, 2)방의 불을 끄고 켤 수 있다. 베시는 불이 켜져있는 방으로만 들어갈 수 있고, 각 방에서는 상하좌우에 인접한 방으로 움직일 수 있다. 베시가 불을 켤 수 있는 방의 최대 개수를 구하시오. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율..