이전의 JDBC를 이용한 DB 접근 코드를 보면DB에서 커넥션을 획득해야 SQL을 전달할 수 있다.DB 드라이버가 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handswake 같은 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되
JDBC의 등장 이유 데이터베이스에 데이터를 저장할때는 3개의 과정이 있다. 커넥션 연결 SQL 전달 결과 응답 이때 MySQL 드라이버를 쓸수도 있고, Oracle 드라이버를 쓸수도 있다. 각각의 드라이버를 사용할때의 문법이 다르다. 이를 추상화시킨 인터페이스가 JD
출처https://www.acmicpc.net/problem/1715문제정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카
@Controller 스프링이 자동으로 스프링 빈으로 등록한다(내부에 @Component 있음) 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다. > @RequestMapping 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지을 수 있다. 변수들 value: 경...
(인프런에서 김영한 강사님의 스프링 MVC 1편 강의자료를 첨부하였습니다.) https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 동작 순서 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 ...
Web Server HTTP 기반으로 동작 정적 리소스 제공 WAS(Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스) ex) 톰캣 > Web Server vs WAS 웹 서버는 정적 리소스, WAS는 애플리케이션 로직 WAS는 애플리케이션 코드를 실행하는데 더 특화되어있다. 웹 시스템 구성 - W...
캐시가 없다면 해당 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 이를 해결하기 위한것이 '캐시' 캐시를 적용하면 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다. 비싼 네트워크 사용량을 줄일 수 있다. 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 ...
header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용) field-name은 대소문자 구별 없음 HTTP 헤더의 용도 HTTP 전송에 필요한 모든 부가정보 ex) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 캐시 등등 엄청 많다 필요시 임의의 헤더 추가 가능 --...
상태 코드 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 • 1xx (Informational): 요청이 수신되어 처리중 • 2xx (Successful): 요청 정상 처리 • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 • 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 ...
HTTP API 컬렉션 HTTP API 스토어 HTML FORM 사용 HTTP API 컬렉션 POST 기반 등록 • 회원 목록 /members -> GET • 회원 등록 /members -> POST • 회원 조회 /members/{id} -> GET • 회원 수정 /members/{id} -> PATCH, PUT, POST • 회원 삭제 /members...
클라이언트에서 서버로 데이터 전송할때 데이터 전달 방식은 크게 2가지이다 쿼리 파라미터를 통한 데이터 전송 GET, 주로 정렬 필터(검색어) 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원가입, 상품주문, 리소스 등록/변경 등등 클라이언트에서 서버로 데이터를 전송할때 4가지 상황이 있다. 정적 데이터 조회 이미지, 정적 데이터 조회 G...
HTTP API URI를 설계할 때 가장 중요한 것은 리소스 식별이다. -> 리소스를 URI에 매핑한다. > 회원 관리 API 예시 회원 목록 조회 /members 회원 조회 /members/{id} 회원 등록 /members/{id} 회원 수정 /members/{id} 회원 삭제 /members/{id} >> 참고: 계층 구조상 상위를 컬렉션으로 보고 ...
HTTP(HyperText Transfer Protocol) HTTP 메시지에 모든 것을 전송한다. ex) html, text, json, xml(API), 이미지, 음성, 영상, 파일 등등 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용한다. HTTP 특징 클라이언트 서버 구조 무상태 프로토콜(statel...
URI(Uniform Resource Identifier) = URL(... Locator) + URN(... Name) Uniform: 리소스를 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것 Identifier: 다른 항목과 구분하는데 필요한 정보 Locator: 리소스가 있는 위치를 지정 Name: 리소스에 이름을 부...
인터넷에서 컴퓨터 둘은 어떻게 통신할까? 인터넷은 복잡하다. 다양한 노드들로 구성되어있다. 그중에서 아무것도 없이, 내가 원하는 노드만을 골라 원하는 서버에 가는 것은 매우 힘들 것이다. 이를 해결해주기 위해 IP가 있다 IP(Internet Protocol) 각각의 컴퓨터에 IP 주소를 부여한다. ex) 100.100.100.1 등등 클라이언트와...
빈 스코프란? 지금까지 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다 > 스프링은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되...
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 이번 장은 스프링을 통해 초기화 작업과 종료 작업을 어떻게 진행하는지 살펴볼 것이다. > 스프링 빈은 객체를 생성하고, 의존관계 주입을 진행한다. 초기...
의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 메서드 주입 생성자 주입의 특징은, 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변(final), 필수 의존관계에 사용한다. > 생성자가 딱 1개 있다면 @Autowired를 생략해도 자동 주입된다. - 스프링 빈에만 해당 수정자 주입은 선택, ...
이전까지, 스프링 빈을 스프링 컨테이너에 등록할 때는, 자바 코드의 @Bean을 사용해서 직접 등록했다. 의존관계 주입도 자동으로 됐다. 하지만 모든 객체를 @Bean을 이용해서 등록하는 것은 상당히 귀찮다. 이를 위해 스프링에서는 컴포넌트 스캔이라는 기능을 제공한다. > ### 컴포넌트 스캔 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 기능 그...
이전에 스프링 없이 만든 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다. 스프링 컨테이너를 사용하면 해당 클래스의 인스턴스를 딱 1개만 생성되는 것을 보장해준다. 이건을 '싱글톤 컨테이너'라 한다. 싱글톤 패턴을 적용하면 고객의 요청이 올때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 ...