공부/개인적

개인 cs공부

hoonssss 2023. 8. 21. 10:15
반응형
SMALL

1. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.

=> RDBMS는 관계형 데이터베이스로 정해진 스키마에 따라 테이블 형태로 저장되며 데이터는 행(row), 속성을 열(column)입니다. SQL을 사용하며 트랜잭션이라는 하나의 작업단위로 수행되고 특징으로는 원자성, 일관성, 격리성, 지속성입니다.(Join연산 가능)

단점은 스키마 변경이 어려워 대규모데이터를 처리하기 유연하지 못할 수 있습니다.(확장이 어려움)

종류 : MySQL, PostgreSQL, ORACLE 등등

=> NoSQL은 비관계형 데이터베이스로 스키마가 고정되지 않고 유연(융통성)합니다.

그러므로 확장성이 좋고 대용량 데이터 처리에 좋습니다.

단점으로는 Join연산이 제한적이며 데이터가 중복될 가능성이 큽니다.

종류 : MongDB, Firebase의 Realtime Database 등등

2. mvc 패턴에 대해서 설명해주세요.

=> Model, View, Controller의 약자로

Controller은 사용자의 입력 처리와 흐름제어 그리고 Model과 View를 연결해주며 View 는 레이아웃과 화면을

Model 은 데이터베이스와 로직을 관리합니다.

Mvc패턴은 관심사를 분리해 유지보수에 좋고 확장성과 유연성에 유리합니다.

3. RDBMS의 정규화에 대해 설명해주세요.

=> 정규화는 중복된 데이터를 정리해 데이터의 무결성과 일관성을 보장해줍니다.

정규화 단계는 총 6개이며 1차는 하나의 컬럼에 중복된 데이터를 제거, 2차 정규화는 부분 종속성을 제거, 3차 정규화는 컬럼간의 종속성을 없애줍니다.

대부분의 정규화는 3차까지 진행하며 조회를 위해 반정규화를 할 때 도 있습니다.

1NF : 모든 메인이 원자값. 한 에트리뷰트에는 하나의 값만 들어가야 한다.

2NF : 분적 함수 종속을 제거해야 한다. 즉, 완전 함수적 종속 관계를 만족한다.

3NF : 행적 종속 관계를 제거 해야 한다.

BCNF : 정자가 모두 후보키인 경우. 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.

4NF : 치 종속성이 제거 되어야 한다.

5NF : 인 종속성이 만족 되어야 한다.

※ 첫 글자를 따서 도부이결다조 -> 두부이겨다줘 로 외우기도 한다.

4. Primary Key, Foreign Key에 대해 설명해주세요.

=> Primary Key는 기본키로 테이블에 하나만 존재해야 하며 기본으로 유니크 Null불가입니다.

그러므로 PK를 통해 각각의 컬럼을 구분하며 PK를 통해 데이터를 다룹니다.

=>FK는 외래키로 다른 테이블을 참조하기 위해 다른 테이블의 PK를 가져와 컬럼에 넣어주며

PK와 동일하게 유니크하며 Null이 불가능합니다.

5. HTTP 메서드에 대해 설명해주세요.

=> Http메서드란 클라이언트와 서버 사이에서 이루어지는 통신으로 요청(Request), 응답(Response) 방식입니다.

주요 메서드로는

GET : 조회

POST : 데이터를 전송하여 처리 or 등록

PUT : 덮어쓰기(전체 변경) 없다면 생성

PATCH : 데이터 변경(일부)

DELETE : 삭제

이렇듯 HTTP메서드는 각각의 동작을 나타내 어떤 동작을 할지도 전달이 가능합니다.

6. CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.

=> 웹 브라우저는 보안상의 이유로 동일 출처 정책을 따르는데 이 정책은 자신과 동일한 출처(프로토콜, 도메인, 포트)에서만 접근할 수 있도록 제한하는 것입니다.

CORS설정은 서버에서 Access-Control-Allow-Origin 헤더를 사용해 원하는 도메인 요청을 제어할 수 있습니다.

(요약 : CORS는 웹 애플리케이션의 보안을 유지하면서도 다양한 출처의 리소스 접근을 가능하게 하는 중요한 보안 기능 중 하나입니다.)

7. 브라우저의 작동방식에 대해서 설명해주세요.

=> 웹 브라우저에 URL을 입력 -> DNS서버에서 도메인 이름을 IP주소로 연결 -> 브라우저는 IP주소를 통해 TCP/IP연결 -> 웹서버는 HTTP요청을 처리 후 브라우저에 리소스를 전달

8. 쿠키, 세션의 개념과 차이를 설명해보세요

