서블릿 2일차 메이븐 1일차
서블릿 2일차면서 메이븐을 처음 배운 날이다. 서블릿으로는 GET 요청시의 쿼리 스트링과 POST 요청시의 Form Body를 읽어오는 방법을 배웠다. getDo 혹은 getPost에서 인자로 넘어온 request의 request.getParameter 메서드를 통해 가져올 수 있다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 입력 처리
// http://127.0.0.1/first/sum?num1=3&num2=5
// 으로부터,
// num1과 num2를 받아와 처리.
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
// 2. 로직 처리
int sum = num1 + num2;
// 3. 출력 처리
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.printf("<html><head></head><body>[GET]<br>%d + %d = %d<br><a href='./add.html'>돌아가기</a></body></html>", num1, num2, sum);
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 입력 처리
// From으로부터 받은 Request Body에서 데이터 가져오기
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
// 2. 로직 처리
int sum = num1 + num2;
// 3. 출력 처리
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.printf("<html><head></head><body>[POST]<br>%d + %d = %d<br><a href='./add.html'>돌아가기</a></body></html>", num1, num2, sum);
out.close();
}
메이븐은 좋은 툴이다. 최초 릴리즈가 2004년, 내가 초등학교에 입학하기 전이니, 꽤 오래되었는데도 아주 세련된 구조와 기능을 갖추고 있다. 물론 3.9 버전대의 메이븐을 사용했으니 많은 개선이 있었겠지만… npm과 같은 최신 패키지 도구나 ninja와 같은 최신 빌드 시스템과도 비슷한 점이 많았다. 그레이들도 사용해보고 싶다.
Algorithms, Part I by Kevin Wayne
프린스턴대 케빈 웨인 교수님의 알고리즘 강의를 듣기 시작했다. C++, 파이썬 알고리즘 강의는 많은데, 자바 강의는 몇 없는 상황에서 좋은 선택인 것 같다. 영문 자막뿐 아니라 한글 자막도 지원한다.
첫 강의는 Union−Find에 대한 내용이다. 주된 요구사항은 N개의 점을 자유롭게 연결할 수 있고, 임의의 2개의 점의 연결 여부를 반환할 수 있는 프로그램을 작성하는 것이다. 시간복잡도 O(N^2)의 간단한 알고리즘에서 시작하여 점진적으로 더 좋은 성능의 알고리즘을 고안하여 도입하는 과정을 자연스럽게 보여준다.