Nginx란?

Nginx는 경량 웹 서버입니다.
클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고,
Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다.

 

웹서버(web server) : 주로 정적 콘텐츠(이미지나 정적 HTML 등)를 제공하기 위해 설계되었으며 동적 콘텐츠 요청을 식별하여 앱서버(app server)로 요청을 전달하는 역할을 수행하는 서버.
역방향 프록시(reverse proxy) 
: 클라이언트의 요청을 받아 웹서버로 전달하여 응답을 받은 후 다시 클라이언트에 전달하는 역할을 수행하는 서버. 즉, 클라이언트와 웹서버 사이에 존재하는 서버

Nginx 흐름

Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고,
비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있습니다.
위의 그림에서 보이듯이 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능합니다.
이러한 Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있습니다.

 

Nginx 구조

Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행됩니다.

Master Process는 설정 파일을 읽고, 유효성을 검사 및 Worker Process를 관리합니다.
모든 요청은 Worker Process에서 처리합니다. Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용합니다.
Worker Process의 개수는 설정 파일에서 정의되며, 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정됩니다.

 

Nginx 장점

  1. 로드 밸런싱 : 요청이 많은 사이트를 운영하는 경우 하나의 서버가 아닌 여러 대의 서버를 두고 운영을 하게 됩니다. 그럴 경우 특정 서버에만 요청이 몰리지 않도록 하는 역할을 NGINX가 수행하게 됩니다.
  2. 공격으로 부터 보호 : NGINX를 사용하면 웹사이트나 서비스에서 실제 서버의 IP 주소를 필요로 하지 않기 때문에 DDoS와 같은 공격이 들어와도 NGINX를 공격하게 되지 실제 서버에는 공격이 들어오는 것을 막을 수 있습니다.
  3. 캐싱 : NGINX는 콘텐츠를 캐싱할 수 있어 결과를 더 빠르게 응답하여 성능을 높일 수 있습니다.

 

Apache와 비교

Apache

- 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조

- 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함

- 하나의 쓰레드 : 하나의 클라이언트 라는 구조

 

Nginx 방식

 


참고 : 

https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://medium.com/@su_bak/nginx-nginx%EB%9E%80-cf6cf8c33245

https://azderica.github.io/00-network-nginx/

https://whatisthenext.tistory.com/123

 

 

'개발합시다. > BackEnd 공부' 카테고리의 다른 글

Redis의 모든 것  (0) 2021.12.07
mongoDB의 모든 것  (0) 2021.12.07
Django 정리  (0) 2021.12.06
Django 기초 정리  (0) 2021.12.06
네트워크 관련 면접 질문 정리 ①  (0) 2021.10.06

특징

1. MVT 패턴을 사용한다.

MVC모델이랑 사실상 동일하다고 생각하면 됨

View -> Templage / Controller -> View로 표현한다.

Model :  DB에 저장되는 데이터
Template는 유저에게 보여지는 UI
View는 데이터를 처리하고 Template에 데이터를 전달

 

2. 강력한 ORM 기능 지원

ORM(Obect Relational Mapping, 객체관게 매핑)을 통해 객체와 RDBMS를 연결해준다.

따로 SQL문을 만들지 않고, 생성한 클래스(객체)를 바로 DB와 연동할 수 있습니다.

 

3. 소스코드의 변경 사항을 자동으로반영합니다.

장고는 자동으로 ..py파일의 변동을 감지하고 자동으로 반영해줍니다. 그래서 코드를 변경할때마다 수동으로 웹 서버를 재실행할 피료가 없습니다.

 

Flask와 비교

Flask는 Micro Framework를 철학으로 만들어진 프레임워크라서 "웹개발을 위한 최소한의 기능만 지원"합니다.

반대로 장고는 웹개발을 위한 거의 모든 기능을 지원합니다. 다만, 프레임워크가 제시하는 틀에서 벗어날 수 없는 단점이 있죠

 

쉽게 설명하면 Flask는 레고 / Django는 프라모델이라 생각하면 됩니다.

 

장단점

장점

1. 파이썬을 기반으로 한 만큼 진입장벽이 낮은 편이다.

2. 생산성이 높고 개발 비용을 꽤 절감시킬 수 있다.

