목록전체 글 (302)
elevne's Study Note

제약조건 (Constraint) 이란 데이터의 무결성을 지키기 위한 제한된 조건을 의미한다. 특정 데이터를 입력할 때 무조건적으로 입력되는 것이 아니라 어떠한 조건을 만족했을 때에 입력되도록 제약할 수 있는 것이다. MySQL 은 데이터의 무결성을 위해 아래 제약조건들을 제공한다. PRIMARY KEY FOREIGN KEY UNIQUE CHECK DEFAULT NULL Primary Key 제약조건 테이블에 존재하는 많은 행의 데이터를 구분할 수 있는 식별자를 기본 키(primary key)라고 부른다. 기본키에 입력되는 값을 중복될 수 없으며, NULL 이 들어올 수도 없다. 대부분의 테이블은 기본키를 가져야한다. 기본키가 없어도 테이블의 구성이 가능하기는 하지만, 실무적으로는 거대부분의 테이블에는 설..

이전 시간에 알아보았던 것처럼 일정 시간 이후 특정 일을 수행하고자 하거나, 일정 주기를 기준으로 반복하여 특정 일을 수행하고자 할 때에는 ScheduledExecutorService 라는 스레드풀을 사용할 수 있다. 생성하는 방식은 다른 스레드풀과 동일하게, Executors 의 정적메소드로 생성된다. 이 경우에는 newScheduledThreadPool 메소드를 사용한다. (파라미터로는 풀 사이즈를 int 로 넘긴다) public static void Example1() { ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); Runnable task2 = () -> System.out.println("RUNNING TASK2..."..

비동기적인, 멀티스레드를 활용한 프로그램을 작성할 때 callback 함수들을 많이 작성하게 되고 그러한 코드들은 작성하기 어려워진다. 만약 그 콜백 내에서 예외처리 등을 해주어야한다면 더욱 작성하기 어려워진다. 기존의 Future 인터페이스는 Java 5 에서 asynchronous computation 을 위해 추가되었지만, 여러 개의 작업을 합쳐서 작성하는데에는 많은 불편함이 있었다. Java 8 에서 그러한 문제를 해결하기 위해 CompletableFuture 클래스를 만들었다. 이는 Future 과는 다르게 다른 Asynchronous computation 끼리 조합이 가능하다. public class CompletableFutureExample { static ExecutorService ex..

MySQL 에서 사용하는 데이터 타입의 종류는 약 30 개 가까이 있다. 숫자 데이터 데이터 타입 바이트 수 숫자 범위 설명 BIT(N) N/8 1~64bit 표현. b'0000' 형식 TINYINT 1 -128 ~ 127 정수 SMALLINT 2 -32768 ~ 32767 정수 MEDIUMINT 3 - 8,388,608 ~ ... 정수 INT, INTEGER 4 - 2147483648 ~ ... 정수 BIGINT 8 - 900 경 ~ ... 정수 FLOAT 4 -3.40E+38 ~ ... 소수점 아래 7자리까지 DOUBLE, REAL 8 -1.22E-308 ~ ... 소수점 아래 15자리까지 DECIMAL(m,[d]), NUMERIC(m,[d]) 5 ~ 17 -10^38 + 1 ~ ... 전체 자리수(..

DefaultAdvisorAutoProxyCreator 는 등록된 빈 중에서 Advisor 인터페이스를 구현한 것을 모두 찾고, 생성되는 모든 빈에 대해 Advisor 의 Pointcut 을 적용하며 프록시 적용 대상을 선정한다. 빈 클래스가 프록시 선정 대상이라면, 프록시를 만들어서 원래 빈 오브젝트와 바꾼다. 기존의 transactionAdvice, Advisor 을 수정할 필요 없이, DefaultAdvisorAutoProxyCreator 을 빈에 등록해주기만 하면 된다고 한다. 아래와 같이 빈을 등록한다. @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { return new DefaultAdvisorAuto..

링크: https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다. 이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력..

JWT, JSON Web Token 에 대해서 우선 간단하게 알아보았다. JWT 를 많이 사용하기 이전에는 쿠키 또는 세션을 활용하여 인증/인가를 구현하였다. 하지만 쿠키는 클라이언트 측에서 정보 위변조가 가능하다는 단점을, 세션은 사용자가 로그인할 때마다 사용자 세션 정보를 담은 객체를 생성하게 되고 매 요청마다 DB 에 접근하기 때문에 서버에 부담이 크다는 단점을 가지고 있다. JWT 는 이러한 문제점들을 해결해준다. JWT 는 말그대로 JSON 형태를 가진 일종의 토큰으로, 해당 토큰을 가진 사용자는 권한 증명을 할 수 있는 것이다. JWT 는 상대적으로 서버의 부담을 줄여주며, 암호화된 토큰을 사용하여 안전한 통신이 가능하다. 또, 토큰 발행 전용 서버를 개설하여 서버의 부담을 완화해줄 수 있으며..

Spring Security 는 Servlet Filter 에 기반하여 작동한다고 한다. 이를 이해하기 위해 우선 Filter 의 역할에 대해 알아보아야 했다. Filter 이란 서버가 보내거나 받는 자료에 적용되는 작업을 말한다. 클라이언트가 서버에 보내는 자료는 입력필터가 처리하고, 서버가 클라이언트에 보내는 자료는 출력필터가 처리한다. 데이터에 여러 개의 필터를 사용할 수 있으며, 그 여러 개의 필터의 순서를 지정해줄 수도 있다. 클라이언트가 애플리케이션에 요청을 보내면, 컨테이너는 Filter 인스턴스들과 서블릿을 포함하여 HttpServletRequest 를 처리하는 FilterChain 이라는 것을 만들게된다. Spring MVC 구조에서 Servlet 은 DispatcherServlet 의..