일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 자바
- Model2
- MVC2
- STS
- 프레임워크
- @Controller
- 메이븐
- 서블릿
- 인텔리제이
- Model1
- 코테
- 스프링
- 롬복
- DDL
- select
- toUpperCase
- 코딩테스트
- 인프런
- 프로그래머스
- Lombok
- 김영한
- 서브쿼리
- MVC
- @RestController
- JSP
- 뉴렉처
- AOP
- Join
- SQL
- 기술 대비
- Today
- Total
목록개발(~국비)/Spring (29)
Heestory

빌드 도구 빌드 : 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정 컴파일, 테스팅, 배포 등 모든 과정의 집합 빌드 과정을 자동으로 수행해주는 도구 자바 빌드 도구 : Ant, Maven, Gradle Maven을 사용하는 이유 : 버전이 업데이트 될 때마다 관련 기능의 라이브러리를 일일이 수정해야하고, 사용법이 달라지면 소스도 같이 수정 → 불편함 해결 → 빌드 + 자동 라이브러리 관리 기능 추가 Maven은 라이브러리를 자동으로 추가 및 관리, 라이브러리 버전을 자동으로 동기화 maven에서 지원하지 않는 라이브러리는 WEB-INF 폴더 내 'lib'라는 폴더를 따로 만들어 그 안에 다운 받은 라이브러리 jar 파일을 추가하여 관리 Maven에서 플러그인이란? 플러그인..

애플리케이션 여러 로직에서 공통으로 관심이 있는 공통 관심사는 스프링 AOP로 해결할 수 있지만, 웹과 관련된 공통 관심사는 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 웹과 관련된 공통 관심사를 처리 할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공한다. 서블릿 필터 HTTP 요청 → WAS → 필터 → 서블릿 → 컨트롤러 이 때 필터에서 적절하지 않은 요청이라고 판단하면 거기에서 끝을 낼 수도 있다. 필터는 체인으로 구성되는데 중간에 필터를 자유롭게 추가할 수 있디. HTTP 요청 → WAS → 필터1 → 필터2 → 필터3 → 서블릿 → 컨트롤러 예)로그를 남기는 필터를 먼저 적용하고 그 다음에 로그인 여부를 ..

로그인 처리하기 - 쿠키 사용 쿠키 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지 LoginController // @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); log.info(..

컨트롤러 : HTTP 요청이 정상인지 검증 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과 보관 Map errors = new HashMap(); //검증 로직 if (!StringUtils.hasText(item.getItemName())){ errors.put("itemName","상품 이름은 필수입니다"); } if(item.getPrice()==null || item.getPrice() 1000000){ errors.put("price","가격은 1,000 ~ 1,000,000까지 허용합니다."); } if..

메시지 기능 : 다양한 메시지를 한 곳에서 관리하도록 하는 기능 hello=안녕 hello.name=안녕 {0} label.item=상품 label.item.id=상품 ID label.item.itemName=상품명 label.item.price=가격 label.item.quantity=수량 page.items=상품 목록 page.item=상품 상세 page.addItem=상품 등록 page.updateItem=상품 수정 button.save=저장 button.cancel=취소 국제화 message_en.properties message_ko.properties 등을 설정해놓고 만약 찾을 수 있는 국제화 파일이 없으면 messages.properties를 기본으로 사용한다. @Test void defau..

상품명 th:object : 커맨드 객체를 지정한다 th:field : HTML 태그의 속성을 자동으로 처리한다. 체크 박스 - 단일 판매 여부 판매 오픈 th:field 없이 히든 필드 추가 th:field="*{open}" 체크 박스 체크 : open=on&_open=on 체크 박스 미체크 : _open=on 체크 박스 - 멀티 @ModelAttribute 의 사용법 컨트롤러의 @ModelAttribute는 별도의 메서드로 적용할 수 있다. @ModelAttribute("deliveryCodes") public List deliveryCodes(){ List deliveryCodes = new ArrayList(); deliveryCodes.add(new DeliveryCode("FAST","빠른 배..

타임리프 특징 서버 사이드 HTML 렌더링(SSR) HTML을 동적으로 렌더링 하는 용도로 사용 네츄럴 템플릿 - 순수 HTML을 최대한 유지하는 특징 - 웹 브라우저에서 파일을 직접 열어도 내용을 확인 할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. (JSP를 포함한 다른 뷰 템플릿들은 해당 파일을 열면, 오직 서버를 통해서 JSP가 렌더링 되고 HTML 응답 결과를 받아야 화면을 확인 할 수 있음) 스프링 통합 지원 타임리프 기본 기능 Tutorial: Using Thymeleaf Tutorial: Using Thymeleaf 1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-..

@RestController : 반환 값으로 HTTP메시지 바디에 바로 입력 @Controller : 반환 값이 String이면 뷰 이름으로 인식, 뷰를 찾고 뷰가 렌더링 +@ResponseBody 추가하면 @RestController 역할 가능 @RequestMapping 다중 설정이 가능하며, 배열로 제공 method를 별도 지정하지 않으면 HTTP 메서드와 무관하게 모두 허용 @PathVariable(경로변수) 사용 :이름과 파라미터 이름이 같으면 생략할 수 있다. consumes , produces consumes : 클라이언트가 서버에서 보내는 데이터 타입, Request Body에 담는 타입을 제한 produces : 서버가 클라이언트에게 반환하는 데이터 타입 @RequestParam @Req..

DispacherServlet HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다. 스프링 부트는 자동으로 등록하면서 모든경로(urlpatterns="/")에 대해 매핑 핸들러 조회 / 핸들러 어댑터 조회 / 핸들러 어댑터 실행 / ViewResolver 호출 / render(model) 호출 등의 역할 진행 (주요 인터페이스들을 등록하여 진행한 것) Spring MVC 구조 핸들러 조회(HandlerMapping) : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.(어댑터가 핸들러를 실..

프레임워크 점진적인 발전 요약 v1 : 프론트 컨트롤러 도입 기존 구조를 최대한 유지하면서 프론트 컨트롤러를 도입 v2: VIew 분류 단순 반복 되는 뷰 로직 분리 v3 : Model 추가 서블릿 종속성 제거 뷰 이름 중복 제거 v4 : 단순하고 실용적인 컨트롤러 v3과 구조 거의 비슷 구현 입장에서 ModelView를 직접 생성해서 반환하지 않도록 편리한 인터페이스 제공 v5 : 유연한 컨트롤러 어댑터 도입 어댑터를 추가해서 프레임워크를 유연하고 확장성 있게 설계 FrontController : 서브릿 하나로 클라이언트의 요청을 받아 맞는 컨트롤러를 찾아 호출 → DispathcherServlet이 FrontController 패턴으로 구현되어 있다. 프론트 컨트롤러 도입 - v1 View 분리 - ..