본문 바로가기

전체 글298

[Spring] MyBatis(4) 공지사항 목록페이지 -> 상세페이지 ㅁ notice-mapper.xml  xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >mapper namespace="noticeMapper">  resultMap id="noticeResultMap" type="NoticeDto">    result column="no" property="no" />    result column="title" property="title" />    result column="content" property="content" />  resultMap>    se.. 2024. 10. 22.
[Spring] MyBatis(3) 자리 옮김 ㅁ 깃허브 데스크톱- 로그인 했어도 file - option - git에서 이름, 이메일을 수정.- file - clone a repository - 07_spring-workspace 선택  - clone하면 아무것도 없던 c드라이브에 저 폴더가 생기고 안의 내용들이 내려받아 진다.   ㅁ sts로 켜보기  - C:\workspaces\07_spring-workspace 폴더에 프로젝트 폴더들이 있지만 패키지 익스플로러에는 아무것도 안보인다.      - 스프링 레거시 프로젝트를 만들어본다.- 템플릿이 사라졌다. 메타데이터에 기록되서 그렇다.- C:\workspaces\07_spring-workspace\.metadata\.plugins\org.springsource.ide.eclipse.commons.. 2024. 10. 21.
[Spring] MyBatis(2) 메인페이지 -> 공지사항 목록 페이지 ㅁ 실제 db 연동을 해본다.    ㅁ src/main/webapp/WEB-INF/views에 main.jsp 수정  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body>    h2>메인페이지h2>    a.. 2024. 10. 21.
[Spring] MyBatis(1) 세팅 ㅁ 마이바티스 ~ 스프링의 AOP 특징도 알아본다.  ㅁ 새로운 스프링 레거시 프로젝트 생성- project name은 "04_Spring_MyBatis_AOP"- "Spring MVC Project" 템플릿 선택- 베이스 패키지는 "com.br.sbatis"- src/main/java에 있는 베이스 패키지의 HomeController.java, src/main/webapp/WEB-INF/views의 home.jsp 삭제     ㅁ DB 연동할거라 DB 생성 - 관리자 계정에서 "create user sbatis identified by sbatis;", "grant connect, resource to sbatis;"으로 계정을 생성한다.- sbatis 계정으로 접속한다.    - 내가 직접 ~했다면 .. 2024. 10. 21.
[Spring] MVC2 (7) ajax 회원관리 2번 페이지 ㅁ com.br.ajax.controller 패키지에 MemberController2 클래스를 만든다.     ㅁ manage2.jsp   - manage1.jsp를 그대로 복붙해서 함수 6개의 url mapping 값만 /member1 에서 /member2로 바꿨다.      ㅁ MemberController2   - MemberController1을 그대로 복붙해서 조금씩 수정한다.- @RequestMapping 어노테이션에 "/member2"로 수정해서 "/member2"로 시작하는 url 요청을 받는다. - 현재 모든 메소드들이 응답 뷰가 아닌 응답 데이터를 돌려주는 메소드다.모든 메소드에 @ResponseBody가 붙어있다. - 페이지 이동(포워딩, 리다이렉트) 없이 컨트롤러가 응답 데이터를 돌.. 2024. 10. 21.
[Spring] MVC2 (6) ajax5 - 6번째 버튼 ㅁ 번외2 - 요청시 전달값 다수를 Map으로 받아보기- 요청시 전달되는 값들을 map으로 바로 받아내는 방법.- Jackson 라이브러리가 있어서 가능한 방법이다.    ㅁ manage1.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>html>head>meta charset="UTF-8">title>Insert t.. 2024. 10. 21.
[Spring] MVC2 (5) ajax4 - 5번째 버튼 ㅁ 번외1 - 응답 데이터가 다수인 경우.- 응답 데이터로 list도 돌려주고 dto도 돌려줘야 하는데 리턴은 하나밖에 안된다.이럴때는 응답데이터들을 담을 dto를 만들든지 Map 객체를 사용해서 반환한다.    ㅁ manage1.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>html>head>meta charset.. 2024. 10. 21.
[Spring] MVC2 (4) ajax3 - 4번째 버튼 ㅁ 4번째 버튼, 4번째 함수  - $.ajax 안에 속성 하나하나 마다 콤마를 붙여줘야 한다.- 요청시 전달값이 없어서 data 속성을 생략한다.요청 방식도 get방식이라 type 속성을 생략한다. (생략하면 기본적으로 get 방식이다)     ㅁ manage1.jsp 수정  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>.. 2024. 10. 21.
[Spring] MVC2 (3) ajax2 - 3번째 버튼 ㅁ manage1.jsp 수정  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>script src="${contextPath}/resources/js/jquery-3.7.1.min.js">script>head>body>.. 2024. 10. 21.
[Spring] MVC2 (2) ajax - 1, 2번째 버튼 ㅁ ajax는 포워드도 redirect도 아니다.   ㅁ src/main/webapp/WEB-INF/views에 member 폴더 생성- member 폴더에 manage1.jsp, manage2.jsp 생성  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />    DOCTYPE html>html>head>meta charset="UTF-8">title>In.. 2024. 10. 18.
[Spring] MVC2 (1) 로깅, ajax ㅁ 로그, ajax 관련 프로젝트  ㅁ Spring legacy project 생성   - 베이스 패키지는 com.br.ajax로 했다.모든 클래스는 전부 저 베이스 패키지로 해야 한다.빈 스캐닝할 때 베이스 패키지를 기준으로 하기 때문에 2번째 레벨 등에서 쪼개지면 안 된다. - 빈등록이 제대로 되려면 베이스 패키지로 com.br.ajax를 가지고 있어야 한다.    ㅁ 프로젝트를 만들면 바로 pom.xml을 바꾼다.  xml version="1.0" encoding="UTF-8"?>project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocatio.. 2024. 10. 18.
[Spring] Spring MVC 정리 ㅁ 정리                                                                              @Controller      @Service        @Repositoryview   ->   request   ->   DispatcherServlet   ->   Controller   ->   Service   ->         Dao (쿼리 실행)               ㅁ Spring MVC 주요 구성요소  (1) DispatcherServlet (클래스)- web.xml 파일이 실행될 때 과 태그에 의해 클라이언트로부터 들어오는 모든 요청이 DispatcherServlet에서 처리된다.- DispatcherServlet은 요청을 받은 후 .. 2024. 10. 17.
[Spring] MVC (7) 실습 - 공지사항 수정하기 * 실습 (공지사항 수정하기)             1) 공지사항 상세페이지에서 수정페이지로 이동 링크 만들기 (/notice/modifyForm.do?no=현재글번호  url 요청되도록)             2) 해당 url 요청시 실행되는 Controller 작업                 ㄴ 요청시 전달되는 파라미터(수정할글번호) 뽑기                ㄴ 해당 번호로 공지사항 조회 서비스 요청                ㄴ 조회된 공지사항 객체를 수정페이지에서 사용할수 있도록 담기                ㄴ 수정페이지로 포워딩             3) 해당 url 요청시 포워딩되는 수정페이지(/WEB-INF/views/notice/modifyForm.jsp) 제작하기       .. 2024. 10. 17.
[Spring] MVC (6) 응답페이지 이동시 응답데이터 담기 (1) Model 객체 이용하기- requestScope 영역에 데이터를 맵형식(key-value)로 담을 수 있는 객체- 단 setAttribute가 아닌 addAttribute 메소드를 사용한다.- 포워딩 처리가 되면 알아서 ~  (2) ModelAndView 객체 이용하기- Model과 View가 합쳐져 있는 객체.- Model은 데이터를 담는 객체, View는 응답 뷰에 대한 정보를 담는 객체 - ModelAndView 객체에 데이터와 응답 뷰에 대한 정보를 담고 해당 객체를 반환한다    ========================================================================   (1) Model 객체 이용하기    ㅁ main.jsp %@ page la.. 2024. 10. 17.
[Spring] MVC (5) Lombok 사용 ㅁ Lombok (롬복)- 해당 클래스에 작성되어있는 필드를 가지고 내부적으로 생성자, getter/setter, toString 등을 만들어주는 어노테이션을 제공하는 라이브러리다. (스프링과는 전혀 상관 없다)- 클래스에 필드만 작성하고 클래스 상단에 필요로하는 생성자 또는 메소드 어노테이션을 기술하면 된다.- 필드가 나중에 변경(타입, 이름, 추가 등)될 경우 매번 일일이 생성자 또는 메소드를 수정할 필요가 없다.    ㅁ pom.xml  xml version="1.0" encoding="UTF-8"?>project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:s.. 2024. 10. 17.
[Spring] MVC (4) 요청시 parameter 처리 ㅁ 요청시 전달값(parameter)들을 뽑아서 변수에 담거나 dto에 담아서 넘겼었다.ㅁ 요청시 전달되는 데이터들이 많은데 그 데이터들을 어떻게 처리할지 (요청시 데이터를 뽑는 과정)   ㅁ 요청시 파라미터를 처리하는 방법 3가지 (1) HttpServletRequest 방법(2) @RequestParam 방법(3) 커맨드 객체 방법- 1번째 기능은 스프링 이전의 전통적인 방법이다. 2번째 기능부터 스프링 프레임워크의 기능이라고 생각하면 된다.    (1) HttpServletRequest 방법    ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib pre.. 2024. 10. 16.
[Spring] MVC (3) book 서비스 ㅁ 폴더와 파일 생성     - src/main/webapp/WEB-INF/views에 book 폴더를 만든다.- src/main/webapp/WEB-INF/views/book 폴더에 list.jsp, detail.jsp, modify.jsp, enroll.jsp를 만든다.      ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    c:set var="contextPath" value="${pageContext.request.contextPath}" />  .. 2024. 10. 16.
[Spring] MVC (2) resources 등록 ㅁ 폴더 생성- src/main/webapp/resources에 images 폴더, js(js 파일 보관) 폴더를 만든다. - src/main/webapp에 assets 폴더를 만든다. - src/main/webapp/assets에 images 폴더, js(js 파일 보관) 폴더를 만든다.   ㅁ 파일 생성- src/main/webapp/resources/images에 아무 사진 파일 5개를 둔다. - src/main/webapp/assets/images에 아무 사진 파일 5개를 둔다.- src/main/webapp/assets/js에만 jquery-3.7.1.min.js를 가져와서 둔다.    function test() {    alert("안녕하세요");}  - src/main/webapp/reso.. 2024. 10. 16.
[Spring] MVC (1) ㅁ 패키지 익스플로러 - 우클릭 - spring legacy project     - 베이스 패키지는 중요하다.- 프로젝트 생성 후 빨간 X가 뜬다. 정상이다.     ㅁ 항상 프로젝트를 생성한 후엔 pom.xml을 열어서 버전체크를 해야 한다.  xml version="1.0" encoding="UTF-8"?>project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">        modelVersio.. 2024. 10. 16.
[Spring] DI(의존성 주입) ㅁ 스프링 특징 2 ㅁ DI (Dependency Injection) - 의존성 주입.- IoC와 연관되어 있는 기술이다.- 개발자가 직접 객체를 생성하지 않고 스프링 컨테이너가 관리하고 있는 Bean 객체를 자동으로 주입하는 개념.    ㅁ 클래스 생성- com.br.spring.di에 Phone 클래스 생성  package com.br.spring.di;public class Phone {    private String name;    private String brand;    private int price;    private String releaseDate;        public Phone() {}    public Phone(String name, String brand, int pr.. 2024. 10. 15.
[Spring] IOC(제어의 역전) ㅁ IoC(Inversion of Control)- 제어의 역전- 개발자가 프로그램을 제어하지 않고 Framework가 프로그램을 제어하는 것을 의미한다.- 객체 생성 및 생명주기 관리, 의존관계 설정 등을 개발자가 아닌 Framework가 직접 한다.개발에 필요한 객체들을 스프링에 등록해두고 ~~ 가져다 쓴다. - 개발자가 객체를 생성하지 않고 스프링이 가지고 있다가 주입받아서 사용한다.- 개발자가 객체의 생성, 초기화, 생명주기 등을 직접 관리하지 않고, 스프링 프레임워크가 대신 관리하도록 하는 개념입니다. 즉, 제어 흐름의 주도권을 개발자에서 프레임워크로 넘기는 것을 의미합니다.   ㅁ IoC 컨테이너- 개발에 필요한 객체들, 의존성 ~ - 위의 내용들을 전반적으로 관리하는 컨테이너로개발에 필요한 .. 2024. 10. 14.
[Spring] 첫번째 프로젝트 생성, pom.xml ㅁ 패키지 익스플로러 우클릭 - new - Spring Legacy Project - DB 연동해서 웹개발하진 않고 스프링 특징(IOC, DI)을 살펴본다. - 템플릿으로는 Spring MVC Project를 선택해서 만든다.그럼 ~어느정도 세팅된 채로 만들어진다.      - 기본으로 깔고 갈 베이스 패키지를 만든다.3번째 레벨정도는 만든다.첫번재 두번째 레벨은 도메인의 역순, 세번째 레벨은 어쩌구- 이제부터는 베이스 패키지가 굉장히 중요하다.- 세번재 레벨값을 잘 기억하고 있어야 한다. contextPath가 세번재 레벨로 잡힌다.    ㅁ   - 폴더의 아이콘에 패키지가 포함되어 있으면 소스파일이 보관되는 소스폴더다. - s는 스프링과 관련된 문서가 포함되어 있어서 붙어있다. (1) src/main.. 2024. 10. 14.
[Spring] 스프링 기초 ㅁ Spring Framework -   ㅁ Spring Framewordk의 특징- 6개로 표현했지만 3개로 표현하기도 하고 7개로 표현하기도 한다.  - 개발자가 직접 객체를 생성해서 쓰지 않고 스프링에게 받아서 쓴다.- IOC와 DI가 스프링의 가장 기본적이면서 중요한 특징이다. - POJO. 개인적으로 만든 DTO(VO) 클래스들을 쓸 수 없었다.스프링은 우리가 자체적으로 만든 클래스들을 쓸 수 있다.      (4) Spring AOP- 자바의 가장 큰 특징이 OOP(객체지향 프로그래밍)였다.그런데 OOP의 문제점이 많다. 그걸 개선한 게 AOP다. 공통적으로 매번 써야하는 코드들을 따로 분리해서 관리할 수 있다. (5) Spring JDBC  (6) Spring MVC- mvc 패턴. 2024. 10. 14.
[Spring] 스프링 세팅 ㅁ 스프링도 프레임워크다. 프레임워크는 세팅이 빡세다.- 스프링 legacy 프로젝트를 만든다. 이건 자바 11버전에 최적화되어있다.그런데 현재 설치된 자바가 17버전이라 11버전을 다운받는다.- 스프링 부트쓸 때는 다시 17버전으로 한다.  ㅁ 스프링 버전이 몇이냐에 따라서 호환되는 자바 버전이 다르다.현재 전자정부 프레임워크는 스프링 버전이 5인데 그건 자바 11버전과 호환된다.- 스프링부트하면 스프링버전이 6인데 그건 자바 17버전과 호한된다.- 그리고 아파치 톰캣 버전이랑도 최적화되어있는 버전이 다 다르다.     ㅁ 구글 드라이브에서 공유받은 설치파일을 다운로드 받는다.       ㅁ 현재 내 pc에 설치된 자바 버전 확인하기 - cmd에서 "java -version"을 입력하면 내 pc에 설치.. 2024. 10. 14.
[MyBatis] 동적쿼리 연습2 (복수 회원 탈퇴처리) ㅁ 테이블의 각 행의 맨 앞에 셀을 추가해서 체크박스 요소를 둔다.  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body>    h3>회원 검색 결과h3>    c:choose>        c:when test="${ e.. 2024. 10. 14.
[MyBatis] 동적쿼리 연습 (회원 검색) ㅁ 마이바티스의 핵심적인 특징 중의 하나가 동적쿼리다.주로 검색 서비스 쪽에서 많이 사용된다.   ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body>    h3>1. insert연습 (공지사항 등록).. 2024. 10. 14.
[MyBatis] select + update 연습 (TypeHandler 적용) ㅁ 공지사항 서비스는 이제 끝났고 회원 서비스를 한다.   ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body    h3>1. insert연습 (공지사항 등록)h3>    a href="${ conte.. 2024. 10. 11.
[MyBatis] select (3) 여러행 + 페이징 처리 (RowBounds 적용) ㅁ 게시글이 몇개일지 모르기 때문에 웬만해선 앞으론 다 페이징 처리를 한다. - MyBatis는 페이징 처리를 위한 객체(RowBounds)를 제공해서 쿼리문이 간결해진다.   ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heret.. 2024. 10. 11.
[MyBatis] select (2) 여러 행 조회 ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body>    h3>1. insert연습 (공지사항 등록)h3>    a href="${ contextPath }/regist.no">공지사항 등록페이지로 .. 2024. 10. 11.
[MyBatis] select (1) 한 행 조회 ㅁ main.jsp  %@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>c:set var="contextPath" value="${pageContext.request.contextPath}" />DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body>    h3>1. insert연습 (공지사항 등록)h3>    a href="${ contextPath }/regist.no">공지사항 등록페이지로 .. 2024. 10. 11.