3. URL디자인이 매우 편리하다.(정규표현식 사용 가능, 함수와 URL을 1:1 매칭 가능)

4. 파이썬 기반의 머신러닝, 데이터 분석 라이브러리와 융합하여 사용하기 편하다.

5. 출시된지 오랜 시간이 흘렀고, Instagram처럼 성공적으로 도입된 사례가 많은 만큼 안정성과 기능이 충분히 검증되었다.

6. 커뮤니티 활동이 활발하고, 관련 문서(자료)가 많다.

단점

1. 파이썬을 기반으로 한 만큼 파이썬의 단점이 전부 포함된다.

2. 다른 웹 프레임워크에 비해 비교적 속도가 느리다.

3. 숙련되기 위해선 장고 자체에 대한 이해도 뿐만 아니라 파이썬에 대해서도 높은 이해도를 요구한다.

4. 관련 문서도 많고 커뮤니티 활동도 활발한데.. 대부분 한글화가 안되어있다..

 

 

장고를 사용하는 사이트

  • 인스타그램
  • NASA
  • 비버켓
  • Disqus
  • 모질라

 

구동방식

초록색이 Django

URL Dispactcher을 통해 URL을 분석하고 적합한 View로 전달한 후 View는 Model을 통해 데이터를 받아오고 View에게 주면서 View는 Template를 통해 유저에게 response를 넘긴다.

 

좀 더 자세한 사진

  • WSGI(Web server gateway interface) : 장고와 웹서버를 연결해주는 역할. 웹서버(Nginx)로부터 서버사이드 요청을 받으면 WSGI를 통해 장고로 전달하는 역할을 수행한다.
  • URL Resoluion: 정규표현식으로 구성. 그에 맞는 특정한 View로 전달
  • VIEW : URL을 통해 받은 사용자 request에 따른 데이터의 처리를 결정하고, MODEL에 신호를 보냄. 또한, MODEL에서 받은 정보를 가공하기도 함. 웹페이지나 콘텐츠들은 VIEW를 통해 전달되며, 파이썬의 function(method)으로 나타난다.
  • MODEL : DB에서 데이터를 가지고 오고, 그 데이터를 각각의 클래스에 넣는다.(변수 지정). SETTING이외 부가적인 메타데이터를 가진 데이터베이스의 구조(layout).
  • TEMPLATE : UI작업이 이루어지는곳으로, VIEW에서 받은 정보를 HTML등으로 가공하는 로직이 들어가 있다. 3세대 부터는 프론트엔드 개발자가 담당.
  • FORM : model, template에 있는 UI관리 (?)

추가내용

장고의 manage.py runserver 명령어는 단일 쓰레드로 작동하여 테스트 용도로써는 적합하나, request요청이 많아질 경우 처리 능력이 떨어지므로, production 환경에는 적합하지 않다.

따라서, 배포시에는 이를 대체할 Gunicorn 과 같은 프로그램을 사용하는게 적합하다.

 

 

Runserver의 비밀

  • runserver뒤에는 IP주소와 포트번호가 숨겨져 있다-포트(Port): IP로 찾은 컴퓨터 내부에서 실행되고 있는 프로그램이나 서비스를 구분하는 값 → IP로 컴퓨터를 찾고 그 안에서 포트를 가지고 프로그램을 찾는 것임
  • 아이피 주소(IP Address): Internet Protocol의 앞 글자를 딴 것으로 네트워크 상에서 다른 컴퓨터와 내 컴퓨터를 구별하는 일종의 주소
  • 개발서버(runserver)는 확인용이므로 배포시에는 웹서버를 따로 사용해야 한다

 

파일구조

 

참고 : 

https://tibetsandfox.tistory.com/6

https://velog.io/@rosewwross/Django%EB%9E%80-sck638v59x

https://velog.io/@ally0526/2.-django-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

'개발합시다. > BackEnd 공부' 카테고리의 다른 글

mongoDB의 모든 것  (0) 2021.12.07
Nginx의 모든 것  (0) 2021.12.07
Django 기초 정리  (0) 2021.12.06
네트워크 관련 면접 질문 정리 ①  (0) 2021.10.06
데이터베이스 관련 면접 질문 정리 ②  (0) 2021.09.30