=>쿠키는 클라이언트(유저)쪽에 저장되는 데이터, 세션은 서버에서 사용자의 정보를 저장

쿠키 : 쿠키에는 사용자의 식별, 설정, 로그인 정보등이 저장되고 만료 날짜를 설정하여 자동으로 삭제가 가능합니다.

보안성 낮음, 적은 양의 데이터만 저장 가능

=>세션은 사용자가 로그인하면 고유 세션ID를 생성하고 이를 통해 사용자를 확인하여 데이터를 전달해줄 수 있습니다.

쿠키에 비해! 보안성 높은, 상대적으로 큰 양의 데이터 저장 가능

9. TCP/UDP에 대해서 설명해주세요.

=>TCP는 연결 지향적인 프로토콜로 데이터 전송 중 손실이나 손상된 패킷을 검출하여 완전한 데이터 전달을 보장하는 신뢰성이 있습니다.

또한 데이터 양을 조절하여 손실을 방지하고 혼잡 상황에서 데이터 손실을 최소화합니다.

=>UDP 비연결성프로토콜로 연결 과정없이 데이터를 전송하며 손실이나 손상된 패킷을 해결하지 못함으로 오버헤드가 적어 빠른 데이터 전송이 가능합니다.

10. http, https 차이점에 대해 설명해주세요

=>HTTP는 80번 포트를 사용하며 데이터를 평문으로 전송하기 때문에 보안에 취약하며 보안 인증서를 요구하지 않아 신뢰성이 떨어져 피싱등의 공격 위험이 높습니다.

=>HTTPS는 443포트를 사용하며 인증서를 사용하여 데이터의 무결성을 보장하며 보안 소켓 계층을 통해 데이터를 암호화 해 인증된 웹 사이트임을 보장해줍니다.

사용자측에서 public Key로 암호화 한 내용은 해당 서버의 private Key만 복호화 가능하다.

11. DI, IoC에 대해 설명해주세요.

=> DI는 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입하는 방법으로, 외부에서 의존성을 주입하여 결합도를 낮추고 코드의 재사용성과 유지보수성을 향상시킵니다. DI의 장점으로는 불변성 활용이 가능하며, 객체 생성 시 빈을 주입함으로써 NullPointerException을 방지할 수 있으며, 재사용성이 높아집니다.

=>IoC는 제어의 역전으로 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에서 결정되는 것을 의미합니다. 이를 통해 객체 간의 낮은 결합도, 유연한 코드 작성, 가독성 증가, 코드 중복 방지, 유지보수 용이성 등의 장점을 얻을 수 있습니다.

12. 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?

=> 객체지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화하여 상태와 행위를 가진 객체를 생성하고, 이러한 객체들 간의 유기적인 상호작용을 통해 프로그램을 구성하고 설계하는 패러다임입니다.

여기서 "추상화"는 실제 세계의 사물이나 개념을 핵심적인 특징에 집중하여 단순화하고 모델링하는 과정을 의미하며, 상속은 상위 클래스로부터 속성과 기능을 물려받아 반복적인 코드를 최소화하여 재사용성을 높이는 개념입니다. 또한 다형성은 객체나 속성이 여러 가지 형태를 가질 수 있는 성질을 나타내며, 캡슐화는 데이터와 메서드를 클래스 내부에 묶어서 접근을 제어하고 외부에 구현의 세부사항을 숨기는 것을 의미합니다.

이러한 객체지향 프로그래밍의 원칙과 개념을 활용하면 코드의 재사용성이 높아지고 유지보수가 용이해지며, 복잡한 시스템을 모듈화하고 구조화하는 데 도움을 줍니다. 다양한 프로그래밍 언어에서 객체지향 프로그래밍을 지원하며, 이를 통해 소프트웨어의 개발과 디자인을 보다 효율적으로 수행할 수 있습니다.

13. 대용량 트래픽 발생 시 어떻게 대응해야 하나요?

=> 대용량 트래픽 발생이 원인을 찾고 상황에 맞게 부하가 일어나는 곳에 스케일 아웃과, 스케일 업을 해줍니다.

서버의 부하일 경우 오토스케일리으로 서버를 늘리고 LoadBalancer을 통해 부하를 나누어 성능을 높히고,DB의 부하일 경우 Database의 IO성능 향상을 위해 조회R 와 CUD생성 업데이트 딜리트 로 데이터 베이스를 확장하고 Redis와 같은 캐쉬 저장소를 이용해 변경이 적게 일어나는 데이터를 DB가 아닌 Redis에서 가져와줍니다.

