전체 글
EP6. HTTP 요청 데이터 처리
Http 헤더 꺼내기 docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-annarguments Web on Servlet Stack Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com docs.spring.io 위 주소에서 Cont..
위상정렬(Topology Sort) 이론
위상정렬 사이클이 없는 방향 그래프의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 것 이 알고리즘이 왜 필요할까? 어느 문제에서 사용할까? 예를들어, 대학교 커리큘럼처럼 선수과목이 있는 과목이 있다고 가정해보자. 고급 알고리즘을 수강하기 위해서는 자료구조 -> 알고리즘 -> 고급 알고리즘의 순서로 수강해야한다. 자료구조 -> 고급알고리즘 -> 알고리즘 의 순서로는 수강할 수 없다. 이와같이, 방향그래프의 방향성에 거스르지 않도록 나열해야하는 문제에서 위상정렬을 사용할 수 있다. 진입차수와 진출차수 위상정렬을 구현하기 위해서 진입차수와 진출차수의 개념을 짚고 넘어가야 한다. 진입차수 : 특정한 노드로 들어오는 간선의 개수 진출차수 : 특정한 노드에서 나가는 간선의 개수 위상 정렬 알고리즘 구현 ..
신장트리와 크루스칼 알고리즘
신장트리 모든 노드가 포함되어 서로 연결되면서 사이클이 존재하지 않는 부분 그래프 그렇다면, 신장트리가 왜 필요할까? 어느 문제에서 쓰일 수 있을까? 예를들어 N개의 도시가 존재하는 상황에서 두 도시 사이에 도로를 놓아 전체 도시가 최소비용으로 서로 연결될 수 있게 도로를 설치하는 경우를 생각해보자. N개의 도시를 다 연결하기 위해서 모든 노드가 포함되어야 하고 최소비용으로 연결하기 위해서 사이클이 존재하지 않고, 최소비용의 간선만 존재해야 한다. 그러면 주어진 데이터에서 신장트리를 어떻게 만들 수 있을까? 크루스칼 알고리즘 대표적인 최소 신장 트리를 구할 수 있는 알고리즘이다. 구현방법 간선 데이터를 비용에 따라 오름차순으로 정렬한다. 간선을 하나씩 확인하며 현재의 간선이 사이클을 발생시키는지 확인한다..
Union Find 자료구조 이론
Union Find 자료구조 ( 서로소 집합 자료구조 ) 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 여기서 집합은 트리구조를 의미하고, 서로소 부분 집합은 루트노드가 다른 것을 의미한다. 그래서, Union 각자 서로소인 부분 집합을 하나의 집합으로 합치는 연산. ex) union(1, 4) 이면 1의 루트노드와 4의 루트노드를 비교해서 더 큰 루트노드의 부모를 작은 루트노드로 세팅한다. 주의 : 해당 노드가 아닌 루트노드의 부모를 세팅하는 것이다. Find 어떤 원소가 어떤 집합에 속해있는지 (루트노드가 무엇인지) 알려주는 연산 ex) 루트를 찾을 때 까지 (부모가 자기자신인 경우) 부모를 재귀적으로 호출한다. 이라고 보면된다. 동작방식을 그림으로 살펴보자 동작방식 이렇게 ..
EP5. Spring MVC 기본 기능 (요청 매핑)
Spring MVC 기본기능 method 별 매핑 @GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping PathVariable /** * PathVariable 사용 * 변수명이 같으면 생략 가능 * * @PathVariable("userId") String userId -> @PathVariable userId * /mapping/userA */ @GetMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String data) { log.info("mappingPaht userId = {}", data); return "ok"; } 변수 이름을 dat..
로깅(Logging)을 알아보자
보통 디버깅할때 System.out.prinln("")을 사용해왔다. 하지만 실무에서는 이런식으로 로깅을 하지 않는다! 로깅 라이브러리 SLF4J : http://www.slf4j.org SLF4J Simple Logging Facade for Java (SLF4J) The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framewor www.slf4j.org Logback : http:/..
EP4. 스프링 MVC 구조
Spring MVC 전체 구조 처음 HTTP 요청이 들어오면 URL에 매핑된 핸들러(컨트롤러)를 조회한다. Dispatcher Servlet은 처음 Http 요청이 들어오는 곳을 한곳으로 통일하고 여기서 핸들러(컨트롤러)를 분배하기 위해서 존재한다. 그리고 해당 핸들러가 지원하는 방식이 무엇인지 핸들러 어댑터 목록에서 조회한다. 최근 실무에서는 99.9퍼센트 애노테이션 기반의 핸들러(컨트롤러)를 사용하지만, 스프링은 기존 프레임워크 구조를 깨지않고 계속 발전해왔기 때문에 기존에 지원하던 핸들러들도 지원해야했다. 그래서 핸들러 어댑터 목록을 조회하는 것이 필요하다. Dispatcher Servlet 입장에서는 조회한 핸들러 어댑터만 호출하면 핸들러 어댑터에서 알아서 핸들러를 찾아 호출하고 핸들러 어댑터는 ..
[2021.03.25] 앞으로의 계획
스프링, MVC, JPA 강의를 들으면서 찝찝한 느낌이 많이 들었다. Java에 대한 자신감이 없어서 이걸로 코딩테스트 조차 볼 수 있을까 두려운 마음이 드는데, Java 개발자로 살아갈 수 있을지 의문이 계속 들었다. 일단 Java 기초문법과 실무에서 어떤식으로 Java를 사용하는지 알고있는 이 시점에서, 백기선님 Java 스터디를 얼른 시작해야겠다고 생각이 들었다. 그래서 올해 1년 휴학동안 진행할 공부계획을 다시한번 정리해본다. JAVA 공부시 해야할 것들 Java 기초 객체지향 프로그래밍 스프링 MVC JPA 실전2 DATA JPA QueryDSL 기술학습 목적의 프로젝트 서비스 출시 목적의 프로젝트 백기선님 Java 스터디가 15주 기준이니까 4월부터 시작해서 약 3개월 (4, 5, 6) 객체지..
자바 다시 제대로 공부하기
백기선님 온라인 스터디 따라해보기 github.com/whiteship/live-study/issues?q=is%3Aissue+is%3Aclosed whiteship/live-study 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com 각 주차별로 하트달린 블로그 참고하면서 진행해보면 좋을 것 같다.
[ACM-ICPC] 화성탐사
입력 예시 3 3 5 5 4 3 9 1 3 2 7 5 3 7 2 0 1 2 8 0 9 1 1 2 1 8 1 9 8 9 2 0 3 6 5 1 5 7 9 0 5 1 1 5 3 4 1 2 1 6 5 3 0 7 6 1 6 8 5 1 1 7 8 3 2 3 9 8 0 7 6 4 1 5 8 3 2 4 8 3 7 4 8 4 8 3 4 출력예시 20 19 36 초기접근 처음에는 다이나믹 프로그래밍으로 접근했다. 2차원 공간의 왼쪽 위 -> 오른쪽 아래로 가장 빠르게 가는 경우에서 상하좌우로 이동하는 방향에서 좌, 상은 쓸모없는 움직임이라고 생각했다. (한번에 가는것이 돌아가는 것보다 항상 비용이 적을 것이라는 오해) 그래서 우, 하 (오른쪽으로 가기, 아래로 가기) 의 움직임만 고려한 다이나믹 프로그래밍으로 풀었다. 그..