
애플리케이션 개발 시 필요한 기본 구조와 뼈대를 제공하는 툴제공되는 구조에 맞게 코딩을 진행하면 되기 때문에 개발 시간이 줄고, 효율적인 개발을 할 수 있음코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 라이브러리 형태로 제공함집 같은 거쉽게 개
IOC란, 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말함스프링은 IOC를 통해 구동 시 필요한 객체의 생성부터 생명 주기까지 해당 객체에 대한 관리를 직접 수행
Spring MVC Project 구성 시 필요했던 복잡한 환경 설정을 최소화 하여 개발자로 하여금 비즈니스 로직 구현에 집중할 수 있도하기 위해 개발됨내장된 서버(Tomcat 등)를 제공해서 war 배포 없이 독립 실행이 가능한 웹애플리케이션을 개발할 수 있음→ Sp

STS4 다운로드https://spring.io/tools4버전 Spring Tools 4 for Eclipse 여기서windows 클릭 하면 다운로드 됨jar 파일로 다운로드 됨java 아카이브 자바형태 압축파일다운받은 프로그램 tools 에 옮기고 알아서

Create new Spring Starter Projects 클릭New Spring Starter Project 라고 뜸File New Spring Starter Projects 없으면 other 눌러서 검색 Spring Boot 안에 있는 거 눌러서 만들면 됨Spr
src/main/java : 자바 소스 코드를 모아두는 폴더src/main/resources : 자바에서 사용할 자원, 설정 파일을 모아두는 폴더 \- templates : Java 템플릿을 모아두는 폴더(thymeleaf) 안에 index.html 만듦static

템플릿 엔진 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서(응답 화면)를 출력하는 것 -> 만들어둔 화면(html)에 데이터를 추가하여 하나의 html로 만들어서 응답 (JSP도 템플릿 엔진) https://www.thymeleaf.org/

데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성프레임워크기존에 JDBC를 통해 구현했던 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 xml 설정을 통해 쉽게 구현할

