23.08.25 항해 99 16기 주특기 Spring 1일차
오늘 공부한 것
* Spring 입문주차 1주차 강의 듣기
주특기 주차 시작의 날이 밝았다
주특기 주차에서는 총 5단계의 문제가 주어지는데
이중 최소 3단계 이상을 해결해야한단다
spring 강의를 들으며 진행해야하는데
진짜 1도 감이 안온다 큰일이다..
어떻게 방햐성을 잡아야할지 모르겠어서
일단 1주차 강의를 듣기 시작했다
듣다보면 방향성도 좀알게 될꺼고
구글에서 이야기하는 내용도 이해가 가겠지라고 기대하면서
그레이들(Gradle) 빌드 자동화 시스템
작성한 JAVA 코드를 설정에 맞게 자동으로 Build 해줌
라이브러리를 관리해줌
JAVA 소스코드를 실행가능한 jar 파일로 만들어줌
1) Build 소스코드를 실행 가능한 결과물로 만드는 일련의 과정
개발을 하면서 필요로 하는 외부 라이브러리들을 dependencies 부분에 작성하면 Maven Repository 와 같은 외부저장소에서 자동으로 다운로드해옴
네트워크 여러대의 컴퓨터 또는 장비가 서로 연결되어서 정보를 주고 받을 수 있게 도와주는 기술
Client 와 Sever 사용자는 브라우저를 이용하여 서버에 정보 요청을 하는데 그러기위해선 해당 서버의 정보가 필요
이것이 IP주소다
API 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙
인터페이스 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고 받는 경우의 접점이나 경계면 사용자가 기기를
쉽게 동작시키는데 도움을 줌
RESTful API API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처
REST 아키텍처 스타일을 따르는 API를 REST API라고함
REST 아키텍처를 구현하는 웹서비스를 RESTful 웹서비스라고함
고유 리소스 식별자 서버는 고유한 리로스 식별자로 각 소스를 식별
REST 서비스의 서버는 일반적으로 URL을 이용하여 수행 URL은 리소스에 대한 졍로 지정
메서드 개발자는 종종 HTTP를 사용하여 RESTful API를 구현 HTTP 메서드는 리소스에 수행해야 하는 작업을 서버에
알려줌
1) GET 서버의 지정된 URL에 있는 리소스에 엑세스함 GET 요청을 캐싱하고 RESTful API 요청에 파라미터를
넣어 전송하여 정송 전에 데이터를 필터링 하도록 서버에 지시할 수 있다
브라우저의 주소창에 URL을 입력하면 서버에 요청을 보냄
2) POTS 서버에 데이터를 전송. 요청과 함께 데이터 표현이 포함됨. 동일한 POST 요청을 여러번 전송하면 동일한
리소스를 여러번 생성하는 부작용이 있다
웹 서버에 데이터를 게시할 때 사용
예) 회원가입, 게시글작성, 댓글작성)
3) PUT 서버의 기존 리소스를 업데이트함. POST와 달리, RESTful 웹서비스에서 동일한 PUT 요청을 여러번
전송해도 결과는 동일
Web Server 브라우저에서 URL을 입력해서 페이지를 요청했을 때 HTTP의 요청을 받아들여 HTML 문서와 같은 정적인
콘텐츠를 사용자에게 전달하는 역할 정적인 콘텐츠 즉, 이미 완성되어 있는 HTML과 같은 문서를 브라우저로
전달
로그인하여 MyPage를 요청 과 같은 동적인 요청이 들어왔을 땐 자체 처리가 어렵기에 WAS
(웹 어플리케이션 서버)에 전달
WAS 종류는 Apache, Nginx 등이 있다
웹서버와 똑같이 HTTP 기분으로 동작하고 웹서버에서 할 수 있는 기능 대부분을 WAS에서 처리가능
로그인, 회원가입을 처리하거나 게시물을 조회하거나 정렬하는 등 다양한 로직을 수행하는 프로그램을 동작시킬 수
있는데 그 종류로는 Tomcat, JBoss 등이 있다
Apache Tomcat Tomcat 동적인 처리를 할 수 있는 웹서버를 만들기 위한 웹 컨테이너 기본적으로 8080 포트 사용됨
Apache Tomcat 정적인 데이터 처리와 동시에 동적인 데이터 처리를 효율적으로 해줄 수 있다
Spring AOP, Ioc/Di 등과 같은 핵심기능이 있다 이런 핵심기능을 사용하기 위한 너무나 많은 xml 설정이 필요함
SpringBoot Spring의 불편한 점을 개선하기 위해 등장
xml 설정대신 JAVA의 애너테이션 기반 설정을 저극적으로 사용함으로써 간편하게 설정 가능
기본적으로 개발에 필요한 설정 정보들을 일반적으로 많이 사용하는 설정값을 default로 하여 자동 설정
외부 라이브러리나 하위 프레임워크들의 의존성 관리성이 쉬워짐
가장 강력한 점 내장 Apache Tomcat
HTTP 데이터를 주고받는 양식을 정의한 통신규약(컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속) 중 하나
브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보를) 요구(Request) 한다
서버는 브라우저가 원하는 페이지가 있는지 확인 후 데이터를 실어 응답(Response)해준다 없다면 페이지에 대한
데이터 반환함
1. Status Code
1) 1xx(Informational) 요청이 수신되었으며 처리가 계속됨 주로 웹브라우저와 같은 클라이언트가 서버와의 연결
상태를 확인하기 위해 사용
2) 2xx(Successful) 클라이언트의 요청이 처리되었음을 나타냄 클라이언트가 요청한 데이터가 서버에서 제공됨을
의미
3) 3xx(Redirection) 클라이언트가 추가적인 조치를 취해야함 주로 페이지 이동, 리다이렉션 등에 사용됨
4) 4xx(Client Error) 클라이언트에 오류가 있음 클라이언트의 잘못된 요청, 인증 오류등에 사용됨
주로 많이 사용되는 코드는 404인데 클라이언트가 요청한 페이지나 리소스를 서버에서 찾을 수
없음을 의미
5) 5xx(Server Error) 서버에 오류가 발생했음을 나타냄 주로 서버의 오류, 서버 과부화 등에 사용됨
2. Request Headers 브라우저에서 서버로 보낸 Request 데이터
3. Response Headers 서버가 웹페이지 데이터와 함께 보낸 추가 데이터
Header (추가데이터. 메타데이터) GET naver.com HTTP/1.1
브라우저가 어떤 페이지를 원하는지
요청받은 페이지를 찾았는지
요청받은 데이터를 성공적으로 찾았는지
어떤 형식으로 데이터를 보낼지
이외에도 의사표현을 위한 데이터를 모두 넣고 주고 받음 GET, POST 등 메서드도
헤더에 포함되어 서버로 보내짐
Payload (데이터, 실제 데이터) 서버가 응답을 보낼 때에는 항상 보낼 수 있다
클라이언트(브라우저)가 요청을 할 때도 보낼 수 있다
GET 메서드를 제외하곤 모두 보낼 수 있다가 HTTP에서의 약속임
블랙박스 테스팅 소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서 즉 웹 서비스의 사용자 입장에서
동작을 검사
장점 누구나 테스트가 가능
단점 기능이 증가될수록 테스트 범위가 증가, 테스트 하는 사람에 따라 퀄리티가 다를 수 있다
개발자 테스트 개발자가 직접 본인이 작성한 코드를 검증하기 위해 작성
장점 빠르고 정확한 테스트 가능하고 자동화 가능, 리팩토링이나 기능 추가시 편리
단점 개발시간이 오래 걸리고 유지 보수하는 비용이 많이듬
JUnit Spring에서 테스트 코드 작성을 잘할수 있도록 제공하는 환경
Lombok 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동으로 생성해줌으로써 코드를 절약
할 수 있게 도와주는 라이브러리
1) @NoArgsConstructor 파라미터가 없는 기본생성자
2) @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자
3) @RequiredArgsConstructor final 이나 @NonNull인 필드값만 파라미터로 받는 생성자
MVC 소프트웨어 디자인 패턴중 하나
소프트웨어를 구성하는 요소들을 분리함으로써 코드의 재사용성과 유지보수성을 높이고 협업을 용이하게함
1) Model 데이터와 비즈니스 로직 담당 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행
2) View 사용자 인터페이스를 담당 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
3) Controller Model과 View 사이의 상호작용을 조정하고 제어 사용자의 입력을 받아 Model에 전달하고 결과를 바탕
으로 View를 업데이트
Spring MVC DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데 이는 Front Controller 패턴으로 설계되어있다
Spring에서 MVC 디자인 패턴을 적용해 HTTP 요청을 효율적으로 처리하고 있다
DispatcherServlet Servlet 은 자바를 이용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양
Servlet 동작
1) 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청
2) HttpServletRequest, HttpServletResponse 객체 생성 쉽게 HTTP에 담긴 데이터를 사용하기 위한
객체임
3) 위의 요청을 확인해서 어떤 Servlet과 매칭되는지 web.xml에서 찾음
4) Servlet에서 service 메서드 호출 후 브러우저의 요청 Method에 따라 doGet 혹은 doPost 등의
메서드 호출
5) 호출한 메서들의 결과를 그대로 반환하거나 동적 페이지 생성한 뒤 HttpServletResponse 객체에
응답을 받아 Client(브라우저)에 반환
6) 응답 완료 후 생성한 HttpServletRequest, HttpServletResponse 객체는 소멸됨
Front Controller DispatcherServlet를 사용하여 API 요청을 효율적으로 처리함
1) Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet가 요청을 분석
2) DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청을
전달
Handler mapping API path와 Controller 메서드가 매칭되어있다
1) GET /api/hello → HelloController 의 hello() 함수
2) GET /user/login → UserController 의 login() 함수
3) GET /user/signup → UserController 의 signup() 함수
4) POST /user/signup → UserController 의 registerUser() 함수
3) Controller → DispathcerServlet 해당 Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과 즉,
데이터('Model')와 'View' 정보를 전달합니다.
4) DispatcherServlet → Client ViewResolver 통해 View에 Model을 적용하여 View를 Client에게
응답으로 전달합니다.
@RequestMapping (“/api”) /api로 시작되는 요청은 class 로 넘어가서 각 메소드에 매칭됨
Jackson JSON 데이터 구조를 처리해줌
Object를 JSON 타입의 Stiring으로 변환 해주고 JSON 타입의 Stirng을 Object로 변환해줌