오답 노트
솔직히 전부 틀린이유가 같다. 상속을 제외하고 개념을 제대로 미숙지 및 횡성수설
보완할 것으로는 당연히 개념 숙지이다.(초보자는 키워드 위주로)
1 배열 및 연결리스트 특징과 차이점
- 정답 및 공부내용
배열 ) 정적자료구조, 크기가 미리 어느정도 정해져있다, 연속된 메모리 주소를 받기 때문에 데이터가 인덱스를 가지고 있음
- 장점 : 접근과 탐색에 용이
- 단점 : 크기를 미리 정해주었기 때문에 수정하는게 불가능, 배열 크기 이상의 데이터를 저장못함
연결 리스트 ) 동적자료구조, 크기를 정할 필요가 없음, 연속된 메모리 주소를 받지 않는다. 노드가 존재하며 그 노드안에 데이터가 존재, 데이터를
가리키는 주소를 가지고 있음.
- 장점 : 크기의 제한이 없으므로 데이터 추가, 삭제가 자유로움
- 단점 : 임의로 접근하는게 불가능해 데이터를 탐색할 때 순차적으로 접근해야함
2. TCP UDP 차이점
- 정답 및 공부내용
TCP와 UDP ) OSI7계층 중 TCP/IP 의 전송 계층에 사용되는 프로토콜(전송계층이란 송신자와 수신자를 연결하는 통신서비스를 제공)
TCP )
- TCP란 Transmission Control Protocol의 약자로 전송을 제어하는 규약이라는 뜻이다.
- 패킷을 추적 및 관리하고 IP 는 데이터의 배달을 처리한다. (패킷이란 인터넷 내에서 데이터 전송을 위한 라우팅을 효율적으로 하기 위해
나누어진 조각들을 뜻한다)
TCP 단점 )
- 데이터로 보내기 전에 반드시 연결이 되어야 함.
- 1:1 통신만 가능
- 고정된 통신 선로가 최단선이 아닐 경우 상대적으로 UDP보다 데이터 전송속도가 느리다.
TCP 특징 )
- 연결형(connection-oriented) 서비스로 연결이 성공해야 통신이 가능하다.
- 데이터의 경계를 구분하지 않는다.(byte stream service)
- 데이터의 전송 순서를 보장한다. 데이터의 순서유지를 위해 각 바이트마다 번호가 부여됨.
- 신뢰성 있는 데이터를 전송한다.(Sequence Number, Ack Number)
1) Sequence Number : TCP 세그먼트의 연속된 데이터 번호
2) Ack Number : 상대방으로부터 받아야하는 다음 TCP 세그먼트 데이터 번호
- 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및
혼잡 제어(패킷 수가 과도하게 증가하는 것 방지)
- 연결의 설정(3-way handshaking), 해제(4-way handshacking)
- 전이중(Full-Duplex), 점대점(Point to Point) 서비스
UDP )
- UDP(User Datagram Protocol)는 전송계층의 비연결 지향적 프로토콜을 뜻한다.
비연결 지향적이란 데이터를 주고받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미한다.
연결 과정이 없기 때문에 TCP 보다 빠른 전송이 가능하지만!! 데이터가 유실될 수 있고, 데이터 패킷을 순차적으로 보내더라도
먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 수신될 수 있다.
UDP 단점 )
- 데이터의 신뢰성이 없다.
- 의미있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 한다.
UDP 특징 )
- 비연결형 서비스로 연결 없이 통신이 가능하며 데이터그램 방식을 제공한다. (데이터그램 방식이란 데이터 전송 전에 송/수진자 사이에 가상 회선이라 불리는
논리적 경로를 설정하지 않고,패킷들이 각기 독립적으로 전송되는 방식이다.(주로 OSI7계층 중 네트워크 계층에서 사용))
- 데이터 경계를 구분한다. (데이터그램 서비스)
- 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 신뢰성 없는 데이터를 전송한다.
- 패킷관리가 필요하다.
- 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점.
- 상대적으로 TCP보다 전송속도가 빠르다.
공통점과 차이점)
프로토콜 종류 TCP UDP
연결방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 전송 순서 보장 전송 순서 변경 가능
수신 여부 확인 수신 여부를 확인 수신 여부 비확인
통신 방식 Point to Point(1:1) N:N 통신
신뢰성 높다 낮다
속도 느리다 빠르다
3. http, https
HTTP (Hypertext Transfer Protocol)
- 보안: 데이터가 암호화되지 않습니다. 따라서 중간에 누군가가 데이터를 가로챌 수 있다.
- 포트 번호: 기본 포트 번호는 80
- 사용 사례: 보안이 크게 중요하지 않은 웹 사이트에서 주로 사용
HTTPS (Hypertext Transfer Protocol Secure)
- 보안: 데이터가 SSL/TLS(보안 소켓 계층/전송 계층 보안)로 암호화됩니다. 이를 통해 데이터가 전송 중에 도청되거나 변조되는 것을 방지할 수 있다!
- 포트 번호: 기본 포트 번호는 443
- 사용 사례: 온라인 쇼핑, 은행, 이메일 등의 보안이 중요한 웹 사이트에서 사용
- 인증서: HTTPS는 인증서를 사용하여 웹 사이트의 신뢰성을 확인합니다. 이 인증서는 신뢰할 수 있는 인증 기관(CA)에서 발급
요약
- 보안성: HTTP는 암호화되지 않으며, HTTPS는 암호화
- 포트 번호: HTTP는 포트 80을 사용하고, HTTPS는 포트 443을 사용
- 인증: HTTPS는 인증서를 사용하여 데이터 전송의 무결성과 출처를 보장합
4. sql, nosql
특성 SQL NoSQL
스키마 정해진 스키마 유연한 스키마
데이터모델 관계형 모델 키-값, 문서, 열 가족, 그래프 등 다양한 모델
언어 SQL 각 데이터베이스마다 다른 쿼리 언어 또는 API 사용
트랜잭션 ACID 속성 준수 일반적으로 CAP 이론에 따라 일관성, 가용성, 파티션 허용성 중 두 가지만 보장
확장성 수직적 확장 수평적 확장 가능
예시 MySQL, PostgreSQL, MongoDB, Cassandra, Redis
Oracle Database
5. 상속과 다형성의 차이
상속의 개념: 부모 클래스가 가지고 있는 매서드를 자식 클래스가 물려받는것
목적 : 공통된 속성과 기능을 귀찮게 여러 클래스에 넣은게 아닌 한곳에 몰아넣고, 다른곳에서 이를 상속받아 사용
댜형성의 개념: 여러 클래스가 동일한 인터페이스를 공유, 다양한 형태로 객체를 다룰 수 있게 함
목적: 코드의 유연성과 확장성을 높이는게 목표
6. 객체지향 프로그래밍의 4가지 주요 개념은 무엇인가?
객체지향 프로그래밍 : 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고,
객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법.
- 대표적으로 python, java언어, Kotiln 등이 있다.
장점으로는 유지보수가 용이하고 재사용이 용이하다.
단점으로는 상대적으로 속도가 느리고 메모리를 많이 사용하는 경우가 있다.
4가지 개념:
1. 추상화 : 말 그대로 추상화이지만 쉽게 생각하면 정확하게 표현하기
힘든 것들을 중요한 부분이나 특징점으로 잡아 설명하는 것을 추상화한다고 할 수 있겠다.
2. 상속 : 부모 클래스가 가지고 있는 매서드를 자식 클래스가 물려받는것
3. 다형성 : 여러 클래스가 동일한 인터페이스를 공유, 다양한 형태로 객체를 다룰 수 있게 함
목적: 코드의 유연성과 확장성을 높이는게 목표
4. 캡슐화 : 객체지향에서의 캡슐화는 데이터와 메서드를 하낭늬 단위로 묶어, 외부에서 접근하지 못하도록
보호하는 개념. 데이터와 메서드를 한 곳에 모아 관리
7. SQL에서 JOIN의 종류와 각각의 차이점은?
- 조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
1) INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
2) OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
3) CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.
4) SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.
8. 서브쿼리와 조인의 차이점은?
- 조인은 두 개 이상의 테이블을 결합하는 데 사용되는 반면 서브쿼리는 쿼리 내에서 다른 쿼리를 실행하는 데 사용됩니다. 조인은 일반적으로 더 효율적이며 데이터를 조회하는 더 직관적인 방법입니다. 서브쿼리는 복잡한 쿼리를 작성하는 데 사용할 수 있지만 성능이 저하될 수 있습니다.
- 서브쿼리는 WHERE 절, HAVING 절 또는 SELECT 절에서 사용할 수 있습니다. WHERE 절에서 서브쿼리는 쿼리 결과 집합을 필터링하는 데 사용됩니다. HAVING 절에서 서브쿼리는 그룹화된 결과 집합을 필터링하는 데 사용됩니다. SELECT 절에서 서브쿼리는 새 열을 반환하는 데 사용됩니다.
- 조인은 일반적으로 서브쿼리보다 효율적입니다. 이는 조인이 두 테이블의 데이터를 한 번만 조회하는 반면 서브쿼리는 두 테이블의 데이터를 두 번 조회하기 때문입니다. 그러나 서브쿼리는 복잡한 쿼리를 작성하는 데 사용할 수 있습니다.