목록💡 백엔드 (147)
코딩마을방범대
Form Data를 어느 method에 넣느냐에 따라 쿼리파라미터의 위치가 다르다get: urlpost: body컨트롤러에서 HttpRequestServlet을 이용하여 body를 출력하려 하면 null값이 출력됨요청 -> 필터 -> 디스패처 서블릿 -> 인터셉터 -> 컨트롤러로 값을 바인딩 하는 과정에서Interceptor에서 getInputStream() 을 호출하여 Http Body를 읽으면서 소비하였기 때문에Controller의 Http Body가 비어있는 것public void test(HttpServletRequest request) throws IOException { ServletInputStream inputStream = request.getInputStream(); ..
예외 처리 과정 프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다. 과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프로그램이 될 수 있게 도와준다. 예외 처리 하는 방법 메서드 내에서 예외 상황을 예측해서 처리하는 try-catch문을 이용하는 방법 요구사항에 의한 예외 처리 (ex. validation > 특정 값이 0~255범위가 아니면 유효하지 않은 값으로 판단하고 예외 처리) 스프링 시큐리티에서 인터셉터로 잡아서 UnauthorizedException 같은 예외 처리 @ExceptionHandler @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메소드에서 처리해주는 기능 사..
Interceptor Client로부터 들어오는 요청( HttpRequest )을 Controller의 Handler로 도달하기 전에 가로채거나 Controller로 부터 보내는 응답( HttpResponse )을 가로채는 역할 HandlerInterceptor에서 가로채어 원하는 추가적인 로직을 수행한 후에 Controller의 Handler로 보낼 수 있도록 하는 Module ( Handler : Client가 요청한 url에 따라 실행되어야 할 Method ) 사용 방법 1. HandlerInterceptor 인터페이스를 구현하는 방법 preHandle HttpRequest를 컨트롤러의 Handler로 보내기 전에 실행하는 메소드 postHandle 요청에 대한 응답을 View에 렌더링 하기 전에 ..
이전 Log4j 자료 로깅(Logging)이란? Logback이란? 오픈소스 로깅 프레임워크이며 SLF4J의 구현체이자, 스프링부트에 기본으로 내장되어 있는 로깅 라이브러리 log4j보다 좋은 성능을 가짐(log4j: 2015년에 지원 중단) SLF4J 로깅 추상 레이어를 제공하는 인터페이스 slf4j 덕분에 애플리케이션은 어떤 로깅 라이브러리를 사용하던 같은 방법으로 로그를 남길 수 있는 것 (그래서 로그 라이브러리를 교체하는 일이 발생하더라도 애플리케이션의 코드가 변경될 필요가 없음) 사용 방법 1. build.gradle // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic testImplementation group: 'ch.q..
Argument Resolver API 엔드포인트로 인입된 데이터를 가공 및 바인딩 할 때 사용하는 객체 http body 또는 url 파라미터로 넘어오는 데이터들은, @ReqeustBody와 @RequestParam 등으로 바인딩 할 수 있지만, http 헤더, 쿠키, 세션 등으로 전달되는 데이터인 경우에는 Argument Resolver를 이용할 수 있음 대표적으로 세션에서 로그인한 사용자의 정보를 얻거나, 헤더로 전달되는 토큰에서 사용자의 정보를 얻을 때 사용 Argument Resolver가 호출되는 시기 컨트롤러의 메소드 찾기 → Argument Resolver 처리 → 컨트롤러 메소드 실행 커스텀 어노테이션 만들기 1. 어노테이션 선언 메소드 변수를 통해 세팅값을 정의할 수 있음 @Inheri..
예를 들어 'USER'라는 대문자로 된 테이블을 생성한 후,Spring에서 @Entity(name="USER")로 명시해주었으나아래와 같이 table을 찾지 못하는 문제가 발생했다.Table 'DB명.테이블명' doesn't exist Spring에서 Hibernate 기본 설정에 의해 대소문자를 구별하지 않아 발생하는 문제이며,yml 설정을 통해 테이블 수정 없이 인식 가능하다. 1. MySQL 테이블 생성 설정을 확인show variables like 'lower%'; 위 명령어 입력 시 하기와 같은 데이터를 확인할 수 있다.'lower_case_table_names'이 0일 경우 대소문자를 구분, 1일 경우 구분하지 않는다.0(대소문자 구분)으로 만들어졌을 경우, 대문자 테이블은 JPA에서 읽어올..
외부 접속 허용 설정 변경 1. mysql 설정 파일 열기 $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 2. ip address 변경 기존 bind-address(127.0.0.1)을 0.0.0.0으로 변경 후 :wq로 저장 후 종료 외부 접속 가능한 사용자 계정 추가하기 1. MySQL 접속 $ sudo mysql -u root -p 2. 기존 사용자 목록 확인 mysql> SELECT User, Host FROM mysql.user; 3. 사용자 계정 추가 mysql> CREATE USER '유저네임'@'%' IDENTIFIED BY '패스워드'; 4. MySQL 종료 후 root 계정으로 재로그인 mysql> quit $ sudo mysql -u root -p 5..
tomcat 오류가 발생하는 경우 /var/log/tomcat9 위 경로에서 로그 파일(catalina.out) 확인이 가능하다. 위 경로로 접속한 후 하기 명령어를 실행하면 로그파일 확인이 가능하다. sudo tail -1000f catalina.out // 1000줄 확인 sudo tail -f catalina.out // 10줄 확인 // 경로로 이동하지 않고 한 번에 실행하는 방법 sudo tail -1000f /var/log/tomcat9/catalina.out 💡 TIPS! MySQL 데이터베이스 공유하는 방법 Navigator의 Users And Privileges -> Add Account 클릭 Name과 Password 입력 후 Limit to Host Matching은 %로 Apply ..