자바스크립트에서 스코프(Scope)란스코프는 컨텍스트는 값 과 "표현식"이 "표현"되거나 참조 될 수 있는 현재 실행되는 컨텍스트를 의미합니다. 간단하게 말하면 유효범위가 스코프이다.var x = 10;function foo(){ var x = 1; bar();}function bar(){ console.log(x);}foo();bar();처음 위 예제를 봣을때 foo함수 안에 bar함수가 잇으니까 직접 대입을 해보면function foo(){ var x = 1; console.log(x);}이렇게 되겠지? 라고 생각을 했다.하지만 결과는 전역변수로 지정한 x의 값만 두번 출력되었다.함수의 상위 스코프는 언제 결정하는지 생각해보면 2가지로 생각해볼 수 있다.함수를 어디서 호출..
전체 글
참개발자바스크립트에서 호이스팅이란 JavaScript 호이스팅 은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상을 뜻합니다. 기본적으로 변수를 저장하는 var, let, const는 호이스팅이 기본적으로 undefined이며 함수는 간단하게 설명하자면 객체 그대로 호이스팅이 됩니다.함수를 정의하는 대표적인 두가지 방법을 보시면function add01(x, y){ return x + y;}var add02 = function(x, y){ return x + y;} 위의 함수는 함수 선언문이며, 아래 함수는 함수 표현식이라고 볼 수 있습니다. 두가지 함수의 차이점이라고 한다면 호이스팅에 따른 생성 시점의..
웹 개발에서 오류는 사용자 요청에 의한 페이지오류가 있고, API로 요청을 왔을때 발생하는 API오류가 있습니다.사용자 요청에 의한 오류페이지 제공은 스프링에서 제공되는 BasicErrorController를 사용하면 따로 로직을 개발하지 않고도 에러페이지를 만들수 있는데 API요청에 의한 오류는 많은 경우에서 발생이 가능하기 때문에 세밀한 관리가 필요합니다.@Slf4j@RestControllerpublic class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { ..
ValidationBindingResult를 ModelAttribute뒤에 두어 요청에서 받아온 값에 오류가 있을경우 처리Filed인 경우 - rejectValuevoid rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);예시bindingResult.rejectValue("itemName","required");bindingResult.rejectValue("price","range",new Object[]{1000,1000000},null); Object인경우 - rejectvoid reject(String errorCode, @N..
웹 사이트에서 예외는 언제나 발생할 수 있기때문에 에러에 대한 페이지 또한 관리가 필요합니다. 기본적으로 생각할 수 있는 404, 500등이 생각이 납니다. 기존 예외 페이지를 관리하는 방법은 web.xml에 에러코드에 대한 페이지를 등록하는 방법이 있는데 스프링 부트에서 제공되는 기능으로 처리해보겠습니다.@Componentpublic class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUN..
Interceptor는 Filter와 마찬가지로 웹 요청이 컨트롤러에 도착하기전에 먼저 작동할 수있는 기능을 제공합니다. Filter, Interceptor 실행 순서HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 Filter와 Interceptor의 차이점Filter는 서블릿에서 제공하는 기술이고,Interceptor는 스프링MVC가 제공하는 기술입니다.둘다 공통적인 처리를 가능하게 하지만 적용되는 순서와 범위, 사용방법이 다릅니다. Interceptor메서드preHandle` : 컨트롤러 호출 전에 호출된다. (더 정확히는 핸들러 어댑터 호출 전에 호출된다.)preHandle의 응답값이 `true` 이면 다음으로 진행하고, `false` 이면 더는 진행하지 않는다..
필터는 사용자의 요청이 컨틀로러의 들어오기전에 수문장 역할을 하여 구분을 할 수있게 해주는 역할을 합니다.로그인이 되지 않은 사용자에게 회원정보화면을 들어가면 안되는 것처럼 회원정보 요청이 들어올때 로그인 여부를 필터에서 판별하여 로그인이 되어있지 않다면 로그인 페이지로 이동을 할 수있게 해줄수 있다. 필터 흐름HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러위와같은 흐름 사이에 필터를 넣어주게 되면 필터는 체인처럼 여러 필터를 거칠수도 있다.필터에 사용되는 메서드@Slf4jpublic class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletExc..
웹 사이트에서 가장 흔한 기술이 로그인, 로그아웃일 것입니다. 한번 로그인을 하면 로그아웃을 하거나 시간이 지나지 않는 이상 사이트를 이용하는 동안 계속해서 사이트는 저의 존재를 구분하여 사용이 가능하게 해줍니다. 이때 사용되는 기술이 쿠키와 세션입니다.흔히 간단하게 알고있는 지식으로는 쿠키는 클라이언트에 보관이 되고 세션은 서버에서 저장이 된다고 알고 있습니다.쿠키만 사용하면 안될까?기본적으로 정보를 저장하는데 있어서 클라이언트에만 의존하게 된다면 보안에 취약하다고 생각하게 됩니다.F12키를 눌러서 네트워크에 보시면 현재 사용중인 쿠키의 정보가 그대로 노출이 됩니다. 정보가 그렇게 쉽게 노출이 되면 안되겟죠.. 세션만 사용하면 안될까?기본적으로 클라이언트에서 서버에 요청을 보낼때 매번 요청이 생성이 되..