분류 전체보기 51

[HTTP] RESTful

1. REST - Representational State Transfer 서버와 클라이언트 간 통신 방식 중 하나로, 자원을 이름으로 구분하여 자원의 상태를 주고받는다. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)를 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH)등을 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다. 자원의 표현 URI REST에서 자원을 구분하고 처리하기 위해 사용 URI를 잘 네이밍할수록 API가 직관적이고 사용하기 쉽다 ex) /books, /join singleton and Collection Resources URI는 singleton이나 collec..

HTTP 2023.01.31

[HTTP] 암호화와 HTTPS

HTTP의 문제점 HTTP는 암호화되어있지 않다. 따라서 누군가가 서버-클라이언트 간의 http 메시지를 볼 수 있다. 즉, 보안에 취약하다. 1. HTTPS - Hypertext Transfer Protocol Secure SSL/TSL를 이용한 HTTP 통신 SSL(Secure Socket Layer) : 전송되는 데이터를 암호화 현재는 TSL(Transport Layer Security)로 발전되어 두 단어를 혼용해서 사용한다. 클라이언트가 서버에 보내는 정보들을 암호화하기 때문에 보안에 유리하다. 클라이언트는 접속한 사이트가 신뢰할만한 사이트인지 알 수 있다. 1-1. 암호화 기본 개념 공개키(Public Key)와 비밀키(Private Key) : 공개키는 모두가 볼 수 있는 키이며 비밀키는 소..

HTTP 2023.01.31

AJAX (Asynchronous Javascript And XML)

1. AJAX (Asynchronous Javascript And XML) 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법 이며 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이다. AJAX를 사용하는 이유 단순하게 WEB화면에서 무언가 부르거나 데이터를 조회하고 싶을 경우, 페이지 전체를 새로고침하지 않기 위해 사용한다고 볼 수 있다. 기본적으로 HTTP 프로토콜은 클라이언트쪽에서 Request를 보내고 서버쪽에서 Response를 받으면 이어졌던 연결이 끊기게 되어있다. 그래서 화면의 내용을 갱신하기 위해서는 다시 request를 하고 response를 하며 ..

그 외 2023.01.31

[HTTP] 트랜스포트 계층

1. 트랜스포트 계층의 역할 트랜스포트 계층의 역할은 수신지의 애플리케이션에 데이터를 전달하는 것이다. 할당된 포트 번호를 참고하여 데이터를 애플리케이션에 전달한다. TCP : 수신지에 데이터가 정확하게 전달되도록 전송 속도를 조절하거나 도달하지 않은 데이터를 재전송한다. UDP : VoIP나 동영상 스트리밍 서비스와 같이 실시간 통신이 필요하다면 전송속도를 중시하는 UDP사용. 별다른 처리를 하지 않는 대신 전송속도가 빠르다. 2. TCP가 정확하게 데이터를 전달하는 방법 TCP는 데이터 전송에 신뢰성을 더하기 위해 데이터를 세그먼트 단위로 분할하고, 전송 속도를 조정하며, 데이터가 제대로 전달되지 않았을 경우 재전송을 한다. TCP의 세그먼트는 데이터 본체에 TCP 헤더가 붙은 형태로 구성된다. TC..

HTTP 2023.01.31

[Spring] 빈 생명주기 콜백

1. 빈 생명주기 콜백 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스크링 빈 라이프 사이클 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고, 의존주입이 끝난 다음에 데이터를 사용할 수 있는 준비가 된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야한다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> ..

Spring 2023.01.30

[Spring] 조회된 Bean이 두 개 이상일 때 - @Autowired 필드명, @Qualifier, @Primary

0. 조회 대상 빈이 2개 이상일 때 해결 방법 @Autowired 필드 명 매칭 @Qualifier -> @Qualifier끼리 매칭 -> 빈 이름 매칭 @Primary 사용 1. @Autowired 필드 명 매칭 @Autowired가 등록된 빈을 찾을 때는 다음과 같은 매칭 규칙으로 빈을 조회한다. 주입받고자 하는 타입으로 매칭을 시도한다. 타입이 여러 개면 필드 또는 파라미터 이름으로 매칭을 시도한다. @Autowired private DiscountPolicy discountPolicy; @Component public class FixDiscountPolicy implements DiscountPolicy {} //그리고 @Component public class RateDiscountPolic..

Spring 2023.01.30

[HTTP] 네트워크 서비스와 애플리케이션 계층

1. 애플리케이션 계층의 역할 사용자가 직접 사용하는 프로토콜 HTTP - 웹 클라이언트와 웹 서버 사이에서 웹 페이지 데이터를 주고받는다 POP, SMTP, IMAP - 메일을 송수신하고 보관한다 SMB, AFP - LAN안에서 파일을 공유한다 FTP - 서버를 통해 파일을 주고받는다 Telnet, SSH - 원격에서 서버를 제어한다 사용자가 간접 사용하는 프로토콜 NTP : 네트워크에 연결된 장비들의 시스템 시간을 동기화할 때 사용 웹 페이지를 전송하는 HTTP HTTP : HTML + 화면 구성에 필요한 각종 파일들의 정보 HTTP 요청과 URL 특정 웹 페이지를 받아보기 위해서는 HTTP 요청을 보내야 하는데, 이때 URL이라는 문자열을 이용한다. URI와 URL URI (Uniform Resou..

HTTP 2023.01.30

[HTTP] 컴퓨터 네트워크

0. 컴퓨터 네트워크 네트워크 4계층 애플리케이션 계층 - HTTP, FTP 전송 계층 - TCP, UDP 인터넷 계층 - IP 네트워크 인터페이스 계층 애플리케이션 계층 사용자가 실제로 체감할 수 있는 서비스를 제공한다. (ex. 프로그램 : 웹 브라우저, 웹 서버) 애플리케이션 계층의 프로그램은 데이터의 내용을 보고 그에 맞는 서비스를 처리한다. 보고싶은 웹 페이지의 URL을 클라이언트 PC가 요청하면, 웹 서버 컴퓨터에서 웹 페이지의 HTML 데이터를 응답한다. 클라이언트는 응답으로 받은 데이터를 해석하여 웹 페이지 형태로 표시한다. (데이터 전송은 하위 계층에 위임) 트랜스포트 계층 애플리케이션 계층에서 전달받은 데이터를 목적지 애플리케이션 계층의 프로그램까지 전달 어떤 프로그램들이 서로 통신을 ..

HTTP 2023.01.30

[Spring] 필터(Filter) & 인터셉터(Intercepter)

1. 필터(Filter) 필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위밖에서 처리가 된다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것이고(스프링 빈으로 등록은 된다.), 디스패처 서블릿 전/후에 처리하는 것이다. 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 필터에서 적..

Spring 2023.01.30

[Spring] @RequestParam, @ModelAttribute, @RequestBody 정리

Spring에서 클라이언트로부터 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들 1. @RequestParam 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다. RequestParam은 필수 여부가 true이기 때문에 반드시 해당 파라미터가 전송되어야 한다. (위배시 400에러 발생) 반드시 필요한 값이 아니라면 required를 false로 설정하면 되고, defaultValue 옵션을 사용하여 기본값을 지정할 수 있다. String, int, Integer 등의 단순 타입일경우 @RequestParam 생략 가능 생략할 경우 스프링 MVC는 내부에서 required=false를 적용한다. @ResponseBody @RequestMapping("/request-param-required") p..

Spring 2023.01.29