ALL Post 204

Spring 게시판 구현 - Presentation Layer II

Presentation Layer II 화면 CRUD 레이아웃은 BootStrap4의 Sb Admin을 이용했다. 링크 폴더 구조는 이렇다. /board/list /board/write /board/post post페이지에서 수정 따로 수정 페이지를 만들지 않고 자바스크립트를 이용하여 조회 페이지에서 바로 수정할 수 있도록 했다. /board/remove 모달 창을 쓸까, 말까 고민했지만 쓰지 않기로 했다. 네이버나, 페이스북 같은 웹에서 게시물을 삭제했을 때, 따로 삭제했다는 메세지 같은 것을 받은 기억이 없다. 따라서 굳이 필요한가... 있어도 되고 없어도 되는 기능이고, 없다고 사용자 입장에서 불편한 기능이 아니라고 판단해서 사용하지 않았다. 코드가 궁금하다면 참고 페이징 게시글을 조회했다가, 다시..

Spring legacy 2020.09.12

Spring 게시판 구현 - Presentation Layer

Presentation Layer 컨트롤러와 화면처리를 담당할 jsp가 프레젠테이션 계층이다. 컨트롤러를 완성하고 화면처리를 할 것이다. URL분기는 참고 달라진 점은 수정 페이지를 따로 만들지 않고 자바스크립트를 이용해서 처리할 것이므로 따로 분기하지 않았다. 컨트롤러 @Controller @RequiredArgsConstructor @RequestMapping("/board") @Log4j public class BoardController { private final BoardService boardService; @GetMapping("/list") public void getAllPost(Model model) { log.info("/board/list"); model.addAttribute("..

Spring legacy 2020.09.12

Spring 게시판 구현 - Business Layer

Business Layer 비지니스 계층은 'Service'라는 이름을 주로 사용한다. BoardService라는 인터페이스를 만들고 BoardServiceImpl클래스가 구현하는 형태로 만들 것이다. 굳이 인터페이스를 중간에 두는 이유는 다음에 구현할 프레젠테이션 계층과 강결합을 피하기 위해서다. service패키지 생성 public interface BoardService { Long register(BoardVO boardVO); List getAllPost(); BoardVO getPost(Long bno); int modify(BoardVO boardVO); int remove(Long bno); } @Service @RequiredArgsConstructor @Log4j publ..

Spring legacy 2020.09.12

Spring게시판 구현 - Data/Persistence Layer

영속 계층 구현 순서 VO 생성 @Data @Builder public class BoardVO { private Long bno; private String title; private String content; private String writer; private Date regdate; private Date moddate; } MyBatis Mapper인터페이스 & Mapper.xml public interface BoardMapper { int insert(BoardVO boardVO); List getAllPost(); BoardVO getPost(Long bno); int update(BoardVO boardVO); int delete(Long bno); Long lastInsertId()..

Spring legacy 2020.09.12

Spring 게시판 구현 준비

요구사항 사용자는 게시물을 등록할 수 있다. 사용자는 게시물을 조회할 수 있다. 사용자는 게시물을 수정할 수 있다. 사용자는 게시물을 삭제할 수 있다. 레이아웃 무료로 제공하는 부트스트랩을 이용할 것이다. 링크 URL 설계 URL 전송 방식 비고 /board/list GET 전체 게시물 목록 /board/write GET 게시물 등록 양식 /board/write POST 게시물 등록 처리 /board/post GET 게시물 조회 /board/modify GET 게시물 수정 양식 /board/modify POST 게시물 수정 처리 /board/remove POST 게시물 삭제 데이터베이스(MySQL) CREATE TABLE `tbl_board` ( `bno` int NOT NULL AUTO_INCREMEN..

Spring legacy 2020.09.12

Model, RedirectAttribute

Model Servlet은 request.setAttribute()로 데이터를 전달한다면, 스프링은 Model객체로 데이터를 전달한다. Controller @GetMapping("/testModel") public void model(SampleDTO sampleDTO,Model model) { SampleDTO dto = new SampleDTO(); dto.setName("cocokim"); dto.setAge(123); //dto객체를 Model객체에 바인딩 model.addAttribute("dto", dto); } view Model Test Model로 전달 받은 데이터 : ${dto } name : ${dto.name } age : ${dto.age } @ModelAttribute @Mode..

Spring legacy 2020.09.12

Spring MVC

스프링 MVC 이미지 출처 스프링의 목적은 웹이 아니다. 위에 보이는 것처럼 스프링 웹은 스프링의 기능 중 하나일 뿐이다. 스프링 MVC 프로젝트를 생성하면, 자바 영역(POJO)과 웹 영역을 연동해서 프로젝트를 구동하게 된다. 웹 영역이 MVC설정을 포함하고 있다. 스프링 MVC의 사상 스프링 MVC 이전까지는 Servlet/JSP API를 이용했다. HttpServletRequest/Response 같은 클래스를 이용해서 브라우저와 서버 간 데이터를 주고 받았다. 이런 부분을 내부적으로 처리하고, 개발자는 자바 코드로 개발에만 몰두할 수 있도록 하자는 생각에서 탄생한 것이 스프링 MVC다. 스프링 MVC 구조 이미지 출처 모든 요청은 DispatcherServlet(web.xml)으로 들어온다. Ha..

Spring legacy 2020.09.12

파라미터 수집Binding

자동 수집 DTO @Data public class SampleDTO { private String name; private int age; } 컨트롤러 @GetMapping("/autoCollect") public void parameterAutoCollect(SampleDTO dto) { SampleDTO parameters = dto; log.info(parameters); log.info(parameters.getAge() == 1); } 이렇게만 해두고 브라우저에 http://localhost:8080/sample/autoCollect?name=cocolee&age=20를 요청한다. INFO : com.coco.controller.SampleController - SampleDTO(name=co..

Spring legacy 2020.09.12

콘솔에서 쿼리 확인하는 log4jdbc-log4j2 라이브러리

log4jdbc-log4j2 해당 라이브러리를 이용하면 콘솔에서 SQL문과 결과를 가지런하게 확인할 수 있다. 우선 메이븐 설정을 추가한다. 링크 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 RootConfig.java @Bean public DataSource dataSource() { HikariConfig config = new HikariConfig(); // config.setDriverClassName("com.mysql.cj.jdbc.Driver"); // config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/springex?serverTimezone=Asia/Seoul"); config.setDriverCla..

Spring legacy 2020.09.12

MyBatis

💣 마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다 출처 퍼시스턴트? 객체가 생성되면 메모리에 올라간다. 객체를 이용해서 다루는 데이터들은 객체가 사라지면 함께 사라진다. 이렇게 일회용으로 버려지는 데이터들을 유지하려면, 객체가 사라지기 전에 어딘가에 저장해두어야 한다. 그러면 나중에 객체가 다시 생성되었을 때 이전에 사용했던 데이터를 재사용할 수 있다. 다시 말해, 객체가 사라지기..

Spring legacy 2020.09.12