본문 바로가기

분류 전체보기

(260)
[김영한 스프링 MVC 1] 서블릿 프로젝트 생성 JSP 실행하기 위해서 WAR 패키징 선택 Hello 서블릿 스프링부트 환경에서 서블릿 등록, 사용하기 서블릿 등록 @WebServlet(name="helloServlet", urlPatterns = "/hello") //서블릿 이름, url 매핑 public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet.service"); System.out.println("req = " + req); S..
[김영한 스프링 MVC 1] 웹 애플리케이션 이해 웹 서버, 웹 애플리케이션 서버 웹 => HTTP 기반 HTTP에 모든 것 전송 (HTML, TEXT, 이미지, 영상, JSON, XML 등) 서버 간 데이터 전송 시에도 대부분 HTTP 사용 웹 서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가 기능 정적 HTML, CSS, JS, 이미지, 영상 ex) NGINX, APACHE 웹 애플리케이션 서버 (WAS) HTTP 기반으로 동작 웹 서버 기능 포함 (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 - 동적 HTML, HTTP API (JSON) - 서블릿, JSP, 스프링 MVC ex) 톰캣(Tomcat) Jetty, Undertow 웹 서버 - WAS 차이점 웹 서버 : 정적 리소스(파일) WAS : 애플리케이션 ..
[스프링] 컨트롤러 파라미터 어노테이션 - 클라이언트 → 서버 참고: https://kingchan223.tistory.com/128 https://ttl-blog.tistory.com/257 스프링부트 프로젝트 당시에는 프론트 단과 JSON 데이터를 주고받으면서 Controller에서 @RequestBody와 @PathVariable만 주로 사용했었다. 최근에는 @ModelAttribute 등 다양한 어노테이션을 사용해보게 되었고, 이러한 어노테이션들을 잘 아는 상태에서 활용하고자 정리해보기로 했다. 일단은 클라이언트 → 서버 방향의 데이터 전달 방식부터! (@RequestParam, @ModelAttribute, @PathVariable, @RequestPart, @RequestBody) 1. GET 요청 파라미터 / HTML form 데이터 @RequestPa..
[자료구조] 우선순위 큐, 힙 우선순위 큐 (Priority Queue) : 우선순위가 높은 데이터가 먼저 반환되는 자료구조 힙으로 구현 배열, 리스트 : 삽입 시 모든 데이터 탐색해야 하므로 시간복잡도 O(n) 힙 : 삭제, 삽입 시 부모-자식 비교 반복 → 트리의 높이가 하나 증가할 때마다 비교 연산 횟수는 1회 증가하여 시간복잡도 O(logn) 힙 (Heap) 특징 완전이진트리 모든 노드에 저장된 값(우선순위)들은 자식 노드들 값보다 크거나 같음 루트노드가 가장 큰 우선순위를 가짐 힙을 구현하는 일반적인 자료구조 => 배열 종류 최대 힙 값이 클수록 우선순위가 높은 완전이진트리 최소 힙 값이 작을수록 우선순위가 높은 완전이진트리 구현 삽입(저장) 새 노드를 우선순위가 가장 낮다는 가정으로 맨 끝 위치에 삽입시킨 후 부모노드와 비..
[백준/자바] 트리 1967번 - 트리의 지름 문제 트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다. 이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다. 입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, 트리의 지름을 구해서 출력하는 프로그램을 작성하시오. 아래와 같은 트리가 주어진다면 트리의 지름은 45가 된다 입력 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000) ..
[자료구조] 이진 탐색 트리 참고 : 더보기 https://velog.io/@kimdukbae/%EC%9D%B4%EB%B6%84-%ED%83%90%EC%83%89-%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89-Binary-Search https://velog.io/@younseo1016/%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89%EA%B3%BC%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84 https://ratsgo.github.io/data%20structure&algorithm/2017/10/22/bst/ https://mommoo.tistory.com/101 이진 탐색 트리 (Binary Search Tree) 정의 효율적인 탐색, 빈번한 삽입과 삭..
[자료구조] 트리 - 이진 트리 유형 트리와 그래프에 대해 작성하던 중 트리의 종류(이진 트리, 이진 탐색 트리)에 대한 하위 카테고리가 다양한 것을 확인해 각 종류에 대한 글을 따로 작성하기로 했다. 이진 트리 (Binary Tree, B-Tree) : 자식 노드를 최대 2개 가질 수 있는 트리 종류 전 이진 트리, 완전 이진 트리, 포화 이진 트리, 균형 이진 트리, 편향 이진 트리 ※ 하나의 이진 트리는 위 카테고리 여러 개에 동시에 해당할 수도 있음 전(or 정) 이진 트리 (Full/Strict Binary Tree) 모든 노드가 0개 또는 2개의 자식 노드를 가짐 완전 이진 트리 (Complete Binary Tree) 마지막 레벨 외 노드들은 모두 채워져 있어야 함 (2개의 자식 노드) 말단 노드들은 왼쪽에서부터 차례대로 채워짐..
[Git] Head? Stage? Branch? 프로젝트 리팩토링 중 git bash로 커밋 로그를 확인하다가 'HEAD -> main, origin/main'의 정확한 의미를 알지 못한다는 것을 깨달아 git에 대해 다시 처음부터 배웠다. 그리고 하나의 브랜치에서 git pull, git add, git commit, git push만 반복하며 사용해왔는데, 실무에서는 여러 브랜치를 이동하고 머지해가며 작업하는 것으로 보여 이러한 경우에 대한 공부도 했다. 이 포스트에서는 다시 공부한 git 기초 지식과 작업 방식에 대해 적어보고자 한다. Stage? 작업 디렉토리(=작업 트리) : 파일 생성, 저장 등의 작업이 실제로 수행되는 폴더 (HEAD 이동 시 작업 트리도 함께 변화함) 스테이징 영역(=스테이지) : 새로운 버전으로 만들 파일이 대기하는 영..
[자료구조] 트리, 그래프 트리와 그래프 (그래프 ⊃ 트리 로도 볼 수 있음) 공통점 노드와 노드 간을 연결하는 간선으로 구성된 자료구조 차이점 트리 그래프 모델 계층 모델 네트워크 모델 방향 방향 무방향, 방향, 양방향 순환 비순환 순환, 비순환, 자기순환 간선 수 노드 수 - 1 자유 기타 루트 노드, 부모-자식 노드 개념 有 트리 구성 요소 및 용어 Node (노드) : 트리를 구성하는 각각의 요소 Edge (간선) : 노드와 노드를 연결하는 선 Root Node (루트 노드) : 트리 구조 최상위에 있는 노드 Parent Node (부모 노드) : 자식 노드를 가진 노드 Chlid Node (자식 노드) : 부모 노드를 가진 노드 Sibling Node (형제 노드) : 같은 부모를 가지는 노드 Terminal Node (..
nGrinder 부하 테스트 - (1) 설치, 스크립트 작성 (오류 발생) 애플리케이션을 배포한 이후, 전반적인 성능과 개선사항을 확인하기 위해 부하 테스트를 진행하기로 했다. 다양한 부하 테스트 도구들 중에서도 네이버 오픈소스 도구이자 Groovy 문법을 사용해 많은 레퍼런스를 찾을 수 있는 nGrinder를 선택했다. 설치 (Windows) 1. nGrinder war 파일 설치 https://github.com/naver/ngrinder/releases에서 war 파일을 설치한다 2. cmd 명령프롬프트에서 실행 java -jar ngrinder-controller-버전.war --port=임의포트번호 3. localhost:포트번호 주소 입력해 브라우저 접속, 로그인 디폴트 아이디, 비밀번호 : admin, admin 4. 에이전트 다운로드 메뉴의 에이전트 다운로드 클릭..