본문 바로가기

Dev/Spring Boot

(34)
Servlet - HttpServlet 사용법 (Request , Response) Servlet : 동적 웹 페이지를 만들 때 사용되는 Java 프로그래밍 기술. 서블릿은 웹 요청과 응답의 흐름을 간단한 메소드 호출로 가능하게 해준다. 만약 서블릿이 없다면 개발자들은 HTTP 스펙을 모두 알고있어야하고 순수 HTTP 상태나 response, request를 파싱하고 해석해야할 것이다. 서블릿이 이것을 대신해준다. 1. Request 클라이언트가 서버에 요청을 보낼 때가 있다. 가장 일반적으론 GET요청 등이 있을 것이다.1. 이 때 쿼리파라미터를 통해 유저아이디나 이름을 보낼수가 있고2. HTML 폼을 통해 POST로 요청한다. 웹 브라우저가 만들어서 보내는데 쿼리 파라미터로 넘어가는 것과 같다.3. POST를 통해 바디에 담아서 간다. 보통 json으로 날아온다. 2. Respons..
Spring 기초 1) WAS란 무엇인가? 동적 페이지는 사용자와 상호작용하며 어떤 버튼을 누르면 이벤트가 작동하는 등으로 작동해야한다. 동적 웹 페이지에서 상호작용을 위해 필요한 것이 WAS이다. WAS 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어이다. 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 다르며 데이터 베이스 서버와 같이 작동하게 된다. WAS는 Web Server의 기능도 가지고있지만 Web Container와 구분되기 때문에 구조적으로 분리되었다. 위 사진을 보면 WAS는 웹서버와 컨테이너를 모두 포함한다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있으며, WAS는 JSP, Servlet 등 구동 환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다. Web Service Ar..
API 최적화1 - N + 1 문제, Lazy 메커니즘, 패치조인 N + 1 문제 Ex) 주문내역 엔티티는 회원 엔티티와 상품정보 엔티티 두개를 가지고 있다고 해보자 이 때, 주문내역 엔티티를 조회하면 어떻게 될까? 만약 3개의 주문내역이 있다고 생각해보자 그렇다면 결과는 3개가 나와야한다. 즉, 조회된 엔티티의 개수(N)만큼 추가적인 쿼리가 발생하는 문제를 뜻한다. 주문내역 엔티티를 구하기 위한 질의를 던진다. 주문내역에 회원 엔티티를 구하기 위한 질의를 던진다. 상품정보 엔티티를 구하기 위한 질의를 던진다. 지금 주문 내역 엔티티를 구하기 위해 쿼리가 2개가 더 날아갔다. 이것이 1 + N 문제이다. 하나의 쿼리면 될 것을 몇개나 더 날린다. 그리고 주문내역이 3개 있으므로 이 엔티티는 무려 7개의 쿼리를 날려야한다. 단순히 생각해도 네트워크 통신이 많다. 왜 이럴..
Spring Boot - 로그를 남기는 법 : @SLF4J 로깅에 대한 추상 레이어를 제공하는 인터페이스의 모음. 1. Log Level Trace Debug Info Warn Error Trace O O O O O Debug X O O O O Info X X O O O Warn X X X O O Error X X X X O Trace : 디버그보다 좀 더 상세한 정보를 나타냄 Debug : 프로그램을 디버깅하기 위한 정보 지정 Info : 상태변경과 같은 정보성 메세지를 나타냄 Warn : 처리가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지를 나타냄 Error : 요청을 처리하는 중 문제가 발생한 경우 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jSam..
Spring Boot 외부 파일 경로 설정 Spring Boot 외부 파일 경로 @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry){ String resourcePath = "file:///TistoryImages/"; String connectPath = "/image/{subfolder}/**"; registry.addResourceHandler(connectPath) .addResourceLocations(resourcePath); } } Spring Boot는 내부적으로 static 안에 있는 파일만 가져올 수 있도록 세팅되어있음...
Spring Boot - Java 동적 페이지 웹 크롤링 Selenium Notion에서 Tistory로 자동업로드하는 프로젝트를 진행중에 정적 웹 크롤링과 동적 웹 크롤링이 다르다는 것을 알게 되었다. 그래서 동적 웹 크롤링을 따로 공부해야했다. Selenium 셀레니움은 웹 애플리케이션을 실행시켜볼 수 있는 프레임워크이다. 자동 로그인, 자동 글쓰기, 자동 클릭 등 많은 기능을 사용할 수 있다. 의존성 Gradle implementation 'org.seleniumhq.selenium:selenium-java:4.6.0' Chrome Driver 다운로드 크롬 우측 위 … 클릭 도움말 Chrome 정보 클릭 후 버전 확인 https://chromedriver.chromium.org/downloads 사이트에서 맞는 Chrome driver 다운로드 다운받은 chromedr..
Spring Security - 로그인 처리 과정 스프링 시큐리티가 로그인 인증을 하는 로직은 다음과 같다. Http 요청이 들어오고 필터를 거처 마지막에 SecurityContextHolder에 들어간다. 세션에 들어갈 수 있는 오브젝트는 스프링 시큐리티에서 정해져있다. 그것이 위의 있는 Authentication 이다. 이 안에는 유저 정보가 들어있고 유저 정보가 있는 오브젝트 타입은 UserDetail이다. 위 6번에서 알 수 있듯, UserDetatils는 인터페이스로 제공이 된다. 이제 저 인터페이스를 구현해보자 PrincipalDetails로 UserDetails 인터페이스를 구현한다. 이제 구현한 프린시펄디테일을 어떻게 세션에 넣는 걸까? 방법은 간단하다. 간편한 서비스가 이미 구현되어 있기 때문에 우린 그 인터페이스를 구현하여 사용하면 된..
우분투에서 MySql 실행법 MySql 설치는 되어있다는 가정하에 sudo mysql -u root -p 하면 엑세스 거부 에러가 날 수 있다. 이때는 mysql의 경로를 지정해주면 해결된다. 보통은 sudo /usr/bin/mysql -u root -p 이다. 이후 비밀번호를 입력하면 mysql 실행 로그가 뜰 것 이다.