[컴][웹][interview] front end interview 인터뷰 질문

면접 질문 / 웹 개발 면접 질문 / 프론트 엔드 개발자 질문 /

개발자 인터뷰

  • 1. 가장 잘 아는 개발 방법론은 무엇입니까?
  • 2. 소프트웨어 개발 중에 문제가 발생했을 때 어떻게 해결합니까?
  • 3. 애플리케이션에서 버그를 찾아서 테스트하는 자신만의 프로세스가 있습니까?
  • 4. 코딩에서 가장 흥미로운 점은 무엇입니까?
  • 5. 잘했다고 생각하는 프로젝트에 대해 알려 주십시오.
  • 6. 이번엔 반대로 잘하지 못했다고 생각하는 프로젝트가 있습니까?
  • 7. 어떤 소스 컨트롤을 사용합니까?
  • 8. 제품에서 가장 좋아하는 기능은 무엇입니까?
  • 9. 비IT 동료와 효과적으로 의사소통하려면 어떻게 해야 합니까?
  • 10. 따로 진행하는 프로젝트가 있습니까?
  • 11. 왜 이 회사에서 일하고 싶습니까?
  • 12. 이상적인 개발 환경이란 무엇인가요? 
  • 13. 마지막으로 질문 있습니까? 

Web Front-end interview Questions


Web front-end developer 에게 할 수 있는 인터뷰 질문들이라고 reddit 에 올라왔다. 내용자체들은 흔히 우리가 web 개발에서 알아두면 좋을 내용이라고 생각한다. 한 번 읽어보자.


[컴][파이썬] python 에서 AES 사용법

파이썬 AES 사용법 / AES 예제



python 에서 AES 사용법

update 2023-08-24:

이제 PyCrypto 모듈은 더이상 maintain 되지 않는다. 

PyCrypto

PyCrypto module 을 사용한다.
pip install pycrypto

windows pycrypto binary 는 아래 링크에서 가져오면 된다.


example

>>> from Crypto.Cipher import AES
>>> from Crypto.Util import Counter
>>>
>>> key = b''*16
>>> pt = b''*1000000
>>> ctr = Counter.new(128)
>>> cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
>>> ct = cipher.encrypt(pt)

출처 : https://www.dlitz.net/software/pycrypto/api/current/Crypto.Util.Counter-module.html



Counter

counter 는 여기를 보면 이해가 좀 쉽다. counter mode 에서는 key 와 counter 값(1,2,3,4,...)를 input 으로 받아서 AES encrypt 를 하는데, 이렇게 되면 언제나 같은 sequence 의 결과가 나온다. 그래서 counter 와 nonce (매번 unique 한 값)와 counter 의 값을 합해서 이것과 key 를 input 으로 해서 AES encrypt 를 한다.

하지만 만약 계속 다른 key 를 사용하는 것이라면 굳이 nonce+counter 가 매번 다를 필요는 없다.(참고)

size

Counter.new(128)
counter 의 size 는 AES CTR mode 의 block 크기인 16byte 가 되어야 한다. 아니면 error 가 난다.

Counter.new(120, prefix=b'A')
만약 위와 같이 prefix 를 1byte 넣었다면, Counter 의 nbit 은 15byte(120bit) 가 되어야 한다. 참고로 byte 단위로 쪼개지기 때문에 nbit 는 8의 배수로 설정되어야 한다. 안그러면 error 가 난다.

AES CTR mode

aes-ctr.py
python f:\aes-ctr.py -i f:\input.txt -o ciphertext -k abcdef1234567890abcdef1234567890 -iv 01010101010101010101010101010101


openssl
openssl.exe enc -aes-128-ctr -in f:\input.txt -out f:\output.openssl.txt -K abcdef1234567890abcdef1234567890 -iv 01010101010101010101010101010101




See Also

  1. 암호화의 두가지 방식 - 대칭키 방식, 공개키 방식
  2. AES Rijndael Cipher explained as a Flash animation : animation 으로 AES 를 설명
  3. aes tutorial, cryptography Advanced Encryption Standard AES Tutorial,fips 197 - YouTube : 영어로 설명
  4. https://dmyz.org/en/archives/1182 : php, python, js 에서 같은 암호화 값을 얻는 예제, CBC mode
  5. from php openssl to pycrypto (CTR mode) : php 의 openssl 을 pyrypto 로 변경할 때

[컴] 계정관리 시스템을 설계시 알아두면 좋은 내용

account/ user account system / auth system  / password / 계정관련 설계 / 계정 시스템 구성할 때 / 계정시스템 만들때

