maven을 사용한 통신

:)·2024년 4월 11일

개발

목록 보기
18/19

maven

공식 홈페이지: https://maven.apache.org/

  • 아파치 소프트웨어 재단에서 개발하는 Java 기반 프로젝트의 라이프사이클 관리를 위한 빌드 도구

통신(동기식, 비동기식)

  1. 동기식 통신
    1. 서버와 통신 시 화면이 전환됨→ HTML (페이지)를 주고 받음 (화면: 서버가 보내는 응답=html))
    2. 요청 후 그에 대한 응답이 와야 새로운 요청을 보낼 수 있는 방식
      1. 장점: 서버에서 구현되므로 js 필요 x
      2. 단점: 일부변경에도 전송되는 데이터의 양↑ , 응답을 받을때까지 대기 시간 ↑
  2. 비동기식 통신
    1. 클라이언트가 서버에 보낸 요청의 응답을 기다리지 않고 새로운 요청을 보낼 수 있음
    2. 요청한 데이터만 보내줌, 웹페이지 변경 X
    3. 응답받은 데이터는 브라우저가 js에 따라 화면 일부를 변경하여 출력
    4. 대표적으로 서버는 rest api 로 데이터(응답)만 제공해주는 방식으로 동작함
      1. 장점: 웹페이지 일부변경의 경우에는 해당 데이터만 통신
      2. 단점: 브라우저가 데이터를 이용해서 태그요소를 출력하기 위 js 코딩이 많아짐
  • 동기 통신에서는 submit을 하면 사용자가 선택한 카테고리가 초기상태로 바뀜 → 선택 카테고리를 받아와서 설정하는 방법
  • 비동기 통신에서는 화면이 바뀌지 않으므로 아래 코드가 필요 없음
    • const temp = '${category}';
  • 기본 개념+생성
    1. 빌드: 컴파일부터 최종 소프트웨어 산출물 생성
      1. 실행에 필요한 모든 것들을 포함하여 만듬
        -자바 .class
        -정적: 이미지, html,js, css
        -외부 라이브러리 클래스
    2. 최종산출물 - 패키징(포장)
      1. .jar : 일바적인 자바 애플리케이션으로 만들어짐(스프링 부트도 포함)
        .war : 서블릿/jsp 웹컨테이너(WAS)가 처리해야 할 애플리케이션
    3. 빌드도구
      1. maven, gradle
        1. mavern: xml 형식의 파일
        2. gradle: groovy 언어 이용 형식
      2. maven web project: pom.xml에 빌드와 관련된 정보 저장 (Project Object Model)
    4. 생성
      1. dynamic web project 생성
      2. 프로젝트 우클릭 ->configure ->Convert to Maven Project
      3. 패키징 필수 확인: war-> Finish-> pom.xml
      4. pom.xml 태그 안에 필요한 외부 라이브러리 추가 ->의존성 추가
        태그 안에 필요한 포함
        물리적 경로: C:\Users\YJ.m2\repository
        - 메이븐 레포지토리 / pom.xml
            ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/f88884fd-7f36-4783-83a6-4917dcb35046/9ccd58db-bdfa-4a8f-89bf-d34235ae52d9/Untitled.png)
            
            ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/f88884fd-7f36-4783-83a6-4917dcb35046/6a048ee7-56aa-42a5-bf3c-21baeb418b06/Untitled.png)
            
            ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/f88884fd-7f36-4783-83a6-4917dcb35046/345af07a-0660-4eb4-a98d-3015c85d068b/Untitled.png)
            
            [pom.xml](https://prod-files-secure.s3.us-west-2.amazonaws.com/f88884fd-7f36-4783-83a6-4917dcb35046/ff0a6dc3-34bd-4f91-927f-5aac1525d658/pom.xml)
            
      • 새로운 의존성을 추가할때마다 프로젝트 이름 우클릭-> maven->update project
  • 코드 기존의 동기식: 화면 송출 비동기식: 실행
    public class RequestControllerMapping {
    
    	private static final Map<RequestMap, Controller> mapping = new HashMap<>() ;
    	//rest api 컨트롤러는 /api로 시작하도록 함
    	public static void init() {
    		//기존 통신 컨트롤러  - 화면 보여주기
    		mapping.put(new RequestMap("/products","GET"), new ProductsController());
    		mapping.put(new RequestMap("/buys","GET"), new BuysController());
    		
    		
    		//비동기 통신을 위한 api 제공 컨트롤러
    		mapping.put(new RequestMap("/api/customer/list","GET"),new ApiCustomerListController());
    		mapping.put(new RequestMap("/api/customer","POST"),new ApiCustomerPostController());
    		mapping.put(new RequestMap("/api/customer","GET"),new ApiCustomerGetController());
    		mapping.put(new RequestMap("/api/product/list","GET"),new ApiProductListController());
    		mapping.put(new RequestMap("/api/product","POST"),new ApiProductPostController());
    		mapping.put(new RequestMap("/api/buy/list","GET"),new ApiBuyListController());
    	}
    
    	public static Controller getController(RequestMap key) {
    		return mapping.get(key);}} //value에 해당하는 controller 객체 리턴
    
  • REST API

    • REST API(REpressentational State Transfer)

      • HTTP의 장점을 활용하기 위한 소프트웨어 아키텍처.
      • HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정
      • RESTful 서비스는 REST 의 규칙에 따라 만들어진 시스템
    • 구성

      • 사용하려는 자원 resource : URI (명사)
      • 행위 verb : HTTP 요청 메소드를 이용하여 CRUD 를 구현
      • 표현 repressentations : 데이터
      • 클라이언트의 Ajax 통신 요청에 대한 응답으로 데이터를 제공하기 위해서 서버에서 api를 구현하는 방식
        → 요청 파라미터를 URI로 전달해서 처리
        • 참고 : 비동기통신 구현의 어려운점. 실행결과 확인이 어렵다. 추가도구
          https://chrome.google.com/webstore/ 에서 검색 : talend
        • 데이터를 주고 받는 가상의 url..

      노란색으로 그어진 해당 부분 주소는 개발자가 임의대로 지정한 값

GET, POST

  • GET: 데이터를 요청할때만 사용 ( 화면을 띄워줄때)
  • POST: 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용( 게시글을 작성..)→전
  • 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용 (DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create )
  • 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body ( X ), POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body (O)
  • 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등 X
    • 멱등: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
      • GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답 동일
      • 반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등X
  • PUT
    • PUT은 rest 방식에서 수정 동작을 의미하지만, 검색값을 페이로드 전달하기 위해 사용
    • node.js 서버와 동작할때는 주의해야함
    • put,path,delete 등 다른 메소드 방식도 rest api에 있다는 것을 보여주는 예시
      • xhr.open('PUT,'api/product')
      • xhr.send(jsonData) ->요청전송, Put 보낼때는 페이로드가 있음 (DELETE는 X)

비동기 통신 구현 순서

  1. 마이바티스 sql 매퍼파일과 sql
  2. *dao 구현과 테스트(junit)
  3. api 컨트롤러 구현
  4. *talend 에서 3번 api 컨트롤러 테스트
  5. 실행 화면(jsp) 만들기
  6. 자바스크립트 xhr객체, jquery,axios 중 한 가지 방법으로 비동기통신 요청하기
  7. 요청이 정상 처리되면 응답에 대한 처리 내용 자바스크립트로 구현하기
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글