분류 전체보기 439

자바스크립트 1강. 자료형

자바스크립트 해석기는 브라우저이다. 따로 설치해줄 프로그램은 없다. 파일을 생성할 때 확장자를 .js로 만들지 않고 .html로 만들어준다. 브라우저는 .js파일을 읽지 못하기 때문이다. html 파일안에 있는 자바스크립트 언어를 해석하는 것이다. 그래서 자바스크립트가 스크립트 언어인 것이다. 스크립트 언어는 기생언어이다!! html 파일 안에서 태그 안에 자바 스크립트 코드를 적어준다. 이 태그 안에 있는 코드는 브라우저가 해석하는 것이 아니다. 브라우저 엔진은 html을 분석해서 그림을 그려주고 자바스크립트 코드를 해석하는 인터프리터가 브라우저 안에 따로있다. 인터프리터는 실행시에 한줄씩 해석하고 실행된다. 자바스크립트의 자료형은 let 하나밖에 없다. 자료형이 따로 없기 때문에 모든 변수는 4바이트..

JavaScript 2022.03.11

스프링 31강. JPA Fetch 전략

JPA 쿼리 기본 전략을 바꾸기 위해서 JPA Fetch 전략을 알아야 한다. 변경 방법에는 Lazy(지연 로딩), Eager(즉시 로딩) 2가지가 있다. 우선 Lazy부터 사용해보자. user 오브젝트를 사용하기 전까지 user의 정보를 SELECT 해오지 않는다. 메인 페이지를 실행했을 때 SELECT 쿼리가 한 번만 일어난다. 메인 페이지에서는 user 오브젝트가 필요하지 않으니까! user 오브젝트가 필요한 글 상세보기 페이지로 가보자. 쿼리가 두 번 실행된다. post의 user 오브젝트가 null이었으니까 필요할 때 이제야 user를 SELECT 하는 것이다. 게으르게(Lazy)!! user 오브젝트가 null인걸 알아차리고 뒤늦게 SELECT 하는 타이밍은 컨트롤러가 뷰를 호출하기 전 mus..

Spring/Blog-V1 2022.03.10

스프링 30강. JPA 쿼리 기본 전략

터미널 창에 SQL 쿼리를 예쁘게 정렬해서 보여주는 설정이다. application.yml 파일에 추가해주자. spring: jpa: properties: hibernate.format_sql: true 터미널 창을 clear 하기 위해서는 Ctrl + Shift + A 커맨드 팔레트를 열어서 terminal:clear를 검색해줘야 한다. 과정이 귀찮으니까 오른쪽 설정 아이콘을 눌러 단축키를 설정해주자. 키 바인딩 빈칸을 더블클릭해 원하는 단축키를 설정해주면 된다. Ctrl + Shift + C로 설정해주었다. 이제 서버를 시작시키고 메인 페이지에 들어가 보면 post를 findAll( ) 하는데 이때 터미널 창에서 쿼리를 확인해보자. post만 SELECT 해오는 게 아니라 user까지 SELECT 하..

Spring/Blog-V1 2022.03.10

request 객체

request 객체가 가진 메서드에 대해 알아보자! https://swdevelopment.tistory.com/173 JSP / 톰캣의 내장객체와 해당 메서드 JSP페이지는 웹컨테이너겸 컴파일러인 톰캣에의해 서블릿 클래스로 변환되어 사용자의 요청을 수행한다. 서블릿 클래스가 인스턴스로 생성되고 사용자의 요청에 맞는 응답 페이지를 생성하기 swdevelopment.tistory.com request 객체 쿠키, URL/URI 요청 방식과 관련된 메서드 리턴 타입 메서드명 설명 Cookie[] getCookies( ) HTTP요청 메시지의 헤더에 포함된 쿠키를 javax.servlet.http.Cookie 배열로 리턴한다. String getServerName( ) 서버의 도메인명을 문자열로 리턴한다. i..

Spring/Blog-V1 2022.03.09

스프링 29강. 글 쓰기 페이지와 글 목록 페이지

// 메인 페이지 - 인증 X // GET 글 목록 페이지 /post/list/ @GetMapping({ "/", "post/list" }) // { "/", "post/list" }로 쓰면 두 가지 방법으로 들어올 수 있음 public String list(Model model, Post post) { List posts = new ArrayList(); // 1. postRepository의 findAll() 호출 posts = postRepository.findAll(); // 2. model에 담기 model.addAttribute("posts", posts); // 3. mustache 파일에 뿌리기 return "post/list"; } {{> /layout/header}} {{#posts}}..

