Spring 기초(41)
-
RedirectAttributes
게시판 내용을 작성한 후, post 메서드로 폼 태그를 전송하면 게시판 리스트로 리다이렉트하도록 코드를 작성하였다. @PostMapping("/write") public String write(BoardDto boardDto, HttpSession session, Model m, RedirectAttributes rattr) { String writer = (String) session.getAttribute("id"); boardDto.setWriter(writer); try { int rowCnt = boardService.write(boardDto); if(rowCnt != 1) throw new Exception("Write failed"); rattr.addFlashAttribute("msg",..
2022.03.26 -
AOP(Aspect Oriented Programming)
AOP? → 공통 관심사항을 분리하는 방식 공통 관심사항을 추출할 수 있는 이유에는 proxy(대리자)가 있다. 프록시는 런타임 위빙(Runtime Weaving)을 수행한다. 런타임 위빙이란, Runtime때 실제 객체를 가상의 객체로 적용시키는 과정이다. Spring에서는 이 런타임 위빙을 1) JDK Dynamic Proxy 2) CGlib Proxy 두가지 방법으로 구현한다. 두번째 방법인 CGlib(Code Generator Library)는, 이미 스프링이나 하이버네이트에 내장되어있다. DI로 주입받은 객체를 출력해보면 CGLIB이 생성한 가짜 객체가 등장함을 알 수 있다. 즉, memberService가 아닌 다른 객체가 Injection 되어있다. 타겟을 감싸는 프록시가 런타임에 생성되면,..
2022.03.02 -
Spring JDBC Template
스프링 JDBC는 DB접근 기술로.. 이전의 방대한 양의 코드를 간결하게 줄여준다. 커넥션 객체 얻고~ Try catch 하고~ 쿼리문 날리고 ~ 자원 반납하는 과정이 획기적으로 줄어들었다. **다만 쿼리문은 직접 날려야 한다. 사용하기 위해서는 build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리를 추가해야 한다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' 위처럼 라이브러리를 등록하면, Spring Boot는 이를 사용하는데 필요한 라이브러리를 자동으로 가져온다. Spring Boot는 spring-boot-starter라는 사전에 정의한 의존성 조합을 제공한다. Jdbc 등 프로젝트에 설정해야 하는 대부..
2022.02.25 -
Spring 통합 테스트
기존의 테스트 코드는, 해당 테스트 클래스 내에서 단독으로 진행되었다. 이번에는 Spring 서버를 띄운 상태로 테스트를 진행하였다. 1. @SpringBootTest 이 어노테이션은 Spring Main Application(@SpringBootApplication 어노테이션)을 찾은 뒤 동일 패키지의 하위 모든 Bean을 찾아온다. package first.firstspring; @SpringBootApplication public class FirstSpringApplication { public static void main(String[] args) { SpringApplication.run(FirstSpringApplication.class, args); } } *Bean을 스프링이 자동으로 ..
2022.02.25 -
스프링 웹 개발 방식 - 정적컨텐츠, MVC 패턴, API
1. 정적컨텐츠 정적 컨텐츠는 서버에서 가공하지 않은 파일을 사용자에게 그대로 보내주는 방식 2. MVC와 템플릿 엔진 서버에서 프로그래밍을 통해 HTML을 동적으로 변경하여 사용자에게 전송하는 방식. 이를 위해 Model – View – Controller로 관심사를 나눈다. Controller는 내부 동작을 처리하며, Model은 데이터를 담아 controller에 전달해주는 역할을, View는 사용자에게 보여지는 부분을 담당한다(화면 출력). Model은 분리된 코드를 연결하는 역할(데이터 저장 및 전송)을 수행한다. 클라이언트로부터 입력 받은 데이터는 Model에 저장되어 Controller로 전달된다. Controller는 작업 결과를 Model에 저장하며 이 Model은 출력 파트(View)로..
2022.02.16 -
Cookie & Session
쿠키와 세션에 대한 간략한 정리 먼저 쿠키는, 이름과 값의 쌍으로 구성된 정보이다. 역시나 아스키 문자만 저장 가능하다(한글은 URL 인코딩이 당근 필요하다). 구성품은 크게 1) 도메인 2) 경로(PATH) 3) Name - Value 4) 유효기간 서버가 생성한 뒤 브라우저로 전송하며, 브라우저에 저장된다. 유효기간 이후 자동 삭제된다. 사용자가 서버에 요청을 보내면, 서버는 도메인과 path가 일치하는 경우 쿠키를 자동 전송한다. 쿠키는 쉽게 말하면 클라이언트 식별 기술이다.. //1. 쿠키를 생성하고 Cookie cookie = new Cookie("id", id); //2. 응답에 저장 response.addCookie(cookie); 쿠키는 위와 같이 사용하며 아래와 같이 setMaxAge(0..
2022.02.09