📌DB 연동하기
이전 H2는 매 서버 실행시, 범위 데이터를 초기화 >> 유지될 수 있도록 DB설치
data.sql 없애기
※ PostgreSQL 설치
https://www.postgresql.org/download/
PostgreSQL: Downloads
www.postgresql.org
설치 디렉토리 :기본값/ components : stack builder제외 다운/ 데이터 디렉토리 : 기본값
superuser PW 설정>> 해당 PW 알아야 DB접속 가능
포트번호 그대로
db cluster Locale : KR, UTF-8
pgAdmin(>>postgreDB를 쉽게 사용할 수 있는 도구) 실행(검색창 검색)
>> sql 작성 및 동작해볼 수 있음,
※ DB 드라이버 설치
build.gradle
//PostgreSQL 드라이버 추가 runtimeOnly 'org.postgresql:postgresql'
//oracle,mysql 드라이버 각각추가
//spring initializr에 검색 > explore 누르면 build.gradle 알 수 있음.
application.properties
#PostgreSQL 연동
spring.datasource.url=jdbc:postgresql://localhost:5432/firstproject_db
spring.datasource.username=postgres
spring.datasource.password=PW(설치할때 설정했던 PW)
spring.datasource.data=classpath:/data.sql
spring.datasource.initialization-mode=never
spring.jpa.hibernate.ddl-auto=update
https://jdbc.postgresql.org/download/
Download | pgJDBC
Download Binary JAR file downloads of the JDBC driver are available here and the current version with Maven Repository. Because Java is platform neutral, it is a simple process of just downloading the appropriate JAR file and dropping it into your classpat
jdbc.postgresql.org
👉설치
https://velog.io/@dlaskrgus8/PostgreSQL-JDBC-Driver-%EC%84%A4%EC%B9%98
👉연결
📌 IoC와 DI
IoC : 프로그램 흐름이 개발자의 코드가 아닌 외부에 의해 제어되는 개념.
DI : 필요 객체를 외부에서 또다른 객체로 꽂아줘서 주입하는 방식
IoC 와 DI는 객체간 상호결합을 낮춰서 더 유연한 코드, 객체지향적인 코드를 만들게 함.
controller, service, repository 등을 통해 요청을 처리해왔는데, 해당 객체를 만든 적이 없음.
((클래스는 반드시 객체로 만들어 줘야만 사용가능))
>> springboot가 제공하는 IoC container 때문
IoC container : 핵심 객체를 관리하는 창고로
controller, service, repository 등의 다양한 객체들을 여기서 만들고 관리함.
IoC에 담긴 객체들은 필요에 따라 또다른 객체들로 주입함.
이러한 객체 생성, 관리, 주입은 관리자 코드가 아니라 IoC container에 의해 통제된다.
※ 셰프와 식재료 사이에, 조달 공장을 두어 의존성을 낮춤.
📌AOP, 관점지향 프로그래밍
CRUD 과 같은 핵심기능과는 별개로 부가적인 코드가 필요함
파라미터가 잘 입력되었는지, 반환값이 올바른지 로깅을 한다거나, 퍼포먼스 측정을 위해 특정 메서드 수행시간 확인 등등.
ex ) 은행업무 - 계좌이체, 입출금, 이자계산 등 핵심기능 + Logging / Secure / Transac. 같은 별개의 기능이 붙게됨.

댓글 생성 서비스에서 입력된 파라미터 반환값을 로그 확인 >> 직접 코드를 집어넣었었는데,
일일이 넣는 것 + 핵심 로직과는 맞지않음 >> AOP pac로 빼냄.// 밑 어노테이션 이용하여 생성
이를 좀더 깔끔하게 처리하기 위하여 AOP 기법을 만들어냄!
AOP : 부가기능을 특정 지점에 잘라넣는(삽입) 기법
DI가 특정 객체로 주입하는 것처럼 특정 로직을 주입하는 것!
ex) @Transactional - 이 어노테이션 하나만으로도 문제발생 시 데이터를 롤백할 수 있음
AOP 주요 어노테이션
@Aspect : 부가 기능 주입을 위한 AOP 클래스 선언
@Pointcut : 주입 대상 지정
@Before : 대상 실행 이전에 수행
@After : 대상 실행 후, 수행
@AfterReturning : 대상 실행 후, 수행(정상 수행 시)
@AfterThrowing : 대상 실행 후, 수행(예외 발생 시)
@Around : 대상 실행 전후로 수행
📌ObjectMapper, JSON
ObjectMapper : JSON과 자바 객체간 변환을 제공하는 객체
public void 자바_객체를_json으로_변환() {
String json = objectMapper.writeValueAsString(burger);
// writeValueAsString(자바객체) => json으로 ~~
}
그 반대,
public void json_자바_객체로_변환() {
Burger burger = objectMapper.readValue(json, Burger.class);
// json, json으로 만들 새로운 객체 타입
}
JSON NODE를 만들 때
{
"name" : "맥도날드 슈비버거",
"price" : 5500,
"ingredients" : [ "통새우 패티", "순쇠고기 패티", "토마토", "스파이시 어니언 소스" ]
} 처럼
일일이 하드코딩하지 않고,
'json node를 가지고 키와 값을 put하는 방식 / 새로운 노드를 set하는 방식'으로
json node를 만들 수 있다!
※ 하드코딩 : 상수나 변수에 들어가는 값을 소스코드에 직접 쓰는 방식
YOUTUBE 홍팍님 강의 내용을 토대로 작성 및 정리
해당 코드들은 아래에서 확인
https://cloudstudying.kr/courses/65
스프링 부트, 입문! | CloudStudying
cloudstudying.kr
'STUDY > [홍팍]SpringBoot' 카테고리의 다른 글
18~21 #REST API와 테스트 (0) | 2023.03.27 |
---|---|
7~17 #게시글CRUD (0) | 2023.03.26 |
4~6 #모델, 뷰, 컨트롤러 (0) | 2023.03.26 |
1~3 #시작하기 (0) | 2023.03.25 |
입문 목차 (0) | 2023.03.25 |