프레임워크
토비의 스프링 4장 요약 정리 - 예외 처리
예외처리의 함정 예외처리는 코딩 초보 시절에는 왜 하는지도 모르고 그냥 넘어가기 쉽다. 그런데, 예외처리를 대충한다면, 막상 예외가 발생했을 때 디버그가 매우매우 어려워지는 상황이 발생할 수 있다. 가장 문제인 코드 try { ... } catch(Exception e) { // no code } catch 블록에 아무것도 적지 않는 개발자가 많다. 예외 발생 시 무엇이 문제인지도 모른채 코드는 정상적으로 실행되지 않는 상태가 될 수 있다. 소위 예외 블랙홀로 불리며 모든 예외를 잡아먹는다. 덜 문제인 코드 try { ... } catch(Exception e) { e.printStackTrace(); } 예외가 무엇인지 적어도 프린트라도 하는 코드이다. 올바른 예외처리 방법은? 크게 복구하는 방법과 단..
Next.js 의 빌트인 태그인 next/head 는 무엇일까?
개요 Next.js 에서는 next/head 라는 것을 빌트인으로 제공한다. HTML 마크업의 head 엘리먼트 내부에 들어갈 내용들을 설정 가능하다. 기존의 head 엘리먼트는 HTML 상단에 위치했어야 하는 것과 다르게 Next.js 에서 제공하는 Hello world! ) } export default IndexPage 주의점 1: 중복 태그 아무 위치나 아무 페이지나 입력 가능하며, 컴포넌트로 나뉘어지는 리액트 앱의 특성상 중복으로 엘리먼트를 넣을 확률도 꽤 있다. 그래서 key 프로퍼티를 이용하여 중복된 요소를 추가하지 않도록 주의해야 한다. 중복 예시 import Head from 'next/head' function IndexPage() { return ( Hello world..
토비의 스프링 3장 요약 정리 - 템플릿
템플릿이란? 코드 블럭이 갖는 특성에 따라 코드를 분리하는 것이다. 다음과 같은 특징을 갖는다고 가정한다. 변경을 통해 그 기능이 다양해지고 확장되는 성질을 가진 코드가 있다. 고정되어 있고 변하지 않으려는 성질을 가진 코드가 있다. 일정한 패턴으로 유지되는 특성을 가지는 부분을 독립시킨 것이 템플릿(틀)이다. 책에서는 UserDAO에서 비즈니스 로직을 담당하는 부분(변화)과 DB를 연결하는 부분(고정)을 나누었다. deleteAll() 개선하기 public void deleteAll() throws SQLException { Connection c = null; PreparedStatement ps = null; try { c = dataSource.getConnection(); ps = c.prepa..
Next.js 가 지원하는 Pre-rendering 이란 무엇일까?
Next.js Pre-rendering 개요 Pre-rendering 이란, Next.js 가 각 페이지에 대한 HTML 을 생성하는 것을 말한다. 기존의 문제: SPA 의 Client-side 렌더링 문제 원래 React 같은 SPA(Single Page Application) 는 보통 .html 파일 내부에 Root 로 사용될 태그 하나만 존재한다. html 파일에는 아무것도 존재하지 않고, 브라우저를 통해 URL 에 접근하면, 자바스크립트에 의해 Client-side 렌더링이 시작된다. 이렇게 Client-side 자바스크립트 렌더링 방식은 느린 인터넷 환경을 이용하는 사람에게는 잠시동안 Blank page 를 보여주기도 하며, 검색엔진 최적화가 어렵다는 단점이 있다. 문제 해결: Next.js 의..
Next JS 에서 스타일링을 적용하는 다양한 방법
Next JS 에서의 대표적인 스타일링 방법 3가지 알아보기 Next JS 는 취향에 맞게 다양한 스타일링 기법을 제공한다. 대표적인 스타일링 기법은 총 3가지가 있다. Module-Level CSS: [name].module.css 파일을 이용하는 방법이다. CSS-in-JS: 반환 컴포넌트에 style 속성을 정의하고 JS 오브젝트를 넣는 방식이다. Global CSS: 우리가 보통 아무런 프레임워크를 사용하지 않을 때 단순하게 CSS 파일을 삽입해 스타일링하는 방식과 같은 방식이다. 여담으로 나는 요즘 tailwind css 를 이용하여 스타일링을 많이 하고 있다. tailwind CSS 를 이용하면 보통 클래스 속성에 디자인 키워드를 추가하는 방식으로 스타일링을 하게 된다. Component-Le..
Next.js APP _app.js 의 모든 것
개요 Next.js 에는 기본으로 제공되는 App 컴포넌트가 존재한다. App 은 pages 에 있는 모든 페이지에 가기 전에 거쳐가야 하는 길이다. 이를테면 pages/index.js 에 접속한다면, index.js 에 접근 전에 pages/_app.js 에 먼저 들르게 된다. 이는 Next JS 의 프레임워크적 특성이다. 좋든, 싫든 들리게 된다. Next.js 는 App 컴포넌트를 페이지 초기화에 이용한다. App 컴포넌트를 오버라이드하여 페이지 초기화 과정을 커스터마이징할 수 있다. pages/_app.js 파일을 만들어 다음과 같은 부분을 커스터마이징 할 수 있다. _app.js 를 이용하여 커스터마이징 가능한 부분 페이지가 변경되어도 레이아웃을 유지할 수 있다. 페이지를 이동하는 동안에도 상태..
next.js 의 라우팅은 일반적인 페이지의 라우팅과 무엇이 다른가?
Next.js 라우팅 개요 Next.js 는 pages 개념 위에 파일 시스템을 기반으로 한 라우터를 가지고 있다. next.js 의 page 란 무엇일까? 글에서 알아봤듯, pages 디렉토리에 리액트 컴포넌트 파일을 추가하면, 우리가 따로 설정해주지 않아도 해당 URL 에 접근했을 때 자동 라우팅이 된다. pages 디렉토리 내부에 중첩 디렉토리를 만들고 파일을 배치하는 것만으로도 대부분의 라우팅 패턴을 정의할 수 있다. 인덱스 라우팅 index.js, index.ts 와 같은 파일은 언제나 메인 경로를 가리킨다. pages/index.js 와 같이 리액트 컴포넌트 파일을 추가하면, / 경로로 접근 가능하다. pages/blog/index.js 와 같이 리액트 컴포넌트 파일을 추가하면, /blog 경..
next.js 의 page 란 무엇일까?
개요 next.js 에서 page 란, pages 디렉토리 내부에 있는 .js, .jsx, .ts, .tsx 확장자를 가진 파일에서 export 된 리액트 컴포넌트 를 말한다. next.js 프로젝트 내부의 pages 디렉토리에 리액트 컴포넌트 파일(component.js)을 두면, next.js는 해당 파일을 읽어서 http://localhost:3000/component 경로에 접근했을 때, 해당 컴포넌트를 제공한다. 예시 pages/about.js 라는 리액트 컴포넌트를 생성하면 http://localhost:3000/about에 접속했을 때 about.js가 보이는 개념이다. const About = () =>( 안녕하세요. jake seo입니다. ); export default About; ne..
스프링 객체 검증 (Validation) 적용하기
환경 스프링 부트 2.x 의 환경을 기준으로 한다. 의존성 설치하기 스프링 부트 버전에 맞는 spring-boot-starter-validation 의존성을 설치한다. 링크 의존성의 설치는 빌드 도구에 따라 다르다. maven, gradle 등 각 도구에 맞게 설치해주자. dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } 객체에 애노테이션 추가하기 javax.validation.constraints 에 있는 애노테이션을 사용한다. public class MeetupCreationDto { @NotBlank(message = "모임의 이름을 입력해주세요.") private String name; ..
asciidoctor 를 통한 Spring REST Docs 자동 생성 세팅하기
Spring REST Docs 개요 RESTful 서비스의 문서 작성을 돕는다. Spring MVC Test 와 함께 자동 생성된 스니펫과 Asciidoctor 로 쓰여진 수기 문서를 조합한다. Swagger 와 같은 도구에 의해 만들어진 문서화의 한계로부터 해방시켜준다. 정확하고, 간결하고, 잘 구조화된 문서를 생성하는 것을 돕는다. 이 문서화 방법은 사용자가 가장 쉬운 방법으로 정보에 접근할 수 있도록 돕는다. Spring Boot Config 스프링 부트에서는 @AutoConfigureRestDocs 라는 애노테이션을 제공하여 테스트에 있는 Spring REST Docs 를 강화한다. build.gradle 세팅 방법 plugins 세팅하기 plugins { // Asciidoctor id 'org..
Spring REST Docs + asciidoctor 로 문서 자동 생성해보기
Spring REST Docs 개요 RESTful 서비스의 문서 작성을 돕는다. Spring MVC Test 와 함께 자동 생성된 스니펫과 Asciidoctor 로 쓰여진 수기 문서를 조합한다. Swagger 와 같은 도구에 의해 만들어진 문서화의 한계로부터 해방시켜준다. 정확하고, 간결하고, 잘 구조화된 문서를 생성하는 것을 돕는다. 이 문서화 방법은 사용자가 가장 쉬운 방법으로 정보에 접근할 수 있도록 돕는다. Spring Boot Config 스프링 부트에서는 @AutoConfigureRestDocs 라는 애노테이션을 제공하여 테스트에 있는 Spring REST Docs 를 강화한다. build.gradle 세팅 방법 plugins 세팅하기 plugins { // Asciidoctor id 'org..
AutoConfigureMockMvc 에서 한글이 제대로 인식되지 않을 때
원인 (추정) 스프링 프레임워크 최신 버전에서 APPLICATION_JSON_UTF8 상수가 Deprecated 된 것 때문이라고 추정한다. 해결 방법 아래와 같은 커스텀 애노테이션을 작성하면 된다. /** * @AutoConfigureMockMvc 에 UTF-8 인코딩 필터를 적용한다. * * Spring 에 존재하던 APPLICATION_JSON_UTF8 상수가 Deprecated 되어 * @AutoConfigureMockMvc 를 이용할 경우, 한글 인코딩 문제가 발생한다. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @AutoConfigureMockMvc @Import(AutoConfigureUtf8Moc..