Project/Spring 12

Retention, Reflection, Annotation

1. Retention (보유 정책 - @Retention)Java의 어노테이션 유지 정책을 정의하는 개념@Retention 어노테이션을 사용하여 특정 어노테이션이 얼마나 오래 유지될 것인지 설정RetentionPolicy의 세가지 유형SOURCE : 컴파일 후 제거됨 (예: @Override)CLASS : 컴파일 후 클래스 파일에 포함되지만, 런타임에는 사용 불가 (기본값)RUNTIME : 런타임에도 유지되며 리플렉션(Reflection)으로 접근 가능2. Reflection (리플렉션)클래스, 메서드, 필드 등의 메타데이터를 런타임에 동적으로 조회하고 조작할 수 있는 기능컴파일 시점이 아니라 실행 중에 객체의 정보를 가져오거나 수정할 수 있음.주로 프레임워크(Spring, Hibernate 등)에서 ..

Project/Spring 2025.04.01

DB Control

JPA에서 인덱스 생성 가능@Table(name = "item", indexes=@Index(columnList = "title", name="titleIndex")) 아래와 같은 형태에서 LIKE문법을 사용하기 때문에 느림 - full text index 사용@PostMapping("/search")String postSearch(@RequestParam String searchText){ var result = itemRepository.findAllByTitleContains(searchText);//like 문법 사용 - 느림, full text index 사용 return "list";} full text index - 문장에서 단어들만 추출하여 정렬, 각 단어들이 어떤 행에 들어있는..

Project/Spring 2025.03.26

Object DTO/페이지네이션

객체를 반환할 때 필요없는 부분을 제거하는 법1) Map 이용2) 새로운 Object 만들어서 리턴 - 이러한 용도의 class를 DTO(Data Transfer Object)라고 함(데이터를 특정 object 형태로 변환할 때) DTO는 변수들에 public 필수, 안붙어있으면 스프링이 이를 JSON으로 변환할 수 없어 자동으로 getter를 쓰려고 함 DTO 장점1) 타입 체크가 쉬움, Map은 타입체크 어려움2) 재사용 용이constructor 여러개 만들어서 다양한 인자 전달 가능 mapping 라이브러리로 특정 object를 다른 object로 쉽게 코드 한 줄로 변환할 수 있게 도와줌 record 이용public record Person(String name, Integer age) {}nam..

Project/Spring 2025.03.25

로그인 기능

UserDetailsService - spring security에서 제공하는 interface, DB에서 유저 찾아서 로드해줄 수 있음MyUserDetailsService에서 implements 해서 db에서 찾는 코드는 개발자가 작성유저 정보를 db에서 꺼내기만 하면 DaoAuthenticationProvider가 pw 비교함(password encoder 있을 때 해싱도 자동으로 해줌) interface - 어떤 클래스 만들 때 규격에 맞도록 하기 위함 derived query - findByStatus()와 같이 자동 생성 인텔리제이 켜놓고있으면 디비버로 조작 x MyUsersDetailsService.javapackage com.example.shop.member;import lombok.Req..

Project/Spring 2025.03.25

로그인 방식

쿠키는 GET/POST 요청시 자동으로 함께 전송(입장권 느낌) 1. session 방식 로그인 : 1)유저가 로그인하면 DB에 유저아이디, 유효기간, session id 이런걸 기록해두고2) 유저에게 입장권을 발급해줄 때 입장권에 session id 하나만 보냄session id는 그냥 행들을 구분하기 위한 랜덤 문자나 숫자 로그인이 필요한 서버기능 이용시 :1) 유저가 GET/POST 요청시 입장권을 서버에 제출함2) 서버는 입장권에 써있는 session id를 가지고 DB를 조회해봄DB기록에 별 이상 없으면 GET/POST요청을 진행 장점은 매번 GET/POST 요청할 때 마다 DB를 조회해보기 때문에 하나하나의 요청에 엄격한 user 검사함단점은 그 만큼 DB의 부담이 심해질 수 있음그래서 유저가..

Project/Spring 2025.03.24

AJAX 사용

서버로 요청 날리는 법1. 주소창에 url 기입(GET)2. 전송 (GET,POST)3. AJAX(GET,POST,PUT,DELETE 등) AJAX - 새로고침 없이 서버로 요청을 날리는 자바스크립트 코드 ajax 사용법button 누르면 새로고침 없이 데이터 전송(body) 및 요청 전달 @PostMapping("/test1")String test1(@RequestBody Map body){ System.out.println(body); return"redirect:/list";}fetch('test1?이름=값&이름=값') (GET)형태로도 전송 가능 과 같이 onclick 안에 js 코드 집어넣을 수 있음, thymeleaf 변수도 js 안에서 사용 가능 🗑️thymeleaf 변수를 js..

Project/Spring 2025.03.24

상품 추가 기능/예외 처리/수정 기능

@PostMapping(url)- POST method와 url에 대응하는 함수의 어노테이션 @ModelAttribute : 변수를 객체 형태로 바로 가져옴 itemRepository.save(item)으로 db에 저장 가능 thymeleaf의 fragment 문법으로 공통 ui 재활용 가능 재활용할 공통 ui 코드의 상위 태그에 th:fragment="navbar", 한 파일 내에 여러번 사용 가능 th:replace="~{nav.html::navbar}" th:insert 사용하면 div를 갈아치우는게 아니라 div 안에 붙여넣어줌, 갈아치우는게 일반적 html 덩어리로 변수나 데이터같은걸 전송해줄 수도 있습니다. th:replace="nav.html :: navbar('데이터1', '데이터2')" ..

Project/Spring 2025.03.24

MySQL Database 호스팅

ORM 라이브러리 사용 JPA - Java의 ORM 표준 문법 Hibernate - JPA의 구현체 하드디스크에 직접 MySQL 설치 or 클라우드 서비스에서 DB 호스팅 azure 사용 플러그인 사용해서 db 조회할 수 있으나, 그냥 dbeaver로 해야 버그 X @Entity - table, JPA 라이브러리 어노테이션으로 COLUMN 속성 설정 가능 JPA로 데이터 입출력1. repository 만들기2. 원하는 클래스에 repository 등록3. repository.입출력문법() 쓰기 lombok - 긴 코드 간소화에 좋음Java의 어노테이션 프로세서 기능을 이용하여 컴파일 시점에 Lombok의 어노테이션을 읽어서, 다양한 메소드와 생성자(getter, setter, constructor 등등)..

Project/Spring 2025.03.23

Thymeleaf 사용

정적 리소스 - static동적 리소스 - templates 정적 리소스는@GetMapping("/index")String hello(){ return "redirect:/index.html";}이런 형식으로 사용 동적 리소스는 thymeleaf 라이브러리 사용동적 리소스이기 때문에 return "list.html"이 아닌 return "list"로Model 로 변수 부여html에서 th:text = "${DataName}"과 같은 형태로 변수 사용package com.example.shop;//com 폴더 안에 example 폴더 안에 shop 폴더//에디터가 자동으로 폴더 압축해줌//다른 파일에도 이 클래스를 사용하고 싶으면 package 필수import org.springframework.st..

Project/Spring 2025.03.23