start.spring.io에서 프로젝트 생성 build tool (의존 관계 관리), 최근에는 Gradle을 사용하는 추세 SNAPTHOT : 아직 만들고 있는 버전 M~ : 아직 정식 릴리즈 되지 않은 버전 정식 릴리즈 된 버전에서 가장 최신 버전 선택 *SpringBoot 3.0부터는 JAVA 17이상만을 지원 !! Artifact : 산출물 이름 GENERATE (다운로드) Gradle은 의존 관계가 있는 라이브러리들을 함께 다운로드 함 ✅ spring-boot-starter : 스프링부트 + 스프링코어 + 로깅(logback, slf4j) ✅ spring-boot-starter-web : spring-boot-starter-tomcat(톰캣/웹서버), spring-webmvc(스프링 웹 mvc)..
HTTP 통신은 stateless -> 상태를 기억하기 위해 쿠키, 세션, 토큰을 사용 Cookie 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각으로, key=value 형식의 문자열 데이터 묶음 브라우저에 저장됨 (클라이언트가 조작할 수 있고, 서버는 쿠키에 담긴 정보를 바탕으로 클라이언트 식별, 광고 추천 등 세션 관리, 개인화, 트래킹에 사용 Cookie 인증 방식 브라우저(클라이언트)가 서버에 요청(접속)을 보냄 서버는 클라이언트의 요청에 대한 응답을 작성할 때, 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담음 이후 클라이언트가 재요청 할 때마다 저장된 쿠키를 요청 헤더의 Cookie에 담아 요청을 보냄 Cookie 단점 보안에 취약. 요청 시 쿠키의 값을 그대로 보내기 때..
Spring Boot 스프링(Spring)을 더 쉽게 이용하기 위한 도구 * Spring의 경우 Application을 개발하려면 사전에 많은 작업을 해야했음 ( library 추가, dependency 설정, SpringFramework가 처리해야 하는 여러 가지 구성 및 설정파일 등 ) Spring Boot의 장점 project에 따라 자주 사용되는 library들이 미리 조합되어 있음 복잡한 설정을 자동으로 처리 내장 서버를 포함해서 tomcat과 같은 WAS를 추가로 설치하지 않아도 개발 가능 WAS에 배포하지 않고도 실행할 수 있는 JAR 파일로 Web Application을 개발 가능 Project 생성 Project 구조 src/main/java : java source directory H..
pom.xml json을 사용하기 위해 다음과 같이 dependency를 추가해주었다! com.fasterxml.jackson.core jackson-databind 2.15.0 ++ 각각의 Repo파일에 @Mapper annotation을 붙여준다! CatRestController.java RequestBody import에 주의 ...!!!!!!!!!!!! 해야 한다!! 2개다!! 꼭 import org.springframework.web.bind.annotation.RequestBody 로 import하자!! 그렇지 않으면 null 값으로 들어온다^^ package com.ssafy.cat.controller; import java.sql.SQLException; import java.util.Li..
REST : HTTP URI를 통해 제어할 자원을 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원을 제어하는 방식의 아케텍처 기존의 전송 방식과는 달리 서버는 요청 받은 리소스에 대해 순수한 데이터를 전송 기존의 GET/POST 외에 PUT, DELETE 방식을 사용하여 리소스에 대한 CRUD 처리 가능 💡 REST 구성 자원 (Resource) - URI 행위 (Verb) - HTTP Method 표현 (Representations) * 잘 표현된 HTTP URI로 리소스를 정의하고 HTTP method로 리소스에 대한 행위를 정의 * 리소스는 JSON, XML과 같은 여러 가지 언어로 표현할 수 있음 기존 Service와 REST Service 기존 Ser..
web.xml 설정을 위한 설정파일 (여러 xml파일을 인식하도록 각 파일을 가리켜 줌) 최초로 WAS가 최초로 구동될 때, 각종 설정을 정의 ( 서블릿, 한글 인코딩 등) 404 /error/404 contextConfigLocation /WEB-INF/spring/root-context.xml encoding org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encoding /* appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml 1 appServl..
지난번에 JDBC를 이용해 진행했던 간단한 Spring MVC 실습을 MyBatis로 대체해보려고 한다!! 1. XML 파일 수정 MyBatis를 사용하기 위해 pom.xml에 dependency를 추가해준다! org.mybatis mybatis 3.5.13 org.mybatis mybatis-spring 2.1.0 mybatis를 spring에서 사용하기 위해서 root-context.xml에 다음과 같이 sqlSessionFactory를 등록해주고, mybatis-spring:scan을 통해 repo를 스캔해준다!! 2. Mapper 만들기 이제 더 이상 RepoImpl 클래스가 필요하지 않다!! 다음과 같이 resources 폴더 안에 mapper 폴더를 만들고, MyBatis를 사용하여 RepoI..
MyBatisJava Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM FrameworkSQL을 별도의 파일로 분리해서 관리 (유지 보수성 향상)Object - SQL 사이의 parameter mapping 작업을 자동으로 해 줌JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거 (코드의 중복과 작성 생략 가능) https://mybatis.org/mybatis-3/ko/index.htmlMyBatis – 마이바티스 3 | 소개마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 mybatis.org MyBatis-Spring 연동MyBat..
pom.xml Apache Commons FileUpload라이브러리를 이용하기 위해 dependency를 추가해준다! commons-fileupload commons-fileupload 1.5 servlet-context.xml file upload를 처리할 multipart resolver를 빈으로 등록해준다! regist.jsp 파일을 전송할 때는 enctype을 "multipart/form-data"로 설정해주어야 한다! 사용자 정보 입력 아이디 비밀번호 이름 이메일 나이 이미지 MainController.java controller에서 파일을 처리해주는 코드이다! *resources/upload 폴더를 만들고, 안에 아무 파일이나 하나를 만들어 놓아야 인식 가능!! @PostMapping("/r..
내용 정리 겸 지금까지 학습한 Spring, JSP, MVC 패턴 등을 적용한 간단한 실습을 해보자!! DB 만들기 아주 간단한 table 2가지를 만들어서 진행! drop database if exists animal; create database if not exists animal DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs ; use animal; drop table if exists user; create table if not exists user( id varchar(10) primary key, pw varchar(10) not null, name varchar(20) not null ); insert into user values ..
Interceptor : Request 객체를 컨트롤러의 핸들러로 도달하기 전에 낚아채서 개발자가 원하는 추가작업을 한 후 핸들러로 보낼 수 있도록 해주는 것 추가적인 작업 로그인 체크, 권한 체크 등 관련 메소드 preHandle() 컨트롤러가 호출되기 전에 실행 false를 반환하면 request를 바로 종료 postHandle() 컨트롤러 수행 후 호출 비동기적 요청 처리 시에는 처리되지 않음 preHandle()에서 리턴 값이 false인 경우 미실행 적용 중인 인터셉터가 여러개인 경우, preHandle() 역순으로 호출 afterCompletion() view를 통해 클라이언트에 응답을 전송한 뒤 실행 요청 처리 중에 사용한 리소스를 반환해주기 적절한 메소드 preHandle()에서 리턴 값이..
AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 어떤 로직을 기준으로 핵심 관심 사항과 공통(부가) 관심 사항으로 나누어 모듈화 핵심 관심 사항 : 적용하고자 하는 핵심 비즈니스 로직 공통(부가) 관심 사항 : 핵심 로직을 실행하기 위해 행해지는 부가적인 로직 ex) DB 연결, 로깅 등 분리한 부가 기능을 Aspcet라는 독특한 모듈 형태로 만들어서 설계하고 개발 (공통 모듈을 손쉽게 적용 가능) 💡 한 마디로 AOP란? 부가기능을 Aspcet로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념 (실무에서는 호불호가 갈린다고 한다) 💡 AOP 등장 배경 기존 OOP에서 공통관심사항을 여러 모듈에..
Spring 자바 기반의 엔터프라이즈 급 어플리케이션을 만들 수 있는 Framwork JEE가 제공하는 다양한 기능을 제공하는 것 뿐만 아니라, DI나 AOP같은 기능도 지원 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고, Business Logic 개발에 전념할 수 있도록 해줌 프레임워크와 라이브러리의 차이점 "제어 흐름이 어디에 있는가" 프레임워크는 전체적인 흐름을 쥐고 있으며 애플리케이션의 코드는 프레임워크에 의해 사용됨 (프레임워크) 라이브러리는 개발자가 전체적인 흐름을 만들며 라이브러리를 가져다 씀 (개발자) IoC (Inversion of Control, 제어의 역전) 객체지향 언어에서 Object 간의 연결 관계를 런타임에 결정 객체 간의 관계가 느슨하게 연결됨 (loo..
JDBC (Java DataBase Connectivity) 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이루어진 API로서 ANSI SQL 지원 SQL문을 실행할 수 있는 함수 호출 인터페이스 JDBC 특징 DBMS 종류에 독립적인 자바 프로그래밍 가능 DB가 달라지더라도 동일한 API를 사용하게 해줌 (드라이버 및 URL만 수정하면 가능) 자바가 가지는 플랫폼에 독립적이라는 특성과 DBMS에 독립적인 특성을 가짐 JDBC 기능 데이터베이스에 연결 설정 SQL 문장을 DBMS에 전송 SQL 문장 전송 후 결과를 처리할 수 있음 JDBC API: java.sql package Driver (interface) 드라이버에 대한 정보를 가지..
DAO (Data Access Object) 실제로 DB에 접근하는 객체 (CRUD 기능 수행) DB에 접근하기 위한 로직 & 비즈니스 로직을 분리하기 위해 사용 DTO (Data Transfer Object) 계층 간 (Controller, View, Business Layer) 데이터 교환을 위한 Java Beans 로직을 가지지 않는 데이터 객체 ( getter, setter 메소드만 가진 클래스 ) VO (Value Object) : DTO와 유사하지만, read-only 특징을 가짐 (setter x) Entity 실제 데이터베이스 테이블과 1:1로 매핑되는 클래스 DB 테이블 내에 존재하는 컬럼만을 속성(필드)으로 가짐 Entity 클래스는 상속을 받거나 구현체여서는 안됨 💡 CRUD 란? :..