분류 전체보기
-
자바 서블릿 (Java Servlet) 정리프로그래밍 2022. 10. 31. 23:24
Java Servlet Specification 정리 - 서블릿 동작 원리를 알기 위해 정리하는 것으로, 세부적인 내용은 모두 생략했다. 1. Overview 1.1 What is a Servlet? 서블릿(Servlet)은 동적 컨텐츠를 생성하는 컨테이너에 의해 관리되는 자바 기반 웹 컴포넌트이다. 다른 자바 기반 컴포넌트처럼, 서블릿은 플랫폼과 독립적이다. 따라서 자바 기반 웹 서버라면 어느 플랫폼이던 실행 가능하다. 서블릿 엔진이라고도 불리는 컨테이너(Container)는 서블릿 기능을 제공하는 웹 서버 확장(Extension)이다. 서블릿은 서블릿 컨테이너에 의해 구현된 request/response 패러다임을 통해 웹 클라이언트와 상호작용한다. 1.2 What is a Servlet Contai..
-
이진 탐색 (Binary Search)CS/알고리즘 2022. 10. 29. 20:01
이진 탐색은 정렬된 배열에서 탐색 시간을 줄이기 위한 알고리즘이다. 배열 안에서 어떤 원소 E를 찾을 때, 단순 선형 탐색으로 구현할 경우 O(N) 시간이 걸린다. 하지만 이진 탐색을 수행하면 O(log N) 시간에 수행할 수 있다. 위 그림과 같이 크기가 7인 배열이 존재하고, 이 배열은 오름차순으로 정렬되어있다. 인덱스는 0부터 시작하여 6까지 존재하게 된다. 이진 탐색은 정렬된 배열의 가운데와 구해야 하는 원소를 비교하여 절반만큼 비교 범위를 줄여나가는 것이다. 위 그림에서 mid = (low + high) / 2 를 구하면, (0 + 6) / 2 = 3이고, 3번 인덱스의 값인 6과 비교하게 된다. 만약 구해야 하는 숫자 M = 7이라고 가정하자. 7은 mid보다 크므로, [low = mid + ..
-
Spring Web MVC 레퍼런스프로그래밍 2022. 10. 29. 19:40
1. Spring Web MVC Spring Web MVC는 Servlet API를 기반으로 구축되었다. 1.1 DispatcherServlet Spring MVC는 DispatcherServlet이라는 중앙 서블릿이 request를 처리하지만, 실제 작업은 대리자에 의해 수행된다. DispatcherServlet은 다른 서블릿들과 마찬가지로 java configuration이나 web.xml을 통해 선언되고 매핑되어야 한다. 그 다음, DispatcherServlet은 Spring configuration을 이용하여 request 매핑이나 view resolution, 예외 처리를 위한 대리자를 찾는다. 아래 코드는 자바 설정을 등록하고 DispatcherServlet을 초기화하는데, 이는 서블릿 컨테..
-
투 포인터 (Two Pointer)CS/알고리즘 2022. 10. 27. 22:19
투 포인터는 말 그대로 두 개의 포인터를 사용하여 탐색을 수행하는 알고리즘이다. 어떤 특정한 조건을 만족하는 쌍을 구하고자 할 경우, 단순 이중 루프를 이용하여 계산하면 O(N^2) 시간이 걸리는데, 이는 입력값 N이 100000만 넘어가게 되도 100억번을 수행해야 하므로 굉장히 느리다. 이 때 투 포인터 기법을 사용하면 O(N) 시간에 가능하게 된다. 투 포인터의 경우 보통 두 가지 경우로 사용할 수 있는데, 한 가지는 한 포인터는 배열의 맨 앞에, 다른 포인터는 배열의 맨 뒤에 위치하고 조건에 따라 점점 중간으로 가는 방식이고, 다른 한 가지는 앞이나 뒤에서 동시에 출발하여 다른 끝까지 도달하는 방식이다. 위 그림의 경우 첫번째 방식인데, 이 때 배열이 반드시 정렬되어 있어야 한다. 보통 오름차순으..
-
세그먼트 트리 (Segment Tree)CS/자료구조 2022. 10. 26. 22:27
세그먼트 트리는 구간 합을 구할 때 사용할 수 있다. 구간 합을 단순 반복문으로 linear하게 계산하면 O(N) 시간이 소요된다. 세그먼트 트리를 사용하면 O(log N) 시간에 구할 수 있어 더 빠르다. 위 사진은 0부터 5까지의 인덱스를 가진 배열, 즉 6개의 숫자가 들어있는 배열을 세그먼트 트리로 만든 것이다. 이진 탐색(Binary Search)의 메커니즘을 이용하여 트리를 만든다. 세그먼트 트리는 배열을 이용한 트리 구현 방법을 사용하는 것이 편하다. 이 때, 트리의 인덱스를 1부터 시작하게 만들면 index * 2 는 왼쪽 자식 노드를 가리키고, index * 2 + 1 은 오른쪽 자식 노드를 가리키게 되어 간편하다. 참고로 입력받을 배열도 인덱스를 1부터 시작하게 만드는 것이 구현하기 더 ..
-
스프링 시큐리티 레퍼런스프로그래밍 2022. 10. 24. 20:07
spring security reference 5.7.4 Servlet Applications - Sprint Security는 표준 서블릿 Filter를 이용하여 서블릿 컨테이너와 결합되있는 것으로 Servlet-based application에서는 사용하지 않아도 된다. 자동 설정 - springSecurityFilterChain 이라는 빈을 생성함으로써 서블릿 Filter를 자동 생성한다. - UserDetailsService 빈을 자동 생성한다. - 서블릿 컨테이너에 springSecurityFilterChain 빈을 자동으로 등록한다. 아키텍쳐 표준 서블릿 필터 리뷰 - 클라이언트가 request를 보내면, 컨테이너가 FilterChain을 생성한다. FilterChain 사용 예제 public..
-
8. 블로그 프로젝트프로그래밍 2022. 7. 28. 17:08
세션을 이용한 로그인 API를 구현하였다. @RequiredArgsConstructor @RestController public class AccountApiController { private final AccountService accountService; @PostMapping("/api/login") public Boolean login(HttpServletRequest request, @RequestBody AccountRequestDto requestDto) { if (accountService.login(requestDto)) { HttpSession session = request.getSession(); session.setAttribute("success", requestDto); re..
-
7. 블로그 프로젝트프로그래밍 2022. 7. 27. 16:55
검색 기능을 구현하고, 로그인을 위한 서비스 코드를 작성하였다. public interface PostRepository extends JpaRepository { List findAllByTitleContains(String title); List findAllByContentContains(String content); } Spring Data JPA는 쿼리를 굳이 작성하지 않고 함수명을 이용하여 쿼리를 만들어낼 수 있다. 처음에는 findAllByTitle 이라는 함수명으로 만들었지만, 이는 정확하게 일치해야만 그 값을 리턴하였다. 보통 검색을 할 때는 포함된 결과를 원하기 때문에, Contains를 추가해주어야 한다. @GetMapping("/") public String getMain(Model..