WAS(Web Application Server) 와 Web Server Web Server HTTP기반으로 동작 정적 리소스 제공 NGINX,APACHE .. WAS HTTP기반으로 동작 웹 서버 기능 + 프로그램 코드를 실행하여 애플리케이션 로직 수행 -> 사용자에 따른 동적 페이지 제공 동적 HTML, HTTP API, 서블릿, JSP, 스프링 MVC Tomcat ... 둘의 가장 큰 차이는 웹 서버는 정적 리소스를, WAS는 애플리케이션 로직을 제공하는 부분이다. -> WAS는 애플리케이션 코드를 실행하는데 특화 웹 시스템의 구성 웹 시스템은 WAS, DB로 구성할 수 있다. 하지만, WAS가 부담하는 영역이 커지고(정적 리소스까지 제공해야 함), 장애 발생 때 대응이 어렵다. -> WAS가 전..
HTTP 상태코드상태코드 - 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 ( OK, forbidden) 1xx (Informational) : 요청이 수신되어 처리중 2xx (Successful) : 요청 정상 처리 200 OK201 Created, 요청이 성공하여 새로운 리소스(회원 가입같은)가 생성됨202 Accepted, 요청은 접수되었지만 처리는 안됨204 No Content, 요청을 성공적으로 수행했지만, 반환할 데이터가 없음(필요가 없기에)3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 웹 브라우저는 3xx 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다. 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동, 기존 ..
인터넷 네트워크 IP(Internet Protocol, 인터넷 프로토콜) IP 주소를 통해 데이터를 패킷이라는 통신 단위로 전달한다. IP패킷의 구성요소 - 출발지 IP, 목적지 IP, 메세지 등.. IP의 한계? 비연결성 - 패킷을 받을 수 없는 상황임에도 패킷을 전송한다. 비신뢰성 - 패킷의 받는 순서, 받을 수 있다는 보장을 하지 못한다. 프로그램 구분 - 같은 IP를 사용한다면 어떻게 구분할 것인지 확정 못한다. 프로토콜 계층의 기본적인 동작 구조를 알아보자 인터넷 프로토콜 스택 - 애플리케이션 계층(HTTP, FTP), 전송 계층(TCP, UDP) 인터넷 계층(IP), 네트워크 인터페이스 계층 내가 무언가(메시지)를 전송하려 한다면 메시지가 애플리케이션 계층의 소켓 라이브러리를 통해 OS계층으로..
https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 문제 해결 방법 순열 문제라고 생각했습니다. 기본적으로 k개의 수 중 6개의 수를 골라야 하며, 수는 사전순으로(오름차순) 배치를 해야 하기에 범위를 나눠 생각했습니다. k개의 수 중 첫번째 자리에 올 수 있는 수는 (k-6)+1 가지 입니다. 예를 들어, k가 7이라면 첫번째로 올 수 있는 수는 1과 2 입니다. 3이 되는 순간 3, 4, 5, 6, 7 이 다섯 가지의 수밖에 없기 때..
빈 생명주기 콜백이란 DB Connection pool - 애플리케이션 서버와 DB 서버를 연결하여 미리 connection을 생성해 두는 것 (자세한 것 아님, 간단한 요약) DB connection pool이나 네트워크 소켓같이 애플리케이션 종료 시점에 연결을 모두 종료하려는 작업을 할 때, 객체의 초기화와 종료작업이 필요함 스프링 빈은 객체 생성 후 의존관계 주입이라는 사이클을 갖는다( 생성자 주입은 예외 ) 즉, 의존관계 주입이 끝나야 데이터를 사용할 수 있는 준비가 완료되는 것이다. 의존관계 주입이 완료된 시점을 알 수 있는 방법이 바로 콜백이다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료( 이는 스프링 전용 ..
의존관계 주입 방법의 종류 1. 생성자 주입 생성자를 통해 의존관계를 주입받는다. 생성자 호출 시점에 단 1번 호출되는 것이 보장된다. 불변, 필수 의존관계에서 사용한다. -> 수정할 수 있는 기능을 추가하지 않는 것이 중요 생성자가 하나인 경우 @Autowired를 사용하지 않아도 스프링 컨테이너가 자동으로 의존관계 주입한다. 2. 수정자(setter) 주입 setter로 필드의 값을 변경하는 수정자 메서드를 통해 의존관계 주입 ( 메서드명은 set필드명 ) 선택, 변경가능 의존관계에서 사용한다. -> 호출하여 변경할 수 있는 경우 +) 자바빈 프로퍼티 규약 -> 필드의 값을 직접 변경하지 않고 get, set 메서드를 통해 읽고 수정하는 내용 3. 필드 주입 필드에 바로 의존관계를 주입시키는 방법 외..
https://www.acmicpc.net/problem/1913 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 문제 접근 방법 달팽이가 움직이는 모습은 위와 같다. 시작점을 먼저 찾고 ( N/2, N/2 ) 시작점을 기준으로 움직일 수 있는 범위를 제한하여 구동하면 된다. 예를 들어 1->2, 2->3을 갈때는 최대 한 칸만 움직일 수 있지만 3->5, 7->10 등 움직일 수 있는 범위가 늘어나는 포인트가 생긴다. 이 포인트들은 달팽이가 위, 아래로 움직일 때 (x,y에서 x값이 증가하거나 감소할 때) 이..
컴포넌트 스캔과 의존관계 자동 주입 이전까지 스프링 빈을 등록하려 했다 - @Bean을 통해 설정 정보에 직접 등록 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan 기능을 제공한다. 컴포넌트 스캔은 @Component이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. +) @Configuration이 붙은 설정 정보도 자동 등록이 됨, 충돌을 조심하자 단, 스프링 빈 이름은 클래스 이름의 첫 문자를 소문자로 변경하여 사용한다. ( AddPrice -> addPrice ) 또한, 의존관계를 자동으로 주입해주는 @Autowired 기능도 제공한다. 디폴트는 스프링 컨테이너가 타입이 같은 빈을 찾아서 주입한다. 컴포넌트 스캔의 탐색 위치와 기본 스캔 대상 컴포넌트 스캔의 ..