[TIL] 240508

Geehyun(장지현)·2024년 5월 8일

TIL

목록 보기
68/70
post-thumbnail

Today

  • 어제 진행한 발표에 대해 평가 받음
- 기술 정확성 : 7점 - 7점
- 코드 최적화 : 7점 - 3점
- 구조 : 7점 -???(말안해줌)
- 가독성 : 5점 - 7점
- 일정관리 및 실행 : ??점(안알려줌) - 8점
- 창의 및 혁식 : 7점 - 4점
- UIUX : 10점 - 8점
- 오류 : 7점 - 7점
- 성능 : 7점 - 7점
- 보고 및 발표 : 5점 - 5점
총평
- 일정에 맞춰 기능개발에 최선을 다했고, UI/UX에 대한 이해도가 높음
- 주문 결제에 대해 기능적으로 고민을 많이 한것같음, 전체적으로 로직/설계에 대한 노력이 보이나 팀원들끼리 역량차이가 큰것이 티가 많이 남.
  • Spring boot
    스프링에서 파생된 서브 프로젝트 중 하나였으나, 이제는 메인 프로젝트가된 케이스로, 스프링 프레임워크 개발도구로 볼 수 있음

    • 주요 특징으로는,
      1) Auto Configuration(자동 설정)
      2) 내장 톰캣 + 단독 실행 가능한 도구 => 별도의 서버 설정 없이도 개발이 가능하고, 실행도 가능 (다른 WAS사용도 가능)
    • 스프링과 달라지는 점은
      1) 기존 코드 거의 그대로 사용할 수 있어 러닝 커브는 발생 X (약간의 변동은 있음)
      2) 스프링MVC에서는 JSP를 사용했지만 spring boot에서는 타임리프를 사용
      \* Mybatis를 사용할 수도 있지만 앞으로 실습에서는 JPA를 사용할 예정
      3) boot는 web.xml과 서블릿context.xml 설정으로 안하고 어노테이션으로 함!!!!!
  • spring Initializr
    기존 spring 처럼 Maven 또는 Gradle로 직접 프로젝트에 필요한 라이브러리를 설정해서 프로젝트를 구성할 수 도 있지만, Spring boot에서는 spring Initializr를 이용해서 간단하게 라이브러리를 추가/관리할 수 있따.
    spring Initializr

    -> EXPLORE : 현재 설정한 내용 확인하기 (이거 내용 복사해서 써도 됨)

    -> GENERATE : 현재 설정한 프로젝트 구조를 다운로드 받을 수 있음

InteliJ 이용하기

  • build.gradle에서 lombok 테스트에서도 쓸수있도록 수정

  • springboot - Application.java
    => 스프링 부트의 특징으로 Application 클래스 내에 main메서드가 존재하며 해당 applicaition 자체적으로 단독 실행 할 수 있습니다.

  • 관련 설정하기
    src > main > resources > application.properties

    • DB연결하기

      # 포트번호 : 입력하지 않으면 기본으로 80
      server.port=8080
      # 드라이버 입력
      spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
      # 사용할 DB 주소
      spring.datasource.url=jdbc:mariadb://localhost:3306/webdb
      # 사용할 DB 접속 정보
      spring.datasource.username=user
      spring.datasource.password=1234
    • log4j 설정

      logging.level.org.springframework=info
      logging.level.org.fullstack4=debug
    • JAP이용해서 쿼리 날리는거 로그 남기도록 설정(너무 좋다...!)

      spring.jpa.hibernate.ddl-auto=update
      # 프로젝트 실행 시 DDL문 처리 여부 설정
      #- none : DDL 진행하지 않음 (디폴트)
      #- create-drop : 실행할 때 DDL 실행, 종료시에 만들어진 테이블 등등 모두 삭제
      #- create : 실행할 때 마다 테이블 생성
      #- update : 기존과 다르게 변경된 부분이 있을 경우 해당 테이블이 없으면 새로 생성
      #           일부만 변경된 경우 alter table을 실행
      #           인덱스와 외래키 자동 처리
      #- validate : 변경된 부분만 알려주고 종료
      
      spring.jpa.properties.hibernate.format_sql=true
      # sql 문법을 포맷팅 해달라(들여쓰기 띄어쓰기 등) => 사람이 보기 좋게, 가독성 있게! 안하면 한줄로 주르륵 나옴
      
      spring.jpa.show-sql=true
      # 실행한 sql 문을 출력해달라
  • db 연결 테스트 해보기

