while(1) work();
반응형
QUOTA_BYTES_PER_ITEM quota exceeded 해결법
버그와 삽질 2023. 1. 27. 17:45

크롬 익스텐션 개발 중, 8196Byte가 넘는 문자열을 chrome storage에 넣는 도중 아래와 같은 오류를 만났다. QUOTA_BYTES_PER_ITEM quota exceeded chrome.storage.sync.set 메서드를 통해 데이터를 저장할 때, chrome.storage.sync.QUOTA_BYTES_PER_ITEM 값보다 큰 데이터는 저장할 수 없다. 따라서 해당 크기만큼 쪼개서 저장해야 한다. 문자열 하나를 4Byte라고 가정하고(UTF-16) 2048자 만큼씩 쪼개서 storage에 저장하는 코드를 작성했다. 더 효율적으로 하려면 Blob 등을 이용해 정확히 8196Byte 단위로 쪼개서 저장해야 하지만, 그 정도의 효율성이 필요하지 않고 대부분 문자가 이모지(4Byte) 였..

article thumbnail
CSS로 외곽 테두리 효과
버그와 삽질 2023. 1. 23. 21:55

가장 쉬운 방법 -webkit-text-stroke:3px black; text-stroke 속성을 이용해 테두리를 입힌다. 그러나, 외곽 테두리가 아니라 글자를 먹고 들어가는 inner 테두리가 만들어진다. text-shadow를 이용한 외곽 테두리 text-shadow:-3px -3px 0 #000,0 -3px 0 #000,3px -3px 0 #000,3px 0 0 #000,3px 3px 0 #000,0 3px 0 #000,-3px 3px 0 #000,-3px 0 0 #000; text-shadow를 쓰는 편법(?)을 이용해 외곽 테두리를 만들 수 있다. 상, 하, 좌, 우, 좌상, 우상, 좌하, 우하 위치에 shadow를 추가하면 된다. 영문의 경우 이정도로도 충분히 깔끔한 테두리가 만들어지지만, ..

article thumbnail
10. 마무리

Spring MVC Request Lifecycle (이미지 출처 : http://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html#id2) 지금까지 살펴본 Spring Web MVC의 LifeCycle을 한 눈에 볼 수 있는 그림이다. 그림에는 나타나있지 않지만, DispatcherServlet으로 요청이 들어오면 아래 작업들이 수행된다. LocaleResolver : 헤더 등에서 사용자의 장소를 알아냄 ThemeResolver : 테마 관련해서 사용 (6.0 부터 Deprecated 됨) MultipartResolver : 파일 업로드 등을 처리 마무리 이렇게 전반적인 Spring Web MVC의 도입 ..

9. 어노테이션 기반 컨트롤러

개요 이제, Spring Web MVC의 구조를 파악했으니, Controller(handler) 구현에 집중한다. 대부분의 프로젝트에서, HandlerMapping과 HandlerAdapter 중에 사용이 쉽고 자유도가 높은 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter를 사용한다. 이제부터는 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter에 대해 보다 자세히 알아본다. @Controller, @RequestMapping 앞서 살펴보았듯, 클래스에 @Controller 어노테이션을 붙이면 RequestMappingHandlerMapping이 해당 클래스 중 @RequestMapping 어노..

8. 예외 처리

개요 비즈니스 로직을 작성하다 보면 예외를 발생시켜야 할 경우가 생긴다. Handler나 Interceptor와 같이 DispatcherServlet 내에서 발생한 예외는 Spring Web MVC를 통해 처리할 수 있다. (물론 Handler나 Interceptor 내에서 catch 절을 통해 처리할 수도 있다. 처리하지 못하고 throw 된 예외를 의미한다.) HandlerExceptionResolver DispatcherServlet은 초기화 시점에 HandlerExceptionResolver 인터페이스를 구현한 빈을 찾아 handlerExceptionResolvers에 추가해둔다. //org.springframework.web.servlet.DispatcherServlet public class ..

article thumbnail
7. Filter와 Handler Interceptor

개요 사실 지금까지 만든 방명록 서비스에는 문제가 있다. 요청 본문으로 한글이 넘어오는 경우 아래와 같이 문자가 깨져서 저장된다. 톰캣의 문자셋 기본값은 ISO 8859-1이기 때문에 이러한 문제가 발생한다. 해결 방법 톰캣의 설정 변경으로 기본 문자셋을 UTF-8로 바꾸면 해결된다. 그러나, 일반적으로 UTF-8을 사용하지 아니할 이유가 없기 때문에, 애플리케이션단에서 UTF-8로 고정시키는 방법을 많이 사용한다. HttpServletRequest의 setCharacterEncoding메서드를 사용해 다음과 같은 코드를 “모든 메서드(혹은 서블릿)”에 넣어주면 문제는 해결된다. request.setCharacterEncoding("UTF-8"); 하지만 모든 메서드에 공통적인 코드를 넣는 것은 너무나도..

article thumbnail
6. DispatcherServlet 사용 및 MVC 패턴 구현

개요 이제 Spring Web MVC 공식 문서를 보기 위한 사전 지식을 다 갖추었다. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html DispatcherServlet을 사용하는 두 가지 방법 DispatcherServlet을 WAS가 servlet으로 인식할 수 있도록 하는 방법은 두가지가 있다. 지난 글에서는 web.xml에 DispatcherServlet을 등록하고, DispatcherServlet의 init-param으로 bean 설정이 담긴 xml파일 경로를 넘겨 application context를 내부적으로 생성하는 방법을 설명했다. 하지만, @Servlet 어노테이션을 도입하며 기껏 없애놓은 web.x..

article thumbnail
5. MVC 패턴과 Spring Web MVC

MVC 패턴 개요 Servlet에서 요청을 받고 주 로직 처리는 JSP 에서 처리하다 보니 JSP의 코드가 굉장히 난잡해졌다. 뷰에 포함되어있던 비즈니스 로직을 컨트롤러 단으로 옮긴 뒤, 뷰에서는 화면 출력 처리만 담당하도록 개선할 수 있다. (비즈니스 로직을 컨트롤러에 두지 않고, 서비스 레이어로 한번 더 분리하기도 한다.) 뷰와 컨트롤러 사이에 데이터를 주고받을 수 있도록 데이터 전송 객체(DTO; Getter Setter만 있는 단순 객체)를 사용하는데, 이를 Model이라고 한다. Model, View, Controller가 분리된 이러한 패턴을 MVC 패턴이라고 한다. Spring Web에서의 MVC패턴 Spring에서는 모든 요청을 공통 컨트롤러(Dispatcher Servlet)가 받고, U..

반응형

검색 태그