Spring boot

    [HTTP] http 기본

    모든 것이 HTTP 대부분의 웹개발에서 http를 기본으로 사용한다. HTTP는 Hyper Text Transfer Protocol의 줄임말이지만, 현재 텍스트 이외에 이미지, JSON 등 거의 모든 형태의 데이터도 전송할 수 있다. 직접 TCP 연결을 맺어 통신하기보다 서버간에서도 HTTP로 통신하는 것이 대부분이다. HTTP는 1.1버전이 가장 중요하다. 현재 HTTP2와 HTTP3 버전이 나왔지만 성능 개선의 정도이며 주요 기능은 1.1버전에서 추가되었다. 최근 1.1버전은 RFC7230~7235이므로 자료를 찾을 때 주의하자 HTTP는 1.1과 2에서는 TCP 프로토콜을 사용하나, 3버전부터는 성능 개선을 위해 UDP로 변경되었다. HTTP는 클라이언트-서버 구조로, stateless와 비연결성을..

    [HTTP] URI와 웹브라우저 요청 흐름

    URI URI (Uniform Resource Identifier)는 네트워크 상의 자원을 나타내는 고유 식별자이다. URL (Uniform Resource Locator)은 자원의 위치를 나타내고 URN (Uniform Resource Name)은 자원의 이름을 나타낸다. URL과 URN은 URI에 포함된다. 일반적으로 URN만으로는 실제 리소스를 찾을 수 없기 때문에 잘 사용되지 않고 URI, URL을 비슷한 개념으로 사용된다. URL 문법 scheme://[userinfo@]host[:port][/path][?query][#fragment] scheme: 프로토콜 - 어떤 방식으로 자원에 접근할지를 알리는 약속 host: 호스트명(www.google.com 등). 도메인명 또는 IP주소 직접 사용 ..

    [HTTP] 인터넷 네트워크

    인터넷 통신 클라이언트와 서버는 인터넷을 매개체로 통신한다. 인터넷 망은 매우 복잡하다. 어떻게 클라이언트의 메세지가 올바르게 서버로 전달되는지 알아보자 IP (Internet Protocol) 각 클라이언트와 서버는 IP주소를 가지고 있다. 메세지를 전송할 때 IP주소를 지정하면, 패킷(Packet)단위로 데이터를 쪼개 전달한다. 그러나 IP프로토콜만으로는 아래와 같은 문제가 발생할 수 있다. - 전송상대가 서비스 불능상태일때도 패킷을 전송한다. - 전송 중 패킷을 잃어버릴 수 있다. - 전송 중 패킷의 순서가 바뀔 수 있다. - 같은 IP를 사용하는 애플리케이션이 복수이다. (어느 애플리케이션에 전달해야 하는지 모른다.) TCP, UDP TCP와 UDP는 인터넷 프로토콜 스택의 4단계 중 전송 계층에..

    [기본] 빈 스코프

    메모 intellij 단축키 ctrl + alt + N : 인라인 리턴 빈 스코프란? 스코프(scope, 범위)란 빈이 존재할 수 있는 범위를 뜻한다. 스프링이 지원하는 스코프 싱글톤: 기본, 컨테이너의 시작부터 종료까지 유지됨 프로토타입: 빈의 생성과 의존관계 주입까지만 관여함 웹 관련: request- 웹 요청 들어올때부터 나갈때까지, session- 웹 세션의 생성부터 종료까지, application- 웹의 서블릿 컨텍스트와 같은 범위 스코프를 지정하는 방법 @Scope("prototype") 애노테이션을 클래스에 붙인다. 작성하지 않으면 기본인 싱글톤으로 간주된다. 프로토타입 스코프 싱글톤 스코프 빈은 항상 같은 인스턴스를 반환한다. 프로토타입 스코프는 조회시마다 항상 새로운 인스턴스를 생성해 반..

    [기본] 빈 생명주기 콜백

    메모 tcp(전송 제어 프로토콜), 핸드셰이킹 오래걸려서 미리 데이터베이스랑 커넥션함 ApplicationContext 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 생성자를 통해 의존관계를 주입하면 생성자에서 초기화를 진행해도 되지만, setter주입같이 의존관계주입을 따로 진행하는 경우가 있다. 이런 경우 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서들 통해 초기화 시점을 알려준다. 종료도 같다. 참고) 객체의 생성과 초기화를 분리하자. 생성자는 객체를 생성하는 책임을 가지며 초기화는 생성된 값을 활용해 커넥션을 연결하는 등의 동작을 수행한다. 따라서 두 부분을 명확하게 나누는 것이 유지보수측면에서 좋다. 초기화 작업이 단순하면 생성자에서 처리하는 것이 더 좋을수도..

    [기본] 의존관계 자동 주입

    메모 ctrl + F12: 메소드 보기 ctrl + alt + B : 구현체 보기 ctrl + alt + insert : new ctrl + B : 해당 클래스 사용하는 파일 추적 ctrl + N : Navigate to class 다양한 의존관계 주입 방법 의존관계 주입 방법은 크게 4가지이다. 생성자 주입 - 주로 불변/필수 의존관계에 사용한다. 생성자가 1개인경우 @Autowired 생략 가능 수정자 주입(Setter 주입) - setter 메서드를 통해 DI한다. 선택/변경 가능성 있을 때 사용 필드 주입 - 비추 외부 변경이 불가능해 순수 자바코드로 테스트 불가능하다. 일반 메서드 주입 참고: 스프링 컨테이너가 관리하는 빈이어야 동작한다. 실무에서는 자동/수동 등록 모두 사용한다. final키워..

    [기본] 컴포넌트 스캔

    메모 @Repository 스프링이 데이터 예외를 추상화해서 반환해준다 특정 DB에 한정적인 예외를 스프링이 추상화해준다 /?? @Target(Element.TYPE) 필드에 붙냐 어디에 붙냐 이런건데, TYPE라 하면 클래스 레벨에 붙는 것? 코드를 조금 더 깔끔하게 하기 위해 어설프게 추상화 등 우선순위가 생기면 나중에 잡기 힘든 버그가 됨 코드가 조금 더 많아지더라도 명확하게 짜는 것이 좋음 컴포넌트 스캔과 의존관계 자동 주입 시작하기 직접 설정 정보에 입력할 스프링 빈이 수백개가 되면 관리가 힘들어진다. 그래서 스프링은 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. 의존관계 주입은 @Autowired로 가능하다. 설정 클래스에 @ComponentScan, @Configuration..

    [기본] 싱글톤 컨테이너

    메모 잘 설계한 객체는 컴파일 오류만으로 웬만한 오류가 잡힘 99% 싱글톤 사용 싱글톤을 사용하지 않을 때: http 요청에 맞춰 빈 라이프사이클을 정할 때(고객이 들어올 때 생성, 나갈 때 죽이는 등) 등 ctrl + shift + T : create new test ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 하면 AppConfig도 Bean 에 등록됨 싱글톤 패턴 클래스 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 구현하는 데에는 여러가지 방법이 있다. static으로 객체를 하나만 생성해두고 getInstance로 가져다 씀. private 생성자를 통해 외부에서 new ..