Spring80 [웹프로젝트] 8. 마이페이지(1) 조회 ㅁ views/member에 myinfo.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>style> #profileImg{ width:250px; height:25.. 2024. 10. 29. [웹프로젝트] 7. 회원가입(3) - 암호화 후 로그인 ㅁ 회원가입을 암호화해서 지금 로그인이 안되는 상태다.- 지금 쿼리는 아이디와 비번으로 찾고 있는데, 실제 db에 저장된 비번은 암호문이기 때문에 평문값으로 조회할 수가 없다.- 평문을 암호화해서 조회할 수도 없다. SHA 방식은 가능. 그러나 BCrypt 방식은 똑같은 평문을 암호화할 때마다 ㅁ배번 다른 암호문 나오기 때문에 그렇게는 불가능하다.- 우선은 아이디 가지고 조회를 한다.그리고 b~에서 제공하는 특정 메소드를 사용해서 평문값과 암호문값이 일치하는지 비교해볼 수 있다. ㅁ member-mapper.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:.. 2024. 10. 29. [웹프로젝트] 6. 회원가입(2) - 암호화 ㅁ 암호화- 어떠한 값(평문)을 다른사람들이 알아볼 수 없는 암호문으로 변경하는 과정- DB 같은 저장소에 개인정보 중 보호해야되는 값들은 암호문으로 보관해야됨. - 암호화: 평문 -> 암호문- 복호화: 암호문 -> 평문 - 양방향 암호화 방식: 암호화, 복호화 둘 다 가능.- 단방향 암호화 방식: 암호화만 가능. - 옛날에는 양방향 암호화 방식으로 비밀번호를 처리했다.그래서 비밀번호 찾기하면 기존 비번을 알려줄 수 있었다.평문을 유추할 수 있다는 것은 보안에 취약하다는 뜻이다.그래서 단방향 암호화 방식으로 보안정책이 바뀌었다.이때 많이 사용하던 방식이 SHA 암호화 방식이다. (해쉬알고리즘) - 그런데 SHA방식도 취약점이 있었다.매번 똑같은 평문을 입력하면 매번 똑같은 암호문을 만들어준다.ex) 11.. 2024. 10. 28. [웹프로젝트] 5. 회원가입 ㅁ member 폴더 우클릭 signup.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> div class="container p-3"> jsp:in.. 2024. 10. 28. [웹프로젝트] 4. 로그인, 로그아웃, 회원가입 ㅁ header.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}" /> link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">script src="https://ajax.googleapis.com/ajax/li.. 2024. 10. 28. [웹프로젝트] 3. 단위테스트? 멤버 mapper ㅁ 회원서비스 한다. ㅁ - 원래 개발은 쿼리부터 하고 dao 메소드 만들고- 쿼리테스트라고해서 지금 실행할 이 쿼리문ㅇ ㅔ문제가 없는지 일괄적으로 테스트를 해볼 수 있다. 그걸 쿼리테스트라고 한다. ㅁ member-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="memberMapper"> resultMap id="memberResultMap" type="MemberDto"> result column="user_no" propert.. 2024. 10. 25. [웹프로젝트] 2. 헤더, 푸터, 메인페이지, 에러페이지 ㅁ header.jsp, footer.jsp 생성 ㅁ header.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}" /> link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">script src="https://aj.. 2024. 10. 25. [웹프로젝트] 1. 세팅 ㅁ sql developer에서 계정 생성- db가 먼저다. create user spring identified by spring;grant connect, resource to spring; ㅁ 샘플 스크립트 실행- 실수로 관리자 계정에 설치하면 오라클 다시 설치해야 한다.삭제구문 때문이다. ~ 테이블들이 많이 있다. -----------------삭제--------------------접속유저의 모든테이블 및 제약조건 삭제BEGIN FOR C IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP EXECUTE IMMEDIATE ('DROP TABLE '||C.TABLE_NAME||' CASCADE CONSTRAINTS'); END LOOP;END;/-.. 2024. 10. 25. 파일업로드(11) 분할 2024. 10. 25. 파일업로드(10) 분할 2024. 10. 25. [Spring] 파일 업로드(9) 에디터로 파일업로드 ㅁ 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>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 25. [번외] 에디터 ㅁ summernote 홈페이지( https://summernote.org ) - ctrl + shift + r 강력 새로고침. 캐시 다 날림. ㅁ 첨부파일 업로드 프로젝트 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>In.. 2024. 10. 24. [Spring] 파일 업로드(7) 첨부파일 목록 조회 ㅁ 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>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. [Spring] 파일 업로드(6) 비동기식으로 첨부파일 업로드 ㅁ 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>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. [Spring] 파일 업로드(5) 다중 파일 업로드 ㅁ 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>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. [Spring] 파일 업로드(3) 한 개의 첨부파일 업로드(2) ㅁ 화면에서 업로드한 첨부 파일이 내가 지정한 경로에 내가 지정한 이름으로 저장은 되었다.- 이제 db에 insert한다. ㅁ 현재 게시글 등록 요청이라는 하나의 기능이다. board에도 attachment에도 isnert를 해야 한다.- 하나의 기능에 2개의 sql문을 실행해야 한다.- 하나의 기능이기 때문에 service는 하나다. 실행할 sql문은 2개니까 2개의 dao를 호출해야 한다. ㅁ DB ㅁ board가 부모고 attachment가 자식이라 board에 먼저 insert를 해야 한다.- attachment의 ref_board_no 컬럼은 board의 board_no를 참조하고 있다. (외래키 제약조건) ㅁ 쿼리를 미리 생각해본다 - mapper 파일 안에 세미콜론은 없어야 한다... 2024. 10. 24. [Spring] 파일 업로드(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> h2>1. 한 개의 첨부파일 업로드 테스트h2> h2>2. 다중 첨부파일 업로드 테스트h2> h2>3. 비동.. 2024. 10. 23. [Spring] 파일 업로드(1) 세팅 ㅁ 5번째 프로젝트- 다 써볼 예정. + 파일 업로드 ㅁ sql develoer- sbatis 계정으로 테이블 2개, 시퀀스 2개를 더 만든다.- 총 테이블 3개(NOTICE, BOARD, ATTACHMENT)와 시퀀스 3개(seq_notice, seq_bno, weq_fno)가 있다. create table board ( board_no number primary key , board_title varchar2(100) not null , board_content varchar2(4000) ); create table attachment ( file_no number primary key , file_path varchar2(200) , original_name varchar2(200).. 2024. 10. 23. [Spring] AOP 트랜잭션 처리 ㅁ 하나의 서비스에 하나의 쿼리만 실행시, 쿼리가 성공적으로 수행되면 자동으로 스프링에서 커밋처리가 된다.- 그런데 하나의 서비스에 여러 dml문을 수행할 때가 있다.여러 dml문이 정상적으로 다 완료되었을 때만 커밋이 진행되어야 한다.중간에 하나라도 예외가 발생하면 rollback해서 모든 dml문들이 취소되어야 한다.- 첫번째 dml문이 성공적으로 수행되어도 두번째 dml문에서 예외가 발생하면 이 기능은 실패한 것이다. ㅁ NoticeService package com.br.sbatis.service;import java.util.List;import com.br.sbatis.dto.NoticeDto;public interface NoticeService { // 전체목록조회 ListN.. 2024. 10. 23. [Spring] @Around ㅁ AfterLoggingAdvice는 잠시 끈다. @Aspect를 주석처리한다.- 빈으로도 등록하고 AOP로도 등록해야 한다. - @Aspect가 AOP로 등록하는 어노테이션이다.- 빈 등록은 3가지 방법이 있는데 자바 방식으로 SpringBeanConfig 클래스를 만들었었다. ㅁ com.br.sbatis.aop에 AroundLoggingAdvice 클래스를 만든다. package com.br.sbatis.aop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import lombok.extern.slf4j.Slf4.. 2024. 10. 23. [Spring] AOP(2) @Before Advice, @After Advice 2024. 10. 23. [Spring] AOP(1) 세팅 ㅁ AOP- 지금까지 작성한 컨트롤러, 서비스, dao의 코드는 이 프로그램이 제대로 작동하기 위해 필수로 필요한 핵심 로직(비즈니스 로직)이다.- 그런데 핵심로직 내에서 매번 공통적으로 처리해야 하는 로직(공통 로직)이 있을 수 있다.대표적인게 로깅 처리와 트랜잭션 처리다. - 컨트롤러의 각 메소드에서 요청시 전달값을 받고 있다.요청시 전달값, 조회된 결과값을 로그로 확인해보는 것이 좋다. - 각각의 url 요청 때마다 요청시 전달값, 어떤 클래스의 어떤 메소드가 동작하는지 등의 정보를 알기 위해 로그를 출력한다면 컨트롤러의 모든 메소드에 로그 출력문을 일일이 작성해야 한다. - 그러지 않고 url 요청 때마다 컨트롤러 측의 메소드가 동작될 때 무조건 로그가 출력되게끔 공통 로직을 핵심 로직과 분.. 2024. 10. 22. [Spring] MyBatis(8) 게시글 일괄삭제 ㅁ list.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>공지사항 목록 페이지h3> c:choose> c:when test="${ empty list }"> 존재하는.. 2024. 10. 22. [Spring] MyBatis(7) 상세페이지 -> 수정페이지 ㅁ 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(6) 목록페이지 -> 등록페이지 ㅁ 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(5) 쿼리 로그찍기 2024. 10. 22. [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. 이전 1 2 3 다음