전체 글

인내, 일관성, 그리고 꾸준함을 담습니다.
스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 008. 로그인 처리 - 쿠키. 세션

쿠키를 이용한 로그인 처리 로그인 상태 유지에 쿼리 파라미터를 유지하는 방법은 어렵고 번거로우며 때에 따라서는 보안 문제에 취약하다는 단점이 있다. 따라서 우리는 쿼리 파라미터를 이용하는 방법이 아닌 웹 브라우저에 쿠키를 담아보내는 방법으로 요청시마다 웹브라우저가 쿠키를 함께 발송하게 끔하여 로그인 세션을 유지하는 방법을 공부해보겠다. 웹 서버에서 클라이언트 브라우저에 쿠키를 전송하는 방식은 위와 같고 클라이언트 브라우저에서 수신한 쿠키는 아래 그림과 같이 모든 요청시마다 서버로 전송된다. 쿠키의 종류 쿠키의 종류에는 두가지가 있다 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지 로그인 구현 - 쿠키 사용 1) LoginControll..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 007. Bean Validation

검증코드를 이전과 같이 컨트롤러에 모두 넣는 방식 DataBinder를 쓴다고 해도 ItemValidator를 따로 만들어서 검증 로직을 구성하기는 번거롭다 따라서 다음과 같은 방법으로 스프링은 검증을 위한 편의 기능을 제공한다 아래는 강의를 듣고 완성한 코드를 모두 첨부한 것이다. package hello.itemservice.domain.item; import lombok.Data; import org.hibernate.validator.constraints.Range; // Hibernate Validator에서만 동작 import org.hibernate.validator.constraints.ScriptAssert; import javax.validation.constraints.Max; imp..

일상생활/월별 회고

[8월 중간 회고] 어느새 방학도 지나가고 있습니다

7월 초에 방학 동안 했으면 하는 계획 8월 중반이 지나가는 지금 얼마나 완료되었을까? 1) SQL / DB 수업 = 완전히 완강 2) 파이썬 수업 = 시작 부분 (8/9일 시작 - 9월 전에 완강) 3) 스프링 MVC - 2편 중후반까지 완료 4) 운동 - 꾸준히 하다가 쉬어가는 중 공부 2020년 편입학이 끝나고, 공부가 되지 않아도 잡고 있었지만 그건 노력이 아니라 미련함이었다 스스로 쉬어감이 필요하다는 사실을 깨달았지만 조급함에 공부를 놓지 못했었지만 과감하게 1년을 휴학할 용기를 갖고 내가 짰던 계획을 쓰레기통으로 넣은 순간 모든 문제가 풀리기 시작한 것 같다 MVC 1편에 이어 2편도 듣고있다, 지금 Validation을 수강 끝내고 이제 로그인 파트 여름방학 때 김영한 선생님 과목을 전부 듣..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 006. Validation (2)