+index와 쿼리 최적화

14. ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?

=> ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 객체지향적인 코드입니다.

예시로는 자바 기반의 Hibernate Jpa와 Entity Framework .NET Framework가 있습니다.

ORM을 사용할때 쿼리가 복잡해지는 경우 방법으로는 QueryDSL이 있습니다.

쿼리문을 자바코드로 작성해 즉각적으로 잘못된 부분을 확인 가능하며 동적쿼리가 가능해 조건부나 정렬조건등을 메서드를 이용해 조작이 가능합니다.

15. GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요.

=> GET는 서버에서 데이터를 가져와서 보여줄때 사용하는 HTTP method입니다.

즉 데이터를 읽거나 검색할 때에 사용되는 메서드이며 URL끝에 ?query="" 처럼 파라미터를 붙여 전송을 합니다.

=>POST는 리소스를 생성하거나 있다면 업데이트 하기 위해 데이터를 보내는데 사용되며 GET와 다르게 Body에 담아 전송합니다.

그래서 길이에 제한이 없고 내용이 눈에 보이지 않아 GET보다는 안전합니다.

16. OSI 7계층에 대해 아는대로 설명해주세요.

=> OSI7계층은 네트워크 통신이 일어나는 과정을 국제 표준화 기구에서 정의한 7단계로 이루어져 있습니다.

물리계층(Pehysical Layer): 1계층은 네트워크의 물리적인 연결을 다루는 계층입니다. 이 계층에서는 데이터를 비트로 변환하고 전기 신호로 변환하여 통신 케이블이나 물리적인 매체를 통해 전송합니다. 주로 케이블 종류, 핀 배치, 전압 등과 같은 하드웨어적인 세부 사항을 다루며, 데이터의 실제 전송을 다루지는 않습니다.

데이터 링크 계층(Data Link Layer): 2계층은 네트워크 상에서 인접한 노드 간의 신뢰성 있는 통신을 제공하기 위한 계층입니다. 데이터를 프레임으로 나누어 전송하고, 프레임 오류 검출 및 수정, 흐름 제어 등을 수행하여 노드 간 데이터 전송의 신뢰성을 보장합니다. 이 계층에는 브리지와 스위치 같은 장비가 포함됩니다. 브리지는 여러 개의 네트워크를 연결하여 트래픽을 분리하거나 관리하는 역할을 합니다. 스위치는 프레임을 필터링하여 목적지에만 전달하고 불필요한 트래픽을 제한하여 네트워크 성능을 향상시키는 역할을 합니다.

네트워크 계층(Network Layer): 3계층은 다양한 경로 중에서 패킷을 전달하는 역할을 담당합니다. 라우팅, 패킷 전달, 서브넷 분리 등 네트워크 간의 연결과 패킷 전달을 관리합니다. 이 계층에서는 라우터가 주요한 역할을 수행하며, IP 주소와 같은 논리 주소를 이용하여 목적지까지 패킷을 전달합니다.

전송 계층(Transport Layer): 4계층은 종단 간 통신을 관리하고, 데이터 전송의 신뢰성과 효율성을 보장합니다. 데이터를 세그먼트로 분할하여 전송하고, 오류 검출 및 복구, 흐름 제어 등을 제공합니다. 이 계층에서는 주로 포트 번호를 사용하여 응용 프로그램을 식별하며, 대표적인 프로토콜로는 TCP(전송 제어 프로토콜)와 UDP(사용자 데이터그램 프로토콜)가 있습니다.

세션 계층(Session Layer): 5계층은 양 끝 단의 응용 프로세스가 통신을 관리하기 위한 계층입니다. 데이터의 동기화와 통신 제어를 담당하여 데이터의 흐름을 설정하고 유지합니다. 이 계층에서는 세션의 시작, 종료, 중단 및 재개 등을 관리합니다.

표현 계층(Presentation Layer): 6계층은 데이터의 형식 변환, 암호화, 압축 등을 수행하여 응용 계층에서 사용하는 데이터의 표현을 관리합니다. 다양한 데이터 형식을 상호 변환하여 통신 가능한 형태로 조정합니다.

응용 계층(Application Layer): 7계층은 사용자나 응용 프로그램이 네트워크에 접근할 수 있도록 인터페이스를 제공하는 최상위 계층입니다. 이 계층에서는 이메일, 파일 전송, 웹 브라우징 등 다양한 응용 서비스를 제공하며, 사용자와 직접 상호 작용합니다. 주요 프로토콜로는 HTTP, SMTP, FTP 등이 있습니다.

17. 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.

