카테고리 없음

여름방학 6주차 스프링부트

조강학 2024. 8. 11. 13:03

http:/url/ hello

hello 에 매핑되는 함수가 호출되고 함수의 결과값 반환

컨트롤러는 진입점

 

모든 프로그램에는 시작을 담당하는 파일이 존재하고 스프링부트 애플리케이션에도 존재함

프로젝트+ application.java 파일이 그 역할 

프로젝트 생성시 자동으로 생성되는 파일이다.

 

리소스파일에는 html, css등 리소스 파일들이 모여있다

 

템플릿 디렉토리에는 템플릿 파일이 저장된다

 

static 디렉토리에는 프로젝트의 스타일 시트, 자바 스크립트, 이미지 등을 저장한다

 

application.properties 파일은 프로젝트 환경을 설정한다 

프로젝트 환경과 데이터 베이스 등의 설정을 저장한다.

 

src/test/java 디렉토리 

작성한 파일을 테스트하기위한 테스트 코드를 작성한다 테스팅 도구를 사용하여 서버를 싱행하지 않은 상태에서 코드를 테스트 할 수 있다

 

 

bulid.gradle 파일

그레이들이 사용하는 환경파일

그레이들은 그루비를 기반으로한 빌드 도구호 이전 세대 빌드 도구들의 단점을 보완하고 장점을 취합하여 만든 빌드 도구이다.

프로젝트를 위해 필요한 플러그인과 라이브러리 등을 기술한다.

 

컨트롤러는 유알엘과 매핑시킨다.

 

http://localhost:8080/sbb를 검색했을 떄 404 번호의 에러가 발생하는데 이는 브라우저가 페이지를 찾을 수 없다는 의미이다

 

이 오류를 해결하기 위해서는 컨트롤러를 작성하여 /sbb url에 대한 매핑을 추가하면 해결 가능하다

'브라우저와 같은 클라이언트의 페이지 요청이 발생하면 스프링부트가 먼저 컨트롤러에 등록된 url 매핑을 찾고 해당 url을 발견하면 그 url 매핑과 연결된 매서드를 실행한다

 

클라이언트 요청이 발생하면 서버 역할을 하는 스프링부트의 응답이 필요하다. 이를 위해 url이 스프링부트에 매핑되어있어야 하고 또 이를 위해 먼저 컨트롤러가 만들어져야 한다.

 

컨트롤러를 작성하여 url 매핑을 추가하기 위해 src/main/java 디렉터리의 com.mysite.sbb 패키지에 MainController.java 파일을 작성한다

 

클래스 내부에 @controller 애너테이션을 적용하면 해당 클래스는 스프링부트의 컨트롤러가 된다 

그리고 @GetMapping 이너테이션은 요정된 url과의 매핑을 담당한다

 

브라우저가 url을 요청하면 스프링부트는 요청 페이지와 매핑되는 매서드를 찾아 실행한다

 

스프링 부트는 요청이 발생하면 해당 url과 매핑되는 index 매서드를 Main Controller 클래스에서 찾아 실행한다

 

getmapping 에서는 포트와 도메인명은 작성하지 않는다. 이 둘은 서버 설정에 따라 변경되기 때문이다

 

 다시 서버를 실행해도 여전히 오류 화면을 볼 수 있는데 404에서 500번으로 오류 번호가 바뀐것을 볼 수 있다.

 

main controller에서 index 함수가 호출되기는 했지만 오류가 발생해서이다

 

원래 url과 매핑된 함수는 결과값을 리턴해줘야하는데 아무것도 리턴하지 않아서 발생한 오류이다

즉 이 오류를 해결하기 위해서는 클라이언트(브라우저)로 결과값을 리턴해주면 된다

 

return 값만 제대로 정의해준다면 리로드가 잘 일어나는것을 확인 가능하다

 

JPA 

java persistent api

자바 진영에서 orm의 기술 표준으로 사용하는 인터페이스 

주로 개발에서 사용하고 실제 운영에서는 좀더 규모가 있는 db를 사용

 

 

H2 데이터베이스

주로 개발용이나 소규모 프로젝트에서 사용하는 파일 기반의 경량 데이터베이

데이터 베이스에 저장되는 영역을 칭한다

SQL 쿼리 문으로 데이터베이스에 저장하거나 불러올 수 있다

ORM을 이용하면 자바문법만으로도 데이터베이스를 다룰 수 있다 개발자가 쿼리를 직접 작성하지 않도 데이터를 처리할 수 있다

테이블은 

id subject content 로 나눠져있음

 id는 자동으로 증가되도록 저장할 수 있고 이렇게 구성된 테이블에 새로운 데이터를 삽입하는

 

쿼리:

insert into question (subject,content) values ('안녕하세요','인사드립니다');

 

ORM:

Question q1=new QUestion();

q1.setWubject('안녕하세요');

q1.setContent('인사드립니다');

 

엔티티(모델,도메인 모델)

데이터베이스 테이블과 매핑되는 자바 클래스

 

 

question

속성 이름                                                설명

id 질문 데이터의 고유 번호
subject 질문 데이터의 제목
content 질문 데이터의 내용
createDate 질문 데이터를 작성한 일시

 

 

 

answer

속성 이름                                                           설명

id 답변 데이터의 고유 번호
question 질문 데이터 (어떤 질문의 답변인지 알아야 하므로 이 속성이 필요하다.)
content 답변 데이터의 내용
createDate 답변 데이터를 작성한 일시

 

 

 

@GeneratedValue 애너테이션

적용하면 데이터를 저장할 때 해당 속성에 값을 일일이 입력하지 않아도 자동으로 1씩 증가하여 저장

 strategy = GenerationType.IDENTITY는 고유한 번호를 생성하는 방법을 지정하는 부분으로, GenerationType.IDENTITY는 해당 속성만 별도로 번호가 차례대로 늘어나도록 할 때 사용.

strategy 옵션을 생략한다면 @GeneratedValue 애너테이션이 지정된 모든 속성에 번호를 차례로 생성하므로 순서가 일정한 고유 번호를 가질 수 없게 된다!

 

@Column 애너테이션

엔티티의 속성은 테이블의 열 이름과 일치하는데 열의 세부 설정을 위해 @Column 애너테이션을 사용

columnDefinition = "TEXT"는 말 그대로 ‘텍스트’를 열 데이터로 넣을 수 있음을 의미하고, 글자 수를 제한할 수 없는 경우에 사용