www.naver.com는 도메인 네임으로 되어있기 때문에 DNS에 도메인을 검색하기 위한 요청을 보낸다.
DNS는 일련의 과정을 거친 후 (www.naver.com)에 대응하는 ip주소를 응답으로 돌려준다.
받은 ip주소를 사용하여 TCP통신을 통해 해당 ip서버에 요청을 보낸다.
요청을 받은 서버(www.naver.com)는 요청 내용에 대한 일련에 처리 과정을 거처 응답 메시지를 만든다.
응답메시지를 TCP통신을 통해 다시 클라이언트에게 전송한다.
OS 자체적으로 제공하고, 항상 고정되어 있는 IP(127.0.0.1) 과 호스트네임(localhost) 을 갖는다.
127.0.0.1은 예약된 IP주소로 인터넷상에 일반 IP로는 쓰일 수 없는 주소이다.
OS에서 가상으로 지원하며, 랜카드 등 디바이스 자체를 통과하지 않고 소프트웨어적으로 처리된다.
반면 자신이 인터넷 상에 할당된 IP의 경우
자신의 IP로 직접 접근할 때는 랜카드 드라이버 등 디바이스 영역을 통과하여 처리되기 때문에 localhost로 접근하는게 더 빠르고 시스템자원을 덜 쓰게 된다.
클라이언트가 자신을 거쳐 다른 네트워크에 접속할 수 있도록 중간에서 대리해주는 서버를 말한다. 서버와 클라이언트 사이에서 대리로 통신을 수행해주는 것을 프록시 라고 하고 그 기능을 하는 서버를 프록시 서버라 부르게 되는 것이다.
동작과정
사용하는 이유
프록시 서버 중 일부는 프록시 서버에 요청된 내용을 캐시를 사용해 저장해둔다. 그렇게되면 캐시에 저장되어있는 내용에 대한 재요청은 서버에 따로 접속할 필요가 없이 저장된 내용을 그대로 돌려주면 되기 때문에 전송 시간을 절약할 수 있다.
프록시 서버가 중간에 경유하게 되면 IP를 숨기는 것이 가능하다. 또한 프록시 서버를 방화벅으로 사용하기도 한다.
제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.
사용하는 이유
public class ClassName<T, K> {...}
public class Main{
public static void main(String[] args){
ClassName<String, Integer> a = new ClassName<String, Integer>();
}
}
추상클래스
abstract
예약어를 사용하여 상속을 통해서 구현해야만 한다는 것을 알려준다.인터페이스
차이점
추상클래스는 IS - A "~이다".
인터페이스는 HAS - A "~을 할 수 있는".
한개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.
변수
값을 선언하고 초기화 한 뒤에는 변경할 수 없다.
객체의 경우 객체 내부의 값은 final의 영향을 받지 않아 수정할 수 있다.
메서드
오버라이딩을 막을 수 있습니다.
클래스
상속을 막을 수 있다.
자바에서 제공하는 클래스 들 중 Wrapper 클래스 같이 재정의를 해서는 안되는 클래스의 경우 final 선언이 되어있다.
JAVA 7 버전 이후에 추가된 try-with-resource 기능은
try 구문에 리소스를 선언하고, 리소스를 다 사용하고 나면 자동으로 반납 해주는 기능이다.
사용 예시
try (SomeResource resource = getResource()) {
use(resource);
} catch(...) {
...
}
이때 try에 전달할 수 있는 자원은 AutoCloseable
인터페이스의 구현체로 한정된다.
리소스를 try안의 괄호에 전달할 때, ;
로 구분하여 다수의 리소스를 사용할 수 있다.
Bean은 Spring IoC Container가 관리하는 자바 객체, Spring Bean Container에 존재하는 객체를 말한다.
Spring IoC(Inversion of Control) Contatiner에 의해 인스턴스화, 관리, 생성된다.
Bean Container는 의존성 주입을 통해 Bean 객체를 사용할 수 있도록 해준다.
Spring에서 Bean은 보통 Singleton으로 존재한다.
Beans는 Application의 핵심을 이루는 객체이며, 대부분 Container에 공급하는 설정 메타 데이터(XML 파일)에 의해 생성된다.
Container는 이 메타 데이터를 통해 Bean의 생성, Bean Life Cycle, Bean Dependency(종속성) 등을 알 수 있다.
new 연산자로 생성하는 객체는 Bean이 아니고, ApplicationContext.getBean()으로 얻어질 수 있는 객체는 Bean이다.
즉, Spring에서의 Bean은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다.
Singleton
Prototype
POJO의 조건
1. 특정 규약에 종속되지 않는다.
즉, POJO란 객체지향적인 원리에 충실하면서, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트라 할 수 있다.
POJO의 장점