1. 도커란?

- 컨테이너 기반의 오픈소스 가상 플랫폼

가상 머신(Virtual Machine) VS 도커 컨테이너(Docker Container)

  • 기존의 가상화 기술은 가상머신(VM)이라하여 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었습니다. 이 때 생성되고 관리되는 운영체제는 게스트 운영체제(Guest OS)라고 하며, 각 게스트 운영체제는 독립된 공간과 시스템 자원을 할당받아 사용합니다. 대표적인 툴로는 virtualBox, VM Ware가 있습니다.
  • 하지만 가상 머신은 게스트 운영체제(Guest OS)를 사용하기 위해 커널과 라이브러리 등이 포함이 되기 때문에 무겁고 용량이 큽니다, 대신에 도커 컨테이너는 가상화 공간을 만들기 위해 리눅스의 자체 기능인 chroot, namespace, cgroup을 사용하기 때문에 성능 손실이 거의 없으며, 컨테이너에 필요한 커널은 호스트 운영체제의 커널을 공유해 사용 하기 때문에, 가볍습니다.

2.인프라 프로비저닝이란?

프로비저닝(Provisioning) 이란 의미는 영어 직역한 그대로 "제공하는것" 이다.

어떤 종류의 서비스든 사용자의 요구에 맞게 시스템 자체를 제공 하는 것을 프로비저닝이라고 하며 제공해줄 수 있는 것은 인프라 자원이나 서비스, 또는 장비가 될 수도 있다.

좀 더 실무적인 표현으로 보자면, IT 인프라 자원을 사용자 또는 비즈니스 Customer에게 Service Vendor 가 제공해주는 것을 말한다.

3. CI/CD

 CI(지속적 통합 (Continuous Integration))

-  모든 개발이 끝난 이후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기 위해 나타난 개념이다. 말 그대로 개발을 하면서 '코드에 대한 통합'을 '지속적'으로 진행함으로써 품질을 유지하자는 것이다.

 예시) CI의 자동화가 잘 이루워 졌을 때, 규칙의 단순화 확인

1. 모든 개발자는 퇴근하기 전에 자신의 코드를 중앙 코드와 통합한다.

2. 다음날 출근시 메일로 발송된 결과 리포트를 확인하고 버그가 있으면 수정한다.

CD(지속적 배포(Continuous Deploy 또는 Delivery))

- 소프트웨어가 항상 신뢰 가능한 수준에서 배포 될 수 있도록 관리하자는 개념이다.

-CI가 선행 되어야 CD가 가능하다.

-즉, CI 프로세스를 통해 개발 중에 지속적으로 빌드와 테스트를 진행하고, 이를 통과한 코드에 대하여 테스트서버와 운영서버에 곧바로 그 내용을 내포해 반영하는 것이다. 이상적인 환경이라면 테스트와 빌드가 '지속적'으로 이뤄지기 때문에, 배포 또한 자연스럽게 '지속적'으로 이뤄지게 된다.

 

CI = 빌드 및 테스트 자동화CD = 배포 자동화

 

4. git flow

2010년 Vicent Driessen이라는 분이 만든 가장 널리 알려진 Git 작업 절차입니다. Git Flow는 master와 develop이라는 항상 존재하는 주 브랜치가 있고, feature-*, hotfix-*, release-*라는 필요에 따라 생성하는 브렌치가 있습니다. 물론, 이후 improvement-*, bugfix- 등 프로젝트에 따라 다양한 브랜치 모델이 추가되기도 하였습니다.

 

이 절차는 다음과 같은 형태로 진행됩니다.

  1. master 브랜치에서 develop 브랜치를 분기합니다.
  2. 개발자들은 develop 브랜치에 자유롭게 커밋을 합니다.
  3. 기능 구현이 있는 경우 develop 브랜치에서 feature-* 브랜치를 분기합니다.
  4. 배포를 준비하기 위해 develop 브랜치에서 release-* 브랜치를 분기합니다.
  5. 테스트를 진행하면서 발생하는 버그 수정은 release-* 브랜치에 직접 반영합니다.
  6. 테스트가 완료되면 release 브랜치를 master와 develop에 merge합니다.

그리고 이 절차가 반복됩니다.

 

모니터링 도구란?


모니터링 시스템의 종류

1) 서버 모니터링

서버 여러대중 1대라도 죽는 경우 모니터링 하는것을 말한다.

  • 이를 모니터링하는 도구는 주로 쟈빅스,나기오스, 자체개발 에이젠트 등을 사용한다.

2) 서비스 모니터링

사용자 입장에서 서비스가 안되는 경우 모니터링 하는것을 말한다.

  • '서비스 전용 모니터링' 도구를 사용한다. Topaz 와 아르고스 등과 같이 사용자단부터 서버까지 모니터링을 하는 툴 이용한다.

 

':: IT > 기술면접' 카테고리의 다른 글

웹개발  (0) 2020.08.10
파이썬 개발  (0) 2020.08.10
[기술면접] 운영체제  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30
[데브옵스] 데브옵스란?  (0) 2020.07.30

1. 커널이란?

- 운영체제의 핵심 부분으로서, 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공한다.

시스템 호출 : 시스템 함수들에 의해 이루어 지는데, C언어에서 사용 했던 printf(), write()같은 함수 이다.

드라이버 : 시스템 호출의 반대편에서 하드웨어 인터페이스를 담당한다. 간단한 디바이스 드라이버들은 커널에 포함되어 있지만 일부 복잡하거나 새로 출시된 디바이스 드라이버들은 제조사에서 직접 제작하여 사용자가 설치해야한다.

 

커널이 하는 일

프로세스 관리 ⇒ 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공

메모리 관리  프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공

파일 시스템 관리  데이터를 저장하고 접근할 수 있는 인터페이스를 제공

입출력 관리  필요한 입력과 출력 서비스를 제공

프로세스 간 통신 관리  공동 작업을 위한 각 프로세스 간 통신 환경을 지원

2. 프로세스 스케쥴링

  • CPU를 사용하려고 하는 프로세스들 사이의 우선 순위를 관리하는 일
  • 스케줄링은 처리율과 CPU이용률을 증가시키고 오버헤드/응답시간/반환시간/대기시간을 최소화 시키기 위힌 기법이다.
  • 즉, CPU가 쉬지않고 계속 열심히 일할 수 있도록 효율적인 계획을 잡아주는 것이다.

스케줄링에서는 장기, 중기, 단기 스케줄링이 있다.

 

