CS 20

[Spring] 스프링 Web MVC의 Dispatcher Servlet

Servlet이란? 클라이언트의 요청에 대해 동적으로 작동하는 웹 컴포넌트이다 Java Thread를 이용하여 동작 Request가 Servlet Container로 전송되고 어느 서블릿에 대한 요청인지 확인 해당 서블릿에서 service 메소드를 호출한 뒤에 doGet or doPost를 호출한다 HttpServletResponse 객체에 응답을 보낸다 Dispatcher-Servlet이란? 가장 앞단에서 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러 Dispatcher-Servlet의 장점 예전 DispatcherServlet이 등장하기 전에는 URL 매핑을 위해 web.xml에 모두 등록해주어야만 했다. welcome servlets.WelcomeS..

CS 2021.11.23

웹 브러우저에서의 양방향 통신 방식

웹 브라우저 에서의 양방향 통신 방식 새로고침을 해야지만 웹 브라우저는 서버에서 업데이트된 값을 알 수 있다. 그러나 채팅프로그램 같이 서버에서 데이터를 가져오는 과정을 동적으로 해야할 경우 Polling 방식을 생각해볼 수 있다. Polling 방식 클라이언트에서 일정 주기마다 요청을 보내고 서버는 현재 상태를 바로 응답하는 방식 그러나 일정 주기마다 요청을 보내기 때문에, 실시간으로 데이터가 반영되지 않는다. 또 서버에서 변화가 없더라도 매 요청마다 응답을 내려주기 때문에 불필요한 트래픽이 많이 생겨 서버에 부담이 될 수 있다. Long Polling 방식 Polling 방식을 개선하여, 클라이언트에서 요청을 보냈을 때, 서버에서 바로 응답하지 않고 이벤트가 발생했을 때 응답을 내려주는 방식이다. 이..

CS 2021.11.23

[Spring] 스프링의 에러 처리(Error Handling)

스프링 부트 프로젝트를 하나 띄워서 없는 주소로 요청하면 다음과 같은 예외가 발생한다. 이 응답은 어디서 온걸까? 서블릿의 예외처리 과정 Exception을 던지기 response.sendError 메서드 호출 메서드 파라미터로 HTTP 상태 코드와 에러메시지 전달 가능 서블릿 컨테이너는 오류 코드에 적절한 오류 페이지 제공 에러페이지 작동 원리 컨트롤러에서 예외가 발생할 경우 컨트롤러 → 인터셉터 → 서블릿 → 필터 → WAS 순으로 예외가 전달되면 WAS는 에러 페이지 정보를 확인하고 다시 에러 페이지 출력을 위해 재요청 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 - 예외 발생 -> 인터셉터 -> 서블릿 -> 필터 -> WAS - 예외 페이지 정보 확인 -> 필터 ..

CS 2021.10.29

[Redux] 리덕스로 상태 관리하기

리덕스는 자바스크립트를 위한 상태 관리 프레임워크 컴포넌트와 상태 관리 코드 분리 서버 렌더링 시 데이터 전달이 간편하다 알림창과 같이 전역 컴포넌트의 상탯값을 관리할 때 좋다 페이지가 전환되어도 데이터는 살아 있어야 할 때 좋다 6.1 리덕스 사용 시 따라야 할 세 가지 원칙 하나의 객체에 프로그램의 전체 상탯값을 저장한다 상탯값을 불변 객체로 관리한다 상탯값은 오직 액션 객체에 의해서만 변경되어야 한다. 오직 순수 함수에 의해서만 상탯값을 변경해야 한다 // [홍길동]님 안녕하세요, [지금은 11시 30분]입니다. sayHello('홍길동') sayHello('홍길동', '11:30') 6.2 리덕스의 주요 개념 이해하기 리덕스에서 상탯값이 변경되는 과정 6.2.1 액션 액션은 type 속성값을 가진..

CS/React 2021.10.29

[React] 클래스형 컴포넌트의 생명 주기 메서드

1. 클래스형 컴포넌트의 생명 주기 메서드 모든 컴포넌트는 1) 초기화 단계 2) 업데이트 단계 3) 소멸 단계를 거친다. 초기화 단계 : 최초 컴포넌트 객체가 생성될 때 업데이트 단계 : 컴포넌트의 속성값 또는 상태값이 변경될 때 1.1 Constructor 메서드 class MyCompoent extends React.Component { constructor(props) { super(props) this.state = { currentMovie: props.age < 10 ? '뽀로로' : '어벤저스', } } } 초기 속성값으로부터 상태값을 만드는 경우 super함수를 호출하지 않으면 컴포넌트가 제대로 동작하지 않는다. 상태값을 직접 할당하는 것은 constructor 메서드에서만 허용된다. c..

