android

12. android 여러가지 공부하기

코코넛딩 2023. 11. 29. 17:40

챗 지피티와 구글 번역기를 사용하여 공부한 것입니다. 틀린 점은 댓글 주세요.

 

CookieJar

  • okhttp3의 interface이다.
  • HTTP 쿠키에 대한 정책과 지속성을 제공한다.
  • 정책에 따라 이 인터페이스의 구현은 허용할 쿠키와 거부할 쿠키를 선택하는 역할을 담당한다.
  • 지속성으로서 이 인터페이스의 구현은 쿠키 저장도 제공해야한다.
	loadForRequest(HttpUrl url)
  • url에 대한 HTTP요청을 위해 jar에서 쿠키를 로드합니다.

 

saveFromResponse(HttpUrl url, List<Cookie> cookies)
  • jar의 정책에 따라 이 저장소에 대한 HTTP 응답의 쿠키를 저장한다.
    • 저장소 : 웹 개발에서 '저장소에 대한 쿠키를 저장한다는 말'은 쿠키를 사용자의 브라우저에 저장한다는 의미
    • 쿠키 : 소량의 데이터를 사용자의 컴퓨터에 저장하는 정보

 

Retrofit 

 

Header

@Headers("accept: application/json", "content-type: application/json")

 

  • accept: application/json
    • accept : 이 헤더는 클라이언트(예: 웹 브라우저, API를 사용하는 애플리케이션)가 서버로부터 원하는 데이터 타입을 지정한다.
    • application/json : 클라이언트가 JSON을 받고 싶다는 의미
  • content-type: application/json
    • content-type : 클라이언트가 서버로 보내는 데이터 타입을 지정
    • application/json : 보내는 데이터가 JSON형식이다.

 

Interceptor

  • HTTP 요청이나 응답을 중간에 가로채서 추가 작업을 수행하는 컴포넌트이다.
  • 인터셉터의 두가지 종류
    • Application Interceptor
      • 네트워크 요청/응답 자체보다는 요청을 보내기 전과 받은 후의 처리에 집중한다.
    • Network Interceptor
      • 실제 네트워크 요청/응답에 관여
      • 요청이 전송된 직후와 서버로 부터 응답 받는 순간에 요청과 요청과 응답을 가로채는 기능을 한다.
      • 요청과 응답을 검사하고 수정하거나 추가적인 처리를 할수 있다.

JSESSIONID

  • 자바 서버 플랫폼(예:Java Servlet)에서 사용되는 세션 식별자 입니다.
  • 세션 관리 : 서버가 클라이언트의 각각의 세션을 구별하고 관리하는 데 사용된다. 웹 애플리케이션에서 사용자가 로그인하면 서버는 각 사용자의 세션을 식별하기 위해 고유한 JSESSIONID를 생성합니다.
  • 쿠키 형태로 저장 : 일반적으로 JSESSIONID는 쿠키의 형태로 클라이언트의 브라우저에 저장됩니다. 사용자가 서버에 요청을 보낼 때 마다 이 쿠키를 함께 전송하여 서버가 사용자의 세션을 식별할 수 있도록 합니다.  
    • 세션(Session)
      • 웹 애플리케이션에서 사용자의 상태와 데이터를 지속적으로 유지하기 위한 방법입니다.
      • 상태 정보 유지
        • 웹 서버는 세션을 사용하여 사용자의 로그인 정보, 프로필 설정, 장바구니 내용 등과 같은 상태 정보를 유지합니다.
      • 고유 식별자
        • 각 세션은 고유한 식별자(예: 세션 ID)를 가지며, 이를 통해 서버는 다양한 사용자의 요청을 구별하고 각 사용자의 특정 세션 데이터에 접근할 수 있습니다.
      • 브라우저 종료시 만료
        • 일반적으로 세션은 사용자가 브라우저를 닫거나 일정시간 동안 활동이 없을 때 만료됩니다.
      • 서버 저장
        • 세션 데이터는 주로 서버 측에 저장됩니다.
        • 쿠키와는 다른 점으로 쿠키는 클라이언트 측(사용자의 브라우저)에 데이터를 저장합니다.
      • 보안
        • 세션은 사용자 인증이나 민감한 데이터의 처리에 사용되므로, 세션관리는 보안적인 측면에서 중요하다.
      • 서버 부하 
        • 세션은 서버에 저장되므로, 많은 사용자를 처리할 때 서버의 부하를 증가할 수 있습니다.
        • 이를 관리하기 위해 세션 데이터의 크기를 최소화하고, 만료 정책을 적절히 설정하는 것이 중요하다. 

 

