웹사이트를 만들 수 있게 도와주는 프레임워크다
개발자가 좀 더 편하도록 알고리즘들을 메소드로 만든 툴 같은 것
Di(의존성 주입) ? 메소드를 만들 때 매개를 필요로하는 것 → 결합도를 낮춘다
즉, 어떠한 메소드가 동작할 때 외부에서 값을 주입해주는 것
원하는 값이 나오려면 , 이미 만들어진 틀(양식),폼에 맞춰서 작성을 해야한다
이를 제어의 역전(IOC)이라고한다
우리는 지금까지 객체를 생성하고 결정하는 등 모든것을 사용자가 직접 제어했다
스프링 프레임워크는 만들어진 규칙이 있으며 우리는 거기에 맞춰야한다
스프링 프레임워크 안에 있는 라이브러리들을 이용하여 개발한 것이
SpringBoot인것임
요청을 받아서 보여준다
Controller , CMRespDto
모든 로직처리를 한다
Interface , Implements , RequestDto , ResponseDto
DB와 연관이 있으며 , ServiceLyaer에서 받은 가공된 데이터를 자리에 맞게 분배해주거나 , 요청한 데이터를 꺼내준다
이것을 CRUD라고 부른다.
Repository , XML,
AWS(mariaDB), mybatis(프레임워크)

요청(HTTP)날라옴 (header에는 필수정보들(메소드,URL,서버IP,Port) / body 데이터 들고감) → 디스패쳐서블릿 호출(안에서 핸들러매핑 호출) → url과 메소드가 뭔지 찾는다 → 찾으면 디스패쳐한테 리턴해주고 디스패쳐가 해당메소드 호출 → 로직처리가 되고 디스패처한테 다시 리턴
이 때 컨트롤러의 성질에 따라서 ViewResolver를 들릴지 말지 정해짐 안 들리면 json으로 리턴
@Controller / @RestController
컨트롤러에서 사용되는 택 1 어노테이션으로 ,
Controller : return 값으로 html에 접근하게 되며 주로 화면을 보여줄 때 사용된다
RestController : return 값으로 데이터 동신할 때 사용 됨
기존 @Controller에 @ResponseBody가 추가된 것이며
Json형태로 된 데이터 객체를 반환 받아 주로 데이터 교환을 목적으로 사용된다
그래서 동작과정 역시 기본 컨트롤러에 @ResponseBody를 붙인것과 같음
PageController / apiController
@RequestMapping ("/주소")
특정 url를 고정적으로 사용하는 것
사용하는 이유 : 카테고리를 나눌 때 일일히 쓰는것도 번거롭고 , 구분감을 확실하게 하기위해서 사용한다
@Getmapping (Read)
주로 데이터를 가져오거나 , 읽는용도로 사용 한다
@RequestParam
@GetMapping에서 매개변수를 넣으면 기본적으로 사용되며,
웹에서 받은 데이터를 변수로 활용하기위해서 사용 됨
받을 때 자료형과 키값 = 변수 맞춰주면 알아서 들어감
웹에서 받고자하는 값이 많을 때 header에 Param이라는 객체에 key value형태로 보내면
dto로 받을 수 있다.
@PathVariable
@Getmapping으로 데이터를 조회(요청)할건데, 주소값안에 변수를 보낼 때
그 변수를 활용하려는 경우 @PathVariable을 통해서,
변수를 컨트롤러로 가져올 수 있음
@RequestParam과 달리 받는 변수가 하나거나 적을 때 Param보다 자주 사용됨
페이징처리,페이지 이동할 때 많이 사용된다
@PostMapping
데이터를 db에 보내서 저장할 때 주로 사용한다
웹에서 객체로 된 값을 dto로 받을 때 사용됨 이 때 매개변수에는 @RequestBody 명시해주어야한다
@ResponseBody
데이터값만 반환할 때 사용 된다
화면을 보여주는 게 아니라 데이터만 필요할 때 주로 사용하며
ViewResolver를 들리지않는다
JSON형태로 리턴해줌 → 객체 { key : value} 형태
interface , implements가 존재
모든 로직을 처리하는 구간이다
컨트롤러에서 데이터를 받아서 Repository로 전달하는 일종의 허브 같은 곳
RequestDto,ResponseDto,Repository 전부 여길 오고간다
@Service
여기가 서비스레이어 라는 곳임을 선언하는 어노테이션
@RequiredArgsConstructor
DI (의존성 주입) 유일한 객체로 만들어 공유시킨다
(Repository)인터페이스를 final 변수로 선언하여 오로지 서비스클래스에서만 이용
또는 사용하고자 하는 Controller 에서 @AutoWired로 연결 해준다
(IOC컨테이너에 미리 생성됨으로써 하나의 생성자로 의존성주입시켜준거임)
RequestDto
클라이언트에게 데이터를 key value로 받아서 저장
정보는 컨트롤러에 전달되기 전 dispatcherServlet?
ResponseDto
DB에서 데이터를 key value 로 받아서 저장
CMResponseDto
데이터를 받아서 마지막으로 꾸며서 클라이언트에게 보여지는 걸 만들어주는 곳
계층간 데이터 교환을 위해 로직을 가지지 않은(수정이 안되는 클래스)
순수한 데이터 객체 (Getter & Setter)만 가진 클래스
보낼 데이터가 많아지면 일일히 변수를만들어 작성하기 힘들다
데이터를 하나의 객체(Dto)로 만들어 Entity에 데이터를 보내준다.
dto 클래스는 private로 외부에서 접근이 불가능하게끔 만들어 보안성을 높이는데,
이 때 캡슐화 때문에 외부에서 데이터 접근이 불가하다
그래서 @Data 어노테이션이 필요하다
캡슐화 ( private가 붙은 건 해당클래스에서만 사용 가능 )
@Data getter,setter,toString 사용을 위한 어노테이션
Board,MapperInterface, xml
@Mapper
xml로 데이터를 보내줄 인터페이스라는 위치를 칭하는 어노테이션
MyBatis 라이브러리를 사용해 좀 더 쉽게 DB통신을 하기위한 도구라고보면 됨
그래서 XML은 데이터를 SQL query 형식으로 정리해줄건데 그것을 적는 공간
레포지토리(@mapper어노테이션이 달려있는 곳)에서 값을 받아서 db공간 까지 접근하는 곳이다
Data Access Object의 줄임말인 DAO는 프로젝트와 데이터베이스를 연결한다. Mapper에 SQL을 명시한뒤 Mapper와 함께 데이터베이스와 데이터를 주고받는다.
db에 들어갈 모든 변수들이 존재할 곳
@builder
@NoArgsConstructor
@AllArgsConstructor
@Data
toRespDto
Entity에서 view를 하는 건 안된다는 원칙
그래서 자료형을 바꿔주는 builder메소드
YML, SQL , myBatis 기본 세팅
데이터베이스의 공간을 부여해주는 클라우드이며, 사용하려면 초기설정이 필요하다
데이터베이스 생성 RDS
데이터베이스 생성 들어와서 딴 건 건들지말고 언급되는 것만 설정할 것
엔진옵션 - MariaDB 선택
엔진버전 : MariaDB 10.6.10
템플릿 - 프리티어
설정
DB 인스턴스 식별자 : db-identifier-gyeolhwi (마음대로 설정)
자격 증명 설정
마스터 사용자이름 : id랑 같은 개념 admin
마스터암호 : 유출되면 안됨








