728x90

2012년 2월 21일 출시되었다.

2005년 12월 1일 2.2버전의 출시 이후 7년(6년 3개월)만에 업데이트.

 

 

Apache 2.4의 새로운 기능 - 번역

(RUN-TIME) LOADABLE MPMS

Multi MPMs는 이제 컴파일 타임에 Loadable 모듈로 빌트 인 될수 있습니다. Multi-Processing Modules (MPMs) 네트워크 포트를 바인딩(Binding)하고 클라이언트로부터 요청을 받고 자식 혹은 쓰레드에 핸들링(Handling) 요청을 보냅니다.

 

Apache 2.2까지는 이것을 정적 컴파일(static compile) 해야만 했습니다. 이는 Apache 를 컴파일 설치할때에 결정되어지는 것으로 이를 사용하지 않거나 사용하기 위해서는 컴파일 시에 결정을 해야 했습니다.

 

하지만 Apache 2.4 에서는 이를 실행 타임(Run-time)에서 결정할 수 있도록 ‘Loadable Module’ 로 기능을 제공합니다. 컴파일 설치시에 하게되는 Configuration 에서 ‘–enable-mpms-shared’ 를 사용하면 됩니다.

 

EVENT MPM

Nginx 는 ‘Event Driven’ 방식의 웹 서버로 유명합니다. 하지만 Apache 는 그동안에 ‘Event Driven’ 방식을 지원하지 않았습니다.

대신 한개의 동접 클라이언트당 한개의 쓰레드 (혹은 프로세스) 구조였고 이 때문에 한 클라이언트가 맺은 접속이 완전히 끝나지 않는한 쓰레드 혹은 프로세스가 죽지않는 방법을 사용했습니다. 이는 ‘Keep Alive’ 설정으로 존재합니다. 하지만 이 ‘Keep Alive’ 때문에 대량접속에서는 효율이 급격하게 떨어지는 문제점도 안고 있었습니다.

 

‘Event MPM’은 이러한 문제를 해결할 수 있습니다. ‘Event MPM’을 사용하기 위해서는 Kqueue 나 Epoll 과 호환되는 시스템이 필요합니다.

 

ASYNCHRONOUS SUPPORT

비동기 읽고/쓰기에 대한 기능을 지원합니다. (따로 설정하거나 하는건 없고 내부 구조적으로 저런걸 지원한다는 모양입니다.)

 

NAMEVIRTUALHOST DEPRECATED

Apache 2.4 에서는 NameVirtualHost 가 앞으로 사용되지 않는 옵션으로 변경되었습니다. 가까운 미래에 이 옵션을 사라질 것입니다.

 

CONFIG FILE VARIABLES

Apache 2.4 에서는 설정 파일 내에서 변수를 사용할 수 있게 되었습니다.

 

PER-MODULE AND PER-DIRECTORY LOGLEVEL CONFIGURATION

모듈에 대한 LogLevel 과 각 디렉토리별 LogLevel 를 지정할 수 있게 되었습니다.

 

ACCESS CONTROL

Apache 의 접근 제어는 아이피 기반, 호스트 기반, 클라이언트 요청에 대한 특이한 것들에 대해서 ‘Order’, ‘Allow’, ‘Deny’, ‘Satisfy’ 를 이용해서 했었습니다. 하지만 Apache 2.4 로 넘어오면서 인증관련 메커니즘이 조금 바뀌면서 이를 수행하는 모듈, ‘mod_authz_host’가 새롭게 만들어졌습니다.

 

 

 

출처 : linux.systemv.pe.kr/apache-2-4-new-features/

 

 

 

 

질문: Nginx vs Apache 2.4 장단점, 성능

728x90
  1. 커뮤니케이션
    • 글쓰기연습

 

 

글쓰기 연습

 

  주제를 정하고 내 생각을 글로 적고 글을 적으면, 읽은 사람들이 피드백 코멘트를 달아준다.

 

말하기 연습

 

  10명 정도 모인 자리에서 청자(화자에게 질문은 던지고 듣는 사람)와 화자(청자가 한 질문에 대한 답을 하는 사람)를 구분한다.

화자는 한명 또는 여러명의 청자를 정할 수 있다.

 

5분 정도의 대화가 끝나면 청자들과 그 외 팀원들은 화자에 대한 피드백을 할 수 있다.

 

발성 연습

  준비한 글을 읽으며 발음과 목소리 톤 크기등의 발성연습을 한다. 역시 끝나고 난 후 다른 팀원들의 피드백을 듣는다.

728x90

로그인할때 패스워드를 평문(PlainText)으로 서버에 보낼시 보안상 문제가 되지 않을까? 라는 질문에서 부터 시작되었다.

