1. TCP/ UDP : 연결지향, 비연결지향인지 / 차이는 핸드쉐이크떄매 발생 / 어떤게 신뢰성있는지 빠른지 키워드적으로 말하면된다. / 혼잡젱어, 흐름제어 말하면 가산!
2. HTTP/ HTTPS 차이( 포인트는 TLS, SSL 키워드)
네트워크 통신과정에서 수많은 라우터나 회선을 거치면서 해킹이 많이 일어나는데 HTTPS에서는 TLS 를 적용해두면 암호화해서 해독할수없어서 좀더 안정성있는 통신이다.
-> 대칭키, 비대칭키, / 공개키 , 비공개키 가 엮여있다.
3. HTTP연결과정설명해보세요. (TCP 연결과정 설명해보세요. ) 3way handshake과정을 말하자
4. REST API 에대해 설명 혹은 장단점은? (많이나옴)
서버에서 스팩에 맞춰놓고 요청하는것인데
단점: 오버패칭 과 언더패칭 이 있을것같다.
오버패칭은 데이터가 2개 필요한데 과하게 데이터가 오는것을 의미하고
언더패칭은 한번의 url로 충분한데이터 못받아와서 여러번 api 를 호출하는것.
단점해결방법: 그래프 QL을 사용해볼수있다. (사용안해도되고 서비스에서 많이적용은안되있어)
그래프QL api에 쿼리로 api 요청하는것해서 해결할수있다.
HTTP 메서드들은 10개가넘는데 주로 사용하는건 4개인데 get, post, delete , put 경우에따라 fetch 도사용한다.
get에대해 많이나오는데
HTTP 메서드의경우 캐싱이 가능한 유일한 메서드가 get이다.
get으로 데이터를 보낼수도있는데 post가 더 안전하다
get은 쿼리스트링으로 데이터를 전송하는데 데이터 이동하는 라우터구간이나 서버로그에 로그가 남는다.
id, pw를 get으로 보내면 값들이 남는다. 그래서 보안적으로 안좋다.
id, pw는 post로 보내는게 더 좋다. post body 값으로 분리되잇어서 보안이 좋다.
검색쿼리는 get으로 하지만
post, get은 길이제한이 없다 .
추가로 get은 옛날에 글자수제한이 되어있었는데 요즘은 길이제한이 없는것으로 알고있다.
HTTPS가 TLS, SSL을 적용해서 암호화하는 과정 에대해 물어보기도한다. (대칭키/비대칭키)
대칭키: 데이터를 보내는 송신자와 수신자가 동일한 키를 갖고있는것.
=> 대칭키로 암호화해서 보내면 수신자는 대칭키로 복호화를 해서 데이터를 확인가능 .
예시) zip 파일을 암호화해서 보내면 압축을 풀때 암호화한 키가 동일한게 예시가 될것같다.
대칭키 장단점 아는게 중요할것같다.
대칭키는 장점보다 단점이 더 많다.
(장점) 동일한 키로 암호화하기떄문에 속도가 빠르다 .
(단점)
1.키를 보내는 과정에서 송수신자끼리 교환과정에서 유실될수있어서 보내는방식에서 문제가 생길수도잇다.
2.여러사람에게 보낼떄 100만명에게 보내면 100만개의 대칭키가 필요한데 대칭키를 상대방에게 어떻게 전달하는지와 수많은키를 관리하는게 문제가된다.
3. A, B 가 동일한 대칭키이면 몰래 복호화할수도있어서 1:1대응의 대칭키가 필요하다.
대칭키의 단점을 해결하기위해 나온게 비대칭키
비대칭키 : 공개키, 비공개키로 나뉘어지는데요.
모든사람에게 공개키를 주고 그 공개키로 암호화해서 보내는 데이터는 1개의 비공개키로 해제가 가능하다 .
서버는 비공개키를 1개만 갖고있으면 암호화한것을 해제할수있다. 서로 다른키를 갖고있어서 속도가 느립니다. 그래서 제한적으로 사용한다.
공개키, 비공개키 사용시 효과: 데이터 송수신을 인증해주는 효과가 있다.
비대칭키는 속도는 공개키보다 느리지만 키관리가 편해지고 키교환문제 발생안하고 전송대상의 인증효과까지 해줄수있다.
대표적: RSAP(HTTPS때 비대칭키로 사용합니다.)
HTTPS로 비대칭키로만 구현하면 통신이 느려진다.
-> 서버가 클라이언트에게 비대칭키로 암호화해서 대칭키를 보낸다. 그러면 클라이언트가 대칭키로 암호화해서 서버쪽에 데이터를 보내면 서버에서 비대칭키로 암호화한것을 해제함으로써 대칭키 교환이슈를 해결할수있다.
DB
1. db사용이유 (db알고 쓰는지 기술적특성알고 사용하는지 묻는거)
-> 키워드: 일관성, 무결성,효율성, 신뢰성, 정합성 떄문에 사용합니다.
일관성: 데이터 일관되게 관리
신뢰성: 데이터 신뢰성 보장
정합성: 데이터가 서로 꼬이지않게 트랜잭션으로 보장
무결성: 데이터 로그 관리해줘
효율성: 데이터 저장보단 내부적 엔진에의해 더빠른 탐색속도 제공.
2. db트랜잭션에 대해 설명해주세요.
트랜잭션이란? 하나의 논리적기능을 수행하기위한 작업단위를 의미합니다.
논리적기능이란?
예시) 이체기능이있다하면 A 잔액을 조회해서 잔액이 있을경우 이체하는것. 이과정이 성립안되면 롤백한다.
ACID기반으로 설명
트랜잭션 특징으로 Acid가 있다.
automicity 원자성: 전부수행되거나 전부수행안되는것.
onsistency 일관성: 일관된 데이터가 보장된다.
isolation 독립성: 트랙잭션 연산작업중에는 다른 트랙잭션은 간섭할수없는것. DB lock을걸어 제한을 건다.
durablilty 영속성: 트랙잭션 수행한 데이터를 영구히 저장해야한다.
3. db index 대해 설명해주세요.
인덱스가 없다면?
검색시 모든테이블을 스캔해야한다.
-> index많이걸수록 좋겟네요?
너무많은 index를 쓰면 인덱스 관리비용이 높아지는 이슈가 발생할수있어서.
인덱스는 자료구조 테이블올려 공간복잡도 올려 시간복잡도를 내려 검색속도를 빠르게 한다.
데이터베이스 테이블에 검색속도 높여주는 자료구조중 하나입니다.
테이블에서 빠르게 접근하는 index를 설정하고 index는 id값과 데이터 포인터가 정리되어있는데 id를 확인하고 데이터포인터 위치를확인해서 넘어간다.
1.인덱스가 없으면 테이블전체를 찾아야하는건 비효율적이라서 존재.
2. 테이블은 생성순서로 되어있는데 인덱스는 오름차순으로 관리 (찾는속도가 빨라진다)
3.index는 b-tree, b+tree를 활용하는데 trade-off
4. 정규화에대해 설명해보세요
-> 어떻게 데이터 분리하고 어떤효과를 낼수있는지 관점으로
db만들떄 정규화를 해야하는데 하는게 무조건좋나? -> NO
답변: 데이터에대한 릴레이션에대한 연산비용때문입니다.
이유: 하나의 테이블로 관리시엔 데이터 릴레이션에대한 연결에대한 연산필요없다.
하지만 정규화를하면 릴레이션 연산비용이 들어간다.
데이터를 자주 추가되는 경우 일부로 정규화를 안해줍니다.
추가사항
유일성: 해당키가 그테이블에서 고유
최소성: 중복되지않는것. id처럼 사용
개인키: 유일성과 최소성을 갖는 키
고유키:
외래키:
외래키가
자료구조
자료구조 사용이유: 탐색,삽입,삭제 속도의 차이가 발생하기떄문
데이터 구조나 성격 에따라 적절한 자료구조 쓰는게 좋다.
탐색,삽입,삭제속도는 시간복잡도, 공간복잡도에 영향을 미치고 이를표현하는 빅o표기법이있다.
시간복잡도 와 공간복잡도는 반비례 관계 (예외적인것도있지만 일반적으로)
1.배열과 리스트(연결리스트)란?
배열: 공간이 이미 할당되어있어 컴파일시점에 결정되어 속도가 빠르다.
연결: 각노드에 데이터와 다음노드의 주소를 갖고있어 서로 연결되있다해서 연결리스트라한다. 런타임시점에 사용하면서 추가되는구조라 리스트의 크기가 결정되어 배열보단 속도가 느리다.탐색속도가 느리지만 삽입속도는 빠르다.
2.큐와 스택이란?
큐: 선입선출
스택: 후입선출
3.해쉬테이블이란?
왜 탐색이빠른지? 탐색,삽입,삭제 기준으로 설명
일반적
1.메모리구조
코드데이터힙스택
힙: 동적할당 일어나서 런타임떄 힙의 메모리공간이 결정되고
스택: 컴파일시점에 이미결정된 데이터가 들어가서 메모리공간이 결정된다.
힙,스택의 메모리주소위치
스택은 높은 -> 낮은주소 로 가고, 컴파일시점에 결정된 경우 동적할당보다 빠르다.
힙은 낮은-> 높은주로소 온다.
2. 프로세스 와 쓰레드 차이
메모리구조상 코드 데이터 힙 스택있을떄 쓰레드는 각각의 쓰레드들이 독립적으로 스택을 사용한다.
코드,데이터,힙은 프로세스내의 쓰레드들이 공유한다.
3. 멀티 프로세스 vs 멀티쓰레드 차이
4. context switching 이란?
핵심은 context switching의 비용이다.
멀티프로세스나 멀티쓰레드기준으로 context switching이 일어날수있다.
5. 동시성 문제
1. 크리티컬 색션
2. 레이스 컨디션
3. 데드락
4.세마포어
6.OOP에대해 설명 및 특징에대해 말해주세요.
4개특징: 추상화,캡슐화,다형성,상속성 있고 각각의 특징정리
7. 솔리드원칙?
OOP설계 원칙으로 솔리드원칙이 있다.
srp, 리스코프치환, 등등..
꼬리물기해서 본인프로젝트에 적용해본 케이스있나?
단일책임원칙
DIP 두가지가 많이 나온다.
8.비트맵과 벡터
특징위주로
9. jpg, png(이미지관련회사)
jpg는 손실압축
png는 비손실압축
10. rebase merge 차이
현업에선 rebase를 많이 쓴다.
3 way merge상황에서 리베이스해야 커밋이 보존이된다.
fast 포워드 상황에선 리베이스시 main을 새싹브렌치 마지막커밋으로 옮긴다.
리베이스는 다른브렌치 커밋내역이 남아있는데 머지는 이력이안남고 사라진다.
리베이스는 과정에서 커밋 id가 변경될수잇어서 푸시한경우 rebase하지않는게 좋을것같다.
'𝗡𝗘𝗧𝗪𝐎𝗥𝗞' 카테고리의 다른 글
네트워크 요청응답의 기본개념 (1) | 2023.12.15 |
---|---|
HTTP 란? (0) | 2023.02.21 |
NewWork 정리 (0) | 2023.02.21 |