어떤 프로세스를 ****커널에 등록****할 것이가를 정하는 ****장기**** 스케줄링,

어떤 프로세스에게 ****메모리를 할당****할 것인가를 정하는 ****중기**** 스케줄링,

어떤 프로세스에게 ****CPU를 할당****할 것인가를 정하는 ****단기**** 스케줄링이 있다.

3. 컨텍스트 스위칭

  • CPU에서 실행할 프로세스를 교체하는 기술

컨텍스트 스위칭의 순서

컨텍스트 스위칭은 크게 다음과 같은 두 동작으로 구분할 수 있다.

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트하여 메인 메모리에 저장
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행

PCB 정보 중 PC, SP가 프로세스가 변경된 이후에 작업을 이어나갈 수 있도록 하는 점에서 중요하다.

* PCB : 인쇄회로기판

*스택 프레임 (Stack Frame) : 함수 호출 과정에서 할당되는 메모리 블럭

*스택 포인터 (SP, Stack Pointer) : 현재 스택의 위치 정보를 지니는 포인터. 이 값을 저장하는 레지스터를 sp 레지스터라 한다.

*프레임 포인터 (FP, Frame Pointer) : 함수 호출 종료시 스택 프레임의 반환을 위해 이전 스택 포인터의 정보를 지니는 포인터. 이 값을 저장하는 레지스터를 fp 레지스터라 한다.

 

4. 가상 메모리

  • 한정된 물리 메모리의 한계를 극복하고자 디스크와 같은 느린 저장장치를 활용해, 애플리케이션들이 더 많은 메모리를 활용할 수 있게 해 주는 것이다.
  • 가상 메모리는 실제 메모리의 남은 공간이 부족하게 되면 사용되는 일종의 임시 공간이다. 그래서 만약 실제 메모리의 용량이 충분하다면 거의 사용되지 않는 특성이 있다. 만약 실제 메모리 공간이 부족하여 가상 메모리가 사용되기 시작하면 위에서 이야기한 것과 같이 [실제 메모리 <-> 가상 메모리] 사이로 데이터를 옮기는 과정들이 추가되기 때문에 그만큼 시스템이 전체적으로 느려지게 된다. 특히나, 실제 메모리 공간인 램에 비해 가상 메모리 공간인 디스크는 매우 느리기 때문에 더더욱 느려지는 것이다.
  • 그래서 가상 메모리는 되도록 사용되지 않을 수록 좋다. 그럴려면 실제 메모리 즉, 램의 용량이 충분해야 한다. 하지만 꼭 메모리 공간이 부족하지 않더라도 일부 프로그램의 경우 반드시 이러한 가상 메모리를 사용하는 경우도 있다.

5. 교착 상태

프로세스가 자원을 사용하기 위해서는 반드시 사용하기 전에 요청 을 해야 하고 사용 후에는 반드시 방출해야 한다. 즉, 정상적은 작동 모드에서 프로세스는 다음 순서로만 자원을 사용할 수 있다.

  1. 요청 : 프로세스는 자원을 요청하고, 즉시 허용되지 않는 경우 자원을 얻을 때까지 대기상태에 놓이게 된다.

  2. 사용 : 프로세스는 자원에 대해 작업을 수행한다.

  3. 방출 : 프로세스가 자원을 다 사용하였다면 방출한다.

이렇게 경쟁 구도에 놓인 프로세스들은 자원을 요청하는 시점에 해당 자원이 다른 프로세스에 의해 점유되어 있으면 대기상태에 놓이게 되고 각 프로세스와 자원들이 서로 꼬리를 물며 자원을 대기하게 되는 경우 이를 교착상태 에 놓여있다고 한다. 즉, 한 프로세스 집합 내 모든 프로세스가 그 집합 내 다른 프로세스에 의해서만 발생될 수 있는 사건을 기다린다면, 그 프로세스 집합은 교착상태 에 있는 것 이다.

':: IT > 기술면접' 카테고리의 다른 글

