손에 잡히는 10분 정규 표현식 표지

 

http://www.yes24.com/Product/Goods/75454395

 

독서기간 : 2022.08

독서시간 : 2H

평점 : ★★★★★

한줄평 : 텍스트, 문자를 다루는 레벨을 올릴 수 있는 책이다.

 

일을 하다 보면 다양한 곳에서 정규표현식과 만나게 된다.

정규표현식을 볼때마다 항상 든 생각이 언젠가 한번 제대로 정리하여 개발생산성을 높이고 싶다 였는데, 괜찮은 책이 없을까 찾다가 발견하여 보게 되었다.

 

인터넷에서 필요할 때마다 찾아보면 쉬워 보이면서도 직접 쓰려고 하면 정리가 제대로 되지 않아서 활용하기가 쉽지 않은데, 잘 정리된 내용을 하나씩 읽어가면서 체계를 잡을 수 있어서 큰 도움이 되었다.

 

정규식을 공부한 뒤 가끔씩 여러 조건들을 넣어서 필요한 정보만 빠르게 검색하면 정말 뿌듯해진다.

여유가 난다면 꼭 공부하기를 추천한다.

함께 자라기 책 표지

http://www.yes24.com/Product/Goods/67350256

 

함께 자라기 - YES24

‘함께’는 협력을 말하고, ‘자라기’는 학습을 말한다. 무엇이건 실제 바깥세상(야생)에 임팩트를 남기려면 혼자 힘으로만 되는 게 없다. 함께 해야 한다. 주변 사람들과 함께. 매일 부대끼는

www.yes24.com

독서기간 : 2022.08

독서시간 : 5H

평점 : ★★★★★

한줄평 : 사람들이 함께 일하면서 같이 성장할 수 있는 협업방법에 대해 배울 수 있음

 

크고 복잡한 일들, 더 큰 성과를 내기 위해서는 혼자서 하는 것보다 여러 사람들이 함께 일을 해야 한다.

학교에서도 선생과 학생이 함께 학생의 성장이라는 목표로 협력하며, 회사에서 일을 할 때도 회사의 이익이라는 목표를 위해서 다양한 사람들이 협력하여 일을 한다.

 

일을 더 잘하기 위해서, 더 큰 성과를 내기 위해서는 어떻게 해야할까? 

회사든 학교든 결국 모든 일은 사람들이 하는 것이기 때문에, 사람들이 성장해야 회사도 성장하고 성취할 수 있는 결과도 더 커지게 된다.

 

함께 일을 하면서, 단지 목표만 보고 달려가는 것이 아니라 더 큰 관점에서 조직과 사람이 성장하는 방법에 대한 통찰력을 배울 수 있는 책이었다. 이전까지는 단순히 열심히 일에 집중하고, 부족한 부분은 스스로 찾아서 배우는 개개인의 역량에 의지하는 방식으로 일을 처리하였는데, 더 큰 성과를 내기 위해서는 일을 바라보는 시각이 개인에서 확대하여 같이 일하는 사람들을 바라보고, 그 사람들과 어떻게 협력하고 커뮤니케이션 하여 서로 윈윈할수 있을지 알게 되었다.

 

내가 알게된 내용을 주변 사람들과 함께 공유하고 현실에서 성과로 이뤄내는 것은 또 다른 문제이지만, 같이 일하는 사람들에게 선물해주고 싶은 책이다.

https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하입니다.
    • 같은 전화번호가 중복해서 들어있지 않습니다.

입출력 예제

phone_bookreturn
["119", "97674223", "1195524421"] false
["123","456","789"] true
["12","123","1235","567","88"] false

입출력 예 설명

입출력 예 #1
앞에서 설명한 예와 같습니다.

입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.

 

발상

정렬을 하면 앞뒤 비교만으로 간단하게 해결될 것 같아서 정렬 후 순서대로 하나의 문자열을 그 다음 문자열이 포함하고 잇는지 여부를 검사하는 방식으로 접근하였다.

의사코드

1. 입력값 정렬
2. 배열수+1 만큼 반복{
	1. 다음 배열의 값이 현재 배열의 값을 가지고 있으면 false
}
3. true 리턴

 

코드

더보기
        if (phone_book.length == 1) return true;
        Arrays.sort(phone_book);
        for (int i = 0; i < phone_book.length - 1; i++) {
            String pattern = "^"+phone_book[i]+".*";
            if(phone_book[i+1].matches(pattern)) return false;
//            if(phone_book[i+1].contains(phone_book[i])) return false;
//            if (phone_book[i].length() <= phone_book[i + 1].length() && phone_book[i].equals(phone_book[i + 1].substring(0, phone_book[i].length())))
//                return false;
//            for (int j = i+1; j < phone_book.length; j++) {
//                if (phone_book[j].contains(phone_book[i])) {
//                    return false;
//                }
//            }
        }
        return true;
    }

개선

처음엔 contains로 접근하였는데, 테스트케이스를 통과하지 못하는 예외케이스가 발생하였다.

생각해보니 제시된 문자열로 시작하는 경우만 검사해야 하기 때문에, substring으로 수정하여 통과시켰다가

다시 정규식으로 전환하였는데, 정규식은 패턴문자열을 계속해서 만들어야 하다 보니까 성능이 훨씬 안나왔다.

토미의 Git with 소스트리 책 표지

http://www.yes24.com/Product/Goods/109651011

 

토미의 Git with 소스트리 - YES24

