WHAT'S UP 24

셀레니움 - 테스트 자동화 1편

이번 포스팅에선 테스트 자동화와 어느 경우에 자동화를 도입하고 어떻게 접근하면 좋은지에 관하여 전반적인 내용에 대해서 다뤄보도록 하겠다. 셀레니움을 사용하면 브라우저 기반 테스팅을 자동화하는데 큰 도움이 되지만 막상 실무에 적용하려면 발생하는 여러 가지 비용에 대해서 고민을 하지 않을 수 없다. 대부분 백엔드 (특히 API) 같은 경우에는 JUnit과 같은 훌륭한 유닛 테스트 툴로 테스트를 하면 된다. 그것을 넘어 화면 UI에서 발생하는 시용자 기반 시나리오 테스트를 해야 한다면 아마도 셀레니움 테스트를 피할 수 없을 것이다. 만약 셀레니움이 처음이라면, 이전 포스팅에서 자바로 셀레니움을 사용하는 간단한 예제 HelloSelenium을 만들어 보았다. 이번 글의 주제인 테스트 자동화에 대해서 읽기 전에 ..

무료정보 2022.01.26

셀레니움 시작 하기

이전 포스팅에서 간단하게 셀레니움에 대해서 소개하였다. 예고 한대로 이번 포스팅에서는 초보자도 쉽게 따라 할 수 있는 셀레니움 버전 "Hello World" 코드를 소개해보도록 하겠다. 셀리니움을 코드를 실행하기 앞서 필수적으로 알아야 할 3가지 용어만 간단하게 소개하도록 하겠다. WebDriver (웹드라이버) PC버전 웹 사이트 혹은 모바일 웹 사이트 테스트 자동화를 시작하려면 웹 드라이버 API를 필 수적으로 사용해야 한다. 웹 드라이버는 브라우저 벤더(Chrome, FireFox, IE 등)가 제공하는 브라우저 자동화 API를 사용하여 브라우저를 제어하고 테스트를 실행한다. 따라서 웹 드라이버는 마치 실제 사용자가 브라우저를 사용하는 것 같이 테스트하게 해 준다. 또 한 웹 드라이버를 사용하기 위..

무료정보 2022.01.25

Selenium 셀리니움 - HTML 원소 위치 찾기

이번 포스팅에서는 셀레니움과 웹 드라이버를 사용하여 웹 페이지 상에서 특정 HTML 태그(Tag)를 찾는 법을 소개하도록 하겠다. 필수 준비믈로는 selenium 라이브러리와 웹 드라이버가 설치 되어있어야 실습이 가능하다. 이전 포스팅에 자세히 설명해 두었으니 필요하면 참고 하길 바란다. HTML 원소 위치 찾기 웹 드라이버를 사용할 때 배우는 가장 기본적인 기술 중 하나는 웹 페이지에서 특정 원소를 찾는 방법이다. 웹 드라이버는 ID 속성으로 요소를 찾을 수있는 내장 선택 기능을 제공하고 있다. WebElement cheese = driver.findElement(By.id("cheese")); 위 예제에서 볼 수 있듯이 웹 드라이에서 원소의 위치는 웹드라이버 인스턴스 객체를 사용하여 찾을 수 있다. ..

무료정보 2022.01.25

[아마존 코딩 인터뷰] Partition Labels

파티션 라벨 Partition Lables 문제가 다소 난해하지만 많은 사람들이 좋아요를 눌렀기 때문에 꾹꾹 참고 마음을 다잡고 도전한 문제였다. 처음 볼 때는 도저히 문제가 원하는 것을 이해하지 못해서 풀기를 포기하고 다른 문제를 풀었다. 다음 날 다시 도전해서 풀어본 결과 전에는 보이지 않았던 것이 눈에 들어와서 풀 수 있었다. 대단히 어려운 문제는 아니어서 가능했던 것 같다. 문제 : 소문자 구성된 스트링 S가 주어진다. 우리는 스트링을 가능한 많이 파티션으로 나누고 싶어한다. 파티션으로 나눠서 각 문자가 최대한 한 파티션에서 가장 많이 나올 수 있도록 하고 싶다. 각 파티션의 사이즈를 담은 리스트를 반환하라. 이런 식으로 기획서가 날라오면 한바탕 싸움이 일어날 것 같은 이해도 안 되고 말도 안 되..

무료정보 2022.01.24

[코딩 알고리즘] 아마존 인터뷰 준비 Top K Frequent Elements 2편

Top K Frequent Elements 2 지난 글에 이어서 가장 많이 반복되는 원소를 상위 K 만큼 반환하는 문제를 연습해보도록 하겠다. 1편에서는 우선순위 큐를 사용하여 O(n log K)의 시간 복잡도로 풀 수 있는 접근 방법을 알아보았다. O(n log n)보다는 더 빠르고 좋은 훌륭한 접근 방법이다. 이번 글에서는 O(n)으로 풀 수 있는 2가지 방법을 소개해보도록 하겠다. Quick Selection 접근 방법 퀵 셀렉션. 이름이 익숙하다. 그렇다. 학부시절 누구나 한 번쯤은 코딩해봤을 Quick Sort 알고리즘의 아이디어를 이용해서 푸는 방법이다. 퀵 소트라 하면 분할 정복 (Divide and Conquer) 기법을 사용해서 배열을 꾸준히 반을 나누고 각 나눠진 배열에서 피벗을 정하고..

