본문 바로가기

전체 글142

복잡한 HTML페이지를 분석하여 원하는 정보만 추출하기 고급 HTML 분석을 사용하지 않는 방법bs.findAll('table')[4].find_all('tr')[2].find('td').find_all('div')[1].find('a') 이 방법의 문제점사이트 관리자가 사이트를 조금만 수정하더라도 웹 스크레이퍼에 동작이 멈출 수 있습니다.그렇기에 태그의 위치, 문맥, 속성, 콘텐츠에 따라 태그를 선택하는 표준적이 창의적인 방법이 필요합니다. 속성값을 통해 탐색오늘날 웹사이트 대부분은 class, id와 같이 고유한 속성을 가지고 있기에 요소를 찾기 수월합니다. BeaurifulSoup 객체의 findAll 함수를 사용하면 태그에 들어있는 텍스트만 선택해서 고유명사로 이루어진 파이썬 리스트를 추출할 수 있습니다.nameList = bs.findAll('spa.. 2025. 1. 28.
웹 스크래이핑을 위한 네트워크 연결에 대한 이해와 Beauriful Soup 예외처리 네트워크 연결웹 스크레이핑은 브라우저를 열었을 때 거치는 HTML구조, CSS 스타일, 자바스크립트 실행, 이미지 렌더링을 거치지는 과정을 없앨 뿐만 아니라 가끔은 네트워크 연결 수준에서 없애야 할 때가 있습니다. 그러므로 다음 예제를 통해 브라우저로 정보를 가져오는 구조에 대해 감을 잡을 필요성이 있습니다. 밥이 데스크톱 컴퓨터를 가지고 엘리스의 서비스를 연결하는 상황밥의 컴퓨터는 1과 0으로 되는 비트 스트림을 보내니다. 각 비트는 전압으로 구별됩니다. 이들 비트는 정보를 구성하며, 헤더와 바디도 그런 정보에 포함됩니다. 헤더에는 바로 다음 목표인 밥의 라우터 MAC 주소와 최종 목표인 앨리스의 IP 주소가 들어있습니다. 바디에는 밥이 앨리스의 서버 애플리케이션에 요청하는 내용이 들어있습니다.밥의 라.. 2025. 1. 28.
Selenium, XPath를 통해 UI 요소 정확히 찾기 XPathXPath는 XML 및 HTML 문서에서 요소를 탐색하고 찾기 위해 사용됩니다. 주로 Selenium과 같은 웹 자동화 도구에서 사용됩니다.XPath 기본 구분절대 경로문서 루트부터 시작해 요소를 정확히 지정합니다. 구조가 변경되면 경로가 깨질 가능성이 높아 자주 사용되는 방법은 아닙니다./html/body/div/h1상대 경로'//'를 사용하여 어디에서든 요소를 찾습니다.//h1XPath 주요함수contains(): 특정 텍스트나 속성값을 포함하는 요소 찾기//div[contains(@class, 'example-class')] //h3[contains(test(), 'Welcome')] text(): 텍스트가 특정 문자열인 요소 찾기//h3[text()='Exact Text'] 속성으로 찾기.. 2025. 1. 13.
Windows 포트 개방으로 인한 보안 문제 해결 개요Spring Boot 애플리케이션을 실행하기 위해 8080 포트를 열어야 했습니다. 과연 안전할까요 포트 개방으로 인한 보안 문제전체 개방으로 인한 무분별한 접근포트를 개방함으로서 인터넷 또는 로컬 네트워크를 통해 누구나 애플리케이션에 접근할 수 있습니다.서비스 거부 공격(DoS/DDoS)열린 포트로 과도한 요청이 들어오면 애플리케이션이 중단될 수 있습니다.데이터 유출 위험HTTP를 사용하는 경우 민감한 정보가 노출될 가능성이 있습니다.포트 스캐닝 공격공격자가 연린 포트를 찾아 취약점을 분석할 수 있습니다. 해결방법특정 IP나 로컬 네트워크에서만 허용방화벽 규칙 추가 시 "로컬 서브넷" 또는 "특정 IP"만 허용하도록 구성합니다.Spring Security로 인증 설정Spring Boot에 Sprin.. 2025. 1. 8.
JPA 소개 JPA자바 애플리케이션에서 관계형 데이터베이스를 다룰 수 있는 표준 스팩이며, SQL 작성 없이 데이터 베이스와 매핑하고, 데이터의 저장, 조회, 갱신, 삭제를 처리합니다.JPA는 인터페이스로만 구성되어 있으며, Hibernate, EclipseLink, OpenJPA 등 구현체가 필요합니다. JPA 주요개념EntityDB 테이블에 매핑되는 클래스로서 @Entity 어노테이션을 사용합니다.Persistence Context엔티티 객체를 관리하는 컨텍스트, 엔티티의 생명 주기를 관리하며 1차 캐시 역할을 합니다.EntityManager엔티티를 생성, 조회, 갱신, 삭제하는 인터페이스이며, JPA의 핵심 API로, @PersistanceContext로 주입받습니다.JPQL(Java Persistence Qu.. 2025. 1. 2.
Selenium의 구성요소 Selenium자동화 웹 테스트와 웹 스프래핑 도구로써 자주 사용되는 Selenium은 아래와 같은 컴포넌트로 구성되어 있습니다.Selenuium Core: 코어 라이브러리로 애플리케이션 자동화 기능을 제공합니다. 클라이언트 언어가 셀레니움을 사용할 수 있도록 기능을 제공합니다.Selenium WebDriver/ Remote Control: RC 보다 더 구조화 되고 다양한 브라우저에서 자동화된 테스트 기능을 제공합니다. Selenium 3에서는 RC가 완전히 제거되고 WebDriver로 대체되었습니다.Selenium IDE: 프로그래머가 아닌 사람이 웹 애플리케이션을 테스트하고 다양한 Checks을 사용할 수 있는 GUI 도구입니다.Selenium Grid: 그리드(허브와 노드) 형태로 parallel.. 2024. 12. 23.
Spring Security, OAuth 적용 후 필요한 테스트? Spring SecuritySpring Security는 Spring 기반의 애플리케이션에서 보안을 관리하기 위한 강력하고 맞춤화 가능한 인증 및 접근 제어 프레임워크입니다. 이 프레임워크는 선언적인 보안 설정을 지원하며, 사용자의 인증(authentication)과 인가(authorization)처리를 위한 광범위한 방법을 제공합니다.OAuth와 Spring Security를 통한 역할 기반 접근 제어OAuth를 사용하여 인증을 처리하고, Spring Security를 통해 세밀한 역할 기반의 접근제어를 설정할 수 있습니다. 예를 들어, 다양한 사용자 역할(ADMIN, USER등)에 따라 특정 API 앤드포인트에 대한 접근을 제한할 수 있습니다.필요한 테스트 유형역할 기반 접근 제어 테스트(Role-B.. 2024. 12. 5.
OAuth2의 4 가지 흐름 OAuth2의 기본 개념OAuth2는 인터넷 사용자가 비밀번호를 제공하지 않고도 다른 웹사이트의 자원에 대한 접근 권한을 제 3자 애플리케이션에 부여할 수 있는 개방형 표준입니다. 이 프로토콜은 특히 "인증(Authorization)"에 초점을 맞추고 있습니다.Resource Owner(리소스 소유자): 일반적으로 서비스를 사용하는 사용자Client(클라이언트): 사용자 대신 특정 API 액세스 권한을 요청하는 애플리케이션Resource Server(리소스 서버): 사용자 데이터를 보유하고 있는 서버Authorization Server(인증 서버): 클라이언트가 사용자를 대신해 리소스에 접근할 수 있도록 토큰을 발급하는 서버 OAuth 장점개발자 관점1. 보안 강화: OAuth를 사용하면 개발자는 사용자.. 2024. 12. 5.
Jenkins, Docker-compose로 컨테이너화 하기 Jenkins젠킨스는 Java기반의 소프트웨어 개발 시 지속적으로 탕합 서비스를 제공하는 툴입니다. CI(continuous Intergration) 툴이라고 표현합니다. 젠킨스와 같은 CI툴이 등장하기 전에는 소위 nightly-build라고 불리우는 개발자들이 당일 작성한 소스들의 커밋이 모드 끝난 심야대에 빌드가 타이머에 의해 집중적으로 진행되는 행위가 있었지만, CI 툴의 등장으로 빌드를 포함하여 서브버전, Git과 같은 버전관리 시스템과 연동하여 소스의 커밋을 감지하여 자동적 테스트가 포함한 빌드하도록 설정할 수 있게 되었습니다.Jenkins를 사용함으로 써의 이점프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출자동화 테스트 수행정적 코드 분석에 의한 코딩 규약 준수여부 체크프로파일링 툴을 이용.. 2024. 12. 3.