BindingResult 가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출됨. BindingResult에 검증 오류를 적용하는 3가지 방법 @ModelAttribute의 객체에 타입 오류 등으로 바인딩이 실패하는 경우 스프링이 FieldError를 생성하여 BindingResult에 넣어준다 개발자가 직접 넣어준다 @Validated 사용 FieldError, ObjectError의 확장 public FieldError(String objectName, String field, String defaultMessage); public FieldError(String objectName, String field, @Nullable Object rejectedValue..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 005. Validation (1)

상품 관리 시스템 등록/수정 폼에 다음과 같은 검증로직을 추가한다 타입 검증 필드 검증 특정 필드 범위 넘어서는지 검증 컨트롤러의 역할 중 하나 HTTP 요청이 정상인지 검증한다 클라이언트 검증 : 조작 가능 / 보안에 취약 서버 검증 : 즉각적인 고객 사용성, 즉 새로고침 REQUEST/RESONSE가 와야해서 사용성이 떨어짐 둘이 적절히 섞되, 서버 검증은 필수로 이루어져야한다. API 방식 이용시 스펙을 잘 정의해서 검증 오류를 API 응답으로 잘 전달해야 함. addItem() 컨트롤러 메서드를 통해 검증 로직 구현 / 발전시키기 V1 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes re..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 004. 국제화 메세지

특정 단어를 모두 다른 단어로 바꾸고 싶으면 모든 곳을 수정해야하는 난관에 봉착할 수도 있다?! 수십개의 파일을 모두 고치려면 머리아프다 HTML에 하드코딩되어있기 때문인데 -> 좀 더 편하게 하는 방법이 없을까? // 메세지 기능을 사용하자! 별도로 만들 필요 없음 - 설정까지 다 되어있음 스프링 부트에서는 메세지 - 인터페이스 setBasenames - 읽을 파일 defaultEncoding - 인코딩 형식 스프링 메세지 소스 설정 위에서 아주 간략하게 설명한 스프링 메세지를 사용하려면 스프링 부트는 해당 기능이 이미 빈으로 등록되어 있어 application.properties에 간단하게 다음 내용의 등록을 통해 사용할 수 있으나, 단순 스프링이라면 다음과 같이 스프링 빈을 등록해주어야 한다. @B..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 003. 스프링 통합과 폼

타임리프와 스프링 통합에 관해 공부해보자 관련 통합 덕분에 우리는 다음과 같은 기능을 추가적으로 사용할 수 있다. SpringEL 문법의 통합 ${@myBean.doSomething()} 처럼 스프링 빈을 직접 호출할 수 있음 편리한 폼 관리를 위한 추가 속성 th:object th:field, th:errors, th:errrorclass 폼 컴포넌트 기능 checkbox, radio button, List 등을 편리하게 지원 스프링 메세지, 국제화 메세지를 통해 html 변경 없이 출력하고자 하는 메세지 변경 가능 국제화를 통해 HTTP Header의 Accept-Language에 따라 다른 언어로 html 렌더링 가능 스프링 검증, 오류 처리 통합 (Validated, WebBinder, Bindi..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 002. 타임리프 기본기능(2)

조건부 평가 타임리프의 조건식 if, unless (if의 반대) 타임리프는 해당 조건이 맞지 않는 경우 태그 자체를 렌더링하지 않는다. 조건이 false인 경우 해당 태그 span 자체가 렌더링 되지 않고 사라짐 switch *은 만족하는 조건이 없을때 사용하는 디폴트에 해당함. 주석 1. 표준 HTML 주석 2. 타임리프 파서 주석 html data 3. 타임리프 프로토타입 주석 표준 HTML 주석 자바스크립트의 표준 HTML 주석은 타임리프가 렌더링하지 않고 그대로 남겨둔다 타임리프 파서 주석 타임리프 파서 주석은 타임리프의 주석으로 렌더링 과정 중 주석 부분이 날아간다 타임리프 프로토타입 주석 타임리프 렌더링이 거쳐지는 경우 정상 렌더링, 아니면 사라짐 즉, HTML 코드 자체를 열면 주석처리가 ..

스프링 공부 (인프런 김영한 선생님)/스프링 MVC 2편

[스프링 웹 MVC 2편] 001. 타임리프 기본기능

타임 리프의 특징 서버 사이드 렌더링 (SSR 지원) - Client가 아닌 Server에서 HTML을 동적으로 생성하여 Client에 전달 네츄럴 템플릿 JSP의 경우 Chrome 개발자 도구에서 소스를 보면 개발자가 알기 어렵게 렌더링되어 출력되는 반면에 Spring Thymeleaf의 경우 HTML 소스가 Plain하게 짜인듯이 소스를 볼 수 있음. 즉, 순수 HTML을 유지하면서도 뷰 템플릿을 사용할 수 있는 특징을 칭함. 1. 타임리프의 기본 특징 타임리프를 사용하려면 HTML 코드 위에 다음과 같이 명시해야 함 2. 타임리프의 기본 표현식 1. 텍스트 : text, utext text와 utext를 구분하는 가장 큰 차이는 Escape 처리가 되느냐 마느냐의 차이이다. 예를 들어 는 기본적으로..

칼럼

[내일배움코스] 프로그래머스 SQL/DB 기초반 수강 후기

JPA를 본격적으로 공부하기 전 전공자인 제가 DB지식의 부족함을 느껴서 프로그래머스를 통해 SQL/DB강의를 수강하게 되었습니다 내일배움카드를 고용노동부를 통해 발급받은 국비지원 프로그램입니다! SQL 리더 단테님의 강의를 듣게 되었는데요 후기 작성 시작해보겠습니다 일단 이 강의를 수강한 사람으로써 본 강의는 SQL의 사용법에 초점이 맞춰져 있습니다(MYSQL) 정규화나 이런 이론적 접근이 아닌 초보자를 위한 강의라 생각됩니다. 장점 SQL 쿼리에 대해 모르는 사람들에게 큰 도움이 됨 시각적으로 집합이나 이런 내용으로 이해를 돕고, 몇몇 실습들을 통해 해당 내용의 복습과 활용이 가능함 후반부에 PIVOT이나 통계처리와 같은 부분도 배울 수 있어서요 이후에 공부를 좀 더 해나간다면 엑셀이나 데이터를 이용..

ProgYun.
Perseverance, Consistency, Continuity