✅ SSR과 CSR의 차이

SSR (server side rendering) CSR (client side rendering)
반환하는 내용이 다르고, 경로가 다르다
페이지는 역할자별로 개별적으로 만들어질 수 있다. 
테이블이 14개면 엔티티도 14개가 있으면 된다
컨트롤러를 만들때 admin, member 같은 역할자가 없다
~가 ~을 요청한다 누가 요청을 하든 그냥 메뉴데이터이고 ~을 이란 개념이 없을 가능성이 크다

 


 

✅ 검색은 api가 필요하다.

👉 왜? 초기페이지가 아니고 데이터로 내용만 달라지면 되니까

 

 

#️⃣ 동적쿼리 생성하기

 

 

mybatis – MyBatis 3 | Dynamic SQL

Dynamic SQL One of the most powerful features of MyBatis has always been its Dynamic SQL capabilities. If you have any experience with JDBC or any similar framework, you understand how painful it is to conditionally concatenate strings of SQL together, mak

mybatis.org

	<!-- #은 데이터형식에 맞춰서 '문자열'이면 이렇게 변형시켜줌. 문자열 그대로 넣고싶으면 ${이렇게}쓴다 -->
   <select id="findViewAll" resultType="MenuView">
      select * from menu_view
      <where>
         <if test="categoryId != null">category_id = #{categoryId}</if>
         <if test="query != null">and kor_name like '%${query}%'</if>
      </where>
      order by reg_date desc
      limit #{offset}, #{size}
		<!-- 리파지에서는 페이지란 개념이 없고 데이터를 어디서부터 어디서뽑는다는것만 있음. 서비스에서 페이지로 처리하는것 -->

👉 검색을 했을때 카테고리 아이디로 검색할 수도 있고 String으로 검색할 수도 있으므로, 값이 없을 경우는 where조건에서 제외되도록 한다

 

 

✔️ ${}와 #{}의 차이점

 ${}는 파라미터에 담긴 값이 그대로 출력된다.

하지만 쿼리주입시 보안측면에서 불리하므로 사용자 입력값을 전달할떄는 사용하지 않는편이 좋다.

 

#{}는 파라미터가  컬럼의 자료형에 맞추어 자료형도 변경된다.  만약 String으로 입력되어야 한다면 '홑따옴표'가 붙은 형태로 들어가게 된다. 그래서 like '%단어%'이렇게 검색할 필요가 있을때에는 #{}을 쓰면 안된다. like '%'단어'%' 이렇게  변환된 데이터로 들어가기때문!

 

 

 

 

🔥 interface MenuRepository

@Mapper
public interface MenuRepository {
	List<Menu> findAll();
	
	//페이져때문에 페이지사이즈가 필요하면 같이 넘겨야 함. 
	//페이지라는 개념은 서비스에만 있고, 데이터 저장소에서 offset, size를 넣는다
	
    //List<MenuView> findViewAll(); // 오버라이드 하므로 메서드가 필요 없음
	List<MenuView> findViewAll(int offset, int size, Long categoryId, String query);

 

🔥 interface MenuService

public interface MenuService {
	List<Menu> getList();

	// 마이바티스는 오버로드를 지원하지 않는다. 그래서 매개변수가 없는애는 지워줘야 함
	
	//mvc
	List<MenuView> getViewList();
    
	//api
	List<MenuView> getList(String query);


	Menu getById(long id);
    
	Menu add(Menu menu); // menu를 받아서 db에 추가한 menu를 반환받는 api