정의

Django는 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크입니다.

 

어떤일을 할까?

웹서버에 요청이 오면 장고로 전달됩니다.

장고 urlresolver는 웹페이지 주소를 보고 무엇을 할지 확인합니다.

view에 어떤 할일을 할지 찾아서 실행시킵니다. 

view는 할일을 다하고 답장을 생성하여 장고는 그 답장을 그 사용자의 웹 브라우저에 보내주는 역할을 합니다.

 

모델

장고에 모델을 저장하면 그 내용이 데이터베이스(DB)에 저장됩니다.

예를 들어 블로그 글 모델을 생각해볼게요

//blog/models.py
from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

이렇게 Post 모델을 만들어 줄 수 있습니다.

 

그 이후로는

python manage.py makemigrateions blog

python manage.py migrate blog

로 글 모델이 데이터베이스에 migration을 해줍니다.

 

URL 설정

전체 폴더의 urls.py에 들어가서

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

이렇게 코드를 바꿔주면, ''(아무것도 없음)이 url에 들어오면, blog.urls를 찾는다는 뜻입니다

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
]

그리고 blog/urls.py에 이렇게 추가해주면, ''가 들어오면 views의 post_list를 사용한다는 뜻입니다.

 

참고 : 

https://tutorial.djangogirls.org/ko/

 

들어가며 · HonKit

1차 : 2015. 10. 1. 이수진, 함기훈, 박제권, 조혜선, 정광윤, 임정훈, 문지영, 김휘경, 송석리, 여형석, 심혜민

tutorial.djangogirls.org

 

HTTP 메소드에 대해서 설명하세요.

내 답안 : XX

 

예비 답안 : 

CRUD관점에서 설명하기!!

Post

Get

Put

Delete

알아서 설명하기

 


HTTP1.1 vs HTTP2.0

내 답안 : 좀 더 보안이 강화됨? -이건 https인가?

 

예비 답안 : 

WWW에서 하이퍼텍스트 문서를 교환하기 위하여 사용되는 통신규약이다.

 

HTTP/1.1

Connection당 하나의 요청을 처리 하도록 설계 되어 있다. 그래서 동시전송이 불가능하고 요청과 응답이 순차적으로 이루어 지게된다. 그렇다 보니 HTTP문서안에 포함된 다수의 리소스 (CSS, JS, Images)를 처리하려면 요청할 리소스 개수에 비례해서 Latency(대기 시간)는 길어지게 된다.

HTTP/1.1 단점

  • HOL(Head Of Line) Blocking – 특정 응답의 지연
  • RTT(Round Trip Time) 증가
  • 무거운 Header 구조 (특히 Cookie)

HTTP/2.0 장점

  • Multiplexed Streams
    • 한 커넥션으로 동시에 여러개의 메세지를 주고 받을 있으며, 응답은 순서에 상관없이 stream으로 주고 받는다. HTTP/1.1의 Connection Keep-Alive, Pipelining의 개선이라 보면 된다.
  • Stream Prioritization
  • 예를 들면 클라이언트가 요청한 HTML문서안에 CSS파일 1개와 Image파일 2개가 존재하고 이를 클라이언트가 각각 요청하고 난 후 Image파일보다 CSS파일의 수신이 늦어지는 경우 브라우저의 렌더링이 늦어지는 문제가 발생한다. HTTP/2의 경우 리소스간 의존관계(우선순위)를 설정하여 이런 문제를 해결하고 있다.
  • Server Push
    • 서버는 클라이언트의 요청에 대해 요청하지도 않은 리소스를 마음대로 보내줄 수 도 있다.
    • 클라이언트가 HTML문서를 요청했고 해당 HTML에 여러개의 리소스(CSS, Image…) 가 포함되어 있는경우 HTTP/1.1에서 클라이언트는 요청한 HTML문서를 수신한 후 HTML문서를 해석하면서 필요한 리소스를 재 요청한다.
    • HTTP/2에선 Server Push를 이용하면 클라이언트가 요청하지도 않은 (HTML문서에 포함된 리소스) 리소스를 Push 해주는 방법으로 클라이언트의 요청을 최소화 해서 성능 향상을 이끌어 낸다.
    • 이를 PUSH_PROMISE 라고 부르며 PUSH_PROMISE를 통해서 서버가 전송한 리소스에 대해선 클라이언트는 요청을 하지 않는다.

