본문 바로가기

분류 전체보기39

[스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기] #3 VO, Mapper, Service 작성 (3/n) 스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기 #3 VO, Mapper Service 작성 (3/n) 아래 사진은 지난번에 작성한 프로젝트 구조입니다. 이번에는 VO와 Mapper, 그리고 Service를 작성하겠습니다. VO(Entity) 작성 먼저 게시판에 필요한 객체를 생성합니다. 저는 게시글에 게시글 고유번호, 작성자, 제목, 내용, 작성일 이렇게 5가지를 넣으면 되지 않을까 생각했습니다. 그러면 이를 바탕으로 객체를 작성하겠습니다. bean 패키지 내에 FileBoardVO.java 파일을 생성하고 다음 코드를 작성합니다. Lombok을 이용해 @Data를 입력해서 setter()/getter(), toString() 등 귀찮은 작업을 자동으로 생성해주도록 합니다. @NoArgsC.. 2020. 3. 25.
[스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기] #2 프로젝트 생성 및 기타 설정 (2/n) 스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기#2 프로젝트 생성 및 기타 설정 프로젝트 생성 바탕화면에 저는 폴더를 하나 생성하고 그 폴더를 workspace로 지정했습니다. 프로젝트를 생성해야 하니 왼쪽 Package Explorer에서 Create new Spring Starter Project를 클릭합니다. 다음으로 Dependencies를 설정합니다. Spring Web은 스프링 기본 웹 프로젝트에 필요한 라이브러리를 제공합니다. Spring Boot DevTools는 코드를 수정하고 저장시 자동으로 서버를 재실행시켜 수동으로 서버를 실행하는 수고를 덜어줍니다. Lombok은 @data 어노테이션 하나로 setter/getter, toString 등 클래스필드에 필요한 것들을 자동으.. 2020. 3. 25.
[스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기] #1 구상 및 시작에 앞서 (1/n) 스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기 #1 구상 및 시작에 앞서 시작하며 국비시절 2번째 프로젝트, 게시판 만들기. JSP에 익숙해질 즈음, 갑자기 Thymeleaf 열풍이 불어 Thymeleaf로 1주일동안 작업을 해야했떤 아찔한 기억이 있다. 게다가 Pagination 처리 및 파일 업로드&다운로드까지 해야 해서(이것은 내 욕심이었음) 더욱 더 애를 먹었다. 글을 올리기로 생각하고 코드를 리뷰하면서 그동안 잊고 있던 기억을 끄집어내느라 엄청 힘들었다. 특히 Pagination, 그리고 Database를 Oracle에서 MySQL로 바꾸는 부분이 상당히 힘들었다. 그리고 당시에 해결 못했던 부분과 최적화를 조금 하면서 조금 뿌듯함을 느꼈다. (이젠 다시 타임리프 볼 일 없겠지? .. 2020. 3. 25.
React Fragments React Fragments 리액트 v16.2부터 'Fragments' 기능을 지원합니다. 렌더링을 할 때 단일 요소만 다룰 수 있음로 불필요한 DOM을 삽입하는 경우가 많았습니다. 그러나 Fragments를 사용하면 여러 개의 요소를 직접 화면에 표시할 수 있습니다. React.Fragment로 감싼 부분은 DOM은 출력하지 않고 자식 요소만 렌더링합니다. 그럼 코드를 볼까요. 먼저 Fragment를 적용하지 않은 것을 작성하고, Fragment를 적용한 것을 작성하여 비교해보도록 하겠습니다. Fragment 적용하지 않은 컴포넌트 import React from 'react'; const Hello = () => { return ( Hello World ! );}; export default Hell.. 2020. 2. 24.
소스 코드 빌드 (Source Code Build) 소스 코드 빌드 빌드란 프로그램 소스 코드에 배포할 파일을 생성하거나 관련 문서를 생성하는 공정을 가리키는 단어 입니다. 패키지 소프트웨어나 게임 소프트웨어 등에서는 일반적인 공정입니다. 개발자가 직접 손을 대는 파일과 최종 사용자에게 사용하는 실제 파일은 다르므로 빌드 실행 후의 상태에서는 프로그램이 어떻게 동작하는지 알기 어려운 상태일 때가 대부분입니다. 최근 프론트앤드 개발에서는 당연한 듯 빌드 프로세스가 포함됩니다. 또한 빌드 환경이 자주 업데이트되기 때문에 "프론트앤드 개발의 흐름이 빠르다."로 여겨지기도 합니다. 그만큼 개발 환경이 성숙하지 않았음을 의미하며 발전시키고자 많은 개발자가 관여하는 세계라 할 수 있습니다. 아울러 항상 최신 정보를 확인하고 적용함으로써 개발 환경을 업데이트하며 개발.. 2020. 2. 22.
아토믹 디자인(Atomic Design) 아토믹 디자인(Atomic Design) 아토믹 디자인을 설명하기에 앞서... 구글(Google)이 '머터리얼 디자인(Material Design)'이라 불리는 디자인 가이드라인을 공개한 이후, 디자인을 언어화하여 그 법칙성을 시스템으로 운용하는 접근법이 웹 개발에 널리 퍼지게 되었습니다. 물론 이전에도 인터페이스를 패턴으로 다루는 방법과 관련한 많은 해설서가 있었습니다. 심지어 1970년대에도 넓은 의미의 디자인 영역 관련 서적은 있었습니다. 따라서 웹 사이트 제작에서도 '컴포넌트' 단위가 중요해졌으며, 이 때문에 리액트의 특징 중 하나인 '컴포넌트 기반(Component-Based)'에도 반영되었습니다. 이러한 흐름 가운데 웹 디자이너 브래드 프로스트(Brad Frost)는 '아토믹 디자인'을 주장했.. 2020. 2. 21.
[리액트(React) 학습자를 위한 기초지식] 컴포넌트 생명주기(Lifecycle of Components) - #3 Unmounting (3/3) 리액트(React) 학습자를 위한 기초지식컴포넌트 생명주기(Lifecycle of Components) - #3 Unmounting (출처: https://twitter.com/dan_abramov/status/981712092611989509) Unmounting 리액트 컴포넌트 생명주기의 마지막 단계인 Unmounting입니다. Unmounting은 컴포넌트를 DOM에서 제거할 때 발생합니다. 이 Unmounting 단계에서 호출되는 함수는 단 하나 입니다, componentWillUnmount() componentWillUnmount componentWillUnmount() 함수는 DOM에서 컴포넌트를 제거하려 할 때 호출됩니다. 컴포넌트를 제거할거면 그냥 컴포넌트 파일을 지우면 안되나 생각했지만,.. 2020. 2. 20.
[리액트(React) 학습자를 위한 기초지식] 컴포넌트 생명주기(Lifecycle of Components) - #2 Updating (2/3) 리액트(React) 학습자를 위한 기초지식컴포넌트 생명주기(Lifecycle of Components) - #2 Updating (2/3) (출처: https://twitter.com/dan_abramov/status/981712092611989509) Updating 리액트 컴포넌트 생명주기의 첫번째 단계인 Mounting 단계를 거치면 Updating 단계로 들어갑니다. Updating은 Mounting과정을 거쳐 DOM을 형성한 컴포넌트에 state값이나 props값을 변경할 때 발생합니다. 지난글인 [컴포넌트 생명주기 - #1 Mounting]에서 예시로 적어둔 것 처럼, componentDidMount() 함수를 이용해 state값을 변경했습니다. 이미 DOM을 형성한 컴포넌트에 state값을 .. 2020. 2. 19.
[리액트(React) 학습자를 위한 기초지식] 컴포넌트 생명주기(Lifecycle of Components) - #1 Mounting (1/3) 리액트(React) 학습자를 위한 기초지식컴포넌트 생명주기(Lifecycle of Components) - #1 Mounting (1/3) 리액트 컴포넌트에는 생명주기가 있습니다. 컴포넌트의 생명주기라 함은 컴포넌트가 처음으로 import되어 DOM을 형성하는 단계, 형성된 컴포넌트 내부를 수정하는 단계, 마지막으로 컴포넌트를 사용하지 않겠다고 선언하는 단계로 말 그대로 컴포넌트가 탄생하여 소멸되기까지 일련의 과정입니다. 이러한 생명주기 안에서는 특정 시점에서 자동으로 호출되는 생명주기와 관련된 함수들이 있습니다. 그리고 컴포넌트가 실행될 때, 이 함수들은 정해진 순서에 따라 실행이 됩니다. 이를 통해 리액트 컴포넌트를 보다 더 심층적으로 다룰 수 있습니다. 생명주기는 크게 3단계로 나누어집니다. Mou.. 2020. 2. 10.