Selenium 으로 Web Scraping 아이 해봤니?
본 글은 ‘테스트 자동화 도구’로 잘 알려진 'Selenium (셀레니움)'을 이용하여 Java + Spring 환경에서 'Web Scraping' 을 구현해 본 경험에 대한 이야기 입니다. 배경 왜 하게 됐는가? 업무 상 특정 웹사이트의 정보를 Scraping 해오는 신규 시스템을 설계하고 개발 하였습니다. 왜 Selenium 을 선택 했는가? 개발을
본 글은 ‘테스트 자동화 도구’로 잘 알려진 'Selenium (셀레니움)'을 이용하여 Java + Spring 환경에서 'Web Scraping' 을 구현해 본 경험에 대한 이야기 입니다. 배경 왜 하게 됐는가? 업무 상 특정 웹사이트의 정보를 Scraping 해오는 신규 시스템을 설계하고 개발 하였습니다. 왜 Selenium 을 선택 했는가? 개발을
데이터베이스 테이블의 기본 키Primary key를 선정할 때 크게 2가지 선택지가 있는데 하나는 자연 키Natural key이고 또 하나는 대체 키Surrogate key이다. 자연 키는 전화번호, 이메일처럼 비즈니스적으로 의미 있는 키를 말하며, 대체 키는 비즈니스와 상관없이 임의로 만들어진 키를 말한다. JPAJava Persistence API는 데이터베이스 테이블 대체 키를 기본 키로 자동 생성하는 기능을 지원한다.
JPA(하이버네이트)로 개발하다 보면 JPA가 자동으로 만들어 실행하는 SQL문을 확인하고 싶을 때가 있다. 이 글은 스프링 부트와 JPA를 함께 사용하는 환경에서 SQL문을 로깅Logging하는 방법을 소개한다. 예제 프로젝트 이해를 돕기 위해 간단한 스프링 부트 + JPA 예제 프로젝트를 만들고 SQL문 로깅을 추가해 보자. 예제 프로젝트는 스프링 부트에서 제공하는 부트스트랩Bootstrap 도구인 SPRING
최근에 Java 를 실무에 사용하면서 JShell 이 있어서 참 다행이라고 생각하고 있다. IntelliJ 가 JShell Console 이라는 기능으로 툴 안에서 JShell 을 연동해주고 있어서 더 편리하게 사용하고 있는데 이번 글에서는 JShell 에 대한 간단한 소개와 유용함을 알아보자. 이 글은 macOS 를 기준으로 하며 다음의 내용을 다룬다. 1. JShell 에 대한
지난 글에서 의존성 주입(Dependency Injection)에 대한 이야기를 했었다. 이번 글에서는 다른 방식의 의존성 주입인 케이크 패턴을 소개한다. 스칼라의 케이크 패턴에 대한 자세한 내용은 여기를 참고 바란다. 케이크 패턴 스칼라의 케이크 패턴을 자바에서 사용해보자. 케이크 패턴은 의존성 주입의 한 방법이다. 자바 8에서는 인터페이스가 구현 코드를 담은 디폴트 메소드를 가질
필자가 도커 초보인 동시에 우분투 초보라는 점을 감안하여 읽어 주셨으면 좋겠습니다. :) 이 글은 필자가 도커화Dockerize된 우부투에서 배치Batch 애플리케이션을 주기적으로 실행시키는 과정에서 겪었던 시행착오 과정을 정리한 것이다. Cron과 Cron Job 그리고 Crontab 필자가 우분투에서 배치 애플리케이션을 주기적으로 실행 시키기 위해 선택한 것은 Cron이었다. Cron은 리눅스 계열(이 글에서는 우부투) OS에서 제공하는
필자는 현재 참여 중인 프로젝트에서 JUnit으로 테스트 코드를 작성하였다. 그 와중에 JUnit 보다 직관적인 Assert 구문과 풍부한 Assertion[1]을 제공하는 AssertJ를 알게 되었고 AssertJ로 테스트 코드를 리펙토링하고 싶었다. 기존에 작성된 JUnit Assertion 코드를 자동으로 AssertJ 코드로 바꿀 수는 없을까? AssertJ 마이그레이션Migration 도구 AssertJ 사이트에서는 JUnit Assertion을 AssertJ 코드로 바꿔주는
켄트 벡Kent Beck은 자신의 책 익스트림 프로그래밍Extreme Programming에서 5 가치[1] 를 이야기 했는데 그중 하나가 피드백Feedback이다. 한번에 완벽하게 해결하기를 바라는 것보다 점진적 개선에 만족하기 때문에 우리는 피드백을 이용해 목표에 점점 더 가까이 다가간다. 피드백은 여러 가지 형식으로 우리에게 들어온다. - 익스트림 프로그래밍 47 쪽 더 나은 코드를 만들기 위해서는 피드백이
이 글은 필자가 미디엄Medium에 쓴 2편의 글을 합하여 개정한 것이다. JPA Native Query를 사용하다 보면 반환 값으로 엔터티Entity 가 아닌 DTOData Transfer Object로 받고 싶을 때가 있다. 대표적인 경우가 통계이다. 통계 지표를 만들어낼 때 사용하는 SQL은 대부분이 복잡하고 길다. 문제는 SQL 실행 결과Result Set를 기존의 엔터티에 담기에는 형태가 맞지 않는데
이 글은 JavaBean Validation(이하 Bean Validation)의 기본 개념과 Hibernate Validator와의 관계 그리고 Spring Boot에서 간단한 사용법을 소개한다. Bean Validation Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한
관계형 데이터베이스를 사용하는 애플리케이션을 개발할 때 SQLStructured Query Language을 짜는 것은 피할 수 없는 일이다. Java 표준 ORMObject-Relational Mapping인 JPAJava Persistence API의 경우에도 다양한 조회를 위한 JPQLJava Persistence Query Language를 정의하고 있다. SQL 경우 데이터베이스 클라이언트 도구로 실행하고 결과를 확인할 수 있어서 애플리케이션 코드에서 SQL만 떼어 검증하기 쉽다. 반면
REST(Representational state transfer)를 개발 하다 보면 하나의 기저(Base) URL(예. http://www.example.gov/api/v1/magazines.json)을 사용하면서 호출 하는 클라이언트에 따라 조회 조건(URL Query)이나 응답(Response)이 완전히 달라져야 하는 경우가 있다. 이를 Spring Framework에서 구현하는 방법을 소개 한다. HTTP Header 사용