	Menu modify(Menu menu);
}

 

 

🔥 잠깐 나온 fixed와 sticky개념

🔽 🔽 🔽

더보기

 

sticky가 자기 자리를 벗어났을 시 bottom:0에 붙게 만들어놓은 설정

- fixed와 유사

- sticky는 자기위치가 있을때는 그위치로 가고 자기위치가 화면에서 벗어나면 fixed가 된다

예를 들어 위 코드의 경우 footer 바로 위로 설정 되어있으면 자기영역이 사라졌을때 bottom:0px이 된다

 

 


✅ Spring boot의 Logger 사용하기

마이바티스는 동적 쿼리를 지원함 ▶ 만약 마이바티스가 동적으로 출력하는 결과문을 확인하고 싶다면?

👉 쿼리문을 system.out으로 출력할수 없으므로 logger를 통해서 출력해야한다. ▶ logger에게 출력해달라고 말을 해야함

👉 원하는 출력속성 지정하여 warning, error, debug 등으로 출력함 (선별적으로 해당 속성을 선택하여 출력할 수 있음)

https://www.baeldung.com/spring-boot-logging

yamul에 설정해놓음

${} 문자열 더하기

#{} 값세팅. 나중에 값이 들어간다

👉 나중에 배포할때에는 로그는 주석으로 바꾸거나 지워야한다. ▶ 배포할때 쓰는 데이터베이스를 개발(테스트)과 함께 쓰면 위험성이크기 때문에 나눠놓았기 때문 ▶ 개발할 때 설정과 배포할때 설정을 나누어서 할 수 있다.

 


✅ application.yml의 하위 파일 생성하기 (배포용 파일과 개발용 파일 생성)

 

✔️ 찾아들어가는 순서

1. appication.properties -- application.yml을 사용해도 되므로 properties 는 내용이 없어서 지워도 문제가 없다.

2. applicaion.yml

3. applicaton.yml에 설정된 프로필이 읽힌다 (dev/prod)

 

active를 어떤 프로필로 설정하느냐에 따라서 작동하는게 달라진다

 

하위 속성 중 공통사항은 appliation.yml로 올리고 각자 가지는 사항만 프로필에 넣어둔다

 

 


✅ 동적쿼리를 가능하게 하는 mybatis 세부 기능들

동적쿼리에서는 if문이 가장 중요하다

null이 들어가야 하므로 null값을 허용하는 자료형의 필요성 ▶ nullable이 되는 wrapper class로 진행

 

 

mybatis – MyBatis 3 | Dynamic SQL

Dynamic SQL One of the most powerful features of MyBatis has always been its Dynamic SQL capabilities. If you have any experience with JDBC or any similar framework, you understand how painful it is to conditionally concatenate strings of SQL together, mak

mybatis.org

 

 

#️⃣ trim

 

 

#️⃣ foreach

 

 


✅ spring boot의 홈디렉토리

 

서버가 자원(static한 파일)을 찾게되는 경로 == 홈디렉토리

static 뿐만 아니라 여러군데서 뒤진다

1. resources/static -- spring boot ver.1에는 static이 없고 public에 모두 뒀었다

2. (기존의 스프링에서 사용하던) src-main-webapp

3. resources/하위 일반폴더 (public)

4. spring boot에서 jar파일이 있는 디렉토리 (배포할 때 테스트 예정)

 

static ▶ public ▶ webapp 순으로 찾는다

 


 ✅ api로 찾아온 데이터를 화면에 출력하는 법

#️⃣ 렌더링하는 이미지 상태값 변경하기

 

자바스크립트로 클래스를 바꿔서 적용되는 css가 바뀌도록 해야한다.

css를 미리 다 준비해놓고 자바스크립트로 클래스를 갈아끼기만 하면됨

자바스크립트는 클래스갈아끼기와 event 받는작업을 주로 한다.

 

상태값에 따라 이미지를 바꾸려면, 화면에 나오지않는 집계데이터가 menuView entity에 다 있어야 한다.

(수량, 재고여부 등) - 상황에 따라 sold out으로 변경

 

A가 B에게 C를 D하다 ▶ (4형식) 포함관계가 포함되어있다.

 

본사가 메뉴를 입고한다 를 1:N관계로 보고, recieve 테이블을 생성한다

 

 

 

 

 

 

 

+ Recent posts