무료정보 2021.10.27

[코딩 알고리즘] 가장 긴 회문 찾기 - Longest Palindromic Substring

비교적 고전적이지만 인터뷰어들이 좋아하는 문제이다. 생각보다 자주 물어보는 것 같다. 문제 최고 길이가 1000자인 문자열 s가 주어졌을때 s의 부분 문자열 중 가장 긴 회문을 찾아라. 예제 1: Input: "babad" Output: "bab" 참고: "aba" 도 정답으로 인정함. 예제 2: Input: "cbbd" Output: "bb" 예제 3: Input: s = "a" Output: "a" 가장 단순한 방법으로 푸는 방법을 생각해보도록 하자. 모든 부분 문자열을 만든 다음 회문 여부를 확인 하는 것이다. 모든 부분 문자열을 만드는 방법은 n^2 의 시간복잡도이고 회문을 체크하는 시간복잡도는 n이다. 따라서 이와 같은 방법으로 문제를 푼다면 n^3의 시간복잡도가 된다. 처음 아무런 생각이 나지..

무료정보 2021.10.24

[코딩 알고리즘] 연결리스트 반전 알고리즘 (Reverse LinkedList)

문제 : 주어진 단일 연결 리스트를 반전시켜라. 예제: Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL 정말 유명하고 고전적이면서 간결한 문제이다. 기본적인 문제인 만큼 2가지 방법으로 풀 수 있다는 것을 알아두고 보자마자 2가지 방법으로 풀 수 있도록 연습하기를 권장한다. 재귀적인 방법과 반복문을 사용하는 방법 두 가지 모두를 알아보도록 하겠다. 이번 문제도 Leetcode에서 코딩을 작성하고 답변을 확인할 수 있다 참고로 제대로 풀었다면 공간 복잡도는 O(1)이 되어야 한다. 만약에 다른 보조 메모리를 사용하여 O(N)으로 풀었다면 O(1)으로 풀 수 있도록 생각해보도록 하자. 이번 글에서는 O(1)으로 푸는 방법만을 제시할 것이다. 노드 하나하나 방..

무료정보 2021.10.22

[코딩 알고리즘] Best Time to Buy and Sell Stock II

문제: prices 배열이 주어졌을때 i번째 원소 값은 i번째 일의 주식 가격이다. 최대 이익을 찾기 위한 알고리즘을 설계하라. 원하는 만큼 많은 거래를 완료할 수 있다. 즉 사고 파는 것을 여러번 할 수 있다. 참고: 동시에 여러 거래를 할 수 없다(즉, 주식을 팔아야 다시 살 수 있다) 예제 1. Input: [7,1,5,3,6,4] Output: 7 설명: day 2 (price = 1)의 주식을 산고 day 3 (price = 5)에 판다. 그렇다면 이익은 5-1 = 4 이다. 그리고 day 4 (price = 3)에 주식을 사고 day 5 (price = 6)에 판다. 이익은 6-3 = 3이다. 따라서 4 + 3= 7 이다. 예제 2. Input: [1,2,3,4,5] Output: 4 설명: ..

무료정보 2021.10.21

[코딩 알고리즘] KMP 알고리즘

이번 포스팅에서는 문자열 매칭 알고리즘의 대명사 KMP((Knuth–Morris–Pratt Algorithm) 알고리즘에 대해서 알아보겠다. 커누스-모리스-프랫 이 세 사람이 고안해낸 알고리즘이고 보통은 이름의 앞글자만 따서 KMP라고 줄여서 부른다. KMP 알고리즘은 주어진 보통 웹 브라우저 크롬, IE, 파이어폭스 등에서 원하는 글자를 찾는 기능 (ctrl+f)을 사용할 때 우리도 모르게 사용하고 있다. 조금 포멀 하게 말하자면 찾고 하자는 단어 "W"가 주어진 평문 "S"에서 몇 번 발견되는지 검색을 하는 알고리즘이다. 이 알고리즘은 The art of Computer Programming의 저자로 명성이 높은 커누스의 오토마타 이론에서부터 독자적으로 발전하였다. 모리스는 첫 번째 원리를 오토마타에..

무료정보 2021.10.20

[코딩 알고리즘] 최단 회문 만들기 (Shortest Palindrome)

이번 포스팅에서는 최소한의 문자를 추가해서 회문을 만드는 알고리즘 문제를 풀어보도록 하겠다. 문제: 주어진 문자열 S가 있을때 문자열 맨 앞부분에 다른 문자열을 추가하여 회문으로 만들 수가 있다. 이와 같은 문자열 변환을 통해서 가장 짧은 회문을 반환하여라. 예제 1: 입력: "aacecaaa" 출력: "aaacecaaa" 예제 2: 입력: "abcd" 출력: "dcbabcd" 문제 자체는 이해하기 어렵지 않다. 회문이 아닌 문자열에 어떤 문자열을 추가해서 회문으로 만들면 된다. 언제나 그렇듯 가장 단순 무식하게 풀어보는 방법을 일단 먼저 찾아보는 것이 중요하다. 쉽게 떠올릴 수 있는 방법은 주어진 문자열 안에서 존재하는 가장 긴 회문 문자열을 찾는 것이다. 모든 문자를 한 번씩 방문한 다음 회문인지 아..

무료정보 2021.10.19