프로젝트

2주 프로젝트 - 3일차

록's 2023. 4. 12. 15:56
728x90
반응형

글을 작성할 때 부족한 점이 많지만 기록을 하기위해 적었습니다. 수정해야할 부분이 있다면 추후 수정할 예정입니다

 

 


2주 프로젝트 - 3일차

전날 메인페이지를 하다가 끝이 났었다.

 

페이지 이동은 아직 구현을 못했다.

 

 

3일차는 어제 못하던거 마저 하고, 안되면 다음꺼로 넘어가서 연결 시키려고 한다.

 

지금은 페이징 구동을 아직 냅두고 그다음 어느정도 메인페이지가 완성되었다.

 

생각한 디자인과 다르지만 기본적으로 있는 것은 다있다고 생각한다.

 

 

 

 

일단 메인페이지를 이정도 냅두고 이제 글쓰기를 누르면 다음페이지가 생성하게 되면 글 쓸수 있는 페이지를 만들려고 한다.

 

Hbrg_BoardController Hbrg_BoardDto, Hbrg_BoardRepository, Hbrg_BoardService, 를 작성하였고

 

 

순서대로 작성하였다 (아직 코드가 뒤죽박죽이다..나중에 깔끔하게 수정할 예정)

package com.hbrg.controller;

import com.hbrg.dto.Hbrg_BoardDto;
import com.hbrg.entity.Hbrg_Board;
import com.hbrg.service.Hbrg_BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@RequestMapping(value="/Hbrg")
public class Hbrg_BoardController {

    public Hbrg_BoardController(Hbrg_BoardService hbrg_boardService) {
        this.Hbrg_BoardService = hbrg_boardService;
    }

    @Autowired
    private Hbrg_BoardService Hbrg_BoardService;

    @GetMapping("/list")
    public String list(Model model, @RequestParam(value="page", defaultValue="0") int page) {
        Page<Hbrg_Board> paging = this.Hbrg_BoardService.getList(page);
        model.addAttribute("paging", paging);
        return "main";
    }

    @GetMapping("/")
    public String list() {
        return "main";
    }

    @GetMapping("/post")
    public String post() {
        return "Board/Txt";
    }

    @PostMapping("/post")
    public String write(Hbrg_BoardDto hbrg_boardDto) {
        Hbrg_BoardService.savePost(hbrg_boardDto);
        return "redirect:/";
    }




    @GetMapping("/board/Txt") //localhost:8090/board/write
    public String Hbrg_boardTxtForm(){

        return "Board/Txt";
    }

    @PostMapping("/board/Txt")
    public String boardWritePro(Hbrg_Board hbrg_board){

        Hbrg_BoardService.Hbrg_Txt(hbrg_board);

        return "";
    }
}

 

 

package com.hbrg.dto;

import com.hbrg.entity.Hbrg_Board;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@ToString
@NoArgsConstructor
public class Hbrg_BoardDto {
    private Long boardId;
    private String id;
    private String title;
    private Long vC;
    private Long bLike;
    private LocalDateTime cDate;
    private LocalDateTime uDate;
    private String txt;

    public Hbrg_Board toEntity() {
        Hbrg_Board build = Hbrg_Board.builder()
            .id(id)
            .title(title)
            .txt(txt)
            .build();
        return build;
    }

    @Builder
    public Hbrg_BoardDto(String id, String title, String txt, LocalDateTime cDate, LocalDateTime uDate) {
        this.id = id;
        this.title = title;
        this.txt = txt;
        this.cDate = cDate;
        this.uDate = uDate;
    }
}

 

package com.hbrg.entity;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "Hbrg_Board")
@Getter
@Setter
@ToString
public class Hbrg_Board {

    @Id
    @Column(name="boardId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long boardId; // 게시물 번호

//    @OneToMany
    @JoinColumn(name="id")
    @Column(name="id", nullable = false)
    private String id; // 로그인 ID

    @Column(name="title", nullable = false)
    private String title; // 주제

    @Column(name="vC", nullable = false)
    private Long vC; // 조회수

    @Column(name="bLike", nullable = false)
    private Long bLike; // 좋아요

    @Column(name="cDate")
    private LocalDateTime cDate; // 생성 날짜

    @Column(name="uDate")
    private LocalDateTime uDate; // 수정 날짜

    @Column(name="txt")
    private String txt;  // 본문

    @Builder
    public Hbrg_Board(String id, String title, String txt) {
        this.id = id;
        this.title = title;
        this.txt = txt;
    }
}

 

 

package com.hbrg.repository;

import com.hbrg.entity.Hbrg_Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface Hbrg_BoardRepository extends JpaRepository<Hbrg_Board, Long> {

    Hbrg_Board findByTitle(String title);
    Hbrg_Board findByTitleAndTxt(String title, String Txt);
    List<Hbrg_Board> findByTitleLike(String title);

    Page<Hbrg_Board> findAll(Pageable pageable);

}

 

 

 

 

 

Board/Txt.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layouts/layout1}">
<head>
    <meta charset="UTF-8" />
    <title>게시판 - 글쓰기</title>
    <link rel="stylesheet" href="/webjars/bootstrap/4.5.0/css/bootstrap.min.css" />
    <style>
        .form-container {
            border: 1px solid #ccc;
            padding: 20px;
            border-radius: 5px;
            margin-top: 50px;
        }
        .hashtag-container {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 10px;
        }
        .hashtag-input {
            width: 150px;
        }
        .file-container {
            display: flex;
            align-items: center;
            gap: 10px;
            margin-top: 10px;
        }
        .file-path {
            flex: 1;
            margin-right: 10px;
        }
        .btn-add {
            cursor: pointer;
        }
        .btn-remove {
            cursor: pointer;
        }
    </style>
