New World

[JAVA #3] 헷갈리는 용어들의 정리(Overriding vs Overloading / Session vs Cookie / Call by Reference vs Call by Value / == vs equals()) 본문

Self-Study/Study

[JAVA #3] 헷갈리는 용어들의 정리(Overriding vs Overloading / Session vs Cookie / Call by Reference vs Call by Value / == vs equals())

hyeovi 2022. 9. 20. 23:04
728x90
반응형

Overriding vs Overloading

Overloading(오버로딩) Overriding(오버라이딩)
같은 이름의 다른 함수를 호출
- 같은 이름의 메소드를 여러개 정의
- 매개변수의 타입이 다르거나 개수가 달라야 함
- java, 다른 시그니쳐를 만드는 것 => 정적 바인딩

*return type과 접근 제어자는 영향 X

- 상속에서 나온 개념
- 상위 클래스 (부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의 (java, 동적 바인딩됨)

 

? Overloading, Overriding을 각각 설명해주세요.

Overloading은 같은 이름의 메소드를 여러개 정의하는 것이며 Overriding은 상속으로 나온 것으로 클래스가 재정의 되는 것을 의미한다.

Session vs Cookie

사용 이유

HTTP프로토콜*은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않아 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

Session Cookie
- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
- Session에 관련된 데이터는 Server에 저장
웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
- Cookie에 비해 보안성이 좋다.
- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
- 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써, Server가 아닌 Client에 텍스트 파일로 저장된다.
-
Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.
(정보 유출 가능, Session보다 보안성이 낮은 이유)

 

HTTP 프로토콜이란?

hppt는 플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동하는 인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. 어떤 종류의 데이터도 전송할 수 있도록 설계되어있다.

 

HTTPS에 대해서 설명하고 SSL Handshake에 대해서 설명해보세요.

HTTPS는 HTTP에 보안 계층을 추가한 것으로, HTTP는 따로 암호화 과정을 거치지 않는다.

HTTPS는 제3자 인증, 공개키 암호화, 비밀키 암호화를 사용한다.

 

제3자 인증은 믿을 수 있는 인증기관에 등록된 인증서만 신뢰

클라이언트는 TCP 3way handshake를 수행한 이후 Client Hello를 전송한다. 서버는 인증서를 보낸다.

 

공개키 암호화는 비밀키를 공유

클라이언트는 받은 인증서를 신뢰하기 위해서 등록된 인증기관인지 확인한다. 이 인증서는 브라우저에 내장되어 인증기관의 개인키로 암호화 되어 공개키로 검증할 수 있다. 클라이언트는 사이트의 정보와, 서버의 공개키를 얻을 수 있다.

 

비밀키 암호화는 통신하는 데이터를 암호화

서버의 공개키로 통신에 사용할 비밀키를 암호화해서 서버에 보내 개인키로 확인하고 이후 통신은 공유된 비밀키로 암호화되어 통신한다.

 

Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?
A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감

 

? 세션이 뭔가요? 서버 여러 대일 때 세션을 어떻게 처리하죠? (참고)

스티키 세션, 세션을 최초에 생성한 서버로 요청을 고정하는 방식. 정합성은 해결되지만 로드 밸런싱과 가용성면에서 문제가 발생

세션 클러스터링을 이용한다. (클러스터링 : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하도록 만드는 것.)

세션을 생성할 때마다 복제하여 각 서버의 세션 정보를 일치시켜 정합성을 유지한다. 매번 세션 객체를 복제하는데 오버헤드가 발생하는 것을 고려해야한다.

세션 스토리지 분리를 하여 가용성을 확보한다. 별도의 세션 저장소를 사용하는 것으로 서버가 아무리 늘어나도 각각의 서버에 세션 스토리지 정보를 입력하면 세션을 공유할 수 있게 된다.

 

? 인증 토큰 방식과 세션을 통한 인증 방식은 어떤 점에서 다른지? (참고)

세션 인증 방식

- 서버 측에서 사용자들의 정보를 기억하고 사용자들의 정보를 기억하기 위해 세션을 유지해야한다

1. 세션 => 사용자가 인증할 때, 서버는 이러한 정보를 메모리에 저장하는데 로그인 사용자가 늘어날 경우에 서버의 RAM에 부하가 걸려 DB에 무리가 간다

2. 확장성 => 사용자가 늘면 더 많은 트래픽을 처리하기 위해 서버를 확장해야한다. 세션을 사용하면 세션을 분산시키는 시스템을 설계해야한다.

3. CORS => 웹 어플리케이션에서 세션을 관리할 때 자주 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 쿠리를 여러 도메인에서 관리하는 것은 번거로움

 

토근 인증 방식

- 인증 받은 사용자들에게 토큰을 발급, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 유효성 검사, 상태를 유지하지 않아 Stateless 한 구조를 갖는다

 

1. 무상태성 & 확장성

토큰은 클라이언트 측에 저장되어 서버는 무상태이며 클라이언트와 서버의 연결고리가 없어 확장성이 크다.

 

2. 보안성

클라이언트가 서버로 요청을 보낼 때 더 이상 쿠키를 전달하지 않아 쿠키 사용으로 인한 취약점이 없지만 토큰 환경의 취약점이 존재한다.

 

3. 확장성

로그인 정보가 사용되는 분야의 확장을 의미하며 토큰에 선택적인 권한만 부여하여 발급 가능하며 OAuth의 경우 소셜 계정을 이용해 로그인이 가능하다

 

4. 여러 플랫폼 및 도메인

CORS를 해결할 수 있으며 여러 디바이스를 호환시키고 더 많은 종류의 서비스를 제공할 수 있다

 

 

? 쿠키에 대해서 설명해주세요.

사용자 정보를 유지할 수 없는 HTTP 속성을 방문 기록을 남겨 사용자 정보를 기억해 해결해주는 것으로 사용자 정보를 클라이언트 텍스트 파일로 저장하여 다른 사람이 임의로 정보를 변경할 수 있어 보안성이 낮다.

Call by Reference vs Call by Value

인자를 전달하는 방식

 

Call by Reference - 매개 변수의 원래 주소에 값을 저장하는 방식. 클래스 객체를 인수로 전달한 경우, 메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미칩니다.
Call by Value -함수에서 값을 복사해서 전달,  인자로 전달되는 변수를 함수의 매개변수에 복사, 메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미치지 않는다.

 

? C 언어에서 포인터를 사용해서 주소값을 넘겨주면 무엇이 되는가?

포인터를 사용한다고 해도 주소값을 복사해서 넘겨주는 것이므로 Call by address가 된다. C언어에서는 call by reference를 공식적으로 지원하지 않는다.

 

? Call by value와 Call by reference 차이

인자를 전달해주는 방식이라는 것은 동일하지만 call by value는 값만 전달하는 것으로 메소드 밖의 변수에 영향을 미치지 않지만 call by reference는 주소에 값을 저장하여 전달하는 것으로 메소드 밖의 변수에도 영향을 미친다.

 

==과 equals() 차이

== : 비교하고자하는 대상의 주소 값을 비교
equals() : 비교하고자하는 대상의 내용 자체를 비교

 

동일성(identity)와 동등성(equality)에 대해 설명

동일성은 객체의 주소를 비교하며 동등성은 객체의 같음을 비교한다.

기본적으로 자바에서는 Object 클래스에 정의된 equals() 메소드가 동일성 비교를 하여 개발자는 원한다면 equals() 메소드를 오버라이딩해서 동등성의 판단 기준을 정의한다.

 

? equals and hashcode 재구현한 이유?

 

? equals를 오버로딩하여 사용해봤나요? hashCode란 무엇인가요?

 

 

반응형
Comments