Tomcat + Spring 간단 구조Tomcat + Spring 구조는 위와 같다 = JAR(JVM) + Tomcat(Servlet) + Spring(Controller) 💡Spring Boot가 유저의 요청(Request)받고 -> 작업(Processing) 후 -> 응답(Response) 반환하는 절차1. Request: 수많은 요청들을 Request Queue에 적재2. Processing: Request Queue에서 하나를 가지고 수행 후3. Response: 결과를 반환이 설명만으로는 스프링 MVC가 어떻게 요청을 받고 작업하고 응답하는지 모름 (심화) 설명을 통해 자세히 알아보자 심화) Tomcat + Spring 실제 동작 과정위에서 설명된 요청 -> 작업 -> 응답 절차를 Spring..
전체 글
김영한 강사님 "스프링 mvc" 내용 정리 + Java의 정석 일부 포함프로세스와 쓰레드포스팅 글 참고 [ASAC 6기] 프로그램, 프로세스와 스레드✅프로그램 VS. 프로세스프로그램: 정적, 실행 가능한 파일 형태프로세스: 실행된 프로그램, cpu와 메모리 할당받아서 프로그램이 실행된 형태 ✅프로세스 VS. 스레드프로세스: 실행단위가 크고 +mystudylog.tistory.com멀티 쓰레딩의 장점도스(DOS)와 같은 OS는 한번에 한가지 작업만 수행 가능.윈도우와 같은 멀티태스킹이 가능한 OS는 동시에 여러 작업 수행 가능CPU의 사용률을 향상시킨다.자원을 보다 효율적으로 사용할 수 있다.사용자에 대한 응답성이 향상된다.작업이 분리되어 코드가 간결해진다.메신저로 채팅하면서 파일을 다운로드 받거나 음성 ..
웹 앱 개발에서 서블릿 컨테이너 사용웹 브라우저는 HTTP라는 프로토콜을 사용하여 네트워크를 통해 서버와 통신한다.서블릿은 의미 있는 비즈니스 로직 외 모든 걸 지원서블릿: 서블릿 컨테이너와 직접 상호작용하는 자바 객체위 사진에서 초록색 부분만 의미 있는 비즈니스 로직이다.나머지는 HTTP메시지를 처리하 위해 수행해야하는 반복적인 작업이다.HTTP를 이해하고 HTTP 요청과 응답을 자바 앱으로 변환하는 역할을 하는 것이 서블릿 컨테이너, 이며 자바 앱이 HTTP 메시지를 변환하는 역할을 한다.서블릿 컨테이너를 사용하면 자바 앱은 통신 계츨을 구현할 필요가 없다. 가장 널리 알려진 구현체 중 하나는 톰캣(Tomcat)이다.실제 앱에서 사용되는 솔루션은 다양하다. 제티(Jetty), 제이보스(Jboss), ..
WAS와 WS의 차이점은 "웹 풀스택" 카테고리에 가면 설명이 있으니 참고 프로젝트를 하다가 "스프링부트는 웹 서버 내장하고 있는데 nginx 같은 웹 서버를 따로 사용해야할까요?"라는 질문을 받았다. 결론부터 말하자면api통신 시: WS필요 없음서버에서 페이지 반환 해야하는 상황이라면: 필요할 수도 있음 (대량의 트래픽이 오고간다면) 이 질문에 나도 대답을 하지 못해서 인프런의 갓영한님의 "스프링 MVC 1편"에 해당 내용에 대해 언급한게 있어서 해당 강의를 보고 내용을 정리해보고자 했다.WAS만 사용할 경우 WAS가 하는 일은 다음과 같다동적 파일 제공정적 리소스 제공애플리케이션 로직 실행여기서 알 수 있듯이 WAS가 정적 리소스도 제공한다는 사실이다.html, css, js, 이미지 같은 정적 리소..
Controller 사용해서 에러 페이지 반환 - 정적 페이지CustomErrorController: Spring이 기본 제공하는 ErrorController 인터페이스 자체 구현-> 에러 시 statusCode에 따라 표기 페이지 분기 @Controllerpublic class CustomErrorController implements ErrorController { @RequestMapping(value = "/error", method = RequestMethod.GET) public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERRO..
스프링부트 어플리케이션 실행 시 뜨는 로그 분석추가한 의존성Spring Web: 가장 기본적으로 Spring MVC 기반의 REST API 혹은 웹 페이지 반환을 위한 Tomcat서버Lombok: 불 필요한 Java 코드 작성을 최소화하기 위한 어노테이션 기반 코드 자동 생성기Thymeleaf: Spring 에서 웹 페이지를 만들어 클라이언트에게 서빙하려 사용하는 서버사이드 템플릿 엔진 Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext (2가지 존재)Servlet (Web) Applicationcontext: 서블릿에서만 이용되는 Bean 에 대한 ContextDispatcherServlet이 직접 사용하는 컨트롤러..
플로이드 워셜 알고리즘모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구히야하는 경우다익스트라는 한 지점에서 다른 특정 지점까지의 최단 경로구하는 알고리즘 문제 보자마자 걍 다익스트라, 플로이드 어쩌구 알고리즘 사용해야지! 떠올렸는데... 구현을 못함 시도플로이드 워셜 알고리즘 구현시 고려할 점이 "거쳐 가는 노드" 를 기준으로 구현하면 되는데, 거처가는 노드 k 를 for루프 맨 처음에 시작해서 계속 실패함n, m = map(int, input().split())#인접행렬data = [[5001] * n for _ in range(n)]for i in range(n): for j in range(n): if i == j: data[i][j] = 0for _ i..
파란색 구간이 구해야하는 구한 합이라면 빨간색 부분과 초록색 부분을 제외하면 된다고 생각시도1맨 처음에 가로 구간합, 세로 구간합으로 나눠서 구했음. (파란색 구간의 누적합 - (빨간색 누적합 + 주황색 누적합 + 빨,주 겹치는 부분)) 으로 구하면 될 줄 알았다근데 그림에서도 보이다시피 파란색에 끝부분과 주화색 끝 부분도 계산식에 포함돼서 결과가 제대로 나오지 않음 시도2저 양쪽 끝을 포함하지 않도록 하기 위해 행별로 누적합을 구하기로 했다.코드import sysn, m = map(int, input().split())data = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n)]#가로형태?로 누적합 구한것sum_col ..
객체지향 설계원칙 SOLID객체지향 패러다임에서 더 좋은 코드란 무엇인가에 대한 고민의 결과 High Cohesion, Loose Coupling 목표 1. Single Responsibility (단일 책임)하나의 모듈은 한가지 책임만 가진다.그래야지만 모듈이 변경되는 이유가 단 한가지일 수 있다.해당 모듈이 여러 대상 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야한다는 것을 의미 패스워드 암호화 로직이 유저 정보를 추가하하는 로직에 위치한다면addUser는 물론 암호화한 뒤에 데이터베이스에 저장되어야겠지만 암호화 로직이 Raw한 상태로 addUser에 그대로 노출되어 있음암호화 로직이 변경되는 것이 addUser전체 로직에 변경을 발생시킨다.@Service@Re..