계정 관리 시스템 설계시 알아두면 좋은 내용

구글 클라우드에서 best practice 라면서 12가지 내용을 알려줬다. 여기서는 제목만 정리한다. 자세한 내용은 ref. 1 을 참고하자.

  • 1. Hash those passwords
  • 2. Allow for third-party identity providers if possible
  • 3. Separate the concept of user identity and user account
  • 4. Allow multiple identities to link to a single user account
  • 5. Don't block long or complex passwords
  • 6. Don't impose unreasonable rules for usernames
  • 7. Allow users to change their username
  • 8. Let your users delete their accounts
  • 9. Make a conscious decision on session length
  • 10. Use 2-Step Verification
  • 11. Make user IDs case insensitive
  • 12. Build a secure auth system



References


  1. Google Cloud Platform Blog: 12 best practices for user account, authorization and password management

[컴][웹] 개인정보보호 자율점검 가이드라인

웹 보안 / 사이트 보안 / 정보보안 / 시큐러티 / security / 해킹방지 / 해커

개인정보보호 자율점검 가이드라인

그저 참고 자료로 올려놓는다.




개인정보 파기



② 정보통신서비스 제공자등은 정보통신서비스를 1년의 기간 동안 이용하지 아니하는 이용자의 개인정보를 보호하기 위하여 대통령령으로 정하는 바에 따라 개인정보의 파기 등 필요한 조치를 취하여야 한다. 다만, 그 기간에 대하여 다른 법령 또는 이용자의 요청에 따라 달리 정한 경우에는 그에 따른다.

[컴][웹] Firefox extension 만들기

불여우 확장 / 애드온 / firefox extension

Firefox extension

파이어폭스 add-on 을 만들어 보자.

아래 tutorial 을 참고하자.
일단 extension 을 위해 폴더를 하나 만들자. 여기서는 ‘easypost’ 라는 이름을 사용한다. 그리고 이제 manifest.json 을 하나 만들자.



보통 아래와 같은 모습을 한다. 아래 manifest.json 에 명시되어 잇는 icons/border-48.pngeasypost.js 는 일단 아무거나 만들어 넣으면 된다. 그럼 아래와 같은 구조가 된다.

borderify/
    icons/
        border-48.png
    borderify.js
    manifest.json
여기서 중요한 것은 content_scripts 부분이다. content_scripts 부분에서는 matches 에 해당하는 url 에 가게 되면 content 부분에 script 를 적용해 준다.

matches 에 해당하는 url 에 visit 하면 ‘js’ 에 해당하는 javascript 가 inject 된다. 아래의 경우 moziila.org 로 가면 easypost.js 가 inject 되는 것이다.
{
  "description": "My description",
  "manifest_version": 2,
  "name": "EasyPost",
  "version": "0.9",
  "homepage_url": "https://myeasypost.com",
  "icons": {
    "48": "icons/border-48.png"
  },

  "content_scripts": [
    {
      "matches": ["*://*.mozilla.org/*"],
      "js": ["easypost.js"]
    }
  ]

}

실행

update 2023-07-30 : 

  1. 'about:debugging' 에 가서
  2. 왼쪽에서 '설정'아래 '이 Firefox' 선택
  3. 오른쪽 본문에 '임시 확장 기능' 부분을 보면 '임시 부가 기능 로드' 가 있다.
  4. 이 것을 누르고, manifest.json 을 선택하면 된다.


 주소창에 about:debugging 를 치고 들어가면 우측상단에 “Load Temporary Add-on” 를 확인할 수 있다.

“Load Temporary Add-on” 를 누르고, easypost.js 를 선택해주면 extension 이 load 된다.

Debug

주소창에 about:debugging 에서 "Enable add-on debugging" 을 check 해주고, Debug 를 누르자. 그러면 Development 창이 뜬다. 이제 아무 tab 에서 원하는 page 로 들어가서 test 를 하면 된다.


Button 을 누르면 동작하기

아래 소스를 보면 알 수 있다.

manifest.json 이 아래처럼 되어 있다. page_action 은 URL bar(주소창) 에 button(또는 popup) 을 만들어 준다. 그래서 이 button 을 누른경우 background 의 js 가 실행되게 된다.


{

...
  "background": {
    "scripts": ["background.js"]
  },

  "page_action": {
    "default_icon": "icons/off.svg",
    "browser_style": true
  },
  
  "permissions": [
    "activeTab",
    "tabs"
  ]

}


page 내의 DOM 에서 js 실행하기

