본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

01. 11 TIL

728x90

1. 코딩 테스트 입문

개미 군단

직각삼각형 출력하기

세균 증식 :

비트 연산자? ~ a << b의 경우, 연산 결과는 a에 2^b만큼 곱한 것과 결과가 같다

(b가 음수이거나 b의 범위가 a보다 큰 경우 제외)

모음 제거

collect(Collectors.toList())와 toList()와 차이??

프로그래머스 코딩테스트에서 toList()를 사용했을 시 : 타입 Stream<String>

/Solution.java:16: error: cannot find symbol
myStringList = myStringList.stream().filter(s -> s.matches("[^aeiou]$")).toList();
^
symbol: method toList()
location: interface Stream<String>
1 error
* JDK 버전의 문제!

시작 시간이 지원하기 시작한 JDK 버전을 의미!

스트림을 활용해본 풀이 : 스트림 경험치 + 1

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public String solution(String my_string) {

        List<String> myStringList = new ArrayList<>();

        int array = my_string.length();

        for (int i = 0; i < array; i++) {
            myStringList.add(i, String.valueOf(my_string.charAt(i)));
        }

        myStringList = myStringList.stream().filter(s -> s.matches("[^aeiou]$")).collect(Collectors.toList()); //.toList()와 차이??

        return String.join("", myStringList);
    }
}

2. SQL 강의

강의 : JOIN, 엑셀보다 쉬운 SQL

cf) 조회 쿼리 작성할 때

1) show tables로 어떤 테이블이 있는지 살펴보기

2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기

3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기

4) 테이블을 찾았다! 조건을 걸 필드를 찾기 5) select * from 테이블명 where 조건 이렇게 쿼리 완성!

 

조건문 범위 : between

조건문 같지않음 : !=

조건문 포함 : in

 

how to use like in sql

like ->

  • where email like 'a%': email 필드값이 a로 시작하는 모든 데이터
  • where email like '%a' email 필드값이 a로 끝나는 모든 데이터
  • where email like '%co%' email 필드값에 co를 포함하는 모든 데이터
  • where email like 'a%o' email 필드값이 a로 시작하고 o로 끝나는 모든 데이터

3. 선발대 강의 - 스프링의 기본적인 예외처리 방법

  • e.getMessage() : 에러의 원인을 간단하게 출력
  • e.toString() : 에러의 Exception 내용과 원인을 출력
  • e.printStackTrace() : 에러의 발생근원지를 찾아서 단계별로 에러를 출력

Checked Exception vs Unchecked Exception의 가장 명확한 구분 기준은 '꼭 처리를 해야 하는지'

-> Checked Exception이 발생할 우려가 있는 메소드라면 반드시 로직을 try/catch로 감싸거나 throw로 던져서 처리해야한다.

 

예외처리 방법

1. 예외복구 : 예외가 발생해도 대기 후 재시도, 최대 재시도 횟수를 넘겼을때 예외가 발생되는 방법

2. 예외처리 회피 : 처리를 하지 않고 호출한 쪽으로 던져버리는 방법

3. 예외전환 : 예외를 잡아서 보다 구체적인 다른 예외를 던지는 방법

 

스프링의 예외처리

별도의 설정이 없다면, BasicErrorController로 에러처리 요청을 전달한다.

(cf : 스프링 부트의 WebMvcAutoConfiguration을 통해 자동 설정되는 WAS 설정이다)

 

일반적인 에러처리 요청의 흐름 : WAS(톰캣) - 필터 - 서블릿(디스패처 서블릿) - 인터셉터 - 컨트롤러

예외 발생 시, 별도의 예외처리를 하지 않으면 WAS까지 예외가 전달된다. WAS는 어플리케이션에서 처리할 수 없는 예외라고 판단하고 스프링 부트가 등록한 에러 설정에 맞게 요청을 전달한다,

~ 에러 컨트롤러를 한 번 더 호출하게 된다 ~ 필터나 인터셉터 또한 다시 호출될 수 있다. 이를 제어하기 위해선 별도의 설정이 필요하다. -> 필터 : 스프링 시큐리티, 인터셉터(리졸버) : @AuthenticaionPrincipal

 

서블릿 : https://coding-factory.tistory.com/742

 

[Web] 서블릿(Servlet)이란 무엇인가? 서블릿 총정리

서블릿(Servlet)이란? 서블릿이란 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술입니다. 웹을 만들때는 다양한 요청(Request)과 응답(Response)이 있기 마련이고 이 요

coding-factory.tistory.com

에러의 dispatchType은 Error, 필터는 서블릿 기술이므로 필터 등록 시 호출될 dispatcherType을 설정할 수 있고, 별도 설정이 없다면 Request(일반적인 요청)만 필터 호출. 인터셉터는 스프링 기술이어서 dispatcherType을 설정할 수 없어 URI 패턴으로 처리해야 한다.

+(스프링 부트) WAS를 직접 제어하며 WAS 에러설정도 가능하게 되었다. 1번의 요청이 2번 전달되는 방식으로 설정됨 ~ 클라이언트는 이 과정을 알 수 없다.

 

BasicErrorController의 동작 및 에러 속성

accept 헤더(https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Accept)에 따라 에러 페이지, 에러 메세지를 반환. 기본 경로는 /error로, properties에서 server.error.path로 변경할 수 있다.

 

 

 

 

728x90