본문 바로가기

전체 글

(234)
[Spring] ORM과 JPA ORM(Object Relational Mapping) : - 객체지향 패러다임을 관계형 데이터베이스에 보존하는 기술 - '객체지향'의 구조는 '관계형 데이터베이스'와 유사. 1) 관계형 데이터 베이스의 테이블은 컬럼을 정의하고 컬럼에 맞는 데이터 타입을 지정해서 데이터를 보관하는 틀을 만든다. => 클래스 2) 하나의 Row에 데이터를 저장. => 인스턴스 3) 관계(relation) => 참조(reference) - 객체지향을 자동으로 관계형 데이터베이스에 맞게 변환하는 기법을 의미 JPA(Java Persistence API) - ORM을 자바 언어에 맞게 사용하는 '스펙' - 스프링 부트는 JPA의 구현체 중에서 'Hibernate'를 이용
[암호학] 단일치환 암호_ROT13 암호 - 알파벳 문자를 13번 Shift 하여 암/복호화를 수행하는 방식 - Shift Key가 13인 시저암호 - A~Z 문자에 대해 NOPQRTUVWXYZABCDEFGHIJKLM 인 매핑텡이블을 갖는다. public class ROT13Cipher { // ROT13 매핑테이블 private static string ROT = "NOPQRSTUVWXYZABCDERGHIJKLM"; public static string Encrypt(string message) { return Rotate(message); } public static string Decrypt(string cipher) { return Rotate(cipher); } private static string Rotate(string str) ..
[암호학] 단일치환 암호_시저암호 - 치환 암호(Substitution Cipher) : 평문의 문자를 다른 문자로 치환하는 암호 - 단일 치환 암호 : 하나의 문자가 항상 다른 하나의 문자로 매핑 랜덤한 매핑 테이블을 사용하여 치환하는 방식, 일정한 수(Key)를 더해서 암호를 생성하는 덧셈 암호, 일정한 수를 곱해 서 암호를 생성하는 곱셈 암호, 덧셈과 곱셈을 모두 사용하는 암호 등이 있다. - 시저 암호 : 문자를 일정한 간격만큼 이동하여 암호를 생성하는 방식. ex ) A는 3만큼 이동하여 D로 만들고, B를 3만큼 이동하여 E로 만드는 것과 같은 방식 송수신자는 문자를 N만큼 Shift 한다는 것(Shift Key)을 알고 있는 상태에서 메시지를 암,복호화 public class CaesarCipher { private cons..
[C#] 동시성 프로그래밍_Task.WhenAny - 일련의 작업을 입력받고, 입력받은 작업 중 하나를 완료하면, 완료된 작업을 반환 public static string Run1() { StringBuilder sb = new StringBuilder(); for (var i = 0; i
[C#] 동시성 프로그래밍_Task.WhenAll - 모든 작업의 완료를 대기하고 싶을 때 사용 - 다수의 작업을 전달받고 제공된 모든 작업이 완료될 때 까지 스레드를 블로킹 시킨다. public class AsyncTest { public static string Run() { StringBuilder sb = new StringBuilder(); for (var i = 0; i
[알고리즘] 시간복잡도(time complexity) 정리 - 코드의 실행 시간이 어떤 요인으로 결정되는지 나타나는 시간과 입력 데이터의 함수 관계. - 빅오(Big-O) 표기법 알고리즘이 겪을 수 있는 최악의 경우에 걸리는 시간과 입력 간의 상관관계 표기 입력 크기가 N이고, 이에 비례하는 시간이 걸린다면 O(N)으로 표기 * 알고리즘과 시간복잡도 알고리즘 시간 복잡도 이진 탐색 O(logN) 선형 탐색 O(N) 정렬 O(N logN) 조합 O(2^N) 순열 O(N!) 고찰 길이가 N이고 정수로 이루어진 배열에서 M개의 숫자 유무를 확인해야 한다고 가정해보자. N은 최대 10,000, M은 최대 100,000일 때, 배열을 전부 순회한다면 시간복잡도는 O(NM) 이므로 10억 이라는 결과가 나온다. 이진 탐색을 이용한다면 O((N+M)logN)의 시간복잡..
[C#] 동시성 프로그래밍_ CancellationTokenSource를 이용한 타임아웃 구현 - CancellationToken : 비동기 작업을 취소
[C#] 동시성 프로그래밍_ 지수 백오프(exponential backoff) - 재시도 사이의 대기 시간을 점진적으로 늘리는 전략 - 웹 서비스 관련 작업에 사용하면 서버가 재시도로 넘치지 않게 막을 수 있다. public static async Task GetRequestHttpWithRetries() { //1초 후, 다음에는 2초 후, 다음에는 4초 후 재시도 TimeSpan nextDelay = TimeSpan.FromSeconds(1); HttpClient client = new HttpClient(); string url = "http://www.naver.com"; for (int i = 0; i != 3; i++) { try { var result = await client.GetStringAsync(url); Console.WriteLine(string.Forma..