TIL 41

220329 [Spring] (Interceptor)

1. Interceptor Interceptor 란 Controller에 들어오는 요청 HttpRequest, Controller가 응답하는 HttpResponse를 가로채는 역할을 한다. 쉽게 말해, 요청과 응답을 가로채서 원하는 동작을 추가하는 역할이다. Interceptor을 활용하면 반복적인 불필요한 일들을 대신 처리하여 모듈의 응집도를 높일 수 있다. Interceptor을 구현하기 위해서는 HandlerInterceptor 인터페이스를 구현하는 클래스를 생성해야 하여 사용하고자 하는 메소드를 오버라이딩하면 된다. 1.TestInterceptor.java public class TestInterceptor1 implements HandlerInterceptor{ @Override public b..

TIL 2023.03.29

230322 [jQuery, Ajax] (데이터 주고받기)

AJAX : 서버와 브라우저가 비동기 방식으로 데이터를 주고받는 기술 - 동기 : 페이지 이동과 데이터 전송이 동시에 일어난다. (페이지 이동 + 데이터) - 비동기 : 페이지 이동을 하지 않고 데이터 전송 jQuery는 자바스크립트를 쉽게 활용할 수 있도록 도와주는 라이브러리인데, AJAX 기술을 편하게 사용할 수 있도록 여러 메소드를 제공하고 있다. html 파일에서 body 태그가 끝나기 전에 아래의 script 태그를 추가하면 라이브러리 사용이 가능하다. AJAX 기본 문법 $.ajax({ url: '', //요청경로 type: '', //http 요청 방식 data: {}, //필요한 데이터 success: function(result) { //result : controller에서 반환한 값 ..

TIL 2023.03.22

230321 [Javascript] (댓글 수정 기능)

1. 댓글 수정 기능 1-1. 댓글 목록 조회 [[${reply.replyWriter}]] [[${reply.regDate}]] [[${reply.replyContent}]] controller에서 model 객체를 사용해 넘긴 댓글 목록을 받아 for-each문으로 댓글 목록 조회 기능을 구현했다. 각 댓글 하단에 수정, 삭제 버튼을 추가했고, 해당 버튼은 session에 로그인 정보가 저장되어 있고 로그인 아이디 정보가 댓글 작성자가 같을 때만 보여지도록 했다. 수정 버튼을 눌렀을 때 Javascript를 사용해 댓글 내용 div를 수정이 가능한 input 태그로 변경하려고 한다. 1-2. 댓글 수정 구현 자바스크립트 파일을 생성해 태그로 경로를 지정해줬다. 버튼을 클릭하면 js 파일의 setInpu..

TIL 2023.03.21

230320 [SQL, Spring] (페이징 처리)

1. 기본 세팅 한 페이지에 보여지는 게시글 수 = 10개 한 번에 보여지는 페이지 수 = 5개 +) 등록 최신순으로 조회 ex) 1 2 3 4 5 다음 이전 6 7 8 9 10 다음 이전 11 12 2. ROWNUM을 이용한 쿼리 작성 ROWNUM은 오라클에서 지원하는 가상 컬럼으로, 쿼리의 결과에 가상으로 1번부터 순번을 붙인다. 페이징 처리를 위해 게시글에 ROWNUM으로 순번을 매긴 후, 범위를 지정하여 해당 페이지에 보여줄 게시글만 가져올 수 있다. SELECT BOARD_NUM , BOARD_TITLE , BOARD_WRITER , TO_CHAR(REG_DATE, 'YYYY-MM-DD') AS REG_DATE , READ_CNT , ROWNUM FROM SPRING_BOARD WHERE ROW..

TIL 2023.03.20

230317 [Spring, thymeleaf] (layout)

1. Controller package com.study.test.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class BoardController { //'localhost:8081/list'로 들어오는 http get 요청을 받음 @GetMapping("/list") public String boardList() { //src/main/resources/templates 파일을 기준으로 "" 안의 이름을 가진 html 파일로 이동 return "content/board_list"; } } 2. b..

TIL 2023.03.17

230314 [Spring] (Model / 의존성 주입)

1. Model 객체 controller에서 html로 데이터를 보낼 때 model 객체를 사용한다. request.setAttribute()와 비슷한 역할을 한다. @GetMapping("/test") public String test(Model model) { //html로 데이터 보내기 //model.addAttribute(보내는 이름, 데이터) model.addAttribute("name", "홍길동"); model.addAttribute("age", "20"); return "test"; } 2. IOC와 DI 소프트웨어의 성능 향상과 수정 용이를 위해 성능 단위로 분해하는 것을 모듈화라고 하며, 각 기능을 모듈이라고 한다. 모듈의 독립성이 높을 수록 수정이 용이하고 재사용이 쉽다. 모듈의 독립..

TIL 2023.03.14

230313 [Spring, thymeleaf] (Controller / Mapping)

1. 프로젝트 생성 : new - Spring Starter Project src/main/java -> controller, vo 등 src/main/resources -> html 등 template 안에 2. controller 생성 : 기본 폴더 안에 .controller 폴더 생성 @Controller : 해당 클래스가 컨트롤러 역할을 하는 클래스임을 지정 @RequestMapping("/"), @GetMapping("/"), @PostMapping("/") : " "안에 지정한 경로로 시작되는 요청 처리 request는 클래스 레벨에서 get과 post는 메소드 레벨에서 사용 post는 form태그 post 메소드로 넘길 때 사용 3. 데이터 넘겨 받기 @GetMapping("/boardWri..

TIL 2023.03.13

230310 [SQL, MyBatis] (IN 연산자 / 동적 쿼리 foreach문)

1. SQL 1.1. IN 연산자 WHERE 절 내에서 특정값 여러 개를 조건으로 제시하는 연산자이다. SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN (값1, 값2, 값3...) --부서 번호가 10번이거나 30번인 사원의 사번과 사원명 조회 SELECT EMPNO , ENAME FROM EMP WHERE DEPTNO IN (10, 30) 2. MyBatis 2.1. 동적 쿼리 for-each문 for-each문 지원 태그 collection : 전달받은 인자값 item : 인자값을 다른 이름으로 재정의 separator : 반복문이 두 번 이상 실행될 때 사이에 들어가는 구분자 open : 반복문이 시작되기 전에 삽입할 문자열 close : 반복문이 끝난 후 삽입할 문자열 DELETE S..

TIL 2023.03.10

220309 [SQL] (VIEW / MERGE INTO)

1. VIEW (가상 테이블) 하나 이상의 테이블이나 다른 뷰를 사용해 가상의 테이블을 만들 수 있다. 뷰는 물리적으로 정의되지 않아, 논리적으로만 존재한다. -- VIEW 생성 CREATE VIEW (뷰 이름) AS SELECT (컬럼) FROM (테이블 명) WHERE (조인 조건); -- 사원 테이블과 부서 테이블로 뷰 생성 CREATE VIEW EMP_VIEW AS SELECT EMPNO, ENAME, EMP.DEPTNO, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; -- 뷰 삭제 DROP VIEW EMP_VIEW; 2. MERGE INTO MERGE INTO (테이블 명) USING DUAL -- 단일 테이블일 시 DUAL ON (조건) WHEN..

TIL 2023.03.09