웹 백엔드 공부 시작합니다.
desc 명령어로 테이블 구조를 확인하는 습관을 갖자.
mysql에서 MUL은 FK를 의미add - 컬럼 추가drop - 컬럼 삭제change - 컬럼 변경rename - 테이블 이름 변경
Java가 제공하는 표준 인터페이스Java 프로그램 내에서 SQL문을 실행하기 위한 자바 APIDB 벤더(mysql, oracle 등)에 관계없이 똑같은 방법으로 사용하면 된다.(=인터페이스의 특성)import java.sql.\
Maven Project(maven-archetype-quickstart 1.1)pom.xml 의존성 추가목표 : MySQL의 role 테이블을 select로 읽어오기Role.java 코드작성RoleDao.java 코드작성실행코드
Role.java(DTO)는 JDBC 실습1 참고목표 : role 테이블에 insert로 새로운 row 추가RoleDao.java 코드작성실행코드작성결과
Role.java(DTO)는 JDBC 실습1 참고목표 : role 테이블의 description을 변경RoleDao.java 코드작성실행코드작성결과
Role.java(DTO)는 JDBC 실습1 참고목표 : role 테이블의 row 삭제RoleDao.java 코드작성실행코드작성결과
Role.java(DTO)는 JDBC 실습1 참고목표 : role 테이블의 모든 데이터를 select로 읽어오기RoleDao.java 코드작성실행코드작성결과
TenServlet.java (Dynamic web module version 3.1)
TenServlet.java (Dynamic web module version 2.5)
HttpServlet의 service 메서드는 템플릿 메서드 패턴으로 구현클라이언트 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response) 메서드 호출클라이언트의 요청이 POST일 경우에는 자신이 가지고 있는 doPost(request
웹 브라우저에 URL입력하면 도메인과 port번호를 이용해 서버에 접속Path정보, client ip, client의 다양한 정보를 포함한 요청정보를 서버(WAS)에 전달WAS는 웹 브라우저로부터 Servlet요청을 받으면,3-1. 요청할 때 가지고 있는 정보를 Htt
header 정보를 읽어들이는 HttpServletRequest 객체의 getHeaderNames() 메서드 실습
parameter를 읽어들이는 HttpServletResponse 객체의 getParameter() 메서드 실습\-http://localhost:8080/firstweb/param?name=choi&age=27header결과
uri, url, path, remote host등의 정보 출력결과
모든 JSP는 항상 서블릿으로 바뀌어서 동작한다.Declaration (선언문) : <%@ %>로 묶는다.Scriptlet : html 내에서 java 코딩을 하기 위해 <% %> 로 묶는 부분Expression (표현식) : 변수의 값을 넣을 수 있다.
JSP 실행시 Servlet으로 바뀌어서 동작하는 것을 직접 확인해보자이전 실습에서 실행한 sum10.jsp 파일에 대해 sum10_jsp.java 파일이 생성된 것을 workspace 하위폴더에서 확인할 수 있다.이를 통해 JSP는 실행시 항상 Servlet으로 변환
위 jsp 파일을 실행시킨 후 lifecycle_jsp.java 파일을 확인해보면 \_jspInit()과 \_jspDestroy() 메서드가 비어있는 것을 확인할 수 있다. response에 포함된 것은 serivce밖에 없기 때문이다.(매번호출)\_jspInit(),
선언문(Declaration) - <%! %> : 전역변수 선언 및 메서드 선언에 사용스크립트릿(Scriptlet) - <% %> : 프로그래밍 코드 기술에 사용표현식(Expression) - <%=%> : 화면에 출력할 내용 기술에 사용servlet
Servlet 파일의 \_jspService() 메서드에 미리 선언된 객체들이 있는데, 이 객체들을 jsp에서 사용가능하다.response, request, application, session, out과 같은 변수를 내장객체라고 한다.예제
redirect01.jsp 실행시 redirect02.jsp 결과가 출력동작 과정1\. 요청 : 웹 브라우저가 WAS에게 redirect01.jsp 요청2\. 응답 : WAS가 웹 브라우저에게 redirect02.jsp로 리다이렉트 요청(응답코드 302, locatio
Client가 서버에게 요청을 보내면 WAS는 request 객체와 response 객체를 생성한다.요청이 들어와서 응답을 할 때까지 request, response 객체는 유지가 되는 상태이다. forward forward는 request, response 객체가 한
Servlet은 프로그램 로직이 수행되기에 유리하다. (Java)JSP는 결과를 출력하기에 유리하다. (html)프로그램 로직 수행은 Servlet에서, 결과 출력은 JSP에서 하는 것이 유리하다.Servlet과 JSP의 장단점을 해결하기 위해 Servlet에서 프로그
Page : 한 페이지 내에서 지역변수처럼 사용Request : Client로부터 요청이 들어와서 Server가 어떤 일을 수행하고 응답을 보낼 때까지 변수가 유지되는 경우 사용Session : Session 객체가 생성되서 소멸될 때까지 사용. 웹 브라우저 별로 변수
PageContext 추상 클래스를 사용한다.JSP 페이지에서 pageContext라는 내장 객체로 사용 가능하다.forward가 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없다.사용방법은 Application scope나 Session scope,
http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우 사용한다.JSP에서는 request 내장 변수를 사용한다.Servlet에서는 HttpServletRequest 객체를 사용한다.값을 저장할 때는 request 객체의 setAtt
Session은 각각의 client마다 다른 상태정보를 갖고 있기 때문에 이를 관리하기 위해 사용(장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용 - 상태 유지)웹 브라우저 별로 변수를 관리하고자 할 경우 사용한다.웹 브라우저간의 탭간에는 세션정보가 공유
웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.ServletContext 인터페이스를 구현한 객체를 사용한다.JSP에서는 application 내장 객체를 이용한다.Servlet의 경우는 getServletContext() 메서드를 이용하여 appli
표현언어(Expression Language)는 값을 표현하는 데 사용되는 스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 한다.JSP의 scope에 맞는 속성 사용집합 객체에 대한 접근 방법 제공수치 연산, 관계 연산, 논리 연산자 제공자바 클래스 메서드 호출
실습 결과
실습1 결과 실습2 결과
JSTL(JSP Standard Tag Library)은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tag 형태로 작성할 수 있게 도와준다./Project/WebContent/WEB-INF/lib 경로에 taglibs-standard-impl-1.2.5
코어태그 : 변수 지원 태그 - 프로퍼티, 맵의 처리 코어 태그 : 흐름제어 태그 - if 실습 코어 태그 : 흐름제어 태그 - choose 실습
배열 및 Collection에 저장된 요소를 차례대로 처리한다.지정한 URL에 연결하여 결과를 지정한 변수에 저장한다.
지정한 페이지로 리다이렉트한다. response.sendRedirect()와 비슷JspWriter에 데이터를 출력한다.표 escapeXml 속성이 true일 경우 변환되는 문자
Spring Framework란? Enterprise급 어플리케이션을 구축할 수 있는 가벼운 솔루션 One-Stop-Shop(모든 과정을 한꺼번에 해결하는 상점) 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어있다. IoC 컨테이너이다. (IoC = Inver
컨테이너(Container) 컨테이너는 인스턴스의 생명주기를 관리한다. 생성된 인스턴스들에게 추가적인 기능을 제공한다. ex. 앞서 실습에서 servlet 클래스를 정의했지만, 실제 인스턴스화 하는 작업을 직접하지는 않았다. 이는 Tomcat이 대신 해주었다. WAS가
Directory Tree UserBean.java 생성 pom.xml 의존성 추가 resources 폴더 및에 applicationContext.xml 생성 main폴더 내에 어디든 생성해도 상관없지만 관리의 용이를 위해 resource 폴더 마련
Spring IoC/DI 컨테이너(xml파일을 이용한 설정1) 에서 이어짐Directory TreeEngine.java 생성Car.java 생성applicationContext.xml 수정ApplicationContextExam02.java 생성
앞서 배운 xml 설정을 대체하여 의존성 주입을 할 수 있다. 자바 클래스 파일을 설정 파일로 사용한다.@Configuration 어노테이션으로 표시스프링 설정 클래스를 선언하는 어노테이션bean을 정의하는 어노테이션@Controller, @Service, @Repos
Directory 구조Class 혹은 Method 우클릭 후 Run As -> JUnit TestClass 선택시 메서드 전체에 대해 검사Method 선택시 해당 메서드에 대해서만 검사Assert.assertEquals(2, result); -> Assert.asser
pom.xml 수정 - spring-context 추가ApplicationConfig.java 추가CalculatorService.java 수정 - @Component 추가Main.java 추가기존 테스트 클래스는 테스트할 객체를 @Before가 붙은 메서드에서 초기화
JUnit x Spring 에서 이어짐Integration test : 하나의 bean을 테스트할 때 관련된 bean들이 모두 잘 동작하는지 테스트Unit test : 관계된 다른 클래스와 상관 없이 특정 bean이 가진 기능이 잘 동작하는지 확인하는 것인수테스트 :
JDBC 프로그래밍의 반복적 요소를 Spring이 처리해준다.org.springframework.jdbc.core에서 가장 중요한 클래스리소스 생성, 해지를 처리해 connection을 close하는 것을 잊어 발생하는 문제 등을 피할 수 있게 함Statement의 생
DTO는 Data Transfer Object의 약자계층간 데이터 교환을 위한 Java beans이다.여기서의 계층이란 controller view, business layer, persistent layer를 의미한다.일반적으로 DTO는 로직을 가지고 있지 않고, 순
Directory 구조pom.xml 라이브러리 추가ApplicationConfig.java 작성DBConfig 작성DataSourceTest 작성referenceJava Config, 어노테이션을 이용한 설정
Directory 구조Role.java 작성RoleDaoSqls.java 작성RoleDao.java 작성ApplicationConfig 수정 - @ComponentScan 추가SelectAllTest.java 작성결과
Directory 구조RoleDaoSqls.java 수정 - UPDATE 쿼리 추가RoleDao.java 수정 - 메서드 추가JDBCTest.java 작성결과
RoleDaoSqls.java 수정 - 쿼리 추가RoleDao.java 수정 - 메서드 추가JDBCTest.java 수정결과1건 SELECT1건 DELETE
Model : View가 렌더링하는데 필요한 데이터. EX. 사용자가 요청한 상품 목록, 주문 내역View : 실제로 보이는 부분, Model을 사용하여 렌더링한다. JSP, JSF, PDF, XML 등으로 결과를 표현Controller : 사용자의 액션에 응답하는 컴
Spring MVC는 Model 2 아키텍처로 되어있다.DB를 제외한 파란색 부분 : Spring이 제공보라색 부분 : 개발자가 구현초록색 부분 : Spring이 제공하는 부분, 개발자가 구현하는 부분 같이 존재순서 잘 숙지하기Spring MVC를 이해하는 것 = Di
프론트 컨트롤러(Front Controller)클라이언트의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고 핸들러가 처리할 결과를 받아 사용자에게 응답 결과를 보여준다.보통 1개를 선언해서 사용한다.여러 컴포넌트를 이용해 작업한다.Locale(지역화)Spring M
maven project webapp으로 생성resources 폴더와 같은 위치에 java 폴더 생성pom.xml 라이브러리 추가Project FacetsDynamic Web Module : 3.1Java : 11JavaScript : 1.0Navigator 내에서 m
DispatcherServlet을 FrontController로 설정 방법 web.xml 파일에 설정 javax.servlet.ServletContainerInitializer 사용 서블릿 3.0 스펙 이상에서 web.xml파일을 대신해서 사용할 수 있다. org.s
웹 브라우저에서 http://localhost:8080/mvcexam/plusform 라고 요청을 보내면 서버는 웹 브라우저에게 2개의 값을 입력받을 수 있는 입력 창과 버튼이 있는 화면을 출력한다.웹 브라우저에 2개의 값을 입력하고 버튼을 클릭하면 http&
Directory 구조http://localhost:8080/mvcexam/userform 으로 요청을 보내면 이름, email, 나이를 물어보는 폼이 보여진다.폼에서 값을 입력하고 확인을 누르면 post방식으로 http://localhost:8080
별도의 객체로 분리별도의 메소드로 분리쇼핑몰에서 게시판에서도 회원 정보를 보여주고, 상품 목록 보기에서도 회원 정보를 보여줘야 한다면 회원 정보를 읽어오는 코드는 어떻게 해야 할까? \-> 회원 정보를 읽는 코드를 분리시킨다. (회원 정보 = 비즈니스 메서드)비지니스
방명록 만들기 실습 Spring JDBC를 이용한 DAO 작성 Controller + Service + DAO 트랜잭션 처리 Spring MVC에서 폼 값 입력받기 Spring MVC에서 redirect하기 Controller에서 jsp에게 전달한 값을 JSTL과 EL
REST API는 다음과 같은 3가지 부분으로 구성된다.자원(Resource) : 자원은 Data, Meta Data, HATEOAS로 나뉜다.행위(Verb) : HTTP Method로 표현된다.표현(Representations)구성 요소(클라이언트, 서버 등) 사이의
Directory 구조Role.java 추가 (DTO)RoleDao.java 추가 (DAO)RolesServlet.java 생성결과IE가 안되서(다운로드 페이지로 이동) Chrome으로 Use external web browser 해서 실행했다.
Directory 구조RoleDao.java 수정RoleByIdServlet.java - servlet 파일 추가결과
Directory 구조 - Spring MVC를 이용한 웹 페이지 작성 4 프로젝트에서 이어짐 PlusResult.java 생성PlusApiController.java 생성pom.xml - jackson 라이브러리 추가DispathcerServlet은 컨트롤러 메소드를
WebMvcContextConfiguration.java 작성DBConfig.java 작성ApplicationConfig.java 작성web.xml 작성index.jsp결과http://localhost:8080/guestbook/ 경로로 들어가 index.js
가장 이상적인건 JUnit 등으로 단위 테스트를 진행하는 것이지만, 일단 GuestbookDaoTest.java를 만들어서 Java Application으로 실행시켜 DB 저장이 잘 되는지 확인해보자.
GuestbookService.javaGuestbookServiceImpl.javaGuestbookServiceTest.java테스트 파일을 만들어 입력이 제대로 되는지 확인해 보자. (Run Java Application)guestbook 테이블의 id가 3인 것은
GuestbookController.javalist.jsp결과
Spring 4 에서 Rest API 또는 Web API를 개발하기 위해 등장한 애너테이션이다.이전 버전의 @Controller와 @ResponseBody를 포함한다.자바 객체와 HTTP 요청 / 응답 바디를 변환하는 역할@ResponseBody, @RequestBod
레이어드 아키텍처(Layered Architecture) 실습5에서 이어짐GuestbookApiController.java 작성Rest API를 테스트 하기 위한 클라이언트 tool - 구글 확장 프로그램 Talend API Tester 사용SCHEME :// HOST
Web API를 많이 작성하다보면 웹 어플리케이션을 실행하고 브라우저를 열어서 테스트할 URI를 입력하고 다시 코드를 작성하고 웹 어플리케이션을 재시작하고 등을 반복하게 된다.Web API를 실행하는 시간보다 웹 어플리케이션을 실행하고 종료하는 시간이 더 오래걸리는 상
Directory 구조pom.xmlWebInitializer.javaApplicationConfig.javaMvcConfig.javareferenceSwagger 개요 - https://www.boostcourse.org/web326/lecture/58988S
CalculatorService.javaWeb API 클래스 작성2-1. CalculatorResult.java2-2. CalculatorApiController.javaWeb API 실행http://localhost:8080/calculator/api/cal
네이버 예약 서비스의 메인 페이지에서 필요한 3가지의 Web API와 상세페이지와 관련된 2가지의 Web API를 작성제공된 SQL을 이용해서 테이블을 생성하고, 샘플데이터를 입력합니다.maven을 이용해서 웹 어플리케이션 프로젝트를 작성합니다.학습했던 것처럼 cont
HTTP 프로토콜은 상태 유지가 안되는 프로토콜이다.이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않음웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않음상태 유지를 위해 Cookie와 Session 기술
클라이언트 단에 저장되는 작은 정보의 단위클라이언트에서 생성하고 저장될 수 있고, 서버 단에서 전송한 쿠키가 클라이언트에 저장될 수 있다.서버에서 클라이언트의 브라우저로 전송되어 사용자의 컴퓨터에 저장한다.저장된 쿠키는 다시 해당하는 웹 페이지에 접속할 때, 브라우저에
레이어드 아키텍처(Layered Architecture) 실습5에서 이어짐쿠키를 브라우저별로 따로 관리하는 것을 볼 수 있다.
@CookieValue 애너테이션으로 코드 간결하게 하기
클라이언트 별로 서버에 저장되는 정보웹 클라이언트가 서버측에 요청을 보내게되면 서버는 클라이언트를 식별하는 session id를 생성서버는 session id를 이용해서 key와 value를 이용한 저장소인 HttpSession을 생성서버는 session id를 저장하
/guess로 요청을 하면 컴퓨터가 1부터 100 사이의 임의의 값 중의 하나를 맞춰보라는 메시지가 출력합니다.해당 값은 세션에 저장합니다.사용자는 1부터 100 사이의 값을 입력합니다.입력한 값이 세션 값보다 작으면, 입력한 값이 작다고 출력합니다.입력한 값이 세션
@SessionAttributes 파라미터로 지정된 이름과 같은 이름이 @ModelAttribute에 지정되어 있을 경우 메소드가 반환되는 값은 세션에 저장된다.아래의 예제는 세션에 값을 초기화하는 목적으로 사용되었다.@SessionAttributes의 파라미터와 같은
웹 어플리케이션을 사용하다 보면 로그인, 로그아웃을 하게 된다. 이렇게 아이디와 암호를 이용해서 로그인 하는 과정을 인증(Authentication)이라고 한다.네이버 카페를 사용해보면 로그인을 했다 하더라도, 특정 카페는 회원가입을 하고 어느정도 이상의 등급이 되지
Directory 구조
Directory 구조아이디와 암호를 전달받아 로그인을 처리하는 것은 AuthenticationFilter이다. AuthenticationFilter는 아이디에 해당하는 정보를 읽어 들이기 위해 UserDetailsService인터페이스를 구현하는 빈(Bean)을 사용
Directory 구조회원 정보를 저장하는 Member DTO 클래스email 정보와 일치하는 한 건의 회원 정보를 읽어들인다.회원 정보를 읽어들이는 MemberDao 클래스회원의 권한(Role)정보를 저장하기 위한 MemberRole DTO 클래스email에 해당하는
Directory
MemberController.java memberinfo.jsp 결과
Spring Security를 활용한 로그인 기능 구현네이버 예약 서비스의 예약하기, 예약 목록 보기, 예약 취소 기능을 구현해당 기능을 Web API 문서로 작성기존의 프로젝트에 Controller, Service, Dao 등을 추가하여 개발합니다.Spring Sec
Dispatcher servlet에서 Handler(Controller)로 요청을 보낼 때, Handler에서 Dispatcher servlet으로 응답을 보낼 때 동작한다.org.springframework.web.servlet.HandlerInterceptor 인터
Spring MVC에서 Session을 이용한 상태유지에서 이어짐addInterceptors 메서드 추가인자로 넘어온 InterceptorRegistry의 addInterceptor에 앞에서 만든 인터셉터 객체를 추가한다.위 코드 부분에 의해 index를 view로 사
인터셉터 사용은 주로 login처리가 돼 있는지를 파악할 때 쓰는 것 같다.referencehttps://to-dy.tistory.com/21모든 request가 아닌 특정한 req에만 실행할 interceptor는 처럼 uri 지정하면 된다.preHandl
컨트롤러의 메서드의 인자로 사용자가 임의의 값을 전달하는 방법을 제공하고자 할 때 사용된다.예를 들어, 세션에 저장되어 있는 값 중 특정 이름의 값을 메서드의 인자로 전달한다.org.springframework.web.method.support.HandlerMethod
인터셉터를 이용해 Controller 공통 로직 처리하기에서 이어짐 웹 어플리케이션에 아규먼트 리졸버를 적용해 HTTP요청 헤더 정보를 저장하고 있는 HeaderInfo 인자타입이 메소드에 있을 경우 자동으로 넘겨주는 예제를 작성해 보자Argument Resolver
정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동프린트 줄 넣기(printlining)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다.시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다.로그가 제공하는 정보의 양은
logging 관련 라이브러리는 다양하다.이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 SLF4J는 제공한다.SLF4J는 로깅 Facade이다.로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다.참고로 logback-classi
아규먼트 리졸버를 이용해 HTTP Header정보를 Map객체에 담아서 Controller에게 전달하기에서 이어짐앞에서 배웠던 인터셉터의 출력 코드를 SLF4J와 logback라이브러리를 이용해 출력하자resource 폴더에 작성기존 LogInterceptor.java
웹 클라이언트가 요청을 보낼 때 HTTP프로토콜의 바디 부분에 데이터(파일 정보)를 여러 부분으로 나눠서 보내는 것으로, 보통 파일을 전송할 때 사용한다.HttpServletRequest는 웹 클라이언트가 전달하는 Multipart데이터를 쉽게 처리하는 메소드를 제공하
SLF4J를 이용한 로그남기기에서 이어짐파일 업로드를 하기 위한 설정과 Controller 구현을 하자DispathcerServlet에게 멀티파트 요청이 올경우 파일 업로드 처리가 될 수 있도록 MultipartResolver객체를 등록최대 10메가 크기의 파일이 저장
파일을 다운로드 Controller를 구현하자localhost:8080/guestbook/download 입력시 지정한 이미지 파일이 다운로드 된다.
예약했던 상품에 댓글 달기, 댓글 목록 보기(기존 내용 수정), 이미지 다운로드 기능 구현해당 기능을 Web API 문서로 작성기존의 프로젝트에 Controller, Service, Dao 등을 추가하여 개발합
ER Diagram 테이블 구조 전체 category display_info displayinfoimage ![](https://images.velog.io/