Share
Sign In
TIL 웹개발
TIL 웹개발 - CS 모의 면접 정리
서경태
👍
우선 CS 면접의 경험을 정리해보면, 왜 CS를 공부해야하는지 이제서야 알게 된 느낌이었다.
단순히 개념과 설명을 반복해서 표현하는게 아니라 각 개념들 간 관계를 알고 차이점까지 설명할 줄 알아야 실무에서도 적용할 수 있다.
💬
주로 두 가지 개념에 대해 묻는다.
이렇게 두 가지를 물어보는 이유는 차이점이 존재하기 때문에 그 특징을 잘 설명하는 것이 중요하다.
1.
배열, 연결리스트
자료구조에서 배열과 연결리스트는 모두 데이터를 저장하고 관리하는데 사용된다.
배열
연속적인 메모리 공간에 정하는 데이터 구조
고정 크기를 가지며 한번 선언되면 크기를 변경할 수 없다.
→ 이는 단점으로도 작용하는데 배열의 크기를 동적으로 변경할 수 없다.
인덱스를 사용해 데이터에 접근이 빠르다. → O(1)의 시간복잡도를 가진다.
삽입 및 삭제의 비효율성 → 배열 중간에 삽입하거나 삭제할 경우 나머지 요소들을 이동시켜야하므로 O(n)이 걸린다.
연결리스트
각 요소가 노드로 구성되고, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 표함되는 데이터 구조
동적 크기로 필요에 따라 노드를 추가하거나 제거하여 크기를 동적으로 변경할 수 있다.
→ 각 노드는
효율적인 삽입/삭제 리스트의 중간에 요소를 삽입하거나 삭제하는데 O(1) 시간이 소요된다.
→ 반면 특정 위치를 찾는데 O(n)의 시간이 걸려 접근이 느리다.
비연속적 저장으로 메모리 활용이 유연하다.
2.
프로세스와 스레드
프로세스
실행중인 프로그램의 인스턴스를 의미하며, 프로그램이 메모리에서 실행되는 상태를 말한다.
각 프로세스는 독립된 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않는다.
실행에 필요한 자원(파일, 메모리, CPU 등) 을 소유한다.
운영체제는 프로세스를 생성, 스케쥴링, 종료등의 작업을 관리한다.
한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않는다.
스레드
프로세스 내에서 실행되는 작업의 단위
프로세스는 하나 이상의 스레드를 가질 수 있으며, 이를 멀티스레딩이라고 한다.
같은 프로세스 내의 스레드들은 메모리 공간(코드, 데이터, 힙)을 공유한다.
→ 각 스레드는 독립적인 스택을 가진다.
스레드는 프로세스보다 생성 및 종료에 필요한 자원이 적다. → 경량 프로세스
여러 스레드를 사용하여 병행 작업을 수행할 수 있어, 프로그램의 성능을 향상시킬 수 있다.
스레드 간 통신은 같은 프로세스 내에서 이루어지기 때문에 프로세스 간 통신보다 빠르다.
💬
프로세스 : 웹 브라우저, 텍스트 편집기, 시스템 유틸리티 등 각각 독립적으로 실행되는 프로그램
스레드 : 웹 브라우저 내에서의 탭들, 텍스트 편집기의 자동 저장 기능, 시스템 유틸리티의 배그라운드 작업 등 병행 처리가 필요한 작업
3.
TCP, UDP
우선 이 용어들은 네트워크와 관련된 것인데, 우리가 인터넷을 사용할 때 서버와 어떻게 상호작용하는지에 대한 내용이다. 패킷을 통해 데이터를 전송하는데 이 패킷을 어떻게 다루는지에 대한 규약이다.
TCP(Transmission Control Protocol)
서버와 통신할때 syn, arc를 통해 신뢰성을 보장하는 연결지향적 프로토콜
만약 분할된 패킷을 잃어버렸다면 서버에게 어떤 패킷이 없는지 알려주고 다시 전송을 받는다.
UDP에 비해 속도가 느리다.
UDP(User Datagram Protocol)
서버와 통신할때 TCP와 달리 일방향으로 주고 받는 비연결성 프로토콜
패킷을 잃어버려도 서버에게 다시 알리지 않는다.
TCP에 비해 속도가 빠르다.
비디오 스트리밍에 자주 사용된다.
4.
HTTP , HTTPS
HTTP (HyperText Transfer Protocol)
웹브라우저와 서버간에 데이터를 주고받기 위한 프로토콜
일반 텍스트로 데이터를 전송하기 때문에 보안에 취약하다.
보안이 필요하지 않은 웹사이트나 페이지에 주로 사용된다.
포트번호: 기본적으로 포트 80을 사용한다.
HTTPS (HyperText Transfer Protocol Secure)
HTTP에 SSL 또는 TLS라는 암호화 프로토콜을 추가하여 보완성을 높인 프로토콜
HTTPS를 통해 주고받는 데이터는 암호화되어, 중간에 누군가가 데이터를 가로채더라도 내용을 읽을 수 없도록 보호
금융 거래, 로그인 정보 입력 등의 민감한 데이터가 오가는 웹사이트에 주로 사용
HTTPS는 포트 443을 사용한다.
5.
객체지향 프로그램의 특징
캡슐화
객체의 속성과 데이터를 하나로 묶어 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 보호하는 것 → 객체 내부의 세부 구현을 감추고, 외부에는 필요한 부분만 공개해 데이터의 무결성을 유지한다.
상속
기존 클래스의 속성과 메소드를 새로운 클래스가 물려받아 재사용 하는 것 → 코드의 재사용성을 높이고 계층 구조를 형성한다.
다형성
동일한 메소드나 연산자가 서로 다른 객체에서 다르게 동작하도록 하는 것
주로 메소드 오버로딩과 메소드 오버라이딩을 통해 구현된다.
추상화
복잡한 시스템에서 필요한 부분만을 모델링하여 표현하는 것
구체적인 구현을 감추고, 필요한 기능만을 인터페이스로 제공함으로 써 복잡성을 줄이고 이해하기 쉽게 한다.
6.
SQL, NoSQL
SQL (Structured Query Language)
관계형 데이터베이스 관리 시스템(RDBMS)로 데이터를 테이블 형태로 저장한다. 각 테이블은 행과 열로 구성되며, 데이터는 엄격하게 구조화되어 있다.
데이터베이스 스키마(schema)를 사전에 정의해야 하며, 모든 데이터는 이 스키마를 따라야 한다.
NoSQL (Not only SQL)
비구조화된 데이터로 테이블 기반이 아닌 다양한 데이터 모델(키-값, 문서, 그래프, 컬럼 패밀리 등)을 지원한다. → 비정형 데이터, 반정형 데이터 처리에 적합
스키마가 없거나 굉장히 유연하다.
Subscribe to 'kyugntae-ai'
Welcome to 'kyugntae-ai'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'kyugntae-ai'!
Subscribe
👍
Other posts in 'TIL 웹개발'See all
서경태
TIL 웹개발 - Django쟝고에서 Decorator 데코레이터 사용하기
Django에서 데코레이터는 웹 애플리케이션의 특정 기능을 쉽게 구현할 수 있도록 도와준다. 주로 인증, 권한 관리, 보안, 캐싱 등의 기능을 위해 사용된다. @login_required : 로그인된 사용자만 접근 가능 @permisison_required : 특정 권한이 있는 사용자만 접근 가능 @crsf_exempt : CSRF 검사를 비활성화 @require_http_mothods : 지정된 HTTP 메소드만 허용 @require_POST: POST 요청만 허용 @cache_page: 지정된 시간동안 캐싱하여 출력 성능 향상 @transaction.atomic: 하나의 트랜잭션으로 모든 DB작업 처리 위 데코레이터들은 쟝고에서 주로 사용되는 것들인데 이제 하나씩 알아보자. @login_required 사용자가 로그인하지 않은 상태에서 이 데코레이터가 사용된 뷰에 접근하면 로그인 페이지로 다이렉트를 하는 기능 제공한다. 이렇게 사용하면 my_view에 접근하기 위해 로그인이 필요하고 로그인하지 않은 경우 로그인 페이지로 이동한다. (물론 로그인 페이지가 있는 경우) 이때 두 가지 방법으로 로그인 페이지를 login_required와 연결할 수 있다. 직접 login_url 설정 @login_reqired 데코레이터 함수를 보면 다음과 같이 작성되어 있다. 여기서 login_url = None으로 되어있는데 이 부분을 로그인 페이지로 설정하면 데코레이터가 정상적으로 작동한다. accounts / login.html 설정 쟝고의 기본 설정에 따라 아래 그림처럼 페이지를 구성하면 @login_required를 사용할 수 있다. 로그인 페이지를 accounts 폴더에 위치시키면 쟝고가 알아서 해당 페이지를 리다이렉트해준다. 로그인 후에는 사용하던 페이지의 url을 next 파라미터에 저장해 다시 리다이렉트 해주니 굉장히 편리한 기능이다.
서경태
TIL 웹개발 - Django form 정리
우선 form은 클라이언트가 데이터를 조회하거나 전송할 때 사용하는 태그(tag)다. 게시글을 작성하는 form을 작성하면 아래 코드와 같다. 제목과 내용을 작성해 form형태로 서버에 전달해 처리한다. 이 form 형태를 쉽게 처리하는 기능을 django에서 제공하는데 Django model form이다. 데이터베이스 모델에 대응하는 폼을 자동으로 생성해주는 기능으로 위 코드처럼 별도로 폼을 정의하지 않아도 된다. 그리고 데이터베이스 기준에 따라 (텍스트, 숫자 등) 형식을 맞추지 않을 경우 자동으로 경고 메시지를 보내주기도 한다. Django model form 모델과 폼의 자동 연결 ModelForm을 사용하면, Django 모델에 정의된 필드를 기반으로 자동으로 폼 필드가 생성된다. 예를 들어, 모델에서 Charfield, DateField 등이 있다면, 해당 필드에 맞는 html 폼 필드가 생성된다. 간편한 데이터 처리 모델 폼은 데이터의 유효성을 검사하고, 유효하다면 데이터베이스에 쉽게 저장할 수 있다. form.save() 메소드를 사용하면 폼데이터를 모델 인스턴스로 변환하고 저장할 수 있다. 유효성 검사 모델 폼은 모델에서 정의된 필드의 유효성 검사(예: 최대 길이, 필수 입력 여부)를 자동으로 처리한다. 추가적인 커스텀 유효성 검살르 쉽게 정의할 수 있다. 모델 폼 정의하는 방법 Article 데이터베이스 / models.py 현재 title과 content라는 데이터 베이스가 있는 경우,
서경태
TIL 웹개발 - Django 시작하기
배운대로 써보는 djano 시작하기 기본적인 세팅부터 앱을 등록하는 방법까지 정리해본다. 아래 코드들은 모두 터미널에서 진행된다. 디렉토리를 잘 확인하고 진행해야한다. 가상 환경을 만들어준다. 가상 환경을 만들어주는 이유는 여러 프로젝트를 진행하는 경우 각 프로젝트의 버전을 유지하기 위해서다. A프로젝트에서 쟝고 3.2를 쓰고 B프로젝트에서 쟝고 4.2를 쓴다면 가상환경만 바꿔주면 문제 없이 작동한다.(고 한다. 안해봄.) Django를 설치한다. 이때 버전은 4.2를 설치하는데 이유는 LTS이기 때문인다. Django 4.2는 LTS(Long Term Support)다. LTS는 긴 보증 기간을 뜻하는데 안정성을 위해 보통 LTS 버전을 많이 사용한다. requirements.txt를 생성한다. requirements.txt에는 설치한 라이브러리의 이름과 버전이 적혀있다. 다른 사람이 이 프로젝트를 이어서 진행하거나 수정하는 경우 어떤 라이브러리와 버전이 설치되어있는지 확인할 수 있고 이 문서를 통해 바로 설치도 가능하다. Django 프로젝트 생성하기 "name" 부분에는 따옴표없이 프로젝트의 이름을 넣어준다. 그럼 바로 지정한 이름의 폴더가 생성되고 그 안에 django의 구조가 자동으로 만들어진다. 앱 생성 및 등록 프로젝트 폴더 안에 "app name"으로 폴더가 생성된다. 이제 settings.py를 찾아 그 안에 생성한 앱 이름을 넣어주면 기본세팅이 끝난다. 프로젝트 폴더 안에 같은 이름의 폴더가 하나 더 있다. 그 안에 setting.py가 있다. settings.py 안에 둘러보다보면 INSTALLED APPS = [] 가 있다. 이미 여러 가지가 채워져있는데 그 밑에 생서한 앱 이름을 추가하면된다.