POST... HTTPS...를 생각하더라도 패스워드를 평문으로 다루면 안될것 같다는 막연한 상상(망상인가)... 검증도 안해보고;;

 

0. 기존에 구현한 로그인 순서

1. 클라이언트로 아이디와 비밀번호를 평문형태로 서버에 보낸다. 

2. 아이디를 기준으로 DB에서 패스워드(Bcrypt암호화)를 가져온다.

3. 가져온 DB패스워드를 클라이언트에서 받은 평문비밀번호와 아래와 같이 비교한다. ( PHP )

    if ( password_verify("클라이언트에서 받은 패스워드", "DB에서 가져온 패스워드") ) {
        echo '패스워드 일치';
    } else {
         echo '패스워드 불일치';
    }

 

4. 패스워드가 일치하면 DB에서 나머지 정보를 가져온다.


1. 클라이언트에서 API 요청시 평문으로 보내고 있는 점

 

암호화된 패스워드를 PHP로 보내고 PHP에서 복호화한 패스워드를 앞서 말한 password_verify함수로 비교하면 해결할 수 있지 않을까?

 

1-1.  Bcrypt 방식으로 데이터 베이스에 저장되어 있는 유저의 패스워드 데이터

 

sha-256과 같은 암호화 알고리즘으로 구현할때는 서버에 저장된 해시값과 단순 비교만 하면 문제없이 구현할 수 있었다.

그러나 DB에 저장된 패스워드값이 Bcrypt로 저장되어 있기 때문에 단순 비교가 안되었다. 그래서 password_verify 함수로 비교한 것이다.

"Bcrypt는 패스워드를 해싱할 때 내부적으로 랜덤한 솔트를 생성하기 때문에 같은 문자열에 대해서 다른 인코드된 결과를 반환한다"
https://pjh3749.tistory.com/258 [JayTech의 기술 블로그]

 

2. 그럼 암호화와 복호화가 가능한 알고리즘은 어떤것이 있을까?

 

주변에 이문제에 대해 도움을 요청했고, RSA알고리즘을 사용해 보는건 어떻겠냐는 의견을 받았다.

RSA에 대해 공부한적이 없어 RSA를 구글링하기 시작했다.

 

그렇게 습득한 얕은 지식으로 개인키와 공개키를 생성할 수 있었다.

 

...

 

( 아직 이해가 부족해서 더 공부해야 된다 )

 

3. 앞으로 해야할 TODO

이제 적용하는 일이 남았다.

1. 클라이언트는 공개키를 통해 평문으로된 패스워드를 암호화한다.

 

2. 암호화된 패스워드를 서버(PHP)로 보낸다.

 

3. PHP에서 가지고 있는 개인키로 암호화된 패스워드를 복호화한다.

 

4. 이제 복호화된 패스워드를 password_verify 함수를 통해 검증하면 된다.

 

5. 검증이 완료되면 나머지 유저의 정보를 반환 한다.

 

 

 

4. 마무리

여기 까지가 내가 생각한 패스워드를 안전하게 전달해서 로그인하는 방법이다.

내가 생각한 방법이 문제가 되거나, 현업에서 쓰이는 보편화된 래퍼런스가 있는지 찾아봐야 겠다. 

 

이 포스팅을 보는 분들중 아시는분이 있다면 댓글을 달아 주시면 참 고마울 것 같다 ^^.

 

 

 

 

 

 

참고

www.crocus.co.kr/1203

 

RSA 암호 알고리즘

이 게시물의 내용은 https://www.youtube.com/watch?v=kGUlfVpIfaQ 위의 링크를 기반으로 제작하였습니다. 문제가 된다면 삭제조치 하겠습니다. 1. RSA 암호 알고리즘이란? Rivet, Shamir, Adelman 세사람의 첫이..

www.crocus.co.kr

https://pjh3749.tistory.com/258

 

[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 - 실제 프로젝트 적용기

암호화를 이용하여 원문을 해시화하는 간단한 방법을 찾던 중 Devglan 사이트에서 괜찮은 칼럼을 찾았다. https://www.devglan.com/spring-mvc/storing-hashed-password-database-java 다음 내용은 위 칼럼을 번역..

pjh3749.tistory.com

 

 

 

728x90

 


 

본문

카카오톡 PC버전의 로그인창을 보면

비밀번호를 4자리 이상 입력해야 로그인 버튼이 활성화 됩니다.


예제

저도 한번 따라 만들어 봤습니다 ^^;

 

초기 로그인 화면
아이디를 작성할때 키보드가 Activity View를 가리지 않게
일정 길이 미만의 패스워드 로그인버튼 비활성화
일정 길이 이상 패스워드 입력시 활성화


소스코드

EditText의 입력 텍스트가 일정길이 이상일 때 버튼을 활성화 하는 코틀린 소스입니다.

et_password.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(p0: Editable?) {
           		//텍스트를 입력 후

            }
            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
				//텍스트 입력 전
            }
            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                //텍스트 입력 중
                if(et_password.length() < 4) { // 패스워드의 길이가 4미만이면
                    btn_login.isCheckable = false // 버튼 클릭할수 없게
                    btn_login.isEnabled = false // 버튼 비활성화
                } else {
                    btn_login.isCheckable = true // 버튼 클릭할수 있게
                    btn_login.isEnabled = true // 버튼 활성화
                }
            }
        })

 

 

