목록전체 글 (119)
이것저것
문제 아주 먼 미래에 사람들이 가장 많이 사용하는 대중교통은 하이퍼튜브이다. 하이퍼튜브 하나는 역 K개를 서로 연결한다. 1번역에서 N번역으로 가는데 방문하는 최소 역의 수는 몇 개일까? 입력 첫째 줄에 역의 수 N과 한 하이퍼튜브가 서로 연결하는 역의 개수 K, 하이퍼튜브의 개수 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000) 다음 M개 줄에는 하이퍼튜브의 정보가 한 줄에 하나씩 주어진다. 총 K개 숫자가 주어지며, 이 숫자는 그 하이퍼튜브가 서로 연결하는 역의 번호이다. 출력 첫째 줄에 1번역에서 N번역으로 가는데 방문하는 역의 개수의 최솟값을 출력한다. 만약, 갈 수 없다면 -1을 출력한다. 예제 입력 1 9 3 5 1 2 3 1 4 5 3 6 7 5 6 7 6 8 9..
이진 탐색이란? 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘 배열의 중간에 있는 임의의 값을 선택하여 찾고자하는 값 X와 비교한다. X가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터를 대상으로, X가 중간값보다 크면 배열의 우측을 대상으로 다시 탐색 동일한 방법으로 다시 중간의 값을 임의로 선택하고 비교한다. 해당 값을 찾을 때까지 위 과정을 반복한다. 이진탐색 예시 {10,13,15,17,20,23,27} 오름차순으로 정렬된 배열이 있다. 이진 탐색을 이용하여 15를 찾아보자 첫 번째 시도 중간값 17을 선택한다. 선택한 17과 찾고자 하는 값 15를 비교한다. 15< 17 이므로 15는 17의 좌측에 존재한다는 것을 알 수 있다. 두 번째 시도 좌측에 존재하는 배열을 대상으로..
프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜 (프록시) 엔티티 객체 조회 껍데기는 똑같은데 안에는 텅텅 빈것 프록시 특징 실제 클래스를 상속받아서 만들어짐 실세 클래스와 겉 모양이 같다. Hibernate가 내부적으로 만든 것이다., 사용하는 입장에서 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. (이론상) 프록시 객체는 실제 객체의 참조 (target)을 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 Member member = em.getReference(Member.class, "id1"); member.getNa..
1. Transaction의 정의 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 2. Transaction의 성질- ACID Atomicity(원자성) 트랜잭션의 연산은 데이터베이스에 모두 반영되든지, 아니면 전혀 반영되지 않아야 함. 트랜잭션 내의 모든 명령은, 분할할 수 없는 단위로 여겨 모든 단계가 완료되거나, 모두 완료하지 않도록 해야 함. Consistency(일관성) 트랜잭션은 데이터의 무결성을 위반한 상태로 데이터베이스를 내버려 두지 않음 Isolation(독립성, 격리성) 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭..
1. 개요 HTTP는 데이터를 암호화하지 않아, 서버와 클라이언트가 주고 받는 메시지를 그대로 노출하기 때문에, 보안에 취약하다. HTTPS 는 SSL이라는 보안 프로토콜 위에서 동작하는 HTTP SSL (Secure Socket Layer), TLS (Transport Layer Security) → 그냥 같은 의미이다. 비대칭키(공개 키, 비공개 키)를 사용한다. HTTPS는 세 가지 주요 기능을 제공한다. Authentication Data Integrity Encrpytion 2. Hand Shake 과정 그림 1 - SSL Hand Shaking https://imp51.tistory.com/entry/보안-암호 3. 비대칭 키 방식이란? 2개의 키 (공개 키, 비밀 키)로 암호화 & 복호화한다..
1. 사용 이유 HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용한다. HTTP 프로토콜의 특징으로 Stateless가 있다. Stateless는 커넥션을 끊는 순간, 클라이언트와 서버와의 통신이 끝나고 상태 정보를 유지하지 않는 속성이다. Stateless의 특성 때문에, 상태를 유지해야 할 필요가 있는 경우에는(ex, 로그인 상태 유지) 통신할 때마다 인증 절차를 밟아야 한다. 별도의 인증을 하지 않고 상⁷⅞태 유지를 하기 위해 쿠키와 세션을 사용한다. 2. 쿠키 쿠키는 클라이언트에 저장되는 key, value 형태의 작은 데이터 파일 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지되는 특징이 있다. 쿠키는 클라이언트의 상태 정보를 로컬에 ..
1.3.1 SQL이 느린 이유 SQL이 느린이유? 디스크 I/O 때문! I/O = 잠 OS가 I/O를 처리하는 동안 프로세스는 잠을 잔다! 디스크에서 데이터를 읽어야 할 때는 CPU를 OS에 반환하고 잠시 수면 상태에서 I/O가 완료되기를 대기 (I/O Call 하고 CPU 반환 -> SLEEP) 1.3.2 DB 저장구조 데이터를 저장하려면 가장 먼저 테이블 스페이스 가 필요하다 - 테이블 스페이스 : 세그먼트를 담는 컨테이너 (여러 개의 데이터 파일로 구성) - 세그먼트 : 테이블, 인덱스 처럼 데이터 저장 공간이 필요한 오브젝트 (여러 익스텐트로 구성) - 익스텐트 : 공간을 확장하는 단위 (연속된 블록의 집합) - 블록(페이지) : 레코드를 실제로 저장하는 공간 한 블록은 하나의 테이블이 독점 (한..
문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) 출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. 예제 입력 1 8 예제 출력 1 92 풀이 과정 퀸을 놓을 수 없는 위치일 경우에 백트랙킹하여 이전 퀸이 놓인 위치에서부터 다시 탐색해야하기 때문에 DFS 그래프 탐색을 사용하여 풀었습니다. (1,1) (1,2)~(1,N) 중에 퀸을 놓은 위치를 시작점으로 하여 DFS 탐색을 합니다. (1,1) 에 놓았을 경우, 다음 2행 ? 열에 놓아야 괜찮을지를 알아야합니다. 일단 2행 1열에 놓은 상태로 여..