

src/main/java 디렉토리
main -> java 디렉터리는 자바 파일을 작성하는 공간으로
컨트롤러, 폼, DTO, 데이터 베이스 처리를 위한 엔티티, 서비스 파일 등이 있을 수 있다
ProjectnameApplication.java
<프로젝트명> + Application.java 파일은 시작을 담당하는 파일이다
해당 클래스에는 반드시 @SpringBootApplication 애너테이션이 적용되어 있어야 한다
위 애너테이션을 통해 스프링부트의 모든 설정이 관리된다
src/main/resources 디렉토리
자바 파일을 제외한 HTML, CSS, JS, 환경파일 등을 작성하는 공간이다
templates 디렉토리
resources의 하위 디렉토리로 템플릿 파일을 저장한다
템플릿 파일이란 HTML 파일 형태로 자바 객체와 연동되는 파일이다
해당 디렉토리에는 프로젝트의 질문 목록, 질문 상세 등의 HTML 파일을 저장한다
static 디렉토리
프로젝트의 스타일시트(.css), 자바스트립트(.js), 이미지 파일(.jpg, .png)등을 저장하는 공간이다
application.properties 파일
application.properties 파일은 프로젝트의 환경을 설정한다
프로젝트의 환경, 데이터베이스 등의 설정을 이 파일에 저장한다
src/test/java 디렉토리
프로젝트에서 작성한 파일을 테스트하기 위한 테스트 코드를 작성하는 공간이다
Junit과 스프링부트의 테스팅 도구를 사용하여 서버를 실행하지 않은 상태에서 src/main/java 디렉토리에 작성한 코드를 테스트할 수 있다
build.gradle 파일
gradle이 사용하는 환경 파일로 groovy를 기반으로 한 빌드 도구로 Ant, Maven과 같은 이전 세대 빌드도구의 단점을 보완하고 장점을 취합하여 만든 빌드 도구다
해당 파일에는 프로젝트를 위해 필요한 플러그인과 라이브러리 등을 기술한다
컨트롤러란,
그렇다면 컨트롤러를 쓰는 이유?
컨트롤러에 요청된 페이지의 URL 매핑이 있는지 조사컨트롤러 사용 방법
@Controller: 해당 애너테이션이 붙은 클래스가 스프링부트의 컨트롤러가 됨@RequestMapping("URL"): 요청된 URL과의 매핑을 담당@ResponseBody: URL 요청에 대한 응답으로 문자열을 리턴하 벌써 혼미해지기 시작한다 하지만 정신줄 붙잡고 더 써본다

이제 진짜 JPA!
JPA는 자바 진영에서 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음이다
사실 또 남음! JPA를 사용하기 전에 H2 데이터베이스를 설치하고 연결해 볼 것이다
Oracle, Mysql 같은 db들이 있지만, sbb 프로젝트에서는 경량 데이터베이스인 h2를 활용!
❓h2
홈 디렉토리에 local.mv.db 파일 생성을 마치고 나면 http://localhost:8080/h2-console으로 접속하여 콘솔화면에 접근할 수 있다
그리고 spring-boot-starter-data-jpa 를 gradle에 추가해주면 이제 진짜 jpa를 사용할 수 있게 되는 것 같다

그리고 프로퍼티 파일도 수정!
이 프로퍼티 파일은 디자인패턴 공부시에 잠깐 봤던 부분인데, 실 사용을 보니 재밌다
나중에 프로젝트할 때 많이 참고할 수 있을 것 같다

엔티티는 DB 테이블의 행을 나타낸다
@entity 애너테이션을 붙이면 테이블과 자바 클래스가 매핑되고 다른 엔티티와 관계를 맺을 수 있다
이러한 관계 메타데이터는 클래스에 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 와 같은 애네터이션을 통해 설정할 수 있다
JPA 애너테이션 참고
엔티니는 JPA가 생성할 때 기본 생성자를 이용하므로 반드시 기본 생성자를 가져야 하며,
식별자 프로퍼티(@Id)가 반드시 존재해야 한다
해당 엔티티에 어떤 속성들이 필요한지 잘 생각해봐야겠군!!!
위에서 만든 엔티티로는 데이터베이스에 데이터를 저장하거나 조회할 수 없다
데이터 처리를 위해서는 실제 데이터베이스와 연동하는 JPA 리포지터리가 필요!
리포지터리 = 인터페이스!
기본적으로 findAll, save, findById, delete와 같은 메소드들을 가지고 있다
데이터 CRUD와 깊은 관련!!!
@Autowired 애너테이션은 객체를 선언만 해둬도 알아서 스프링이 자동으로 생성해준다 ㄴㅇㄱ
벗! 순환참조(?)으 문제 등으로 생성자를 통한 객체 주입방식이 권장된다고 한다.
하우에버! 테스트 코드에서는 생성자를 통한 주입이 불가하여 테스트 코드에는 위 애너테이션을 사용한다
진짜,, 내 생성자는 몰까,,?
레포지터리가 잘 작동하는 지 테스트 할 때에는 실 서버는 닫고 해야한다.
참고할만한 JPA 레포지토리 메소드
1. findAll: 모든 데이터 조회
2. findById: 매개변수로 넘겨준 id 조회
만약 내가 필요한 메소드가 있다면 findBySubject(String subject)와 같이 메소드를 만들면 된다

그리고 메소드명에 위 항목들을 추가하면 알아서 해당하는 쿼리문의 where 조건을 결정해준다!
예를들어 findBySubjectAndContent 하면 알아서 subject하고 content 컬럼에서 찾아온다는 거다.. 대박..
pom.xml?