Java/Spring Boot
[Java / Spring Boot] ControllerAdvice
ControllerAdvice주로 전역적인 예외처리, 바인딩 설정, 모델 객체에 데이터를 추가하는데 사용AOP 개념이 적용된 도구컨트롤러를 대상으로 광범위하게 간섭이 가능예외처리, 파라미터 변조 등이 가능 바인딩 설정빈 문자열을 null로 바인딩//@ControllerAdvice(annotations = {Controller.class}) // Annotation으로 간섭@ControllerAdvice(basePackages = {"com.kh.spring09.controller"}) // package로 간섭public class EmptyStringControllerAdvice { @InitBinder // 컨트롤러 처리 전에 사전 밑작업을 할 수 있는 메서드 public void initBinde..
Java/Spring Boot
[Java / Spring Boot] 파일 첨부
파일 업로드multipart configuration#multipart configurationspring.servlet.multipart.enabled=truespring.servlet.multipart.max-file-size=1MBspring.servlet.multipart.max-request-size=10MBenabled파일 업로드 기능 활성화 max-file-size업로드할 수 있는 파일 최대 크기 max-request-size`HTTP` 요청의 최대 크기 attachment 테이블 생성파일 번호, 이름, 타입, 크기 컬럼 생성create table attachment(attachment_no number primary key,attachment_name varchar2(255) not nul..
Java/Spring Boot
[Java / Spring Boot] Service
Service비즈니스 로직을 처리하는 컴포넌트컨트롤러와 리파지토리 사이에서 중재 역할을 함`@Service`로 서비스 등록@Servicepublic class AttachmentService { @Autowired private AttachmentDao attachmentDao; public int save(MultipartFile attach) throws IllegalStateException, IOException { if (attach.isEmpty()) return -1; File dir = new File("D:/upload"); dir.mkdirs(); int attachmentNo = attachmentDao.sequence(); File target = new File(d..
Java/Spring Boot
[Java / Spring Boot] DBCP
DBCP (Database Connection Pool)데이터베이스와 애플리케이션 간의 연결을 효율적으로 관리하기 위한 기술로, 데이터베이스 연결을 매번 새로 생성하는 대신, 미리 생성된 연결을 재사용하여 성능을 향상시키고 리소스를 절약할 수 있다.apache commons dbcp2데이터베이스 연결 풀링을 제공하는 Java 라이브러리https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2/2.13.0 dependency 추가 org.apache.commons commons-dbcp2 2.13.0 -->  dbcp configuration# dbcp configurationspring.datasource.dbcp2.ma..
Java/Spring Boot
[Java / Spring Boot] AOP와 Interceptor, Configuration
AOP (Aspect-oriented Programming) 관점 지향 프로그래밍관점 지향 프로그래밍으로 여러 관점에 따라 사용되는 기능들을 모듈화하여 처리하는 프로그래밍 패러다임이다. 예를 들어 게시판 기능을 만든다고 했을 때, 파란색 박스는 회원, 비회원이 모두 이용 가능한 기능이고 빨간색 박스는 회원만 이용 가능한 기능이라면 이 또한 관점 지향 프로그래밍에 해당한다. 기능 분리말고도 컨트롤러, 리파지토리, 컴포넌트 관점 등 역할로도 관점을 분리하여 여러 관점으로 묶어 볼 수 있다. 당연히 회원 + 비회원 기능은 모든 사용자가 접근 할 수 있지만, 회원 기능은 비회원은 접근하지 못하는 기능이다. 이 관점에서 볼 때 간섭을 하여 작업을 추가하면 회원이 이용할 수 있는 기능과 비회원이 이용할 수 있는 기..
Java/Spring Boot
[Java / Spring Boot] Session
Session웹 애플리케이션에서 사용자와 서버 간의 상태 정보를 유지하기 위한 기술사용자가 웹 애플리케이션과 상호작용하는 동안 정보를 서버에 저장사용자의 상태를 추적하고, 여러 페이지를 이동하면서도 사용자 정보 유지브라우저 마다 세션 Id가 다름HttpSession웹 애플리케이션에서 사용자의 상태를 유지하는데 사용되는 인터페이스HTTP는 무상태 프로토콜 (stateless protocol)각각의 요청은 독립적이며 상태를 저장하지 않음세션을 사용하여 사용자 별로 상태나 정보를 서버에 저장여러 요청에 사용자 정보 추적 Login 기능로그인에 실패할 시 `login?error`로 리다이렉트@GetMapping("/login")public String login() { return "/WEB-INF/vie..
Java/Spring Boot
[Java / Spring Boot] Model과 MVC 패턴
Model컨트롤러와 뷰 사이의 데이터 전달을 담당하는 객체@RequestMapping("/list")public String list(Model model) { List list = pokemonDao.selectList(); model.addAttribute("list", list); return "/WEB-INF/views/pokemon/list.jsp";}.addAttribute()데이터를 `Model`객체에 추가하는 메서드`key`와 `value`를 인자로 넘김model.addAttribute("list", list);JSP포켓몬 목록신규등록 번호 이름 속성 ${pokemonDto.pokemonNo} ${pokemonDto.po..
Java/Spring Boot
[Java / Spring Boot] Forward와 Redirect
Forward서버 내부에서 다른 리소스로 요청을 전달하는 방식URL이 변경되지 않음1번의 요청만 처리요청 및 세션 정보가 그대로 전달됨한 번의 요청만 처리되므로 성능이 더 좋음crud 중 create, read, update에서 사용됨@GetMapping("/join")public String join() { return "/WEB-INF/views/member/join.jsp";}@GetMapping()HTTP GET 요청을 처리하는데 사용되는 어노테이션Redirect서버가 클라이언트에 새로운 URL로 이동하라고 지시하는 방식브라우저의 URL이 새 URL로 변경2번의 요청 처리새로 요청이 발생하므로 이전 요청의 데이터는 유지되지 않음두 번의 요청이 처리되므로 상대적으로 느림crud 중 create..
Java/Spring Boot
[Java / Spring Boot] View (JSP)
View사용자에게 정보를 표시하는 화면을 담당Servlet서버 측에서 요청을 처리하는 Java 클래스`view`의 역할을 하지만 `controller`와 `view`가 분리되지 않음`view`에 포함되지 않음`response`는 사용자에게 내보낼 내용이 담긴 인스턴스높은 성능, 확장성, 유연성비효율적인 방식, 유지보수 어려움@RequestMapping("/test1")public void test1(HttpServletResponse response) throws IOException { response.setCharacterEncoding("UTF-8"); response.getWriter().println("Hello!");} JSP (JavaServer Pages)HTML에 Java 코드..