빠르고, 간단하고 믿을 수 있는 HikariCP는 "오버헤드 제로(처리 시간을 극단적으로 줄이는 것을 목표)"의 프로덕션 지원 JDBC Connection Pool로 다른 Connection에 비해 매우 가벼움build.gradle -> dependencies에 추가(
C, Java 같은 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어(이진수)로 변환하는 과정(번역)컴파일러 : 컴파일을 해주는 프로그램소스 코드를 컴퓨터가 실행 가능한 형태로 변환하는 과정소스 코드 컴파일 및 필요한 리소스 파일들을 함께 패키징하여
Ajax(Asynchronous JavaScript and XML)는 비동기적으로 서버와 브라우저 간에 데이터를 교환하는 기술로 웹 페이지를 새로고침하지 않고도 서버로부터 데이터를 받아와서 웹 페이지의 일부분을 업데이트할 수 있도록 해줌 -> 기존에는 웹 페이지를 다시
testImplementation 'org.springframework.security:spring-security-test' 여기에서 기본으로 제공해주는 로그인 페이지가 보이는데src/main/java Application.java 에서 @SpringBootAppli
html Controller

프로젝트 생성 시 dependencies 빌드 추가build.gradleapplication.properties 에 전반적 설정 저장브라우저에서 메인페이지 요청시 받아줄 controller@Controller : 요청에 따라 알맞은 서비스 호출 할지 제어 + 서비스 결

타임리프 속성(th:)에 삼항연산자 (조건식 ? 참인 경우 : 거짓인 경우)controller 값 세팅html출력 화면\[작성법]값 ?: 값이 없을 때삼항 연산자에서 조건식 자리에 값(변수명)만 작성(==, != 등의 연산자 사용 X)우변에는 값이 없을 때에 대한 값만

Spring Starter Projectdependencies 모듈, 라이브러리 추가JDBC API, Oracle Driver, Mybatis FrameworkJDBC 프레임 워크 (하나의 정형화된 틀)CRUDCreate 생성Read 조회Update 수정Delete 삭
Mybatis 프레임워크 == JDBC 프레임워크JDBC : java DB 연결config.properties 설정들을 DBConfig 로 얻어와 HikariCP, Mybatis 설정해줌서버 켰을 때 메인페이지메인페이지 요청 / 최상단 요청 받았을 때 어떤 페이지로 이
main 페이지 들어가자마자 전체 Todo 개수, 완료된 Todo 개수, 할 일 목록 보여줄 거브라우저에서 요청 보냈을 때 DB 조회해와야해서 Controller 에서 최상위 요청 받아서 html 보여주는 경로 return 해줄 거controller 에서 service
main.html 에 할 일 추가 할 곳 html 작성 후 추가하기 버튼 눌렀을 때 요청이 가게 form 태그 안에 넣어주기요청 받은 주소 mapping 해서 parameter 로 html 에서 넘겨준 값 받아서 service 호출요청 받은 서비스 클래스에서 매개변수로

main page 에서 할 일 제목 클릭하면 상세 조회 페이지로 넘어갈 수 있게 a 태그 안 연결 주소에 할 일 번호 queryString으로 넘겨주기controller 에서 parameter 값 받아서 service 호출service 에서 할 일 번호 넘겨서 mapp

To do List 상세 조회 화면에서목록으로 클릭하면 main 페이지 보이게 하기js 연결해서 버튼 누르면 돌아가게 설정할 거detail.htmlSpring 에서 정적자원 요청(접근)시 static 폴더 기준으로 작성static 폴더 안에 js 폴더 안에 detail

detail.html 에서 수정 버튼 클릭했을 때 기존에 가지고 있던 할 일 제목, 할 일 내용 보여주는 수정 창 보여줄 거임detail.htmlth:data-\* 에 할 일 번호 실어서 보내주기detail.js클릭했을 때 받은 할 일 번호를 쿼리스트링으로 contro
상세조회 페이지에서 삭제 버튼 클릭했을 때 js 로 todoNo 넘겨주기js에서 버튼 눌렀을 때 클릭 이벤트 추가해서 controller로 todoNo 넘겨주기Controller에서 값 받아서 service 호출mapper.xml 에서 sql 실행 후 값 반환Contr
동기 요청 a가 끝나면 b 시작 b 끝나면 c 시작\-> 동기 요청을 보내면 페이지 바뀔 때마다 새로고침 됨비동기 요청 요청이 들어오면 바로 시작함 다른 요청이 끝날 때까지 기다ㅣ지 않음\-> 페이지 새로고침 되지 않음main.html 에서 ajax/main.html
main.htmlform 태그는 동기식 요청으로밖에 못 써서 form 태그 사용 안함ajax-main.js요청 주소 : "/ajax/add"데이터 전달 방식(method) : "POST" 방식Key : Value 형식JS 객체는 java 에서 쓸 수 없음그대로 이용할
main.htmltbody 안에는 js 에서 얻어온 값 동적으로 추가해줄 거라서 비워둠List (Java 전용 타입) 를 반환\-> JS가 인식할 수 없기 때문에HttpMessageConverter 가 JSON 형태로 변환하여 반환해줄 거임\-> \[{ }, { },
popup layer(==모달창) : 현재 페이지 위에 새로운 레이어를 띄우는 것main.htmlAjaxController비동기 요청이어도 query String 값은 @RequestParam 으로 받아줌return 자료형 : Todo\-> HttpMessageConv
ajax-mian.jsDELETE 방식 요청 -> Controller 에서 @DeleteMapping 으로 요청 처리데이터 하나를 전달하더라도 JSON 방식이란 걸 알려줘야해서 application/json 작성해줘야함todoNo 값을 body 에 담아서 전달하겠다.\
ajax-main.jsY 이면 N 으로 Y가 아니라면(== N) Y로비동기 요청으로 Controller로 값 보내주기obj 의 key 값과 Todo 의 필드명이 같으면 obj의 value 값이 Todo 에 자동으로 setting 됨AjaxControllerajax-ma
1. 할 일 제목 클릭(상세 조회) 후 수정 버튼 누르면 수정 팝업 뜨고 상세 조회 페이지는 꺼지게 만들기 main.html

1. Spring Start Project 로 새프로젝트 생성 Name, Group, Package 설정 후 Next 클릭 11개 선택 후 Finish 2. SQL 테이블 생성 및 계정 생성 MEMBER 테이블 생성 시퀀스 생성 테스트용 샘플 추가 3. 프

main.htmlcatalog Mapper 로 해서 만들어야함 Config 파일과 다름ControllerServiceImpl모든 예외 발생 시 rollback ( 기본 RuntimeException )MemberMapper interfacemember-mapper.xm

처음에 보여준 화면처럼 보여줌main.htmlmain.html위에 th:if 와 같은 뜻회원가입 할 당시 기본으로 쓸 이미지 static images 에 user.png 올려둠messages.properties 에 작성된 기본 사용자 이미지session.loginMem

아이디 저장은 로그인할 때 아이디 저장 체크 박스가 체크돼있을 때 처리해줘야함MemberController login()기존에 있던 매개변수에 @RequestParam(value="saveId", required = false) String saveId) 추가value
요소 얻어오기
앱 비밀번호 잘 저장해두기 (16자리) 한번 보여주고 두번 다시는 못 봄앱 이름은 아무거나 해도 됨main.htmlMemberController\-> signup.html 로 이동됨 회원가입 폼 (css 연결)signup.html js 연결true == 해당 항목은 유
DBsignup.htmlsignup.js지연시간(ms)만큼 시간이 지날 때 마다 함수 수행매개변수로 전달받은 interval을 멈춤memberEmail 에 input 될 때마다 유효성 검사를 하는 함수에 구문 추가 작성clearInterval(authTimer); 작성

@Autowired 를 이용한 의존성 주입 방법은 3가지 존재필드setter생성자 (권장)의존성 주입(DI)@RequiredArgsConstructor 를 이용하면 필드 중1\. 초기화 되지 않은 final이 붙은 필드2\. 초기화 되지 않은 @NotNull 이 붙은
입력 받은 값을 js에서 다 처리해주면 됨signup.js

MemberControllerMemberServiceImplMemberMappermember-mapper.xml결과 화면정규식 검사만 하면 됨출력 화면여기까지가 필수 입력 창

회원가입 시 주소 입력은 필수 사항은 아님다음 주소 API 검색하면 사용 방법 상세 설명예제코드 보기 눌러서 갖다 쓰기만 하면 됨필요없는 건 지우고 필요한 것만 사용Daum Postcode Servicesignup.htmlsignup.js
회원가입 form 태그에 제출 버튼 눌렀을 때 정보 넘어가게signup.htmlhtml 에서 넘겨주는 값들에 name 속성이 Member DTO 필드명과 같게 설정해둬서 Controller 에서 받아줄 때 커맨드 객체로 받아줌(커맨드 객체 앞에 @ModelAttribu

main.html주소 구분자 "^^^" 이렇게 넣어놓음 다시 보여줘야함session 에 있는 loginMember 정보 얻어오기@SessionAttribute("loginMember") Member loginMember사용하려면 Controller 위에 @Session
sideMenu.htmlMyPageController마이페이지에서 정보 수정하고 수정하기 버튼 누르면 정보 수정되게하기myPage-info.html상대 경로로 보냄내 정보 현재 페이지 주소 : /myPage/info상대 경로로 작성한 주소 : /myPage/info (
myPage-changePw.htmlmyPage.js상대경로로 changePw Controller 로 요청 보냄현재 비밀번호, 새 비밀번호, 회원번호 서비스로 전달MyPageControllerMyPageServiceImplmyPage-mapper.xmlMyPageSer

myPage.jsmyPage-secession.html상대경로로 myPage/secession 으로 값 넘김세션 완료 용도의 객체\-> @SessionAttributes 로 등록된 세션을 완료시킬 거서비스 호출MyPageControllerMyPageServiceImpl

파일 업로드 테이블 생성controller 에서 페이지 이동 연결enctype 이란??데이터를 서버로 전송할 때 데이터의 형태(인코딩)를 지정하는 속성URL 인코딩된 "문자열" 로 서버에 제출제출되는 여러 데이터 타입에 맞춰서 인코딩하여 제출문자열 -> String숫자

ControllerServiceImplmapper.xmlmyPage-fileList.htmlhtml출력 결과

htmljsconsole 에 찍힌 파일명 C:\\fakepath\\maenggoo.jpg필드 추가public void addResourceHandlers(ResourceHandlerRegistry registry)프로필 이미지 요청 - 서버 폴더 연결 추가file://

Filter (Servlet 에서 제공함 (Spring에서도 사용 가능))걸러내는 거 + 추가하는 거Spring 은 Servlet 기반 Web application Framework내부적으로 Dispatcher Servlet 돌아가고 있음Client 와 Dispatch

ERDCloud 로 테이블 생성 Interceptor Filter 와 작동되는 부분이 다름 Handler Mapping == GetMapping, PostMapping 등등 Dispatcher Servlet 이 Handler Mapping 한테 맞는 거 찾아달라고
게시글 이미지 올리기 위해서 필요한 설정config.propertiesFileConfig기존에 있던 메서드에 게시글 이미지 요청 -서버 폴더 연결 추가 하는 구문 추가 작성boardList.htmlhref 안에서 {}로 자리 마련해둔 거 뒤에 , 뒤에 적힌 값은 쿼리스

현재 로그인한 회원이 게시글 좋아요를 눌렀는지 안 눌렀는지 COUNT (다시 한번 체크시 DELETE)좋아요 여부 확인 (1 : O / 0 : X)매개변수에 Session scope에 올라와있는 loginMember 추가Spring 스펙 올라가면서 안 써도 됨클래스 위

조회할 때마다 증가하는 방법(DB, 서버 부하)DB 에 누가 어떤 글을 조회했는가 저장해놓고일정 기간 단위로 확인해서 증가(복잡함 + 서버 부하)local/session 스토리지 (클라이언트단) -> js 사용 가능, 서버 사용 X쿠키를 이용한 조회수 증가 (서버 &l

로그인한 사람만 게시글 쓸 수 있게(로그인 안하면 글쓰기 버튼 보이지 않게)boardList.htmlget 방식 요청/editBoard/게시판코드/insert\-> 게시판코드 사용하려면 html 에서 requestScope 에 실려있는 boardCode를 세팅해서 넘겨
boardDetail.htmlboardDetail.jslocation. 현재 경로 뽑아내서location.search 물음표 뒷부분부터 찾아서 붙여줌\-> /editBoard/1/1990/update?cp=1/editBoard/1/1990/update?cp=1 이걸 받

boardDetail.htmlboardDetail.html 에 script 추가boardDetail.html script 내추럴 템플릿에 구문 추가comment.html댓글 영역 전부 비동기 요청자원(데이터,파일)을 이름(요청 주소)으로 구분(representation
boardList.htmlselect 태그 쿼리스트링에 ?key=c 이런 형태로 감input 태그 쿼리스트링에 &query=짱구 이런 형태로 붙음현재 : /board/1요청 주소 : /board/1?key=w&query=짱구앞에 요청 주소는 똑같음(쿼리스트링만 다름)B
Spring에서 제공하는 스케줄러 - 스케줄러 : 시간에 따른 특정 작업(Job)의 순서를 지정하는 방법.설정 방법1) XXXSSAPPlication.java 파일에 @EnableScheduling 어노테이션 추가2) 스케쥴링 동작을 위한 클래스 작성fixedDelay

HTTP 응답 상태 코드400 : 잘못된 요청 (Bad Request)403 : 서버에서 외부 접근 거부 (Forbidden)404 : 요청 주소를 찾을 수 없다 (Not Found)405 : 허용되지 않은 메서드(요청방식) (Method Not Allowed)500
사전적 의미 : 통나무, 항해 일지, 배의 속력이나 항해한 거리를 계측하는 장치의 총칭실질적 의미 : 기록을 남기는 것애플리케이션 운영 시 로그의 효율적인 관리가 가능하다.(콘솔 또는 특정 파일)콘솔 로그를 위해 System.out.print를 사용하는 건 성능저하를

HTTP 프로토콜 사용 (Hypertext Transfer Protocol)통신 규약웹페이지 (HTML, image 등등) 전송하기 위해서 사용하는 것\-> 웹 브라우저 통해서 서버가 전송한 HTML 파일 확인 가능(단순 문서 전달)문서 전달 뿐 아니라 그 이상의 것을
test 에 이어서 SessionHandshackInterceptor 이용WebSocketConfig
Spring AOP 개요 Spring AOP 란? Spring AOP 란, 관점 지향 프로그래밍(Aspect Oriented Programming)의 약자로 일반적으로 사용하는 클래스(Service, Dao 등) 에서 중복되는 공통 코드 부분(commit, rollb

JUnit : Java 개발 표준 단위 테스트 프레임워크\-> 모듈 따로 설치 안해도 됨=> Project and External Dependencies 에 있음=> build.gradlespring-boot-starter-test 안에 JUnit이 포함돼있음JUnit