BackEnd/WEB 40

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 상태코드

[ HTTP 상태 코드 ] 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 목차 1xx (Informational) : 요청이 수신 되어 처리중 2xx (Successful) : 요청 정상 처리 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error) : .서버 오류, 서버가 정상 요청을 처리하지 못함 만약 클라이언트가 인식할 수 없는 상태코드를 서버가 반환한다면? - 클라이언트는 상위 상태 코드(큰 범위)로 해석해서 처리한다. - 따라서 미래에 새로운 상태코드가 추가된다고 하여도 클라이언트를 변경하지 않아도 된다. - 예) 299 ??? ..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 메서드 활용

[ HTTP 메서드 활용 ] 목차 클라이언트에서 서버로 데이터 전송 HTTP API 설계 예시 1. 클라이언트에서 서버로 데이터 전송 - 데이터 전달 방식은 크게 2가지 쿼리 파라미터를 통한 데이터 전송 GET 주로 정렬 필터(검색어) 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원가입, 상품 주문, 리소스 등록, 리소스 변경 - 1. 정적 데이터 조회 정리 이미지, 정적 텍스트 문서 조회는 GET 사용 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로를 단순하게 조회 가능 - 2. 동적 데이터 조회 정리 주로 검색, 게시판 목록에서 정렬 필터(검색어) 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용 조회는 GET 사용 GET은 쿼리 파라미터를 사용해서..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 메서드

[ HTTP 메서드 ] 목차 HTTP API를 만들어보자 HTTP 메서드 - GET, POST HTTP 메서드 - PUT, PATCH, DELETE HTTP 메서드의 속성 1. HTTP API를 만들어보자. - 요구사항 및 API URI 설계 회원 정보 관리 API를 만들어라. 회원 목록 조회 /read-member-list (x) /members (o) 회원 조회 /read-member-by-id (x) /members/{id} 회원 등록 /create-member (x) /members/{id} 회원 수정 /update-member (x) /members/{id} 회원 삭제 /delete-member (x) /members/{id} - 좋은 URI 설계 -> 가장 중요한 것은 리소스 식별 리소스의 의..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP기본

[ HTTP ] 목차 모든 것이 HTTP 클라이언트 서버 구조 STATEFULL, STATELESS 비 연결성(CONNECTIONLESS) HTTP 메시지 1. 모든 것이 HTTP(Hyper Text Transfer Protocol) HTTP 메시지에 모든 것을 전송할 수 있다. - HTML, TEXT - Img, 음성, 영상, 파일 - JSON, XML(API) - 거의 모든 형태의 데이터 전송 가능 - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 (1) HTTP 역사 - HTTP/0.9 1991년 : GET 메서드만 지원, HTTP 헤더X - HTTP/1.0 1996년 : 다른 메서드와, 헤더 추가 - HTTP/1.1 1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전 - RFC20..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_URI와 웹 브라우저 요청 흐름

[ URI와 웹 브라우저 요청 흐름 ] 목차 URI 웹 브라우저 요청 흐름 1. URI ( Uniform Resource Identifier ) - URI? URL? URN? URI는 로케이터(locater), 이름(name) 또는 둘 다 추가로 분류될 수 있다. URI : 자원(RESOURCE) 자체를 식별하는 방법. URL : 자원의 위치 URN : 자원의 이름 (거의 사용하지 않는다.) UNIFORM : 리소스를 식별하는 통일된 방식 RESOURCE : 자원, URI로 식별할 수 있는 모든 것 (제한 없음) IDENTIFIER : 다른 항목과 구분하는데 필요한 정보 URL - LOCATOR : 리소스가 있는 위치를 지정 URN - NAME : 리소스에 이름을 부여 위치는 변할 수 있지만, 이름은 변..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_인터넷 네트워크

[ 인터넷 네트워크 ] 목차 인터넷 통신 IP TCP, UDP PORT DNS 1. 인터넷 통신 클라이언트와 서버가 유선적인 케이블로 연결된 것이 아닌 이상 복잡한 인터넷 망을 통해 통신이 진행된다. 어떤 규칙으로 넘어가는가? 수많은 복잡한 노드를 거쳐서 어떻게 목적지로 도착하는가? 에 대한 의문을 갖고 학습해 보자. 2. IP(인터넷 프로토콜) - 역할 각 PC에 고유한 IP 주소가 부여되는데, 지정된 IP주소에 데이터를 전달한다. 패킷이라는 통신 단위로 메시지 전달 - IP 패킷 규칙 정보 출발지 IP, 목적지 IP, 기타..., 전송데이터 클라이언트와 서버사이의 노드끼리 목적지로 가기 위한 노드가 어디 있나? 하면서 소통을 진행하고, 서로 전달하면서 목적지에 도달한다. 이렇게 인터넷 망의 노드끼리 ..

📑 국비_Day90