package org.fullstack4;

import lombok.Cleanup;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Log4j2
@SpringBootTest
public class DataSourceTests {
    @Autowired
    private DataSource dataSource;

    @Test
    public void testConnection() throws SQLException {
        @Cleanup
        Connection conn = dataSource.getConnection();
        log.info("============================");
        log.info("conn : " + conn);
        log.info("============================");

        Assertions.assertNotNull(conn);
    }
}

  • 타임리프 관련 설정
    파일 > 설정 > 검사 > Thymeleaf 검색 후

    => 타임리프 문법으로 오류로 보고 에러메시지 떨구는것을 방지함.

  • 컨트롤러 하나 만들어서 test겸 사용해보기
    1. 컨트롤러 만들기

    package org.fullstack4.controller;
    
    import lombok.extern.log4j.Log4j2;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Log4j2
    @Controller
    public class SampleController {
    		// 스프링 부트에서는 src > main > resources 폴더가 곧 spring에서 webapp과 유사!!!
          // 웹 파일은 src > main > resources > templates 폴더에 넣고 사용하며
          // 1. resources 파일 내부 웹문서는 브라우저에서 직졉 경로 치고 들어갈 수 없음
          // 2. controller에서 경로 지정할 때 src > main > resources가 루트 경로 임!
        @GetMapping("/hello")
        public void hello(Model model){
            model.addAttribute("msg", "Hello!");
        }
    }

    2. html 만들어서 타임리프 사용해보기

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1 th:text="${msg}"></h1>
    </body>
    </html>

    당연하게도 직접 resources 밑에있는 파일로 경로로를 쳐서 접속 불가!!! Controller등을 이용해야함.

    ⭐ 타임리프!!
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    => 타임리프 네임스페이스를 설정하는 부분, 이부분이 있어야 타임리프 문법이라고 이해함.
    (약간 jstl tablib prefix와 uri 설정해주는 느낌 )
    th:속성명 이런식으로 해야 함.
    단, 타임리프 문법은 js로 컨트롤 불가! 타임리프로 작성된 내용이 전부 렌더링 된 후에 JS가 동작하는 원리!

    spring boot는 주로 타임리프 탬플릿을 사용함!
    주요 특징으로는, 아래 내용이 있음

    • 직접 데이터를 생성하지 않음
    • 만들어진 데이터를 노출하는 형태
    • 서버에서 동작해서 랜더링 하여 페이지로 보여주는 형식
      즉, 랜더링 한 후 웹 브라우저에서 개발자도구로 소스를 보면 그 어디에도 th어쩌고는 없음.

    3. 출력화면

    ⭐ 갑자기 로그인 창이 뜬다면?

    spring-security 때문!!! 당황하지 말고!!!

    1. spring-security를 없애던가
    2. 콘솔 창에 뜬 Using generated security password:부분에 나온 비밀번호 들고 id user로 로그인해서 들어가자!
    • springboot에서 컨트롤러에 경로 잘못 지정해서 웹 파일이 없는 경우 404가 아니라 500이 발생함
      => 따라서 오류 내용을 자세히 봐야 함.

⭐ 선생님 추천 확장 프로그램(크롬)!!

Review

  • 드디어 springboot 진입!!!
  • 4/24 ~ 5/3일간 팀 프로젝트 진행한 내용은 정리해서 한번에 올릴예정!
  • 포트폴리오를 작성해야한다!
profile
블로그 이전 했습니다. 아래 블로그 아이콘(🏠) 눌러서 놀러오세요

0개의 댓글