728x90

2020-09-07

 

어제로 네고왕 쿠폰 이벤트가 끝이 났네요

이벤트 기간동안 많은 분들이 제 블로그를 방문해 주셨어요

 

 

 

구글 검색 상단 노출

감사합니다.

 

사소한 것이지만 도움이 되었다고 생각하니 뿌듯하네요

앞으로도 일생생활이나 IT 꿀팁이 있으면 공유하겠습니다.

 

코로나로 힘든 모든분들 조금만더 힘냅시다!

 

 


 

요약.

배달지 주소를 집근처 BBQ매장 주소로 해서 검색한다. ( 본문 5번 참고 )

상세주소에 배달받을 집주소를 입력한다.

요청사항에 상세주소로 배달해 달라고 쓴다.

안전빵으로 전화를 해서 배달 주소를 말하는 것도 좋다. ( 안해도 됨 )

 

 

 

 

서론. 

분명 근처에 bbq 매장이 있음에도

배달가능한 매장이 없습니다. 라고 나올 때

배달가능한 매장이 없을때

 

 

1. 먼저 하단 메뉴에서 '매장'을 터치합니다.

 

 

 

2. 네이버 지도등에서 찾은 집근처 BBQ 매장의 주소 (동단위)를 입력합니다.

 

 

 

 

3. 매장의 주소를 복사합니다.

 

 

 

 

4. 다시 처음화면으로 돌아가서 '배달주문'을 터치합니다.

배달주문

 

5. 배달지 주소에 복사해 뒀던 '매장주소'를 붙여넣기 합니다.

 

 

 

 

6. 상세주소에 배달받을 '집주소'를 입력합니다.

저는 띄어쓰기나 하이픈(-)을 입력할 수 없었습니다.

그래서 띄어쓰기는 ...으로, 하이픈은 ㅡ (한글 모음)으로 대체했습니다.

 

 

 

 

7. 이제 황금 올리브 치킨을 고르고 결제하시면 됩니다.

( 결제하실 때 쿠폰적용 잊지마세요 )

 

 

 

 

ps. 요청사항에 상세주소로 배달부탁합니다. 적어주시면 더 좋겠죠?

 

 

마지막으로 영수증 첨부합니다.

 

728x90

1. 글라이드(Glide)

http://bumptech.github.io/glide/

 

Glide v4 : Fast and efficient image loading for Android

About Glide Glide is a fast and efficient image loading library for Android focused on smooth scrolling. Glide offers an easy to use API, a performant and extensible resource decoding pipeline and automatic resource pooling. Glide supports fetching, decodi

bumptech.github.io

피카소(Picasso)

https://square.github.io/picasso/

 

Picasso

Introduction Images add much-needed context and visual flair to Android applications. Picasso allows for hassle-free image loading in your application—often in one line of code! Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView); Many c

square.github.io

 

프레스코(Fresco)

피카소

 

어느 것이 가장 좋은가요?

당신은이 질문에 대한 답이“그것에 달려 있습니다.” 각 라이브러리에는 장단점이 있으며 특정 시나리오에 가장 적합합니다.

  • 피카소의 라이브러리 크기는 다른 라이브러리보다 작지만 처음 이미지를로드하는 데 훨씬 오래 걸릴 수 있습니다. 가장 큰 장점은 앱 코드에서 구현하기가 매우 쉽다는 것입니다 (일반적으로 한 줄). 따라서 작은 메모리 공간이 필요하고 많은 양의 큰 이미지를 처리 ​​할 필요가없는 앱에 가장 적합합니다.
  • 글라이드의 로딩 시간이 더 빠르며 캐시에 소량의 메모리를 사용하지만 라이브러리 크기는 상당히 큽니다. 또한 구현하기도 쉽습니다. 메모리 풋 프린트가 중요하지 않거나 더 큰 이미지를 처리해야하는 경우 글라이드는 Picasso의 더 나은 대안 일 수 있습니다.
  • Fresco의 로딩 시간은 매우 빠르며 라이브러리에는 추가 기능과 옵션이 많이 있지만 코딩이 더 복잡합니다. 이 옵션은 숙련 된 개발자가 구축 한 이미지가 많은 앱에 적합합니다.

+ Recent posts