=> 세션 기반 인증은 사용자가 로그인 하면 서버 측에서 사용자에 대한 세션을(서버에서 사용자의 상태 및 데이터를 저장하기 위한 메모리 구조) 생성 후 세션ID를 부여해 클라이언트에 보내 클라이언트가 세션ID를 저장 한 후 세션ID를 통해 데이터 요청하며 이때 클라이언트에 있는 세션ID와 비교 후 데이터를 전달해줍니다.

반면 토큰 기반 인증은 사용자가 로그인하면 클라이언트에게 시크릿키를 통해 고유한 액세스 토큰을 제공하며 이것을 받은 클라이언트는 데이터 요청시 토큰을 통해 사용자 정보를 확인합니다.

이때 서버는 토큰값을 갖고있는 상태가 아닌 시크릿 키를 이용해 토큰값을 해석하고 어떤 사용자인지 확인 후 원하는 데이터를 제공해줍니다.

장점으로는 CORS이슈를 해결할 수 있고 세션 ID를 서버에서 저장할 필요가 없어 서버확장시에도 유리합니다.

18. JWT, Refresh, Access Token에 대해서 설명해주세요.

=>JWT는 웹 통신에서 정보를 안전하게 전송하기 위해 JSON으로 전자 서명을 하여 URL-safe문자열로 표현한 것입니다.

JWT는 세 파트로 나뉘며 header, payload, signature이며

Header : JWT토큰의 타입과 해싱 알고리즘을 나타내는 부분으로 토큰의 유형을 나타냅니다. SHA256, RSA

Payload : 클레임 정보가 들어가는 부분으로 토큰에 포함할 데이터를 담습니다.

이때 registered 클레임에는 발급자, 주제, 대상자, 만료시간, 발행시간 등이 있고

public클레임에는 name, email, role 등을

private클레임에는 토큰에 목적에 따라 필요한 데이터를 넣을 수 있습니다.

마지막 Signature는 헤더와 페이로드를 합친 후 secret Key 를 사용하여 서명합니다.

Access Token 은 인증 인가 서비스를 구현하기 위한 토큰으로 사용자가 로그인 하면 백엔드 서버에서 토큰을 만들어 클라이언트에 전송하고 클라이언트는 토큰을 저장 후 서버에 토큰을 같이 보내 데이터를 요청합니다.

AccessToken은 한번 생성시 제어권이 없어 시간을 짧게하여 로그인, 로그아웃 관리와 함께 보안을 강화합니다.

Refresh Token은 짧은 Access Token을 통해 자주 로그아웃되지 않도록 하기 위해 등장했습니다.

서버는 Refresh Token 값을 DB에 저장하고 클라이언트는 쿠키나 로컬 스토리지에 저장해 Access Token 을 재발급하여 사용함으로 Refresh Token의 노출이 적어 보안 측면에서 유리합니다.

19. OAuth에 대해서 설명해주세요.

=>구글, 페이스북, 트위터와 같은 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제 3자 클라이언트가 사용자의 접근 권한을 위임 받을 수 있는 표준 프로토콜입니다.

우선 간단한 용어 정리와 순서입니다.

Resource owner은 카카오 구글과 같은 계정을 가지고 있는 유저 입니다.

Client는 Resource owner가 구글 카카오 계정을 통해 로그인 하고자 하는 웹사이트

Authorization Server 는 구글 카카오 계정을 확인하는(권한을 부여 인증) 역할을 합니다.

-사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받고 / Client는 이 서버로 Authorization Code을 넘겨 Token을 발급 받을 수 있습니다.

Resource Server 유저의 개인정보를 갖고 있는 구글 카카오이며 Client는 구글과 카카오의 토큰을 접속하려는 사이트에 넘겨 유저의 개인정보를 응답 받습니다.

Access Token 유저는 접근 권한을 가진 토큰 / 자격증명을 받습니다.

Refresh Token 짧은 Access Token을 통해 잦은 로그아웃을 막아주기 위해 Refresh Token으로 Access Token을 재발급받습니다.

20. 클래스형과 함수형의 차이를 설명해주세요. 어떤 방식을 주로 사용하였고 그 이유가 뭔지 답변해주세요.

21. CI/CD에 대해서 설명해주세요.

22. TDD에 대해서 설명해주세요.

23. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.

24. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.

25. 쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요.

26. DB 로직 최소화를 하려면 어떻게 해야 할까요?

27. 테스트코드에 대해서 아는대로 설명해주시고 활용 경험에 대해서 답변해주세요.

28. Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.

29. AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.

30. 정렬 알고리즘에 대해서 아는대로 설명해주세요.

반응형
LIST