[WebDevCurriculum] OOP(객체지향 프로그래밍) 심화

Hyo Kyun Lee·2021년 10월 29일
0

WebDevCurriculum

목록 보기
13/44

개요

객체지향 프로그래밍의 원칙을 이해한다.

Checklist

  • 관심사의 분리 원칙이란 무엇인가요?
    → SoC, seperation of concerns
    → 관심사, 책임, 기능을 한가지씩 담당하는 개별적인 객체(부분)으로 분리해야 한다는 설계원칙이다.

  • 웹에서는 이러한 원칙이 어떻게 적용되나요?
    → 관심사 분리 원칙을 구현하기 위해 단앨책임 원칙, 개방폐쇄 원칙, 인터페이스분리 원칙을 달성할 수 있다.
    → application의 functional programming(class)를 통해 각각의 동작이 OOP의 기본적인 분리원칙을 준수하고 있는지 파악이 가능하다.
    → unit test를 통한 동작 확인이나, 이러한 확인 과정을 통해 객체지향 프로그래밍이 잘 진행되고 있는지 확인할 수 있다.

  • 로컬 스토리지란 무엇인가요?
    → 웹사이트의 cookie, session과 같은 정보들을 개인PC의 라이브러리 등 특정 공간에 저장하면서 사용자 맞춤적인 사이트 구동에 참조하는 저장소를 일컫는다.
    → 해당 정보들이 저장되어있는 공간에서 웹사이트가 참조하여, 사용자가 방문했던 이력 및 관심사 등을 파악하고 이를 이후 동작에서 활용한다.

  • 로컬 스토리지의 내용을 개발자 도구를 이용해 확인하려면 어떻게 해야 할까요?

→ 로컬 스토리지는 웹 상의 응용프로그램(application) 탭에서 확인할 수 있고, 로컬PC 라이브러리와 어떤 정보를 주고받았는지 파악할 수 있다.

참조개념

  • 객체지향 프로그래밍 설계원칙

S : SRP(Single Responsibility Principle, 단일책임원칙)

→ 하나의 객체는 하나의 책임(객체간 영향을 최소화하고 한가지 동작만을 수행)만을 가지도록 설계되어야 한다.
→ 여러 class, 객체들이 기능을 공유하거나 영향을 받지 않도록 설계하며, 동시에 전체적인 function에 대한 응집도를 높인다.

O : OCP(Open Closed Principle, 개방폐쇄원칙)
→ 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 로직이 설계되어야 한다.
→ 클래스, 객체를 변경하지 않고도 클래스 환경을 변화할 수 있도록 구성한다.

L : LSP(Liskov Substitution Principle)
→ 부모 클래스와 자식 클래스 간의 일관성이 있어야 한다.
→ 클래스를 재정의하지 않으며, 자식 클래스는 최소환 부모 클래스의 행위는 수행할 수 있어야 한다.

I : ISP(Interface Segregation Principle)
→ 단일책임원칙과 밀접한 개념이며, 인터페이스를 클라이언트에 특화할 수 있도록 분리시켜야 한다.
→ 범용 인터페이스로 인해 여러 클라이언트(클래스)가 영향을 받기 보다는, 개별적인 클라이언트에 특화되어 서로의 영향을 최소화할 수 있도록 구성한다.

D : DIP(Depedency Inversion Principle)
→ 불가피한 의존관계를 형성할 때는 거의 변화하지 않는 객체, 변하기 어려운 객체에 의존하도록 설정한다.
→ 여기서의 의존관계란 한 클래스가 동작을 수행할 때 다른 클래스의 영향을 받는 경우를 말하며, 기본적으로 OOP는 이러한 의존관계를 최소화해야 한다.

  • 스토리지 작동
    → 특정 웹사이트에서의 쿠키 및 세션을 사용자가 허용할 경우, 해당 사이트의 관련 토큰들을 사용자PC(Data, local directory 등)에 저장한다.
    → 웹사이트들은 저장되어있는 쿠키, 세션 정보를 사용자PC로부터 받아와 로그인 지속 등에 활용한다.
    → 로컬스토리지는 휘발성으로 창을 닫으면 정보가 저장되지않고 날아가는 반면, 쿠키 및 세션 스토리지는 비휘발성인 특성상 정보를 어느 정도는 유지하고 있다.

쿠키

  • client(사용자PC) local에 저장되어 있는 token(key, value) 파일이다.
  • 유효시간 범위내에서는 정보가 저장되어, 사용자 인증을 유지하는데(로그인 지속, authentication 등) 활용한다.
  • Response Header에 Cookie 설정을 하여 생성할 수 있고, Request 정보에 유저 정보가 담긴 Cookie를 보낸다면 server가 이를 파악하는 원리로 진행한다.

※ 기본적으로 HTTP request/response는 일회성으로, client와 server 간의 요청-응답이 종료되면 연결이 끊어진다.
→ 따라서 쿠키정보는 지속적인 데이터 교환을 위해 server로 계속 전송된다.
※ 이러한 client, server 간의 끊임없는 데이터(쿠키)교환으로 인한 불필요한 데이터 전송, 용량 낭비 등을 줄이고자 만든 client 저장소가 세션/로컬 스토리지이다.
※ 이와 더불어 cookie에 식별자를 추가하여 보안성을 강화한 것이 session이다.

세션

  • cookie와 마찬가지로 사용자 정보 저장 및 인증을 위해 저장하는, key & value로 이루어진 문자열 데이터이다.
  • cookie에 식별자(session id)를 넣어 보안성을 강화하고, 이를 해당 server/DB에 저장한다(윈도우를 닫기 전까지는 해당 정보를 저장).

로컬

  • server로 자동 전송되지 않는다.
  • 간단한 정보(서버에게 지속 전달될 필요가 없고, 보안이 중요하지 않은)들을 저장하는 장소이다.
  • 세션과 달리 데이터가 지우지 않는 한 영구적으로 보존된다(자동 로그인 등에 활용 가능).

0. why

  • 로그인, authentication 데이터를 활용하기 위해 저장소 개념을 이해한다.

1. what

  • 데이터 특징에 따라 어떠한 저장소를 사용해야 하는지 이해한다.
  • 각 저장소마다 어떠한 특징을 가지고 있는지 이해한다.

2. how

  • 각 저장소에 저장되어있는 정보를 사용하기 위한 API, method 등을 생각해본다.
  • 웹사이트 로그인 등 실무적으로 cookie, session 정보를 활용하기 위해 어떠한 logic을 구성해야 하는지 고민해본다.

3. 참조링크

OOP 설계원칙
https://gmlwjd9405.github.io/2018/07/05/oop-solid.html

로컬저장소 / 쿠키저장소 / 세션저장소
https://racoonlotty.tistory.com/entry/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%A1%9C%EC%BB%AC-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%99%80-%EC%84%B8%EC%85%98-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80
https://kadamon.tistory.com/8

0개의 댓글