</head>
<body>
<header th:insert="fragments/header.html"></header>

<div layout:fragment="content">
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <form action="/post" method="post" enctype="multipart/form-data">
                    <div class="form-container">
                        <div class="form-group">
                            <label for="inputTitle"><strong>제목</strong></label>
                            <input type="text" name="title" class="form-control" id="inputTitle" />
                        </div>
                        <div class="form-group">
                            <label for="inputContent"><strong>내용</strong></label>
                            <textarea name="content" class="form-control" id="inputContent" rows="5"></textarea>
                        </div>
                        <div class="form-group">
                            <label for="inputHashtag"><strong>해시태그</strong></label>
                            <div class="hashtag-container">
                                <input type="text" name="hashtag" class="form-control hashtag-input" id="inputHashtag" />
                                <button type="button" class="btn btn-primary btn-add">+</button>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="inputFile"><strong>파일 첨부</strong></label>
                            <div class="file-container">
                                <input type="text" name="file-path" class="form-control file-path" id="inputFile" readonly />
                                <button type="button" class="btn btn-primary btn-file">파일 첨부</button>
                                <button type="button" class="btn btn-danger btn-remove">-</button>
                            </div>
                        </div>
                        <div class="form-group text-center">
                            <button type="submit" class="btn btn-primary">글쓰기</button>
                            <button type="button" class="btn btn-secondary">취소</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
</body>
</html>

 

중간중간 안쓰는 코드들이 몇개 있을 것이고 없어도 되는 코드, 등 필요없는 코드가 있지만 다 수정할 예정이다.. 만들다보니 어쩔수 없었다....ㅜㅜㅜㅜ

 

기능들이 어느정도 구현할때 천천히 다시 찾아보면서 고칠것이다.

 

글쓰기 페이지를 어느정도 구축을 했다.

 

localhost:8080/Hbrg/board/Content 링크에서 

수정을하여 localhost:8080/Hbrg/Content 로 변경하였다.

 

※ 변수,등 hbrg_ 붙은 것들을 다 수정하였음,  회원가입 쪽에서 언더바가 붙어서 오류가 발생해서 다 빼기로 결정하였다.

 

 

 

이제 페이지 끼리 연결하거나 아직 못했던 페이징 처리를 다시 손볼 예정이다.

 

조원들은 각자의 역할 기능구현들을 잘 진행하고 있다.

 

 


2주 프로젝트 3일차 느낀점

 

오늘은 프로젝트 한지 3일차가 되는 날이다. 나는 어제 못다한 페이징 처리를 하다가 일단 바로 해결이 안될 것 같아서 일단 다음으로 넘어 갔다. 마음은 계속 붙잡고 싶지만 다른게 할 것이 많아 넘어가기로 했다. 메인페이지에서 글쓰기를 누르면 글을 쓸 수 있는 창이 뜨고 거기에 맞게 제목, 글, 해시태그, 파일첨부 등 올릴 수 있게 만들었다. 아직 html을 작성 하였지만 html이 작성이되면 기능구현을 바로 할 수 있게 만들기위해서 html을 먼저 만들고 기능 구현을 할 예정이다. 그래도 오늘은 막히지 않았지만 나름 진행이 잘 되고 있다고 생각한다. boardDto, Controller, service 등 만들어서 페이지를 보여지게 만들었고 로직이 처음에는 어려웠는데 조금씩은 익숙해지고 있다. 나는 잘 만들지는 못하지만 조금씩 성장하고 있다고 생각한다. 

html을 보여지게 하려면 여러가지의 코드가 필요하다. Controller, Dto, Service, repository등 html, css등 각각의 역할을 해서 전달해서 보여지기때문에 하나하나가 중요하다. 이런 로직을 알기 위해 공부하였고, 직접 만들어보면서 하니까 더 어렵게 느껴졌다. 그래도 시행착오도 많이 있었지만 기능 구현과 화면을 만들면서 오류가 많이 나지않아 다행이였다. 처음에 애를 먹었고 오류는 안뜨는데 화면에서 보여지지가 않아서 어디가 틀렸는지 하나하나 다 찾아보면서 해결하려고 노력했다. Run했을때 오류가 안떠서 다행이지만 되는지 안되는지를 잘 몰랐었다. 결국 html에서 내가 잘못 작성해서 오류를 찾고, 화면을 띄우는데 성공했다. 코드를 적고 화면에 띄워지니까 나름 뿌듯했다.ㅎㅎ 코드가 조금 복잡하게 필요없는 것도 작성이되었지만 추후 수정해서 깔끔하게 할 것이다. 

오늘 그래도 엄청나게 많이 했다고는 모르겠는데 결과물이 잘 나와서 성공적이였다. 이렇게 코드를 작성하는 법도 배웠고 이렇게 하면서 배우고 알아간다고 생각해 좋은 수확이였다. 

아직 할게 많이 남았지만 남은 시간동안 최선을 다해 계속 해 나갈 것이다.

 

 

728x90
반응형

'프로젝트' 카테고리의 다른 글

2주 프로젝트 - 6일차  (0) 2023.04.16
2주 프로젝트 - 5일차  (0) 2023.04.14
2주 프로젝트 - 4일차  (0) 2023.04.13
2주 프로젝트 - 2일차  (0) 2023.04.11
2주 프로젝트 - 1일차  (0) 2023.04.09