Spring/Blog-V1 2022.03.09

스프링 28강. RestfulAPI 주소 설계 규칙

REST(REpresentational State Transfer) : 자원의 상태 전달 네트워크 아키텍처이다. RestfulAPI 주소 설계 규칙이다. https://chinggin.tistory.com/454 REST API & URI 설계 원칙 (RFC-3986) REST ( Representational State Transfer : 자원의 상태 전달) - 네트워크 아키텍처이다. 1. Client와 Server가 서로 독립적으로 분리되어 있어야 합니다. 클라이언트와 서버가 한 곳에 구성되어있다던지, 서로의 chinggin.tistory.com PostController와 UserController의 주소 설계를 고쳐주자. package site.metacoding.dbproject.web; imp..

Spring/Blog-V1 2022.03.09

스프링 27강. 세션과 쿠키

http 특징 사용자는 request를 하고, 서버는 response를 한다. 항상! stateless한 상태 -> 서버는 클라이언트가 누구인지 매번 확인해야한다. -> 상태 지속 stateful한 척하기 위해 세션과 쿠키가 필요하다. 한번이라도 요청하면 서버가 들고있는 세션 아이디가 있다. 자기 서버의 세션 메모리 영역을 찾을 수 있는 키 값인 것이다. request 헤더에는 Cookie 키 값에 저장 request.getHeader.Cookie response 헤더에는 Set-Cookie 키 값에 저장 response.setHeader.Set-Cookie (서버쪽 응답) 서버는 최초의 응답을 할 때 헤더에 쿠키를 심어준다. 헤더의 Set-Cookie 키 값에 심어주는 것이다. http request ..

Spring/Blog-V1 2022.03.08

스프링 26강. DNS(Domain Name System)

클라이언트가 서버에 접속하기 위해 필요한 것 프로토콜 -> 브라우저가 알아서 http 프로토콜을 지켜준다. IP 포트 번호 -> 브라우저가 알아서 80으로 잡아준다. 엔드 포인트(식별자) -> 필요하지만 몰라서 적지 않으면 자동으로 index 파일로 간다. 그렇다면 IP는? DNS라는 게 필요하다. DNS(Domain Name Syetem) : 서버의 도메인 이름을 서버의 IP 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발된 시스템 클라이언트가 naver.com의 도메인만 알고 있으니 이를 DNS에 요청한다. DNS에서 naver.com의 10.1.8.7 주소를 찾아준다. DNS는 데이터를 공유해주기 때문에 서버이다. 갑인 것이다. 도메인과 주소를 키=값 형태로 들고 있다. DNS는..

Spring/Blog-V1 2022.03.08

스프링 25강. 유효성 체크

1. 프론트에서 막기 (일반인 상대) required : 값을 입력하지 않으면 submit이 안됨 required를 추가해줘서 공격을 막았다고 생각하겠지만 아니다. 브라우저에서의 공격은 막혀있지만 /join이라는 주소만 알고 있다면 Postman으로 공격이 가능하다. 2. 백엔드에서 막기 (악의적인 공격자 상대) body로 넘어온 값을 확인한다. null 체크, 공백 체크, @없는 잘못된 형식의 이메일, 비밀번호 길이 12자(한글로는 4자 / 한글 막기), 모든 값을 잘 적고 비밀번호 길이를 막아놓지 않은 채 길게 적으면 DB에서 터져버린다. -> 문법 오류 프론트에서 maxlength 설정이 가능하지만 이것 또한 postman으로 공격이 가능하다. 일반적으로 브라우저에서만 요청을 하는 게 아니기 때문에..

Spring/Blog-V1 2022.03.08

스프링 24강. 스프링 순서도

request 요청이 들어오기 전의 스프링은 이런 구조의 모양을 가진다. 단일 책임의 원칙(SRP)에 의해 Controller와 Repository를 분리한다. 분리해두면 재사용이 가능해서 PostController에서도 UserRepository 사용이 가능해진다. 클라이언트가 request 요청이 들어오면 성의 문앞에서 문지기가 web.xml에 따라 필터링을 거친다. 그리고 8080번 포트 문을 지나 컨텍스트 패스를 거쳐 디스패쳐 서블릿의 바로 직전에 클라이언트만의 request와 connection 객체를 생성한다. 정확히 말하면 풀링 기술로 이미 만들어져있는 객체를 가지고 오는 것이다. 톰캣이 가지고 있는 풀링공간의 request, DBCP에 conn 객체가 만들어져 있는 공간을 가리키는 주소를 ..

Spring/Blog-V1 2022.03.07