개발 공부/고수의 발자취를 따라서13 고수의 발자취를 따라서 - 계층형 게시판 후기, 피드백 고수의 발자취를 따라서 - 계층형 게시판 후기, 피드백 2달 가량의 계층형 게시판이 마무리 되었습니다. 전체 코드는 Git Hub에 있습니다. 계층형 게시판 github 게시판 페이지 게시판 상세 페이지 게시판 삭제 후 페이지 허접하지만… 여차저차 마무리가 되었습니다. 그 전에 틈틈히 정리한 포스트는 게시판 조회에서 마무리했습니다. 점점 새로운 기술보다는 코드를 복붙하는 느낌이 강해졌기 때문입니다. 후기 정말 간단하게 구현해서 후기랑 피드백을 쓰기도 민망하지만 작은 일에도 스스로에게 피드백을 주고 개선하는게 중요하다 생각합니다. 사실 처음 시작했을때 마무리가 될지… 걱정이 앞섰는데 여자처차 마무리가 되어서 후련한 기분이 듭니다. 이것저것 기능을 더 붙일수도 있겠지만 초반에 완성 시키고자 한 기능에 대한 .. 2020. 4. 6. 고수의 발자취를 따라서 - 계층형 게시판(10) - 마무리 게시판 기능 구현 (4) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 게시판 기능 구현 - 게시글 조회 이제 본격적으로 게시판의 기능을 구현해보도록 하겠습니다. 먼저 게시글을 조회하는 기능을 만들겠습니다. 현재 계층형 게시판을 만들고 있기 때문에 저번 포스트 에서 만들어 놓은 쿼리를 수정하여 적용하겠습니다. WITH RECURSIVE CTS AS ( SELECT id ,title ,content ,depth ,parent_id ,author_id ,created_date ,modified_date ,CAST(id as CHAR(255)) lvl ,id as groupno FROM boards .. 2020. 4. 5. 고수의 발자취를 따라서 - 계층형 게시판(9) 게시판 기능 구현 (3) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 게시판 기능 구현 - 연관 관계 매핑 이제 본격적으로 게시판의 기능을 구현해보도록 하겠습니다. 기본적인 CRUD기능을 구현하기 전에 Entitiy의 연관 관계를 설정하겠습니다. CRUD란 Create Read Update Delete 의 앞 글자들을 따서 CRUD라고 부릅니다. domain 패키지 아래 위의 사진처럼 boards, images 패키지를 생성합니다. board 패키지 안에 Boards 클래스를 생성합니다. Boards (import 부분은 생략했습니다) 전체 코드는 Git Hub 에 있습니다. package c.. 2020. 4. 1. 고수의 발자취를 따라서 - 계층형 게시판(8) 게시판 기능 구현 (2) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 게시판 Front Page 작성 기능을 구현하기 전에 화면을 먼저 만들겠습니다. 게시글을 보는 페이지를 만들겠습니다. boardDetail.html 을 추가하겠습니다. boardDetail.html 타이틀 작성자 님이 작성일 작성한 글입니다. 게시글 본문 원글보기 답글달기 삭제 이제 페이지를 만들었으니 Controller를 수정하겠습니다. WebController.java package com.board.webserivce.web; import java.security.Principal; import java.util.Opt.. 2020. 3. 14. 고수의 발자취를 따라서 - 계층형 게시판(7) 게시판 기능 구현 (1) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 계층형 게시판 계층형 게시판이 생소할 수도 있겠지만 의외로 주변에서 흔히 볼수있는 형식입니다. 대표적으로 답글을 다는 기능이 계층형이라고 생각하시면 됩니다. 이렇게 답글을 다는 형식을 많이 보셨을 겁니다. 오라클DB를 사용하면 CONNECT BY 와 START WITH 문법을 사용하면 비교적 간단하게 구현할 수 있습니다. 하지만 MYSQL에는 그런 기능이 없습니다. 대신 구현하는 방법이 몇가지 있었습니다. 1. 함수를 정의하는 방법 함수를 정의하는 방법은 구현이 복잡하다는 단점이 있습니다. 2. 테이블 구조를 이용하는 방법 .. 2020. 3. 13. 고수의 발자취를 따라서 - 계층형 게시판(6) 로그인 기능 구현 (2) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 Spring Security(스프링 시큐리티) 회원가입, 로그인 / 로그아웃에 대한 간단한 구현이 끝났습니다. 여기서는 회원 탈퇴, 유저 정보 변경을 진행하도록 하겠습니다. 유저 정보 변경은 JPA의 Dirty checking을 이용해 구현하겠습니다. Dirty checking 더티 체킹(Dirty checking) 이란 상태 변경 검사입니다. JPA에서는 트랜잭션이 끝나는 시점에 최초 조회 상태와 비교해 변화가 있는 모든 엔티티 객체를 DB에 자동으로 반영해줍니다. JPA에서는 엔티티를 조회했을 때 조회 상태 그대로를 스냅.. 2020. 3. 10. 고수의 발자취를 따라서 - 계층형 게시판(5) 로그인 기능 구현 (1) 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 Spring Security(스프링 시큐리티) 아무래도 로그인 / 로그아웃의 기능에 대해서 생각해야 할 것들이 많습니다. 대표적으로 접근 주체(Principal) : 보호된 대상에 접근하는 유저 인증 (Authenticate) : 현재 유저가 누구인지 확인 (로그인) 인가 (Authorize) : 현재 유저가 어떤 서비스에 접근할 수 있는지에 대한 권한 검사 권한 : 애플리케이션의 동작을 수행할 수 있도록 허락되어있는지를 결정 간단한 예로 사용자 라는 권한 을 가진 유저는 관리자 권한을 가진 사람이 접근할 수 있는 서비스에는.. 2020. 3. 9. 고수의 발자취를 따라서 - 계층형 게시판(4) 로그인 페이지 기억보단 기록을 블로그를 참고하여 만들었습니다. 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 Thymeleaf 연결 DB 연결을 완료하였으니 이제 로그인 페이지를 만들겠습니다. 원래는 JSP를 사용하려고 했지만 스프링부트에서는 여러가지 제약조건이 있고, 권장하지는 않았습니다. 찾아보니 JSP, Freemarker, Velocity는 몇 년간 업데이트가 되지않고 있다고도 합니다. 스프링부트에서는 Thymeleaf(타임리프)라는 템플릿 엔진을 권장합니다. Handlebar라는 템플릿과 Thymeleaf 둘 중에 고민을 하던 중 스프링에서 밀어주고 있기 때문에 view 설정을 따로하지.. 2020. 2. 26. 고수의 발자취를 따라서 - 계층형 게시판(3) DB연결 기억보단 기록을 블로그를 참고하여 만들었습니다. 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 이제 2번째 단계인 프로젝트에 DB를 연결하겠습니다. DB연결을 하기전에 JPA 코드를 먼저 작성해보겠습니다. JPA에 대한 연습을 하기위해 블로그를 참조하며 작성하였습니다. webservice > domain > users 패키지를 생성하고, Users 클래스 UsersRepository 인터페이스 를 작성합니다. Users Class @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Users { .. 2020. 2. 23. 고수의 발자취를 따라서 - 계층형 게시판(2) git hub에 저장하기 게시판을 만들고 있는 프로젝트를 Git Hub에 올리면서 스크린샷을 못찍어 간단히 폴더를 만들고 과정을 찍었습니다. 1. Git Init git에 대한 게시글은 다음에 기회가 되면 차근차근 정리하겠습니다. 여기서는 Git이 설치되어있다는 가정하에 진행합니다. 프로젝트 폴더를 마우스 우클릭으로 클릭하여 Git Bash Here 를 선택해 Git Bash를 폴더의 경로에서 실행합니다. Git Bash 화면입니다. git init 을 입력하고 엔터를 누릅니다. 2. Git Desktop 실행 저는 Git Desktop 을 주로 사용합니다. 여기서도 역시 Git Desktop 을 사용하겠습니다. Git Desktop 을 실행하고 file -> Add local Repository 를 클.. 2020. 2. 19. 고수의 발자취를 따라서 - 계층형 게시판(1) 계획 세우기 막연하게 프로젝트를 진행하기보다는 나름의 계획을 세우고 차근차근 진행하는게 좀 더 수월할 것 같습니다. 저같은 경우는 큰 틀을 미리 정해두고 시작하는 편입니다. 큰 틀을 생각해보자면 1. 프로젝트 생성 2. DB 연결 3. 로그인 Front Page 작성 4. 로그인 기능 구현 5. 게시판 Front Page 작성 6. 게시판 기능 구현 이정도가 될 것 같습니다. 세세한 내용은 진행하면서 추가하도록 하겠습니다. 프로젝트 생성 가장 먼저 프로젝트를 생성해보겠습니다. 기억보단 기록을 블로그를 참고하여 만들었습니다. sts 첫 화면입니다. workspace는 편하신 폴더를 선택하시면 될 것 같습니다. 빨간 테두리에 있는 Create new Spring Starter Project 를 클릭합니다. .. 2020. 2. 19. STS 설치하기 STS 설치 원래 Java와 IDE에 대한 설치는 넘어가려고 했지만 오랜만에 STS를 설치하려고 하니 예전과 좀 달라져서 STS 설치를 정리해보려고 합니다. 먼저 STS 설치를 위해 아래의 홈페이지로 이동합니다. https://spring.io/tools 자신에게 맞는 OS용 버전을 클릭하여 설치합니다. 압축풀기 처음 당황한 부분이 바로 이 부분인데… 갑자기 jar파일로 다운받아 지길래 당황했습니다..ㅎ 다운받아진 jar파일의 압축을 풀어주면 위의 사진과 같이 나오는데 빨간 테두리의 zip파일을 한번 더 압축해제합니다. 실행 압축을 해제하시면 sts-4.5.1.RELEASE 라는 파일이 생겼을 겁니다. (현재 시점 기준이기때문에 파일명은 바뀔 수 있습니다.) 사진에 보이는 SpringToolsSuite파.. 2020. 2. 19. 이전 1 2 다음