이 책은 두 개의 파트로 구성돼 있다. 파트I에서는 Git의 기본 개념에 대해 설명 했다. 파트2에서는 Git의 여러 명령을 사용하는 방법에 대해 설명했다. 이 책을 반드시 처음부터 읽을 필요는 없다.

www.yes24.com

 

독서기간 : 2022.07.12 ~ 2022.07.25

독서시간 : 5H

평점 : ★★★★★

한줄평 : Git에 대해서 동작원리부터 실제사례까지 공부할 수 있음

 

개발 공부를 시작하거나 취직 후 개발자로 일을 하게 되면 형상관리도구를 사용하게 된다.

구글의 도움을 받아서 사용법을 익히고, 깃허브 아이디도 만들고 개인 프로젝트에서도 사용해보았지만, 지금 일하고 있는 회사에서는 SVN을 사용하고 있어서 Git을 개인적으로 사용할 때마다 더 체계적이고 잘 정리된 사용법이 있지 않을까? 하는 갈증이 있었다.

Git같은 경우는 강의로 들을 만큼 내용이 어렵거나 많은 것도 아니라 어떻게 공부하면 좋을까 고민한 결과 출퇴근 시간에 ebook으로 읽으면 괜찮겠다 생각해서 바로 교보문고에서 sam베이직으로 빌려서 독서를 시작했다.

 

본문 구성이 신입사원이 입사하여 개발자로 일하면서 git에 대한 필요성을 느끼고 사수에게 배운다는 시나리오를 설정하면서 스토리를 풀어가면서 얘기하는데, 딱딱한 기술이야기만 있는 것보다 친근감있게 다가와서 읽기 좋았고, 챕터도 출퇴근시간에 하나씩 읽기 적당한 단위로 나뉘어져 있어서 1주일정도 걸려서 완독을 하였다.

 

단순 사용법만 나열한 것이 아니고 버전관리의 역사부터 git의 주요 오브젝트, 어떤 방식으로 작동하는지 잘 정리되어 있으며, 소스트리를 통해 실제 사용 예제도 책에 삽입된 이미지를 보면서 시각적으로 볼 수 있어서 컴퓨터앞에 앉아있지 않아도 이해가 쉽게 되었다.

 

리눅스에서 쉘스크립트를 확인하다 보면 볼 수 있는 인자값 $*과 $@이 있다.

검색해보면 둘 다 인자값을 넘겨주는 변수인데 어떤 차이가 있는지 알아보았다.

 

$* expands to all parameters that were passed to that shell script.
$0 = shell script's name
$1 = first argument
$2 = second argument ...etc
$# = number of arguments passed to shellscript

 

It means all the arguments passed to the script or function, split by word.
It is usually wrong and should be replaced by "$@", which separates the arguments properly

 

리눅스에서 사용되는 명령어들은 인자값을 받을 수 있다.

예를들면 도커 이미지를 실행하는 명령어는 다음과 같다.

docker start [images]

위의 명령어를 보면 docker 명령어에, start와 images 인자를 함께 전달하여 명령어를 실행한 것인데

 

$* 같은 경우는 넘어온 모든 인자들을 하나의 문자열로 보기 때문에

[start images]라고 인식을 하며

 

$@ 같은 경우는 넘오온 인자들을 각각의 인자로 인식하기 때문에

start / images 로 인식하게 된다.

 

위에 언급한 인용문처럼 일반적으로 $*는 잘못된 사용법이며, $@로 바꿔야 한다고 이야기하고 있다.

 

참고

 

https://stackoverflow.com/questions/12413848/what-does-mean-in-a-shell-script

 

what does $* mean in a shell script

What does $* exactly mean in a shell script? For example consider the following code snippet $JAVA_HOME/bin/java/com/test/Testclass $*

stackoverflow.com

 

 

'IT > VS' 카테고리의 다른 글

[JavaScript] NPM vs Yarn  (0) 2023.07.14
[Java] StringBuilder VS BufferedWriter  (0) 2023.04.02
[ VS]arguments VS parameter  (0) 2021.09.23

 

증상

Invalid barcode

The barcode [URL] is not a valid authentication token barcode
 

구글 Authentication 앱을 사용해서 MFA 시스템을 구축하였는데 안드로이드에선 잘 작동하지만 IOS 아이폰에선 작동하지 않는 현상이 발생하였다.

 

다요소 인증 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. RSA SecurID 토큰. 어디에도 연결되지 않은 토큰 생성기의 예. 다요소 인증(多要素認證, Multi-factor authentication, MFA)은 적어도 다음 분류 중 두 가지에 한해 별도의 여

ko.wikipedia.org

 

원인

구글 Authentication은 TOTP 를 구현하여 작동한다. 해당 알고리즘에서 키값을 암호화 하는데 BASE32 인코딩을 사용하였는데, 인코딩 된 결과값이 자리수를 맞추기 위해 더해지는 패딩문자 '='가 IOS에서 인식하지 못하여 발생하는 문제였다.

 

시간 기반 일회용 비밀번호 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 시간 기반 일회용 비밀번호(Time-based one-time password, TOTP)는 현재 시간을 고유성의 원천으로 사용하여 일회용 비밀번호 (OTP)를 생성하는 컴퓨터 알고리즘이다. HMAC

ko.wikipedia.org

 

해결책

처음에는 URL 인코딩을 처리하면 해결될 줄 알았는데, 여전히 같은 에러가 발생하였다.

테스트를 진행하다 보니 패딩된 문자 '='는 복호화시 제거하여도 같은 값을 돌려주는 무의미한 문자여서 제거하고 테스트하였더니 아이폰에서도 정상작동하였다.

+ Recent posts