인스턴스 식별자와 맟춰주기

수정 가능한 파라미터
time_zone → Asia/seoul
character_set_~ → utf8mb4
collation → utf8mb4_0900_ai_ci / 제너럴ci?
// 프로시저,트리거 생성 해주는 거
log_bin_trust_function_creators → 1
체크 - 수정- 데이터베스옵션에서 DB파라미터그룹 변경
계속
수정예약 - 즉시적용
상태 수정 중 → 사용가능 확인 후 DB식별자 이름 클릭
연결 및 보안 - 보안
VPC 보안 그룹 default~ 클릭 - 보안그룹 ID 클릭 - 인바운드 규칙 편집 - 규칙추가

aws에서 엔드포인트 복사하기
sql 호스트명/IP에 붙여넣기
사용자 , 암호 → aws에서 설정한 id,pw
맥의 경우 sequel pro 다운로드
+SQL은 해킹을 많이 받으니까 table 같은 거 따로 저장해두기
(query문도 작성해놓으면 좋겠다)
* spring.mvc.static-path-pattern /static/**
* datasource.driver-class-name
org.mariadb.jdbc.Driver
url , username , password
url : jdbc:mariadb:// 엔드포인트 링크:포트번호/데이터베이스명?/useUnicode=true&characterEncoding=UTF-8
username : 내가지정한 거 ex) admin
password : aws에서 지정한 비밀번호
* mybatis.mapper-locations
/mappers/*.xml

ex) BoardRepository (인터페이스) 경로 그대로 가져오기
마이바티스 검색 → 시작하기 → 독타입 복사
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace ="레포지토리경로"> ex)com. ~ Repository
<select id="findByUserCode" parameterType="Integer"
resultType="데이터가 저장될 경로">
SELECT
FROM
where
</select>
</mapper>
parameterType 경로 ( 레포지토리로 보내주는 곳 )
레포지토리에서 매개변수의 자료형이 어떤거냐에 따라서 잡아주면된다
resulttype의 경우 → 리턴 자료형 잡아주면 됨
aqua
coral
title