URL 에 www.example.com 을 쳤을 때 일어나는 일들을 설명하세요.

내 답안 : X

 

예비 답안 : 

https://owlgwang.tistory.com/1

 

웹 브라우저에 URL을 입력하면 어떤 일이 일어날까?

우리가 흔히 쓰는 웹 브라우저(Chrome, Internet Explorer, Firefox)에 URL(Uniform Resource Locator)을 입력하고 Enter를 치면 어떻게 웹페이지가 우리 눈에 보여질까? 1. 주소표시줄에 URL을 입력하고 Enter를..

owlgwang.tistory.com

 

 

참고 : 

https://github.com/brave-people/brave-tech-interview/blob/main/contents/network.md

 

Key에 대해서 설명하세요. 후보키, 기본키(Primary Key), 대체키(Alternate Key), 외래키(Foreign Key), 슈퍼키(Super Key) 란?

 

나의 대답 : 

후보키 : 유일성과 최소성을 모두 가지는 속성의 집합

기본키 : 한개 선택된 키

대체키 : 기본키를 제외한 후보키

왜래키 : 다른 테이블끼리 관계를 맺을때 사용되는 키

슈퍼키 : 최소성 없이 유일성만 만족하는 키

 

모범 답안 : 

NoSQL이란?

나의 대답 : 

관계형 데이터베이스가 아닌 키-밸류 구조로 된 자율적 형태로 구성가능한 데이터 베이스 

 

모범 답안 : 

NO-SQL이란 Not Only SQL의 약자로써 기존 SQL에 비해서 특정 기능에 대해서 더 나은 기능을 제공합니다. 보통 json형태의 도큐먼트 형식으로 데이터를 저장하고 확장성이 좋기 떄문에 비정형 데이터를 다루는데 좋습니다. DB로는 대표적으로 Mongo DB가 있습니다.

트랜잭션이란?

나의 대답 : 

여러개의 SQL 명령문을 한꺼번에 실행시키는 것, ACID 만족해야함 (이건 프로시저임;;)

 

모범 답안 : 

데이터베이스의 상태를변화시키는 일의 단위


참고 : https://github.com/brave-people/brave-tech-interview/blob/main/contents/database.md

 

관계형 데이터베이스의 구성요소에 대해서 설명하세요.

 

-> Table, Attribute, row, column 등등?

 

모범답안 : 

  • 데이터가 테이블에 저장
  • 구성요소 : 행(튜플), 열(속성)
  • 행은 순서가 없지만, 열은 순서가 있다.
  • 스키마 : 이름과 데이터 유형을 정의
  • 키 : 테이블에서 특정 행을 유일하게 식별할 수 있게하는 특징, 열 혹은 복수의 열 모음
  • 테이블의 각 행에는 primary key값이 반드시 있어야 한다.
  • 외부키
  • 이용하여 다른 테이블과 링크할 수 있다.
  • 그 값이 다른 테이블의 키 열의 값과 같은 열

Key란? Key의 종류에 대해서 설명하세요.

 

-> 테이블에서 특정행을 유일하게 식별할 수 있는 속성, 열, 복수의 열 모음

종류 : 

Primary Key : 

  • 릴레이션에서 튜플을 구별하기 위해 여러 개의 후보키를 사용할 필요는 없습니다. 데이터베이스 설계자는 여러 후보키 중에서 기본적으로 사용할 키를 선택하는데 이것이 기본키입니다.

Foriegn Key

  • 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키입니다.

Alternative Key

  • 기본키로 선택되지 못한 후보키들입니다.

Candidate Key

  • 유일성과 최소성을 만족하는 속성 또는 속성들의 집합입니다. 최소성은 키를 구성하는 여러 속성 중에 하나라도 없으면 튜플을 유일하게 구별할 수 없는 꼭 필요한 최소한의 속성들로만 키를 구성하는 특성입니다.