CS/React 2021.10.21

[Web] 세션과 쿠키란 무엇일까?

1. HTTP의 특징 비연결성 (connectionless) 클라이언트의 요청을 받고 응답을 하면 연결을 끊어 버리는 특징 무상태성 (stateless) 통신이 끝나면 상태를 유지하지 않는 특징 왜 HTTP는 비연결성과 무상태성이란 특성을 가질까? HTTP 프로토콜은 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되어 있다. 따라서 다수의 클라이언트와의 연결을 계속 유지하는 방식을 사용한다면 리소스가 많이 소요된다. 그러나 상태 정보를 유지해야 할 경우가 있다. 예를 들어서 로그인 상태 유지 ! 2. 🍪 쿠키란? 쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 형식의 데이터 파일 세션 쿠키 (Session Cookie) 브라우저내에 저장되어 브라우저 종료시 쿠키를 삭제 지속 쿠키 (Persi..

CS 2021.10.04

도커와 쿠버네티스

요약 도커와 쿠버네티스의 차이는 '컨테이너'와 '오케스트레이션'에 있다. 도커 컨테이너는 애플리케이션의 개발과 테스트 -> 프로덕션으로 이전하는 과정을 최적화한다 도커란? 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 도커에서는 여러 이미지를 생성할 수 있는 데, 이 때 컨네이너 실행시에 필요한 파일 및 설정값들을 포함하게 된다. 컨테이너란 애플리케이션을 구동하는 환경을 격리한 공간이다. 어플리케이션을 기능별로 나누어 변경 가능하도록, 하나의 큰 어플리케이션을 서비스 단위로 잘라 배포 가능하다 컨테이너와 가상머신의 차이 가상머신에서는 OS를 가상화한다. VMWare나 Virtualbox에서는 호스트 OS위에 Hypervisor를 사용하여 여러가지 OS를 가상화 할 수 있다. 그러나 가상머신의 방식은..

CS 2021.08.31

함수형 프로그래밍

함수형 프로그래밍의 등장 명령형 프로그래밍일경우 복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이 매우 어렵다. 함수형 프로그램에서는 모든 것을 순수 함수로 나누어 문제를 해결한다. 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 한다. 작은 문제도 함수로 나누어 문제를 해결한다. // 1 ~ 10까지의 값이 i에 할당된다 for(int i = 1 ; i < 10; i++) { System.out.println(i); } process(10, print(num)); 무엇을 할 것인지에 포커스를 두는 프로그래밍 따라서 출력하는 함수를 파라미터로 넘길 수 있다. 1급 함수 함수가 1급객체로써의 의미를 가진다는 것은 포함관계를 갖는 데 있어서 최상위 레벨이 된다는 것이다. 이에..

CS 2021.08.27

[Spring] ControllerAdvice가 어떻게 작동할까?

Java에서는 Exception이 발생할 경우, 이에 대해서 스프링에서는 처리해주는 ExceptionHandler와 ControllerAdvice가 있다. [JAVA] 예외 처리 종류 1) Error와 Exception의 차이 Error(오류)는 자바 프로그램 밖, 시스템에서 비정상적인 상황이 발생한 것을 말한다. 이는 시스템 레벨에서 발생하는 오류이며, 프로세스에 문제를 야기시켜 프로세스를 bboglebbogle.tistory.com ControllerAdvice는 Controller에서 발생하는 Exception을 받아서 처리해주는 역할을 한다.(마치 interceptor 같다) 그렇다면 궁금해진것은, 어떻게 Exception이 발생하는 것을 catch하여 처리를 해주게될까? 그전에 알아야 할 것은 ..

CS 2021.08.22

[Spring] AOP란 무엇일까?

AOP란 무엇일까? AOP란 Aspect-Oriented Programming의 약자이다. 즉, [Aspect] 를 중심으로 프로그래밍하는 것이다. 예를 들어, 여러 개의 클래스가 있을 때 비슷한 기능을 하는 부분이 있을 것이다. 글을 읽을 때 로그인이 되었는 지 확인하고, 글을 작성할 때 로그인이 되었는 지 확인하고, 관리자 페이지를 들어갈 때 로그인이 되었는 지 확인하고 등등... 이 때 [로그인이 되었는 지 확인] 부분을 하나의 Aspect로 모듈화를 할 수 있다. 다음과 같이 class에서 겹치는 부분들을 Aspect로 모듈화하여 재사용하는 것이 AOP이다. 주요 용어 Aspect : 겹치는 부분을 모듈화 한 것 Target : Aspect를 적용하는 클래스 혹은 메서드 Advice : 어떤 일을..

CS 2021.08.21