Backend/Spring
-
[Spring] Spring MVC에서 AOP 설정 (feat. 루트 컨텍스트와 서블릿 컨텍스트)Backend/Spring 2023. 10. 24. 11:56
🥑 AOP 관점 지향 프로그래밍(Aspect Oriented Programming) 핵심 관심 사항과 공통 관심 사항을 분리하는 프로그래밍 방식 핵심 관심 사항에 적용되는 공통 관심 사항에 대해 모듈로 만들어 코드의 중복을 줄이고 핵심 로직에 집중한다. 스프링에서 AOP target에 대해 프록시로 감싸고 프록시가 메소드 호출이나 반환 시에 이를 가로채서 advice에 따라 Aspect의 코드를 실행하거나 target 함수를 호출한다. 📍 Spring MVC에 AOP 적용하기 공통 관심 사항 (Aspect) 공통 관심 사항에 대해 모듈 생성 @Aspect 애노테이션을 통해 공통 관심 사항임을 설정 @Pointcut 애노테이션과, 시점(@Before, @AfterReturning, @AfterThrowin..
-
[Spring] Spring에서 Selenium(셀레니움) 사용해 크롤링하기Backend/Spring 2023. 6. 14. 01:03
시작 Spring 프로젝트에서 크롤링을 하기위해 라이브러리를 찾던 중 JSoup과 Selenium을 발견했다. 나의 크롤링의 경우 단순히 긁어오는 것이 아니라 페이지 이동, 동작이 필요했는데 JSoup은 동적 웹페이지가 안되는 것 같았다. 그래서 Selenium으로 결정했다. 크롬을 가장 많이 사용하는 것 같아 크롬브라우저를 사용할 것이다. 크롬 브라우저 버전 확인 크롬 브라우저에 접속하여 메뉴 → 설정 → Chrome정보 에서 크롬 버전을 확인할 수 있다. 크롬 드라이버 설치 다음 링크에서 크롬 브라우저 버전에 맞는 드라이버를 설치한다. ChromeDriver - WebDriver for Chrome - Downloads Current Releases If you are using Chrome vers..
-
[Spring] 우분투 서버에서 Docker로 Selenium 환경 구축하기Backend/Spring 2023. 6. 14. 00:39
시작 Spring 프로젝트에서 Selenium을 사용해 크롤링을 구현했다. 로컬에서 잘 돌아가던 코드가 서버에서 안돌아가는 경우가 많지만 Selenium은 정말정말 에러도 많고 구축하기 어려웠다. 그 과정을 정리해보려고 한다! ⚙ 개발환경 GCP 인스턴스 리눅스 우분투 18.04 JDK 17 Gradle Spring Boot 구조 Selenium을 사용하기 위해선 크롬과 크롬드라이버가 필요하다. 특히 이 둘의 버전을 맞춰서 설치해주어야 한다. Command Line으로 서버에 설치하는 방법도 있겠지만 Dockerfile에 명령어를 작성해두는 것을 선택했다. Dockerfile을 통해 크롬과 크롬드라이버를 설치하고 컨테이너에 설치된 드라이버를 selenium에서 사용할 수 있도록 할 것이다. 📌과정 Doc..
-
[Spring Error] Java로 Selenium(셀레니움)을 사용해 크롤링 시 Unable to establish websocket connection to 에러Backend/Spring 2023. 6. 13. 20:06
문제 스프링부트 프로젝트에서 크롤링을 하기 위해서 셀레니움 라이브러리를 사용했다. 동작 시 다음과 같이 웹소켓과 연결할 수 없다는 에러가 발생했다. 더보기 org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to 해결 방법 chromedriver 생성시에 ChromeOption을 포함할 수 있는데 다음 코드를 포함하면 된다. ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--remote-allow-origins=*"); ChromeDriver driver = new ChromeDrive..
-
[Spring Error] Error creating bean with name 'entitymanagerfactory' (feat. spring boot 3.0 과 mysql 연결)Backend/Spring 2023. 5. 30. 21:09
시작 Spring Boot 3.0에서 MySQL을 연동하려고 보니 다음과 같은 에러가 발생했다. SpringBoot3.0으로 mysql을 연동한 예시가 많이 보이지 않아 뭐가 문제인지 알기 어려웠는데 해결하게 되어 관련 내용을 정리한다. 문제 다음에 나오는 포스팅대로 mysql 설정을 완료하였다. Run을 돌린 순간! [Spring] Spring Boot 3.0.6 JPA에서 MySQL 연결하기 시작 Spring Boot 3.0으로 프로젝트를 진행하며 H2 DB를 연동하여 개발을 진행했는데, 백엔드 서버를 올리려고 하면서 MySQL과 연결을 시도했다. 스프링부트 3.0은 라이브러리 의존성이나 설정이 바뀌 miraekwak.tistory.com Error creating bean with name 'ent..
-
[Spring] Spring Boot 3.0.6 JPA에서 MySQL 연결하기Backend/Spring 2023. 5. 30. 20:54
시작 Spring Boot 3.0으로 프로젝트를 진행하며 H2 DB를 연동하여 개발을 진행했는데, 백엔드 서버를 올리려고 하면서 MySQL과 연결을 시도했다. 스프링부트 3.0은 라이브러리 의존성이나 설정이 바뀌는 것들이 많아 매번 어려움을 겪었다. 이번 MySQL 설정도 고난을 겪었고, 정리해놓은 블로그가 많이 없어서 정리해보려고 한다! Spring Boot 3.0.6 의존성 설정 mysql 의존성을 설정하기 위해 gradle에 다음과 같이 설정해주었다. runtimeOnly 'com.mysql:mysql-connector-j' 스프링부트 doc을 살펴보면 스프리부트3.0에 필요한 의존성을 살펴볼 수 있다. 여기서는 mysql-connector-java가 아닌 mysql-connector-j로 설정하고..
-
[Spring] springdoc swagger에서 LocalTime 변수를 string으로 받기 (feat. @Schema)Backend/Spring 2023. 5. 29. 21:56
LocalTime 변수를 swagger에서는 어떻게 받을까? 시간:분 형식의 데이터를 받기위해 LocalTime을 사용했다. 이때 JsonFormat을 사용해 pattern을 내가 원하는 형식으로 지정해준 상태였다. 이때 swagger에서 확인해본 형식은 다음처럼 시간, 분, 초를 따로 받고 있었다. 여기서 string형으로 패턴을 지켜 요청하면 정상적으로 잘 동작했다. 따라서 이를 string으로 받겠다는 정의가 필요했다. LocalTime 변수를 String으로 받기 검새해보았을 때 springfox 관련 설정이 많이 보였다. springfox의 경우 swagger config 시에 directModelSubstitude 메소드를 사용해서 설정해줄 수 있다고 한다. @Bean public Docket..
-
[Spring Error] Spring Boot 3.x에서 Swagger 설정 시 404 ErrorBackend/Spring 2023. 5. 27. 15:28
Swagger 설정 관련 포스트 [Spring] Spring Boot 3.x에서 Swagger 설정하기 시작하기 Spring Boot 3.x로 프로젝트를 진행하며 Swagger의 필요성을 느꼈다. Swagger 설정이 간단했던 것으로 알고있어서 금방 끝날거라고 생각했지만 생각보다 고난을 겪었다. 관련 내용을 포스팅한 miraekwak.tistory.com Swagger 404 위와 같이 설정을 했음에도 나의 경우 계속 404 에러를 보았었다. spring boot에서 에러가 나는 것도 아니고 404에러였기에 뭐가 문제인지 알기가 너무나 어려웠다... 그래서! 어떻게 해결했는지 적어보려고 한다. ArgumentResolver 문제 JWT token을 통해 사용자 인증을 하면서 token인증을 위한 Hand..