XML데이터 파싱하기 [ drink.xml ] 1 2 3 4 5 6 7 8 9 흰우유 바나나우유 딸기우유 초코우유 메론우유 cs [ test_drink.html ] 데이터타입을 xml로 읽어오면 위의 xml파일을 읽어서 배열로 반환되어 data에 담기게 된다. 21-22행의 주석을 참고하여 파싱하는 방법을 익혀보자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 Insert title here function result(){ $("#result").empty(); $.ajax({ url : 'drink.xml', dataType:'xml'..

📑 DispatcherServlet

src/main/java에 annotation, controller, filter폴더를 복사 WEB-INF에 web.xml복사 메인 컨트롤러는 DisPatcherServlet(사용자 요청을 최초로 받고, 이를 분석해서 적당한 컨트롤러에게 작업을 지시)이다. 이 컨트롤러가 작업을 지시할 컨트롤러(실제로 일을 하는 컨트롤러)를 초기에 메인 컨트롤러가 생성될 때 함께 생성한다. 이를 자동으로 하게 만드려고 web.xml파일에 init-param을 지정하는 것이다. 원리를 아는 것도 중요하지만 사용방법을 익혀라! 프레임워크 초기 실행 (혹은 restart) DispatcherServlet 생성 DispatcherServlet init() web.xml에 있는 태그에 정의된 값을 읽어옴 DispatcherServ..

📑 MVC_국비Day79

본격적으로 스프링에 대해 학습하기 전에 지금껏 해왔던 Model2 패턴을 정리하고, 스프링에서 사용할 MVC패턴과 비교분석하면서 MVC패턴의 구조를 학습해보자. 모델2 패턴은 사용자 요청사항마다 각각의 서블릿(서버에서 실행되는 서비스 객체)이 존재한다. 사용자의 요청사항에 100가지라고 한다면 100개의 서블릿이 존재해야 하는 비 효율적인 구조가 있을 수 있기 때문에 이를 보완하기 위해서 등장한 것이 MVC패턴이다. MVC패턴은 사용자의 요청 수와는 무관하게 하나의 컨트롤러(Front Controller)만 만들고, 이 컨트롤러가 요청사항을 제어한다. 여기서 말하는 컨트롤러가 Model2패턴에서의 서블릿이라고 생각하면 비교가 수월할 것이다. [ FrontController ] 사용자 요청 접수 사용자 요..

📑 MyBatis_SubQuery_국비Day75

초기 프로젝트에 mybatis설정하는 순서 [복사해오는 경우 안 쓰는 내용을 수정하지 말고 모두 삭제해서 새로 만들자.] mybatis라이브러리 셋팅하기 (WEB-INF) context.xml파일 가져오기 (META-INF) sqlMapConfig.xml과 mapper파일 ~~.xml을 생성한다. (복사하는 경우 mapper파일의 명령은 모두 지우자.(에러가 발생할 가능성이 있음.)) MyBatisConnector 생성하기 -> SqlSessionFactory를 만들어 주는 객체 [ mybatis를 사용한 서브쿼리 구현하기 ] 1. dept_list가 호출되면, dept테이블에서 읽어온 deptno, dname, loc데이터를 dept_map으로 포장해서 반환한다. 2. 1에서 반환한 dept_map을 ..

📑 mybatis_검색기능_국비Day74

지난 시간에는 기존에 실습한 방명록 파일에 대한 DB접근을 mybatis ORM을 사용하도록 수정하는 작업을 거쳤다. 소스파일은 필자의 깃허브 주소에 있으니 내려받아서 DB접근을 mybatis로 수정하고, 검색기능을 추가하는 실습을 함께 따라해보면 좋을 것 같다. 소스코드는 여기에서 확인하길 바란다. [ visit_list.jsp ] 먼저, 모든 방명록을 한 곳에 리스트로 출력한 파일을 수정할 것이다. 이 부분에 검색을 할 수 있도록 ui를 다음과 같이 추가해주자. 어느 위치에 코드를 추가할지 인식할 수 있도록 하겠다. 15행에 value값으로 ${param.search_text}를 출력해주었는데, 이는 검색조건으로 자기 자신을 호출한 경우 정보 유지를 위해 사용한 것으로 자세한 설명은 밑에서 계속 하도..

📑 mybatis_국비Day73

지난 시간에는 JNDI를 사용한 mapping방법을 정리했다. 이 경우에는 DBCP에 대한 정보를 가지고 있는 JNDI방식이 context.xml파일에 정의된 내용을 기반으로 찾는 방식이므로 context.xml파일이 반드시 필요하다고 말을 했는데, 이 xml파일 없이도 mapping이 가능하다는 점을 오늘 배웠다. 후에 스프링을 배울때는 JNDI기법도 사용하긴 하지만 대부분 필자가 앞으로 사용하고자 하는 방식을 사용한다고 한다. 기본적으로 JNDI는 톰캣이 구동되면서 context.xml파일을 파싱하여 해당 환경 설정을 셋팅해주는 것인데 오늘 배운 POOLED방식을 사용하면 DBCP에 대한 정보를 입력해줌으로써 Mybatis가 직접 처리하도록 위임시키는 방법이다. 공유하는 소스코드에는 gogek.xml..