6주차 화 0926 :: newb

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6주차 화 0926
    광주인력개발원 일일포스팅(메모장) 2023. 9. 26. 17:13
    728x90
    반응형

    복습

     

    스프링은  - >  주로 웹개발을 위해 사용된다.

        l                             ㄴ front (HTML, CSS, JS ) / back ( java )

    스프링의 2가지 특징

    1. IoC / DI - @Autowired (끌고와서 씀)   

         + Database(JPA) 

         + View Template (Thymeleaf) 또는 (JSP) 사용 

     

    ※추가// 로그인 인증 방식 - JWT ... (이건 아직 안 배움)

                + 가장 기본 적인 인증 ID, PW

                + 어렵게 만드는 방법이 JWP 

                     ㄴ ASCII 코드를 이용하거나 여러 단서 (알고리즘) 를 조합해서 긴 문장을 사용 

    2. AOP 

     

    Repository

    1. Entity 사용(==DB Table) 사용

    2. 클래스명(파일명)을 EntityRepository로 명칭이 Repositoty 앞에 들어가게 됨

    ex) 좋아요 기능 구현

           좋아요 등록

            Controller   / like

           repository >  LikeRepository

    -------------------------------------------------

         로그인 기능 구현  

         Controller       / signin (회원정보로 묶이거나, 로그인 기능)

          repository     MemberRepository 

          repository     SigninRepository (로그인을 했었던 흔적을 남기기 위한다면 가능 이질감이 느껴지지 않음)

                               

    ※ (결국 쓰기 나름이지만 초기 기획단계에서 중복되거나 기능과 이름이 이질감이 느껴지지 않게 구성하는게 중요!)

     

    연관관계

    기본 @Many To One 단방향

    @JoinColumn(name = " 컬럼명")

    SQLite를 사용하고 있는데 컬럼명을 맞춰줘야 한다.. 아니면 새로운 컬럼이 추가되고 데이터가 없는 쓰레기가 만들어진다.

     

    Thymeleaf

    1. 출력 [[ ]]

    2. 반복 th:each

    3. 조건 th:if

     model.addAttribute("empList", list);

    ooo List로 넘겨주고

    <tr th:each="emp : ${empList}">

    HTML에서 ooo List로 받아야함

      <td>[[ ${emp.empno} ]]</td>

    ooo 에 . 을 찍고 사용 

    <td>[[ ${emp.dept.dname} ]]</td>

    연관관계를 설정하여 없는 다른 곳에서 정보를 가져옴

     

    ※ 학습목표

    데이터를 Entity에 만들고 활용

    Thymeleaf 조건문 활용

     

    양방향 

    @Entity
    @Data
    public class Owner {
        @Id
        int id;
        String name;

        @OneToMany(mappedBy = "owner")
        List<Animal> animals = new ArrayList<>();

    Owner >>> Animal 

    @Data
    @Entity
    @ToString(exclude = "owner") // owner에서 animal을 불렀을때 animal에 있는 owner가 또 owner를 부르니까 제외시킴
    public class Animal {
        @Id
        int id;
        String name;
        int age;

        @JsonIgnore
        @ManyToOne
        Owner owner;

        @OneToMany(mappedBy = "animal")
        List<Product> products = new ArrayList<>();
    }

    Animal >>> Product

    @Many To One 을 이용해서 

    Owner를 불러오고 

    Owner에서는 @One To Many를 이용해 나를 부르는 단어를 mappedBy에 써줌으로써 연결

    Data
    @Entity
    @ToString(exclude = "animal")
    public class Product {
        @Id
        int id;
        String name;
        int price;

        @JsonIgnore
        @ManyToOne
        Animal animal;
    }

    Product에서도 @Many To One 을 통해 Animal과 연결했다.

     

    그리고 Onwer를 부르면 Animal을 부르고 Animal에서 다시 Owner를 부르기에

    Controller에서 사용한다면 @JsonIgnore 를 사용해서 제외시키고

    Junit 에서 사용한다면 @ToString에 exclude = "owner"를 사용해서 제외시킨다.

     

    Thymeleaf 

    조건문

    예제)

     @GetMapping("mode")
        public String mode(
                Model model, @RequestParam Map<String, Object> map) {
            model.addAttribute("name", map.get("name"));
            model.addAttribute("auth", map.get("auth"));
            model.addAttribute("category", map.get("category"));
            return "mode";
        }

     

    1. th:if

    <span th:if="${name} != null" th:text="${name}"></span>

    2. th:unless

    <span th:unless="${name} != null" th:text="이름없음"></span>

    3. th:switch

    담당 카테고리 :
    <span th:switch="${category}">
    <span th:case="1">커뮤니티</span>
    <span th:case="2">장터</span>
    <span th:case="3">갤러리</span>

     

    # 3항 연산자

    권한 : <span th:text="${auth} != null ? ${auth} : '권한없음'"></span>

    페이지 공식

    예제)

        @GetMapping("pagination")
        public String pagination(
                Model model, @RequestParam(defaultValue = "1") int page) {
            int startPage = (page - 1) / 10 * 10 + 1;
            int endPage = startPage + 9;
            model.addAttribute("startPage", startPage);
            model.addAttribute("endPage", endPage);
            model.addAttribute("page", page);
            return "pagination";
        }

    현재 P1 -> 1~ 10 

    P8 -> 1~ 10

    P43 -> 41~ 50

    1의 자리를 0으로 만든 후 1을 더해주기

    10으로 나누어 주고 다시 10을 곱해주기

    <th:block th:each="pageNumber : ${#numbers.sequence(startPage, endPage)}">
    <span th:if="${page} == ${pageNumber}" th:text="${pageNumber}"
    style="font-weight:bold"></span>
    <span th:unless="${page} == ${pageNumber}" th:text="${pageNumber}"></span>
    </th:block>

     

    링크를 이용한 방법

      @GetMapping("linkUrl")
    <th:block th:each="pageNumber : ${#numbers.sequence(1, 10)}">
    <a th:href="@{/linkUrl(page=${pageNumber})}" th:text="${pageNumber}"></a>
    </th:block>

    /linkUrl 에서 / 가 앞에 있다면 가장 앞에있는 url / 에서 시작한다.

     

    로그인

    - session ( F12 > Application > Cookies > Expires // 시간 개념)

                                                                                           ㄴ접속하고부터 브라우저를 끄고 나갈 때 까지 

      + 백엔드에서는 저장공간이라는 개념도 포함하고 있다.

     

    클라이언트 ( 웹 브라우저 )

    저장공간 => 쿠키, 로컬/세션스토리지    //이중에서 쿠키를 제일 많이 활용!

                                      ㄴ백엔드에서 제어 불가             ㄴ 만료 일자 (개발자가 제어(가능)하기 수월함)

                                                                                         ㄴ단점: 저장공간이 적음

    접속하고 있는 클라이언트(쿠키)가 로그인을 하려고 한다면 서버(세션)에 흔적을 남김

                                                                                                             ㄴ로그인이 아니라 접속할 때 부터 남음

    세션은 브라우저를 떠날 때 까지 공간을 유지 함 (기준은 시간)

    요청을 보내면 공간을 형성하는 시간을 갱신함

     

    세션에 흔적을 남기고 쿠키에도 남겨주게 된다

    이후 30분이라는 시간 안에 다시 요청을 한다면 기존에 있던 세션을 활용하고

    시간을 넘긴다면  기존에 있던 공간을 활용하지 못하고 새로운 세션공간을 주게 된다. 

     

    브라우저를 끄거나 쿠키흔적을 잃어버려도 기존 세션을 이용할 수 없다.

    @Controller
    @RequestMapping("/auth")
    public class AuthController {
        @Autowired
        HttpSession session;
       
        @GetMapping("/login")  //http://localhost:8080/auth/login
        public String login() {
            session.setAttribute("user_id", "HRD");
            return "auth/login";
        }
    }

    세션을 이용해서 로그인 찍어주기..

    아무 HTML에 들어가서

        [[${session.user_id}]] 님 반갑습니다.

    빠른 방법으로 이렇게 적어주면

    이런식으로 나오게 된다.

     

    끝~

    728x90
    반응형

    '광주인력개발원 일일포스팅(메모장)' 카테고리의 다른 글

    7주차 수 1004 천사넹  (2) 2023.10.04
    6주차 수 0927  (2) 2023.09.27
    ※추가 스프링부트 학습내용 ㅎ  (2) 2023.09.26
    6주차 월 0925  (3) 2023.09.26
    5주차  (1) 2023.09.26
Designed by Tistory.