Retrofit

addCallAdapterFactory(RxJava3CallAdapterFactory.create())

 

  • Retrofit.Builder()에 추가하는 함수
  • RxJava3 어댑터 팩토리를 추가한다.
  • 이를 통해 Retrofit 응답을 RxJava3의 Observable, Flowable등으로 변환 할 수 있게 해줍니다.

 

Kotlin

 

class Example {
    @JvmOverloads
    fun sayHello(name: String, times: Int = 1) {
        for (i in 1..times) {
            println("Hello, $name!")
        }
    }
}

 

  • kotlin에서 사용되는 어노테이션이다.
  • 코틀린 함수나 생성자에 적용된다.
  • java 코드와의 상호 운용성을 향상시키기 위해 사용된다.
  • 자바는 코틀린의 기본 매개변수 값을 지원하지 않는다.
  • @JvmOverloads를 사용하면 코틀린이 자바에 대해 함수 오버로딩을 자동으로 생성해준다.
  • 코드 설명
    • sayHello(String:name, int times) : 두 매개변수 모두를 받는 메서드
    • sayHello(String:name) : times 매개변수는 기본값 1을 사용하는 메서드

 

SSLSocketFactory

 

  • SSLSockerFactory는 사용자 지정 SSL 소켓 팩토리
  • 특히 HTTPS 연결을 위한 보안 통신을 설정할때 사용됨
  • SSLSocketFactory 인스턴스는 SSL 소켓을 생성하는데 사용되며, 앱이 HTTPS 연결을 설정할 때 사용된다.
    • SSL 소켓의 주요 기능
      • 암호화
        • SSL 소켓은 데이터를 암호화하여 전송합니다. 
        • 이는 데이터가 전송 중에 도청되거나 변경되는 것을 방지한다.
      • 인증
        • SSL 소켓은 일반적으로 서버의 인증을 위해 디지털 인증서를 사용합니다.
        • 이를 통해 클라이언트는 서버의 정체성을 확인할 수 있으며, 이는 피싱 공격과 같은 보안 위협을 줄이는 데 도움이 됩니다. 
      • 데이터 무결성
        • SSL은 데이터가 변경되지 않고 전송 중에 손상되지 않았음을 보장합니다.

 

X509TrustManager

  • 주요 기능
    • 서버 인증서 검증(checkServerTrusted)
      • 클라이언트가 서버에 연결할 때, 서버가 제공하는 인증서가 신뢰할 수 있는지 검사한다.
      • 이 메소드는 서버 인증서의 유효성, 만료 여부, 발행기관의 신뢰도등을 검증할 수 있다.
    • 클라이언트 인증서 검증(checkClientTrusted)
      • 양방향 SSL/TLS 연결에서 사용되며, 클라이언트의 인증서가 신뢰할 수 있는지 서버가 검증한다.
    • 신뢰할 수 있는 발행 기관(getAcceptedIssuers)
      • 신뢰할 수 있는 인증서 발행 기관의 목록을 제공한다.
      • 이 목록은 인증서 검증 과정에서 참조된다.
  • 중요한 고려 사항
    • SSLContext와의 연동
      • X509TrustManager는 SSLContext와 함께 사용되어 SSL/TLS 연결의 보안 설정을 구성합니다.

 

 

window.decorView

  • 안드로이드에서 winodw.decorView는 Activity의 최상위 뷰를 나타냅니다.
  • 간단히 말해, Activity의 전체 화면을 채우는 뷰입니다.
  • 이 뷰는 Activity의 모든 시각적 콘텐츠를 포함하고 있으며, 윈도우 자체의 배경, 타이틀, 보더 등과 같은 시스템 UI요소들도 포함합니다.
  • 사용 목적
    • 전체 화면 모드로 전환할 때 사용됨
    • 윈도우의 상단에 있는 시스템 UI를 숨기거나 보이게 할 때 사용됩니다.
    • 특정 UI요소에 대한 글로벌 적용을 하고 싶을 때 사용됩니다.
    • 터치 이벤트나 키보드 이벤트를 윈도우 전체에 걸쳐 처리하고 싶을 때 사용됩니다.