Backend
-
[NGINX] Nginx에 대해서Backend 2023. 12. 28. 14:46
Nginx는 높은 성능과 안정성, 그리고 현재 가장 많이 사용되고 있는 웹 서버이다. Apache같은 웹 서버와 비교하면 더 빠르고 가볍, 대규모 어플리케이션에 적합하다는 장점이 있다. 웹서버에 대해 알아보고, Apache와 비교하며 Nginx에 대해 알아보자! 웹 서버란? 웹 서비스의 구성요소로는 클라이언트, 웹서버, WAS, DB를 들 수 있다. 클라이언트 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체 웹 개발 영역에서 클라이언트는 보통 웹 브라우저 웹 서버 클라이언트 요청에 따라 정적 파일(HTML, CSS, JS, 이미지 등)을 응답하여 제공하는 소프트웨어 HTTP 프로토콜을 사용하여 클라이언트와 통신 Nginx, Apache, Node.js 등 WAS(Web Application S..
-
[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..
-
[Docker] Docker Compose를 사용하여 Spring 컨테이너와 로컬 MySQL 연결하기Backend/Docker 2023. 6. 13. 20:30
시작 Spring 프로젝트를 진행하면서 초기에는 도커없이 서버에서 로컬로 mysql과 스프링을 연결했다. 하지만 이후 도커 적용이 필요해지면서 dockerfile과 docker-compose.yml 파일을 작성했다. 이때 대부분 MySQL도 컨테이너로 생성해 스프링 컨테이너와 연결하는데, 나의 경우 로컬에서 사용하던 DB를 계속사용해야 했기 때문에 스프링 컨테이너와 로컬 MySQL을 연결해야했다. Spring Dockerfile Dockerfile의 경우 프로젝트에서 사용하는 jdk를 지정하고 gradle을 통해 build된 jar 파일을 컨테이너에 포함시켜 jar파일을 실행시킨다. 여기서 중요한 점은 대부분 파일 경로 상 docker-compose.yml 밑에 Dockerfile이 존재하게 되는데 Do..
-
[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..
-
[리눅스] 우분투 서버에서 jar 파일 실행 시 java.sql.SQLException: Incorrect string value: 에러Backend/리눅스 2023. 5. 31. 22:04
문제 swagger나 postman을 사용해 api 요청을 해봤었는데 로컬에서는 잘 작동하던 코드가 다음과 같은 에러를 냈다. 갑자기 SQL 예외라니,,, 테스트 해봤을 때 string value의 인코딩이 잘못된 듯 보였다. 해결 DB, Table, Column의 인코딩을 맞춰주면 되는데 utf8mb4로 맞춰주었다. ALTER DATABASE db명 DEFAULT CHARACTER SET utf8mb4; ALTER TABLE db명.테이블명 CONVERT TO CHARACTER SET utf8mb4; 첫번째 문은 DB의 character를 변경 두번째 문은 Table과 Column의 character를 변경
-
[리눅스] 우분투 서버에서 spring boot jar 파일 실행 시 java.lang.IllegalArgumentException: URI is not hierarchical, java.io.FileNotFoundException 에러Backend/리눅스 2023. 5. 31. 21:26
문제 엑셀파일에서 데이터를 가져오기 위해 resources 안에 엑셀 파일을 넣어두고 이를 읽어오는 코드를 작성했었다. 문제가 됐던 코드는 다음과 같다. URL url = this.getClass().getClassLoader().getResource("test.xlxs"); File f = new File(url.toURI()); FileInputStream file = new FileInputStream(f); XSSFWorkbook workbook = new XSSFWorkbook(file); resources 경로 상에서 file을 url을 가져와 File 객체를 생성하고 여기서 inputstream을 얻어오는 코드이다. 엑셀 파일 파싱을 위해 XSSFWorkbook을 사용했다. 그 결과 java..