manifest.json 에서 바로 content_scripts 를 이용해서 page 를 조작할 수 있지만, 그외에는 browser.tabs.executeScript 를 이용하게 된다.

var code = 'var idInput = document.querySelector("input#identifierId");'
            + `idInput.value = '${id}';`;
var executing = browser.tabs.executeScript({
    code: code
});
executing.then((result: any) => {console.log(result)},
            (error: any)=>{console.log(error)});

아래처럼 file 의 js 를 불러와서 사용할 수 있다.
var executing = browser.tabs.executeScript({
  file: "/content-script.js",
  allFrames: true
});

See Also

  1. https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples
  2. 예제소스들 https://github.com/mdn/webextensions-examples
  3. Example extensions - Mozilla | MDN


[컴] CentOS 에서 RabbitMQ 설치







CentOS 에서 RabbitMQ 설치


순서

  1. zero-dependency Erlang from RabbitMQ 을 설치함 : https://github.com/rabbitmq/erlang-rpm
  2. rabbitmq-server-3.6.11-1.el7.noarch.rpm 을 설치

zero-dependency Erlang from RabbitMQ 설치

https://github.com/rabbitmq/erlang-rpm 에서 zero-dependency Erlang from RabbitMQ 부분을 살펴보면 된다. 결론적으로 erlang-19.3.6.2-1.el7.centos.x86_64.rpm 을 설치하면 된다.
$> sudo rpm -ivh erlang-19.3.6.2-1.el7.centos.x86_64.rpm
그러면
  • /usr/lib64/erlang/ 
에 설치된다.


RabbitMQ 설치

$> sudo rpm -ivh rabbitmq-server-3.6.11-1.el7.noarch.rpm

설치하면 아래 경로에 설치된다.

  • /usr/lib/ocf/resource.d/rabbitmq
  • /usr/lib/rabbitmq


RabbitMQ 실행

os 가 booting 될때마다 실행하게 할려면 아래처럼 하면 된다.
  • 아래 2중 하나의 command 를 사용하면 된다.
    • systemctl enable rabbitmq-server.service
    • chkconfig rabbitmq-server on

그것이 아니라면 아래 처럼 해준다. root 로 실행해야 한다. 그러면 알아서 rabbitmq 계정으로 실행한다.
  • 아래 2중 하나의 command 를 사용하면 된다.
    • $ sudo /bin/systemctl start rabbitmq-server.service
    • $ sudo /sbin/service rabbitmq-server stop/start/etc


아래처럼 process 가 보인다.
smmsp      691  0.0  0.0  84120  2040 ?        Ss   00:14   0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

rabbitmq  4944  0.0  0.0  11580   340 ?        SN   03:33   0:00 /usr/lib64/erlang/erts-8.3.5.2/bin/epmd -daemon

rabbitmq 10418  2.9  0.4 6055648 72704 ?       Ssl  10:17   0:01 /usr/lib64/erlang/erts-8.3.5.2/bin/beam.smp -W w -A 128 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.11/ebin -noshell -noinput -s rabbit boot -sname rabbit@cf.com -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@cf.com.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@cf.com-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.11/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@cf.com-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@cf.com" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672

rabbitmq 10777  0.0  0.0   4308   536 ?        Ss   10:17   0:00 erl_child_setup 1024

rabbitmq 10793  0.0  0.0  11544   444 ?        Ss   10:17   0:00 inet_gethost 4

rabbitmq 10794  0.0  0.0  17892   808 ?        S    10:17   0:00 inet_gethost 4

root     10948  0.0  0.0 112664   968 pts/0    S+   10:18   0:00 grep --color=auto mq

config

rabbitmq 의 config 를 하고 싶으면 아래를 참고하자.


See Also

  1. Installing on Debian and Ubuntu — RabbitMQ
  2. RabbitMQ server issue — vhost ‘/’ is down - Pratibha Jagnere - Medium : rabbitMQ 문제가 생겨서 vhost 를 삭제해서 초기화 하는 내용

[컴][웹] Django Ecommerce package

Django 게시판 / Django 쇼핑몰 / 이커머스 장고/ 장고로 쇼핑몰 만들기 / shopping / shoppingmall / mall /django mall


Django Ecommerce package

ref. 2 의 비교를 보면 가장 괜찮은 쇼핑몰 패키지(ecommerce package) 는 django-oscar 이다. License 도 BSD 3 (?) 이다.


한 번 살펴볼 필요가 있다.



References

  1. Django Packages : Forums : 장고 forum package 비교
  2. Django Packages : E-Commerce : 장고 ecommerce package 비교