반응형

java 11

[Java-Basic] JVM 메모리구조 및 개념

JVM(Java Virtual Machine) 이란? 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체 CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다. JVM은 크게 ClassLoader / Execution Engine / Garbage Collector / Runtime Data Area 로 나뉜다. 각각의 아이들이 무엇을 의미하는지 알아보자.! JVM의 구성 Class Loader Java 소스파일 (.java)를 .class 파일(바이트코드)로 컴파일 한다. 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역..

[Java-Algorithm] BFS 넓이 우선탐색 알고리즘이란? 인접리스트

BFS 정의 BFS는 현재 위치에 인접한 모든 위치의 노드를 방문하고, 그 이웃 노드들의 또 다른 이웃 노드들을 방문하는 것은 그 다음에 진행하는 것을 의미. 큐를 이용해서 순환적 형태로 구현하는 것으로 공부해보려고 한다. BFS 넓이 우선 탐색 (Breadth Fisrt Search) "근처부터 확인하자"와 같이 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 알고리즘이다. 시작 정점을 지나고 나면 깊이가 1인 모든 정점을 방문하고, 그다음에는 깊이가 2인 모든 정점을 방문한다. 2..3..4... 이런식으로 나중에는 더 이상 방문할 곳이 없을 때 탐색을 종료 * 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 * 사용하는 경우:..

[Vert.x] Vert.x란? Vert.x 개념 잡기

Vert.x의 개념을 잡아보는 시간..! 정리 하면서 다시한번 개념을 잡아보자...! Vert.x란? Node.js와 같은 비동기 서버 프레임워크이다. 먼저 Tomcat 설명을 통해 이해를 도와보자..! Tomcat의 경우 Request가 들어오면 Request Queue에 적재되고, queue에 쌓인 요청들은 Thread pool에 있는 Thread에게 하나씩 하나씩 할당되어 요청을 처리하는 방식이다. 요청을 마치게되면, request가 들어온 Connection으로 요청완료된 response를 보내고, 해당 작업을 한 Thread는 Thread Pool에 다시 들어가게된다. 이 구조에서, Tomcat이 동시에 처리할수 있는 Connection의 수는 보통 Thread pool의 Thread 수만큼이라..

[Java-Basic] Method.Invoke()란? 가벼운 사용방법(메서드실행)

메서드명만 받아서 정의되어있는 메서드중 내가 원하는 메서드만 실행시키고 싶을때 사용한다. (보통 그냥 메서드를 실행시키면 되지만, Client단에서 메서드를 각기 다른것으로 호출하는데, 같은 Service를 탈때 사용했다.) //내가 정의해둔 Dao에서 메서드들을 가져온다. Method[] methodList = testDao.getClass().getMethods(); //가져온 메서드중에서 메서드명이 같은것을 실행시킨다. for(Method m : methodList){ if(m.getName().equals(전달받은이름)){ 결과 = m.invoke(testDao,전달파라미터); } } 자 여기서 우리는 해당 Service를 공통으로 사용하는데, 클라이언트는 각기 다른상황이라고 생각해보자. 원래 였..

[Java-Algorithm] 이진탐색 알고리즘

알고리즘에 대해서 너무 모르는것 같아 하나씩 시간 날때마다 공부해 보려고 한다. 이진탐색 알고리즘이란 정렬되어 있는 자료들의 집합에서 특정 자료를 찾고자 할 때 많이 사용 이진 탐색은 '퀵정렬'과 유사하게 '분할 후 정복(divide and conquer)'의 전략을 사용 실행시간은 log 특히 문제의 크기를 정확히 양분하는 경우에는 최악의 경우 logN의 성능을 보장한다. 이진 탐색의 탐색 시간은 'T = K * logN'으로 O(logN)이다. 선형 탐색의 시간보다 상당히 빠르지만 이진 탐색은 반드시 정렬이 되어있어야 한다. 정렬하는 비용이 든다는 단점이 있다. 다음과 같은 상황에서 이진 탐색은 효율적인 성능을 제공한다. 1) 새로운 자료가 추가되었어도 모든 자료가 재정렬이 일어나지 않는 경우 -> ..

[WebSocket] Websocket 파라미터 전달하기(Custom Header관련)