파이썬 개발  (0) 2020.08.10
[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30
[데브옵스] 데브옵스란?  (0) 2020.07.30
[운영체제] 운영체제란?  (0) 2020.07.30

방화벽이란?


  • 안전한 인터넷 트래픽을 허용하고 안전하지 않은 트래픽을 차단하여 컴퓨터를 보호한다.
  • 외부 사용자(WAN)들이 내부 네트워크(LAN)에 접근하지 못하도록 하는 일종의 내부 네트워크 방어도구이다. 다른 소프트웨어적인 프로그램 도구와는 달리 방화벽이라함은 독립된 시스템이나 전용 하드웨어등을 뜻한다. 연결요청에 대해서 승인된 호스트에 한하여 처리하는 간단한 인증에서부터 패킷필터링 및 분석, 프로토콜 내 특정 공격서명(attack signature)을 막는기술, 사용자 연결의 인증과 암호화 단계까지 다양하게 존재한다.
  • 공격서명(attack signature)이란 해커들이 해킹을 전제로 사용되는 공통되고 비슷한 패턴을 의미합니다. 예를 들어서 80포트를 사용해 텔넷으로 명령을 내린다던지 ftp로 이상한 패킷을 보내는 것과 같은 행위를 말합니다.

인터넷과 인트라넷의 차이점


인터넷

  • 인터넷은 인터넷 프로토콜 제품군 (TCP / IP)을 사용하여 전세계 장치를 연결하는 상호 연결된 컴퓨터 네트워크의 글로벌 시스템

인트라넷

  • 인트라넷은 기업 내에 포함 된 개인 네트워크이다. 상호 연결된 여러 근거리 통신망으로 구성 될 수도 있고 광대역 통신망에서 임대 회선을 사용할 수도 있다. 일반적으로 인트라넷에는 하나 이상의 게이트웨이 컴퓨터를 통한 외부 인터넷 연결이 포함된다.

엑스트라넷

  • 인트라넷과 유사하지만 특정 조직의 인트라넷을 사용이 허가된 사람 이외에도 고객, 협력업체 등에서 사용 할 수 있도록 한다.

인터넷과 인트라넷의 차이점

인터넷은 무엇이든 엑세스 할 수 있는 인터넷이며 개인은 집이나 모바일에서 사용하는 반면, 인트라넷은 회사 또는 조직의 상호 연결된 네트워크이다.

 

프로토콜이란?

네트워크상 통신회선을 통해서 컴퓨터, 단말기와 같은 시스템 간에 내부적으로 통신, 접속하기 위해 정보, 자료, 메세지 등을 주고 받는 공통의 데이터 교환 방법 및 순서에 대해 정의한 의사고통 약속, 규칙 체계

 

 

IPv4와 IPv6의 차이점


IPv4 와 IPv6의 비교

  • IPv4(Internet Protocol version 4) : 인터넷 프로토콜의 4번째 판이며, 32비트로 구성된 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다. 현재 인터넷을 사용하는 장비나 장치들이 늘어 남에 따라 지금은 40억개(232)가 넘는 IPv4의 IP주소가 고갈 되어 2011년 2월 4일 IPv4 주소의 신규할당이 전면 중단 되었다.
  • IPv6 (Internet Protocol version 6) : 인터넷 프로토콜의 6번째이며, IPv4의 주소가 한계점에 다다르면서 인터넷발전의 문제가 예상되어 IPv6가 제정되었다. IPv6는 128비트의 주소 체계를 가지며 2128개 즉, 340,282,366,920,938,463,463,374,607,431,768,211,456개의 거의 무한대로 쓸 수있다.

TCP와 UDP의 차이점


SSH란?


  • **시큐어 셸(Secure Shell, SSH)**은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
  • 기존의 rsh, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.
  • SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.

 

네트워크 이해하기

 

https://mindnet.tistory.com/category/IT%20Study/Network%20%EC%89%BD%EA%B2%8C%20%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0?page=3

':: IT > 기술면접' 카테고리의 다른 글

[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 운영체제  (0) 2020.07.31
[데브옵스] 데브옵스란?  (0) 2020.07.30
[운영체제] 운영체제란?  (0) 2020.07.30
[기술면접] 공통 개발 부분  (0) 2020.07.28

데브옵스

- 소프트웨어의 개발(Development)과 운영(Operations) 합성어

- 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.

- 데브옵스는 소프트웨어 개발조직과 운영 조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서버스를 빠른 시간에 개발 및 배포 하는 것을 목적으로 한다.

 

-DevOps는 개발(Development)과 운영(Operations)의 합성어입니다

 

왜 이 두 가지 개념이 합쳐 졌을까요?

 

서비스의 패치를 위해서 몇 달간의 작업 후 배포하던 고전적인 방식과 달리, 현재는 빈번한 서비스 배포가 주류를 이루고 있습니다.
대부분의 서비스가 설치 기반에서 웹 기반으로 바뀌었으며 마이크로 서비스와 애자일 개발 방법론에 대한 관심이 많아졌고 그로 인해 빈번한 서비스의 배포가 필요해 졌습니다. 

하지만 개발팀은 서비스 개발에 매진하고, 운영팀은 보안과 안정적인 인프라 구축에 집중을 하므로 빈번한 배포 전략이 유연하게 동작할 수 없습니다.

이런 새로운 전략을 위해서 두 팀이 병합되어 개발, 테스트, 배포, 운영에 이르는 애플리케이션 수명주기를 개발하게 됩니다.

이를 데브옵스라고 하며, 이는 아래와 같은 이점이 있습니다

DevOps의 이점

  • 속도
    배포까지의 빠른 작업속도를 효율적으로 제공하기 때문에 시장 변화에 빠르게 대처하고 비즈니스 성과를 창출 가능.

  • 빠른 배포
    새로운 릴리즈와 버그픽스를 빠르게 배포할 수 있으며, 그로 인해 고객의 요구를 빠르게 대응 가능.

  • 안정성
    지속적 통합, 지속적 전달, 모니터링, 로깅을 통해 안정적인 서비스 품질을 고객에게 제공 가능.

  • 확장 가능
    복잡하거나 변화하는 시스템을 효율적으로 관리 가능.

  • 협업 강화
    개발자와 운영팀이 긴밀하게 협력할 수 있기 때문에 책임을 공유하고 워크플로우를 결합할 수 있음.
    이를 통해 비효율을 줄이고 시간 절약 가능.

클라우드 기반의 웹서비스를 제공하는 경우 빠른 고객 응대와 배포로 인해서 시장우위를 점할 수 있습니다.

Facebook, Netflix, Flickr같은 회사들은 하루에 10번이 넘는 배포주기를 가지고 있다고 합니다.

뭘해야 하나요?

그럼 저런 이점을 얻기 위해 DevOps는 무엇을 해야 할까요?
위 이미지의 DevOps Flow 구현을 위한 중요한 개념들을 정리해 보았습니다.

SCM (Source Code Management)

우선 팀 단위로 개발되는 소스를 지속적으로 관리해줘야 합니다.
아래와 같은 버전 관리 시스템을 이용해 소스코드 관리를 합니다.

이를 위해 GitSVN 등을 사용합니다

CI/CD

보통 하나의 서비스를 여러 명이 팀 단위로 작업을 하게 됩니다. 이렇게 각각 개발한 코드 빌드부터 배포까지 걸리는 시간 단축을 위해서 CI/CD 구축이 필요합니다.

CI (Continuous Integration)

지속적인 통합.
CI는 Build와 Test를 실시하는 프로세스입니다.
서비스의 품질관리를 위해서 지속적인 빌드와 테스트 과정을 지원합니다.

  • Build
  • Unit Test
  • Code Coverage

일반적으로 CI를 위해 Jenkins, Travis CI 등을 사용합니다.
자동화 테스트의 경우 프로그래밍언어나 프레임워크에 따라 다양하게 사용됩니다.
e.g) JestMochaPHPUnitNUnit, etc...

 

CD (Continuous Deploy (or Continuous Delivery))

지속적인 배포.
빌드단계 이후의 소프트웨어의 배포를 자동화합니다.
개발자가 원할 때 언제나 즉시 테스트 혹은 프로덕션에 지속적으로 배포할 수 있습니다.

Configuration Management

안정적인 지속적 배포를 위하여 서버 및 서비스의 설정을 관리 합니다.
서버 OS, 라이브러리 및 버전, 설치 순서, 컴파일, 등을 특정하여 더욱 안정적인 배포를 할 수 있게 해줍니다.
이를 위해 일반적으로 사용되는 도구는 아래와 같습니다.

AnsibleChefPuppet, etc...

모니터링 및 로깅

배포 이후 모니터링 및 로깅을 하여 제품이 최종사용자 경험에 어떤 영향을 미치는지 확인합니다.
데이터에 대한 실시간 분석을 수행하거나 알림을 생성 할 수 있으며, 사용자 데이터를 모니터링하여 서비스 발전에 방향을 잡고 계획할 수 있습니다.

서비스 상태를 확인 및 알람 - DatadogPagerDuty, etc...
로깅 - PapertrailLoggly, etc...
사용자 분석 - Google AnalyicsMixpanelSegment, etc...

마치며

  • DevOps는 회사의 개발 문화와 밀접하게 연관이 되어 있습니다.
    그렇기 때문에 정답이 없으며, 회사 개발 문화에 자연스럽게 녹아드는 DevOps가 최선이라고 생각합니다.
    갑작스레 DevOps 전문가를 뽑아서 이렇게 해! 저렇게 해! 한다고 되는 부분이 아니며, 팀 내 개발자들의 관심을 통해 그 서비스의 맞춘 DevOps 환경을 만들어 가야 합니다.

  • 회사에서 DevOps 작업하며 공부한 것들을 작성했으며, 더 많은 내용을 여기에 담으려 했으나!
    그러면 매우 길고 지루해질 것 같아 제목에 소개를 붙였습니다.
    DevOps 관련하여 자동화 배포, 마이크로서비스, 서버패턴, 배포전략 등의 내용을 추가적으로 쓸 예정입니다.
    포스트 하나로 때우기에는 생각보다 너무 방대하네요...

  • 상황에 따라서는 AWS에서 관련 서비스를 많이 제공하기 때문에 위에 열거한 툴을 사용하지 않아도 됩니다.

  • GitLab 자체에서도 CI/CD 도구를 제공하고 있습니다. 회사 동료가 쓰는걸 봤는데 인상적이더군요.



출처: https://blog.sonim1.com/231 [Kendrick's Blog]

 

 

':: IT > 기술면접' 카테고리의 다른 글

[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 운영체제  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30
[운영체제] 운영체제란?  (0) 2020.07.30
[기술면접] 공통 개발 부분  (0) 2020.07.28

운영체제란?

운영체제 : 컴퓨터의 사용자와 하드웨어 사이에서 중개자 역할을 해주는 프로그램

 

운영체제의 역사

수작업 -> 단일 프로그래밍 -> 다중 프로그래밍 &시분할 -> 모바일 OS &실시간 시스템

 

운영체제의 목적

1. 사용자가 컴퓨터를 편리하게 사용하는 것

2. 컴퓨터 하드웨어가 효율적으로 사용되는 것

 

컴퓨터 시스템의 처리 구조

 

운영체제는 사용자와 하드웨어간의 전반적인 상호작용을 하면서 컴퓨터가 실행되는 동안 항상 수행되는 프로그램이다.

 

강의 추천

 

http://www.kocw.net/home/search/kemView.do?kemId=1226304&ar=relateCourse

':: IT > 기술면접' 카테고리의 다른 글

[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 운영체제  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30
[데브옵스] 데브옵스란?  (0) 2020.07.30
[기술면접] 공통 개발 부분  (0) 2020.07.28

초급

1. 포인터란?

- 어떠한 값의 주소를 저장하는 변수

-  4바이트의 주소만 가지기 때문에 복사가 일어나지 않아 속도가 빠르다.

- 주소를 컨트롤 하기 때문에 원본에 대한 값의 변경이 쉽다.

- but 주소를 직접 변경하기 때문에 예외처리를 확실하게 하지않으면 의도치 않게 원본 값이 수정 될 수 있다.

int *p = NULL;
int num = 15;
p = &num;

2. 컴파일 언어와 인터프리터 언어의 차이점

2-1. 컴파일 언어

- 원시코드->기계어로 변환 후 -> 기계 -> 기계어 코드로 실행

- 소스코드를 기계어로 번역하는 과정에서 인터프리터 언어에 비해 시간이 소요 되지만 런타임 상황에서는 빠르게 실행 할 수 있다.

ex) C, C++

 

2-2. 인터프리터 언어

- 기계어로 변환하는 과정 없이 한줄씩 해석하여 바로 명령어를 실행하는 언어

- 바로 실행으로 컴파일 언어에 비해 빠르다.

ex) python

3. 컴퓨터의 문자열 처리 방법

표준화된 코드 체계를 사용하여 컴퓨터, 프로그램 간에 데이터를 저장하고 교환할 수 있게 됐다.

-컴퓨터의 기본 저장 단위는 바이트(byte)이다.

-1byte = 8bit

https://whatisthenext.tistory.com/103

-1byte(8bit) -> 256개의 고유값을 저장 할 수 있다.

 

3-1. 아스키 코드(ASCII)

- 각 문자를 나타내는 7비트와  통신 에러 검출을 확인하기 위한 오류 검사비트 1개를 붙여 총 8비트로 구성

- 128개의 문자를 나타낼 수 있다.

 

3-2. 유니코드(Uni code)

- 16비트로 구성되어 최대 65,536개까지 표현 할 수 있다.

 

4.Call by value 와 Call by reference의 차이점

https://codingplus.tistory.com/29

1.Call by value(값에 의한 호출)

- 인자로 받은 값을 복사하여 처리한다.

-장점 : 복사하여 처리하기 때문에 원본 값이 안전하다. 

-단점 : 복사하기 때문에 메모리 사용량이 늘어난다.

https://codingplus.tistory.com/29

2.Call by reference(참조에 의한 호출)

- 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.

-장점 : 복사하지 않고 참조하기 때문에 빠르다.

-단점 : 참조하기 때문에 원본 값이 영향을 받는다.

 

5. 예외처리란?

-에러(error) : 발생 시 수습할 수 없는 심각한 오류

-예외(exception) : 예외 처리를 통해 수습할 수 있는 덜 심각한 오류

 

 

 

프로그램 실행 시 발생할 수 있는 예외에 대비하는 것으로 프로그램 비정상종료를 막고 실행 상태를 유지하는 것

try:
	...
except 발생 오류1 as [오류 별칭]:
	...
except 발생 오류2 as [오류 별칭]:
	...
finally:
	...

6. 재귀 함수란?

함수 안에서 함수 자기자신을 호출하는 방식

function factorial(n){
    if(n==1){ // 이 조건으로 멈출 수 있다.
        return 1; 
    }
    return n * factorial(n-1); //함수 자기 자신을 다시 호출한다.
}

console.log(factorial(5));

7. 클래스와 객체, 인스턴스의 차이점

- 클래스 : 객체를 만들어 내기 위한 설계도 혹은 툴, 연관되어 있는 변수와 메서드의 집합

- 객체 : 클래스를 사용하여 클래스 타입의 객체를 선언

- 인스턴트 : 객체가 메모리에 할당되어 실제 사용될 때

 o 붕어빵 틀 = Class                     o 붕어빵 = 객체(Object)
  o 붕어빵을 굽다 = 인스턴스(Instance)화 하다
  o 만들어진 각각의 붕어빵 = Instance  

/* 클래스 */
public class Animal {
  ...
}
/* 객체와 인스턴스 */
public class Main {
  public static void main(String[] args) {
    Animal cat, dog; // '객체'

    // 인스턴스화
    cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
    dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

중급

1. 메모리 구조에서 스택과 힙의 차이점

http://tcpschool.com/c/c_memory_structure

1.스택(Stack)

- 매개 변수, 지역 변수, 함수(메서드)들이 할당되는 LIFO(Lasr in First Out)방식으로 메모리 사용이 끝나면 바로 소멸되며 컴파일 시메모리에 할당 된다.

- CPU가 스택 메모리를 효율적으로 관리하기 때문에 스택 변수를 읽고 쓰는 속도가 빠르다.

 

2. 힙(Heap)

- new 연산자를 통한 동적 할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리 되어진다.

- 호출이 끝나도 사라지지 않으며 프로그램 실행시 동적으로 할당된다.

- 힙 메모리는 포인터를 사용하여 힙의 메모리 영역에 접근하기 때문에 읽고 쓰는 속도가 조금 느리다.

2. SW 설계시 의존성 주입, 제어의 역전이란?

1. IoC (Inversion of Control, 제어의 역전)

개발자가 프로그램의 흐름(애플리케이션 코드)을 제어하는 주체였었다. 객체의 생성~ 생명주기 관리를 컨테이너가 도맡아서 하게 된 것이다.

즉, 제어권이 컨테이너로 넘어가게 되고, 이것을 제어권의 흐름이 바뀌었다고 하여 IoC(Inversion of Control : 제어의 역전)이라고 하게 된다.

제어권이 컨테이너로 넘어옴으로써 DI(의존성 주입), AOP(관점 지향 프로그래밍)등이 가능하게 된다.

 

2. DI (Dependency Injection, 의존성 주입)

각 클래스간의 의존관계를 빈 설정 (Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

빈 설정을 개발자가 XML, annotation 방식으로 설정을 하면 컨테이너가 빈의 설정 정보를 읽어서 컨테이너가 자동으로 시켜준다.

3. 다형성이란?

- 여러 가지 데이터를 다룰 수 있는 특성을 뜻 한다.

- 부모클래스의 인스턴스를 이용하여 자식 타입의 클래스를 다룬다거나, 메서드 오버로딩을 통하여 동일 이름의 메서드를 이용하여 다양한 형태의 파라미터를 다루는 것을 뜻한다.

4. 프로세스와 쓰레드의 차이점

1. 프로세스

- 실행중인 프로그램을 나타낸다. CPU가 실행되고 있는 프로세스에 대해 메모리 자원을 안정되게 배분해줘야 하며 운영체제의 성능에 따라 성능이 결정된다.

 

2. 쓰레드

- 이 프로세스 내에서 실행되는 각각의 일. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다. 스레드는 각자의 스택 메모리영역을 가지고 있으며 동일한 프로세스 내의 다른 스레드들과 전역 메모리를 공유한다. 따라서 CPU로부터 새로운 자원을 할당받지 않아도 되기 때문에 프로세스보다 실행 속도가 빠르다는 장점을 가지고 있다.

5. 자료 구조란?

- 자료(Data)의 집합이며 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것이다. 자료구조를 잘 선택하는 것으로 실행시간을 단축시켜주거나 메모리 용량의 절약등을 이끌어 낼 수 있다.

- 자료구조는 선형구조와 비선형 구조로 나눠져있다.

선형 구조 : 배열, 링크드리스트, 스택, 큐가 있다.

비선형 구조: 트리, 그래프가 있다.

6. 코드 형상 관리란?

- 코드 형상 관리란 변경사항을 체계적으로 관리하고 제어하기 위한 활동이다. 소스를 버전별로 관리할 수 있어서 개발할 때 실수로 코드를 삭제하거나, 수정하기 이전으로 돌아가야되는 경우 유용하게 사용되며 팀 프로젝트에서 누가 무엇을 어떻게 수정했는지도 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는 데에도 쓰인다.

형상관리 툴의 종류로는 SVN, CVS, Perforce, ClearCase, TFS, Git 등이 있다.

7. ORM(Object-Relational Mapping)이란?

- ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것이다.

객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하는데 이를 맞춰줘서 더 직관적인 코드로 데이터를 조작 및 개발 할수있고 코드의 길이가 줄어든다.

개발하는데 많은 편리성과 이점을 제공하지만 프로젝트의 복잡성이 커지거나 DBMS의 고유 기능을 이용해야될 경우 ORM으로만 서비스를 구현하기가 쉽지않다는 단점이 있다.

book 이라는 객체에서 저자의 이름이 ychaen 인 책 목록을 가져오고 싶을 때,
SQL 쿼리문을 사용할 경우, sql 쿼리문을 작성하고, 데이터를 가져오는 일련의 모든 과정들을 코드에 적어야 한다

book_list = new list();
sql = "SELECT book FROM library WHERE author = 'ychaen'";
data = query(sql);
while (row = data.next()){
    book = new Book();
    book.setAuthor(row.get('author'));
    book_list.add(book);
}


반면 ORM을 사용하면, 간단하게 표현할 수 있다
book_list = BookTable.query(author="ychaen")

고급

1. 알고리즘의 시간복잡도

- 알고리즘의 성능은 시간복잡도와 공간 복잡도로 표현한다.

- 시간복잡도 :  입력밧의 개수와 알고리즘의 처리시간의 상관관계를 표현한 말이다.(입력한 데이터의 양이 많아 짐에 따라 처리 속도가 어떻게 변하는지를 수학의 기호를 빌려 표현하는 방식이다.

-공간복잡도 : 시간복잡도와 동일하나 처리시간 대신 메모리 사용량의 변화를 비교하는 것이 다르다.

 

- 알고리즘의 성능은 빅오(big-O)표기법 = O(n)표기법으로 표현한다.

2. 임계영역이란?

- 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해주는 영역이다.

-상호 배제를 통해 다른 프로세스 또는 쓰레드를 대기시켜 문제를 해결할 수 있다

예시) 은행 통장

3. 프로그래밍에서 동기와 비동기, 블로킹과 논블로킹의 차이점

"처리시간 차이"

 

- 동기 : 동시에 일어난다는 뜻, 요청과 그 결과가 동시에 일어난다는 약속, 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어진다.

- 장점 : 셀계가 매우 간단하고 직관적이다.

- 단점 : 결과가 주어질 때까지 아무것도 하지 못하고 대기해야한다는 단점

 

- 비동기 : 동시에 일어나지 않는다는 뜻, 요청과 결과가 동시에 일어나지 않을 것이라는 약속.

- 장점 :  결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.

- 단점 : 설계가 동기보다 복잡하다.

 

https://webclub.tistory.com/605

 

동기와 비동기 방식(Asynchronous processing model)

동기식 처리 모델 vs 비동기식 처리 모델 해당 내용은 동기식 처리 모델 vs 비동기식 처리 모델 에 대한 글을 발췌한 포스팅임을 알려드립니다. 동기식 처리 모델(Synchronous processing model) 동기식 처

webclub.tistory.com

예시

 

 

블로킹 / 논블로킹

자신의 작업을 하다가 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다렸다 다시 자신의 작업을 시작한다면 블로킹이고 다른 주체의 작업과 관계없이 자신의 작업을 계속한다면 논블로킹이다.

"제어권 차이"

 

 

블로깅 :  호출된 함수가 호출한 함수에 제어권을 반환하지 않음

논블로깅: 호출한 함수가 호출된 함수의 제어권을 반환함

 

4. 디자인 패턴이란?

많은 실무 프로그래머들이 인정한 효율적인 코딩 방법 or 구조

 

효율적인 코딩이란?

  1. 코드가 단순하고 명확하다.

  2. 모듈은 한 가지 기능만 하도록 세분화한다.

  3. 재사용성이 높다.

  4. 유지보수가 쉽다.

  5. 리소스(컴퓨터밥)의 낭비가 없거나, 최소화 되어야 한다.

패턴의 분류

목적에 따른 구분 : '생성 패턴', '구조 패턴', '행동 패턴'으로 나눌 수 있다.

  1. 생성 패턴 : 객체의 생성과정에 관여하는 패턴(싱글톤, 추상팩토리 패턴 외)

  2. 구조 패턴 : 클래스나 객체의 합성에 관한 패턴(적용자 , 브리지 패턴 외)

  3. 행동 패턴 : 클래스나 객체들이 상호 작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴(커맨드, 인터프리터 패턴 외)

5. 좋은 로그 설계 기법이란?

로그 설계 프로세스

  1. 목표 정의

  2. 관계자들과 의견을 종합하여 로그를 설계

  3. 로그 추가 또는 변경 작업

  4. 테스트 / QA

  5. 배포

  • 로그 설계 방식에 대하여 미리 합의된 최소한의 규약이 필요하다.

  • 처음부터 모든 것을 충족 할 수 없으므로, 점진적 개선이 필요하다.

  • 잘못 남겨진 로그는 이후 생산성을 크게 저하시키기 때문에 충분한 테스트와 QA 과정이 필요하다.

6.소프트웨어 개발 프로세스란?

작업 순서의 집합 + 제약 조건을 포함하는 일련의 활동이다. 이를 효율적으로 관리하기 위해 정해진 프로세스를 따라 개발을 진행한다.

사용되는 SW개발 프로세스 모델의 종류는 아래와 같다.

1. 폭포수 모델

2. 프로토타이핑 모델

3. 나선형 모델

4. 애자일 모델

7. 테스트 주도 개발 방법론(TDD)이란?

- 소프트웨어 개발방법론 중 하나 이며, 테스트를 염두에 둔 프로그램 개발 방법

-테스트 코드 작성 -> 구현 코드 작성 -> 리팩토링 단계

 

 

<그림 1> 기존의 개발 프로세스

 

<그림 2> Test-Driven Development 프로세스

 

- 장단점

TDD방법론의 가장큰 장점은 코드를 안정적이게 개발할 수 있다는 점이 있습니다. 각각의 코드의 기능에 맞는 테스트케이스가 존재하므로, 코드가 수정되거나 리펙토링을 할 때에 버그 또는 오류의 가능성을 낮춰주게 됩니다.

그리고 실패 된 테스트케이스에서 기능을 구현하여, 테스트 케이스가 통과 될 경우 개발을 더욱 재밌게 할 수 있습니다.

하지만 TDD 방법론의 가장 큰 단점은 테스트 케이스 개발에 소요되는 시간으로 개발 시간이 늘어난 다는 점입니다.

 

':: IT > 기술면접' 카테고리의 다른 글

[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 운영체제  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30
[데브옵스] 데브옵스란?  (0) 2020.07.30
[운영체제] 운영체제란?  (0) 2020.07.30

- SASS

"사스는 기초 언어에 힘과 우아함을 더해주는 CSS의 확장이다."

 

SASS는 CSS를 만들어주는 언어로 Javascript처럼 특정 속성(ex. color, margin..)의 값(ex. #000, 3px...)을 변수로 선언하여 필요한 곳에 선언된 변수를 적용할 수도 있고, 반복되는 코드를 한번의 선언으로 여러 곳에서 재사용할 수 있도록 도와주는 기능을 가졌다. 

 

SASS는 Ruby언어로 만들어졌기에, 사용하기 위해서는 Ruby가 설치되어있어야한다. 아래 SASS 예제를 보면 더 쉽게 이해가 갈 것이다. (아래는 SASS 중 하나인 SCSS예제입니다. 자세한 설명은 이어서 하겠습니다.)

 

 SCSS

 CSS

$display-default:block;

$color-point:#080;
.lnk{
      display:$display-default;
      position:absolute;
      left:5px;
      color:$color-point;
}

 .lnk {

      display: block;
      position: absolute;
      left: 5px;
      color: #080;
}

 

위와 같이 변수명으로 값을 설정해줄 수 있다. 또한 중첩, mixin (함수) 기능 등이 있어, 반복되는 것들이 있어도 더 이상 복사&붙여넣기를 할 필요가 없다. 

 

참고: 널리의 블로그 (http://wit.nts-corp.com/2015/01/09/2936)

 

- SCSS

 

SASS를 유지하는 사람들은 조금더 CSS에 친숙한 처리기를 만들기 위해, Sassy CSS라는 SCSS를 내놓았씁니다. 이들은 거의 동일한 기능을 가지고 있다. SASS는 중괄호, 세미콜론 같은 기호를 없애기 위해, 들여쓰기에 의존하며 이는 간결한 문장으로 이어진다.  하지만 이는 실제 CSS 문법과는 그 차이를 두고 있다. SCSS는 주로 CSS 올려진 작은 추가사항이므로, CSS에 친숙한 사람이라면 알아보기가 더 쉽다. 

 

아래는 SASS와 SCSS 각각의 장점이다. 

 

SASS

SCSS 

  • More concise
  • Easier to read
  • Doesn't complain about missing semi-colons. 
  • More expressive
  • encourages proper nesting of rules
  • More modular code with @extend
  • Allow me to write better inline doc.
  • Existing CSS tools often work with SCSS
  • Integration with an existing SCSS codebase is much easier
  • SCSS provided a much lower barrier to entry

 

참고: http://thesassway.com/editorial/sass-vs-scss-which-syntax-is-better



출처: https://fireburger.tistory.com/1 [불낙지버거의 블로그]

https://wikidocs.net/16074

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

1. 정적메소드(@classmethod와 @staticmethod)

  • 정적메소드라 함은 클래스에서 직접 접근할 수 있는 메소드입니다.
  • 파이썬에서는 클래스에서 직접 접근할 수 있는 메소드가 두가지가 있습니다.staticmethod와 classmethod 입니다.
  • 하지만 파이썬에서는 다른언어와는 다르게 정적메소드임에도 불구하고 인스턴스에서도 접근이 가능합니다. 이 차이에 유의해야합니다.
  • 에디터에서 static_method.py파일을 작성합니다.
  • 인스턴스 메소드는 첫번째 인자로 객체 자신 self자신을 입력합니다.
  • classmethod는 첫번째 인자로 클래스를 입력합니다.
  • staticmethod는 특별히 추가되는 인자가 없습니다.
class hello:
    t = '내가 상속해 줬어'

    @classmethod
    def calc(cls):
        return cls.t

class hello_2(hello):
    t = '나는 상속 받았어'

print(hello_2.calc())
#결과
내가 상속해 줬어

@staticmethod

즉, 스태틱 메서드는 그냥 클래스 바깥에 정의된 일반 함수와 완전히 동일하게 동작한다.

다만, 특정 클래스와 보다 밀접한 관계가 있다는 것을 나타내기위해,

혹은 조금이라도 코드를 줄여 간단하게 표현하기 위해 @staticmethod 키워드를 사용해 정의하는 것

 

https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/11/Python-Basic-class-staticmethod/

 

Python(파이썬) 기본 - 43. class 정리 - 정적메소드 @classmethod와 @staticmethod의 정리

Python에서 class에서 정적메소드를 정리합니다.

suwoni-codelab.com

 

@property 사용하기

접근제어자(Access Modifier)

접근 제어자에는 public , private , protected , default 가 있다.
파이썬은 다른언어와 달리 접근 제어자가 없고 작명법으로 접근을 제어할 수 있다. 파이썬에서의 작명법은 아래와 같다.

  • public → 접두사에 아무 밑줄이 없다.
  • private → 접두사에 두개의 밑줄(__)을 적용
  • protected → 접두사에 한개의 밑줄(_) 을 적용
class Example :
    def __init__(self):
        pass
    def public(self): 
        print('public')
    def _protected(self):
        print('protected')
    def __private(self):
        print('private')

Get, Set

다른 언어에서 private 를 사용한 속성값이 있을때 그것을 가져오기 위해서는 get , set 메소드를 쓴다. 파이썬에서는 다음과 같이 사용할 수 있다.

class Person :
    def __init__(self):
        self.__name = 'hong'
    def get_name(self): 
        return self.__name
    def set_name(self, name):
        self.__name = name

 

위와 같이 get , set 메소드를 만들면 함수가 너무 많아지고 복잡해진다.

@property

파이썬에서는 @property 데코레이터를 이용하여 위의 get , set 메소드보다 더욱 직관적으로 표현이 가능하다.

class Person :
    def __init__(self):
        self.__name = 'hong'
        
    @property
    def name(self): 
        return self.__name
        
    @name.setter
    def name(self, name):
        self.__name = name
        
person = Person()
print(person.name)    # hong

person.name = 'park'
print(person.name)    # park

get의 역할은 property , set의 역할은 setter가 한다. property 가 setter 보다 윗줄에 사용되어야 한다.

https://medium.com/@hckcksrl/python-property-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-89eb0f0e2e56

글은 부트스트랩에서 Form-control ( Html input object )에 대한 글입니다.

 

웹 페이지를 작성하면 데이터를 입력, 선택하는 오브젝트로 Input object를 가장 많이 사용할 것입니다.

Input Object의 기본 종류로는 TextBox, Checkbox, Radio, Button등이 있습니다.

타입형태태그

텍스트 박스   <input type="text">
체크 박스   <input type="checkbox">
라디오   <input type="radio">
버튼 button <button>button</button>
셀렉트 option <select><option>option</option><option></option></select>
프로그래스   <progress></progress>
파일 업로드   <input type="file">
텍스트 에리어   <textarea></textarea>
패스워드   <input type="password">
컬러   <input type="color">
날짜   <input type="date">
시간   <input type="datetime">
메일   <input type="email">
이미지   <input type="image">
  <input type="month">
숫자   <input type="number">
범위   <input type="range">
초기화   <input type="reset">
검색   <input type="search">
시간   <input type="time">
  <input type="week">
url   <input type="url">
datetime-local   <input type="datetime-local">

링크 - https://www.w3schools.com/jsref/dom_obj_text.asp



출처: https://nowonbun.tistory.com/526 [명월 일지]

대단한건 아니고, flask 는 기본적으로 jinja2 를 템플릿 언어로 사용하는데 사용하다 보면 하나의 template에서 공통적으로 사용되어 지는 부분이 있다. 예를 들면, 같은 css 나, 자바스크립트를 가져오는 header의 부분이나 상단의 navigation 부분, 하단의 footer 부분이 그러한데 일일히 모든 템플릿에 넣어 주기는 귀찮다. 그래서 jinja2 에서는{%  include %} 를 통해서 하나의 html 에서 다른 html 을 가져올수 있도록 해준다. 단순히 가져오는 것이라고 생각할수 있는데 내부적으로는 랜더링된 결과를 리턴한다고 한다. 

<body>
		 {% include 'nav.html' %}
		<div class="container">
		...
		</div>
</body>

//nav.html
<ul class="nav navbar-nav navbar-right">
  <li>
		{% if status == 0 %}
			<a href="/login">Login</a>
		{% else %}
			<a href="/login">Logout</a>
		{%endif%}
	</li>
</ul>

의 예처럼 nav.html 에서는 status 라는 flask 로 부터 받아온 값으로 Login, Logout 을 보여줄지를 결정하는데(그리 좋은 예제는 아님) nav.html 에서 랜더링 된 html 이 include를 사용한 쪽에 포함되는 것이다. 

include 문에는 ignore missing 옵션이 있는데 해당 옵션은 말 그대로 없으면 무시해라 라는 옵션이다. 위의 예에서 만약 nav.html 이 존재하지 않는다면, 호출한 페이지를 브라우저에서 열었을때 에러가 발생되고 flask에서는 nav.html이 없다는 에러 메시지가 출력이 된다. 그렇지만 아래처럼 설정하게 되면 없는 부분을 무시하고 나오게 된다.

http://blog.weirdx.io/post/884

파일을 업로드 할때 <form>태그에서 ENCTYPE="multipart/form-data"라는 애트리뷰트를 반드시 써야 한다.

 

그렇게 하지 않으면 웹 서버로 데이터를 넘길때 파일의 경로명만 전송되고 파일 내용이 전송되지 않기 때문이다.

 

그리고 이때 METHOD 애트리뷰트에는 'POST' 값을 지정해야 한다.

 

** <form>태그의 속성인 method, action, enctype 등은 입력받은 데이터를 어떻게 처리할 것인지 세부적으로 설정하는 데 사용된다.

  method는 전송 방식,

  action은 전송 목적지,

  enctype은 전송되는 데이터 형식을 설정한다.

 

 

** enctype

enctype 속성은 다음 세가지의 값으로 지정될 수 있다.

 

1. application/www-form-urlencoded

디폴트값이다. enctype을 따로 설정하지 않으면 이 값이 설정된다. 폼데이터는 서버로 전송되기 전에 URL-Encode 된다.

 

2. multipart/form-data

파일이나 이미지를 서버로 전송할 경우 이 방식을 사용한다.

 

3. text/plain

이 형식은 인코딩을 하지 않은 문자 상태로 전송한다.



출처: https://tibang.tistory.com/entry/form태그의-enctype-속성 [T없이맑은날]

 

 

 

 

https://soooprmx.com/archives/9626

CURRENT_USER

검사 권한에 따라 데이터베이스의 현재 "유효" 사용자 이름을 반환합니다. 일반적으로 이 사용자 이름은 세션 사용자와 동일하지만 경우에 따라 수퍼유저에 의해 변경될 수 있습니다.

참고

CURRENT_USER를 호출할 때는 후행 괄호를 사용하지 마십시오.

 

반환 유형

CURRENT_USER는 CHAR 또는 VARCHAR 문자열을 반환합니다.

다음은 현재 데이터베이스 사용자의 이름을 반환하는 쿼리입니다.

 

select current_user;

 

current_user

--------------

dwuser (1 row)

 

HTTP 요청 전후에 호출되는 데코레이터

# -*- encoding:utf8 -*-
from flask import Flask
app = Flask(__name__)

@app.route("/")
def main():
print("/")
return "/"

@app.before_first_request
def before_first_request():
print("앱이 기동되고 나서 첫 번째 HTTP 요청에만 응답")

@app.before_request
def before_request():
print("매 HTTP 요청이 처리되기 전에 실행")

@app.after_request
def after_request(response):
print("매 HTTP 요청이 처리되고 나서 실행")
return response

@app.teardown_request
def teardown_request(exception):
print("매 HTTP요청의 결과가 브라우저에 응답하고 나서 호출")

@app.teardown_appcontext
def teardown_appcontext(exception):
print("HTTP요청의 어플리케이션 컨텍스트가 종료될때 실행")

 

 is_authenticated 소개 및 예시

is_authenticated는 위에서 살펴 본 is_anonymous와 반대된다고 생각하시면 됩니다. 저 코드와 반대로 로그인 여부를 묻는 것입니다. 만약 로그인 되어 있다면 이 코드는 True를 반환합니다. 그렇다면 이 코드가 views.py에서 어떻게 사용되는지 알아볼까요?

 

1

2

3

4

5

6

if request.user.is_authenticated:

    pass

    # do something if user is logged in

else:

    pass

    # do something if user is logged_out

 

 

이렇게 위와는 반대로 사용되게 됩니다. 그렇다면 템플릿 태그는 어떨지 알아보겠습니다. 

 

1

2

3

{% if user.is_authenticated %}

    <p>이 유저는 로그인 되어 있습니다.</p>

{% endif %}

   

 

이렇게 사용되게 됩니다. 템플릿 태그를 이용하면 둘 중 하나만 알아도 대부분의 코드를 구현할 수 있을 것입니다. 

 

 

1

2

3

4

5

{% if user.is_authenticated %}

    <p>이 유저는 로그인 되어 있습니다.</p>

{% else %}

    <p>이 유저는 로그아웃 되어 있습니다..</p>

{% endif %}

 

 

이렇게 사용하면 위에서 {% if user.is_authenticated %}가 False를 반환하게 될 경우 {% else %}안의 코드가 실행됩니다. 그러므로 한 가지만 알면 두 가지 경우를 다 처리할 수 있습니다.

 

render_template 사용법

#

플라스크를 사용하면 동적 웹 페이지 컨텐츠에 대한 템플리트를 사용할 수 있습니다.

템플릿을 사용하는 프로젝트 구조의 예는 다음과 같습니다.

myproject/
    /app/
        /templates/
            /index.html
        /views.py

 

views.py :

from flask import Flask, render_template


app = Flask(__name__)

@app.route("/")
def index():
    pagetitle = "HomePage"
    return render_template("index.html",
                            mytitle=pagetitle,
                            mycontent="Hello World")

 

render_templates 함수에 키 / 값 쌍을 추가하여 경로 처리기의 동적 내용을 템플릿에 전달할 수 있습니다. 위의 예에서 "pagetitle"및 "mycontent"변수는 렌더링 된 페이지에 포함되도록 템플리트에 전달됩니다. 템플릿에 다음 변수를 두 개의 중괄호로 {{mytitle}} . {{mytitle}}

index.html :

<html>
    <head>
        <title>{{ mytitle }}</title>
    </head>
    <body>
        <p>{{ mycontent }}</p>
    </body>
</html>

 

첫 번째 예와 같이 실행하면 http://localhost:5000/ "HomePage"라는 제목과 "Hello World"라는 내용의 단락이 있습니다.

+ Recent posts