Super Key

  • 유일성의 특성을 만족하는 속성 또는 속성들의 집합입니다.

ACID란?

 

-> 데이터베이스 트랜잭선이 안전하게 수행되는 것을 보장하기 위한 성질

Atomicity (원자성) - 한번에 다 되거나, 다 안되거나

Consistency (일관성) - 일관성 있는 데이터베이스 유지

Isolation (고립성) - 트랜잭션 작업중에는 다른 트랜잭션에 영향 X

Durability (지속성)- 데이터 조작 완료 후 조작이 영구적이 되어 결과를 잃지 않음

 


참조 : https://github.com/brave-people/brave-tech-interview/blob/main/contents/database.md

 

Q1.  ArrayList와 LinkedList를 설명하세요.

 

A1. 

ArrayList는 조회가 빠르고, LinkedList는 삽입, 삭제가 빠름

ArrayList는 dynamic array기반, LinkedList는 doubly linked array 기반임

LinkedList는 뒤의 값을 저장할 추가공간이 필요하다

 

모범답안. 


 

Q2. [Java] Exception, Error의 차이에 대해서 설명하세요.

 

A2.

에러는 복구 불가능 / exception은 try/catch를 통해 복구 가능

 

모범답안.

 



참조 : https://github.com/brave-people/brave-tech-interview/blob/main/contents/language.md

 

GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부

🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부터 실리콘밸리까지 "현직자가 해설해주는 기술면접" - GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대

github.com

 

Q1.  동기, 비동기에 대해 설명하고 장단점을 각각 설명해보세요.

 

A1. 

동기 -> 프로그램이 순차적으로 진행됨, 안정적이고 속도가 느림 -> 어려운 언어들..

비동기 -> 기다려주지 않고, 일단 순서대로 모두 진행함, 속도가 빠르지만, 처리하기 까다로움 -> 대부분 언어들 JS, python, java

 

모범 답안.

동기 -> Call 하고 응답이 올때까지 기다렸다가 다음 로직을 실행한다.

비동기 -> Call 하고 응답이 오지 않아도 다음 로직을 실행한다.


 

Q2. HashMap 동작 방식에 대해서 설명하세요

 

A2.

한개의 Key에 대해서 1개의 대칭됨. 검색할때 O(1)이 걸림

 

모범답안.

객체를 Map에 넣음 -> 여기서 객체란 Key-Value쌍을 넣음

Key는 유니크해야됨

동일하지 않은 두 객체가 같은 위치에 들어가려고 하는 경우 Collision

 


 

Q3. Array vs List vs Vector의 차이점

 

A3.

Array -> 추가 삭제가 용이

List -> 리스트 -> 검색이 용이함

Vector -> 잘모르겠음

 

모범답안.

Array (배열)

크기가 정해져 있다 / 기능이 없다.

길이를 바꿀 수 없다.

 

List(리스트)

배열이 가지고 있는 인덱스라는 장점을 버리고 빈틈없는 데이터의 적재

엘리먼트들 간의 순서가 중요함 -> 몇번째 데이터 인가

크기를 추가하기 편함

데이터 갯수가 확실하게 정해져있고, 자주 사용되면 array가 나음

https://wayhome25.github.io/cs/2017/04/17/cs-18-1/

 

Vector (벡터)

연속적인 메모리

미래에 들어갈 요소들을 위해 선할당을 한다.

끝에 추가하는 것은 O(1), 다른곳은 O(n)

랜덤하게 vector요소에 접근 가능

https://theemeraldtablet.tistory.com/entry/list%EC%99%80-vector-%EC%B0%A8%EC%9D%B4%EC%A0%90


참조 : https://github.com/brave-people/brave-tech-interview/blob/main/contents/language.md

 

GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부

🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부터 실리콘밸리까지 "현직자가 해설해주는 기술면접" - GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대

github.com

 

Q1.  Dynamic Programming이란? 장점은?

 

A1. 이전의 결과값들을 저장해서 처리 속도를 향상시키는 프로그래밍 기법 ex) 피보나치


 

Q2. map, hashmap, set에 대해서 설명하세요

 

A2.

Hash의 정의 : 특정 input값을 주어지면 항상 동일값을 보장해주는 것

 