우선 본인은 Websocket Interceptor를 별도로 사용하여, socket 서버 접근시 인증을 하고싶었다. 추가로 Interceptor에서 구분자로 사용할 값을 전달하고 싶어서 Request Header에 Custom Header를 만들고싶었다. 하지만 Websocket은 Protocol을 별도로 추가하는것 외에는 방법이 없었다. 이에 url에 파라미터를 이용하여 접근하는 방식을 채택하여 사용하였다. var manageSocket = new WebSocket(_MULTILANG.wsUri+"?test=test&sid="+getCookie("sid")); manageSocket.onopen = function(e){ defaultNotice(_MULTILANG.clientJoin, "blue", ..

[Redis] Spring Framework에서 Redis 사용하기 jedis

우선 현재 프로젝트에서 Redis를 사용하여, 사용자 인증 토큰, 캐싱, 기기 캐싱 및 여러 데몬끼리의 Push를 주고 받는 기능을 구현하였다. 본인이 프로젝트에 투입되기 전부터 Jedis Client를 사용하고 있었기때문에, 아래와 같이 정리해 두려고한다. 하지만, java Redis client에 Lettuce라는 아이가 있는데, 이아이의 성능이 훨씬 우월하다고 한다..!(직접 테스트는 안해봤다..) 참조 : https://jojoldu.tistory.com/418 Jedis 보다 Lettuce 를 쓰자 Java의 Redis Client는 크게 2가지가 있습니다. Jedis Lettuce 둘 모두 몇천개의 Star를 가질만큼 유명한 오픈소스입니다. 이번 시간에는 둘 중 어떤것을 사용해야할지에 대해 성..

[Spring-JSP] AES-256 암호화

AES256을 사용하여 DB에 등록될 사용자 정보를 암/복호화 하는 방법이다. 우리는 보통 사용자의 중요정보(개인정보)를 DataBase에 관리를 하게된다. 이때 암호화를 하지 않은 상태로 관리를 하게 된다면, DataBase 정보 탈취의 우려가 있을 가능성이 있다. 탈취자와 보안을 위해 한번이라도 더 귀찮게 만들어주자. 1). AES256SecureUtil.java 모듈화해서 사용할 수 있도록 만들어두고 사용하자. public class AES256SecureUtil { private static String key = "원하는비밀Key^$%^"; private String iv; private Key keySpec; /** * @desc 초기화 생성자 함수 전역에 설정된 key 값으로 필요 변수 값들..

[Spring-JSP] RSA 암호화

인터넷 서비스에서는 대칭키와 공개키를 이용한 암호화를 다양하게 활용하고 있는데 대표적으로 TLS(Transport Layer Security)라고 불리는 암호 규약이 대표적이며 쉽게 예를 들면 웹 브라우징 시에 사용되는 보안 계층을 말한다. TLS는 기존의 SSL(Secure Sockets Layer)가 표준화되면서 바뀐 이름이며 우리가 인터넷에서 익숙하게 접하는 HTTPS 프로토콜에서 이를 활용하고 있다. 구분목적 Public Key 누구에게나 공개될 수 있음 / 메세지를 보내는 발신자는 공개키를 통해 정보를 암호화 Private Key 수신자는 비밀키를 암호화된 메세지를 복호화 하는데 사용/ 외부에 노출되지 않도록 안전하게 보관해야 함 순서 1. Client 단에서 RSA를 비동기 호출하여 Publi..

[Spring-JSP] SHA-256 / SHA-512 암호화

기본적으로 SHA는 단방향 암호화 알고리즘이다. 보통 비밀번호와 같이 중요정보를 hash화 하여 암호화를 진행한다. 비밀번호는 복호화하여 비교할 필요가 없기때문에... 그래서 DataBase에 암호화된 비밀번호와 사용자가 입력한 비밀번호를 SHA로 암호화 하여 비교하며 사용할 수 있다. 사용법은 매우 간단하다. SHA암호화의 단점이라고는...음... Rainbow Table(해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표)를 사용하여 SHA 알고리즘의 해독이 가능할 수 있다는 점... 다만 엄청난 시간이 필요하다고 한다. 그렇지만 조금더 안전을 기하기위하여 본인은 RSA 암호화 후 SHA암호화를 통해 비밀번호 암호화를 진행하였다. SHA암호화는 기본적으로 256 / 512 두가지를 제..

반응형