1. Empty Activity 프로젝트 생성

2. Device Manager 추가

저는 미리 Create device 버튼을 통해 생성한 상태라 Pixel 4 API 33이 이미 존재하는 상태입니다.

3. app/res/layout/activity_main.xml 작업

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textViewMedicationId"
        android:layout_width="90dp"
        android:layout_height="16dp"
        android:layout_marginStart="32dp"
        android:text="medicationId"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toStartOf="@+id/textViewName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.451"
        app:layout_constraintStart_toEndOf="@+id/textViewName"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="name"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextSelectId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

4. 테스트 프로그램 실행

해당 화면이 나온다면 성공~!

웹 페이지는 객체(objects)들로 구성되며 웹 페이지는 보통 참조 객체들이 포함된 기본 HTML 파일이다.

따라서 클라이언트가 웹 페이지에 방문하여 시각적으로 보기 위해서는 기본 HTML 및 객체 정보를 받을 필요가 있는데 이때 사용하는 프로토콜이 HTTP 프로토콜이다.

(HTTP 프로토콜은 웹상에서 불특정 다수와 통신이 가능하도록 설계된 프로토콜)

 

프로토콜 이란?

  • 서로 간의 통신을 위한 약속, 규칙
  • 주고 받을 데이터에 대한 형식을 정의한 것

HTTP(Hyper Text Transfer Protocol)

  • 클라이언트-서버 모델
  • 텍스트 기반의 프로토콜이라 단순하고 읽기 쉽다. (Human Readable)
  • 상태를 유지하지 않는다. 즉 클라이언트의 정보를 저장 하지 않음 (stateless)
    • 따라서 같은 클라이언트가 보낸 요청도 구분하는 것이 불가능 
    • 해결책: Cookie(클라이언트에 정보 저장)와 Session(서버에 정보 저장), JWT를 통해 보완 가능
  • 비 연결성 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어 버린다. (Connectionless)
    • 해결책: Keep-Alive 헤더 속성 사용(단 성능 하락 주의)
  • 커스텀 헤드를 추가 하여 확장이 가능하다.
  • 포토 번호 80번을 사용한다.
  • 트랜스포트 계층의 TCP 프로토콜을 사용한다. (신뢰성 있는 전송을 보장)
  • 애플리케이션 계층의 프로토콜이다.

HTTP 종류

  • HTTP/1.1, HTTP/2는 TCP 기반 위에서 동작
  • HTTP/3는 UDP 기반 위에서 동작

HTTP 메시지

요청 메시지: 클라이언트가 URL을 입력시 해당 프로토콜을 사용하여 전송

  • GET
    • 리소스를 얻는 것이 목적 Read 하는 방식
    • 바디 정보 없음, 헤더 정보만 존재
      • 대신 querystring으로 추가 데이터를 보내는 것이 가능
    • 서버에서 리소스를 얻어 올 때 사용
    • 소용량 데이터 전달
    • 보안에 취약
    • 데이터 공유에 유리 
  • POST
    • 리소스를 Write 하는 방식
    • 바디 정보 있음
      • 서버에 전송할 데이터 존재
    • 서버에 정보를 제공해야 할 때 사용
    • 바디 정보를 통해 대용량 데이터 전달 (제한 x)
    • TLS 암호화 프로토콜 (구 SSL)을 같이 사용할 경우 보안에 유리
    • 데이터 공유에는 불리  

응답 메시지: 서버가 클라이언트의 요청에 응답 하여 전송하는 메시지

  • 상태 코드:
    • 1xx Information: HTTP 1.1 때 추가됨 (정보 교환)
    • 2xx Success: 접속 성공
    • 3xx Redirect: 다른 URL로 요청해라
    • 4xx Client Error: 클라이언트가 요청을 잘못 한 경우 ex 404 not Found
    • 5xx Server Error: 서버가 클라이언트 요청을 처리하는게 실패 한 경우

+HTTP 에서 Java를 직접적으로 사용이 불가능

  • 웹에서 자바를 처리하기 위해서 Tomcat 등장

+ Recent posts