Map의 정의 : 기본적으로, put과 get을 가지고 있는 인터페이스로, 추가하고, 값을 가져 올 수 있는 인터페이스

종류로는 HashMap, TreeMap, LinkedHashMap이 있다.

 

HashMap의 정의 : Hash 형식을 가지고 있는 key-value의 Map

 

Set의 정의 : array나 list처럼 순열 자료구조. but 순서라는 개념이 존재하지 않음. 보통 해쉬값 기반으로 저장함

 

**HashTable은 HashMap과 비슷한 Collection이지만, Thread-safe한 특징이 있다.

https://gompangs.tistory.com/entry/Hashtable%EC%97%90-%EA%B4%80%ED%95%B4%EC%84%9C?category=537219 

 

Hashtable에 관해서

개요 HashMap과 비슷한 Collection이지만, Thread-safe 한 특징이 있다. Thread-safe 하게 동작을 보장하려면 여러가지 방법이 있지만, 그 중 가장 성능이 안좋은 synchronized block을 통해 객체 lock을 걸어 동..

gompangs.tistory.com


 

Q3. 배열의 최대값 / 최솟값 을 구하세요

 

A3. 코드상으로, max와 min을 저장해두고 한개씩 값을 비교해보면서 저장 -> 시간복잡도 O(n), 공간복잡도 O(1)

 

더 빠른 방법 - 2개씩 보기

def optimization_find_small_and_largest_number_in_array(A):
    _max = _min= A[0]

    for idx in range(0, len(A), 2):
        first = A[idx]
        second = A[idx + 1]
        if first < second:
            if first < _min: _min = first
            if second > _max: _max = second
        else:
            if second < _min: _min = second
            if first > _max: _max = first
    return _max, _min

 


참조 : https://github.com/brave-people/brave-tech-interview/blob/main/contents/algorithm.md

 

GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부

🙋 핵심을 질문하다. 그리고 용감하게 대답하다. 국내 IT기업부터 실리콘밸리까지 "현직자가 해설해주는 기술면접" - GitHub - brave-people/brave-tech-interview: 🙋 핵심을 질문하다. 그리고 용감하게 대

github.com

 

정의 : 

 

동기적(Synchronous)

- 특정 코드를 수행 완료한 이후 아래줄의 코드 수행

- 즉 지금 진행하는 작업이 끝이나면 다른 작업으로 넘어가고 그 작업이 끝이 나면 다른 작업으로 넘어가는 방식이 동기적 처리 방식이라고 한다.

 

비동기적(Asynchronous)

- 특정 코드를 수행하는 도중에도 아래로 계속 내려가며 수행함

- 순서대로 진행하는 것일 아니라 한번에 여러개가 진행되는 것과 마찬가지다. 비동기적 처리는 주로 api요청, 파일읽기, 암호화, 복호화 등에서 자주 사용된다.

 

특징 : 

 

동기 : 

속도가 느림

진행방향이 일방향이기 때문에 코드에서 에러가 나면, 어디인지 파악하기 쉬움

 

비동기 :  

속도가 동기에 비해 빠름

 

언어 : 

동기적 언어 - Argos, Atom 등의 대부분 모르는 언어들

비동기적 언어 - Java, C++, Python, JavaScript 등

 

주의할 점 : 

혼동하지 말아야 할 것이, 동기/비동기적 실행은 멀티 스레딩과 전혀 관련이 없다. 즉 하나의 스레드에서도 비동기적 실행을 할 수 있고, 멀티 스레드에서도 동기적 실행을 할 수 있다. 스레드 혹은 코어의 개수가 중요한 것이 아니라, 서브루틴간의 실행 순서가 정해져 있는지가 중요하다. 이와 관해선, 이 링크의 그림을 참고하자.

 

Asynchronous vs synchronous execution, what is the main difference?

What is the difference between asynchronous and synchronous execution?

stackoverflow.com


참고 : 

https://wakestand.tistory.com/235

https://velog.io/@hyundong_kk/%EB%8F%99%EA%B8%B0%EC%A0%81-vs-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81

https://code-masterjung.tistory.com/69

 

 

 

 

 

 

+ Recent posts