Study

[점프 투 스프링 부트3] 프로젝트 구조 _ 게시판 프로젝트

dev-hyena 2025. 2. 24. 11:15

자료는 위키독스를 참고했다. 

https://wikidocs.net/book/7601

 

점프 투 스프링부트

"점프 투 스프링부트"는 "Spring Boot Board(SBB)"라는 이름의 게시판 서비스를 만들어가는 과정을 설명한 스프링부트 입문서이다. 자바 설치부터 시작하여 서비스 운…

wikidocs.net

*개발환경은 인텔리제이, 프로젝트 구조는 자료와 동일하다.

 

실습 내용은 위키독스에 자세히 나와있기 때문에 추가적인 개념 등을 덧붙여서 작성할 계획이다.


프로젝트 진행에 앞서, 프로젝트 구조에 대한 이해가 필요하다.

간단한 프로젝트 구성에 대해 알아보자. 

 

src/main/java 

: 해당 디렉터리는 자바 파일을 작성하는 공간이다. 

 

[Projectname]Application.java

: [프로젝트명] + Application.java 파일은 파일 시작을 담당하는 파일이고, 

해당 클래스에 반드시 @SpringBootApplication애너테이션이 적용되어 있어야 한다. 
@SpringBootApplication을 통해 스프링 부트의 모든 설정을 관리할 수 있다.

 

src/main/resources 

: 자바 파일을 제외한 HTML, CSS, JS, 환경파일을 작성하는 공간이다. 

 

resources/templates

: 리소스의 하위 디렉토리로 템플릿 파일을 저장한다. 

HTML 파일 형태로 자바 객체와 연동되는 파일이다. 

예를 들어, 게시판의 질문목록, 질문 상세 등의 HTML 파일을 저장한다.

 

resources/static 

: static 디렉터리에는 sbb 프로젝트의 스타일시트(css 파일), 자바스크립트(js 파일)

그리고 이미지 파일(jpg 파일, png 파일 등) 등을 저장한다.  

 

application.properties 

: application.properties 파일은 프로젝트의 환경을 설정한다.
프로젝트의 환경, 데이터베이스 등의 설정을 이 파일에 저장한다.

 

src/test/java

: 프로젝트에서 작성한 파일을 테스트하는 코드를 저장하는 공간이다.

JUnit과 스프링 부트의 테스팅 도구를 사용하여 서버를 실행하지 않은 상태에서

src/main/java 디렉토리에 작성한 코드를 테스트할 수 있다.

 

build.gradle

: gradle이 사용하는 환경 파일로 groovy를 기반으로 한 빌드 도구로 Ant, Maven과 같은

이전 세대 빌드도구의 단점을 보완하고 장점을 취합하여 만든 빌드 도구이다.
해당 파일에는 프로젝트를 위해 필요한 플러그인과 라이브러리 등을 기술한다.


컨트롤러 만들어서 URL 매핑하기

웹 브라우저와 같은 클라이언트의 요청이 발생하면 서버 역할을 하는 스프링 부트가 응답해야 한다.

그러기 위해서는 URL이 스프링 부트에 매핑되어 있어야 하고

이를 위해서는 먼저 컨트롤러를 만들어야 한다.

 

컨트롤러(@Controller)

- 사용자의 요청이 진입하는 지점(entry point)

- 요청에 따라 어떤 처리를 할지 결정
   * 단 컨트롤러는 단지 결정만 할 뿐, 실질적인 처리는 서비스(@Service)에서 담당
- 사용자에게 View를 응답으로 보내줌

 

컨트롤러를 쓰는 이유

- 하나의 클래스에서 모든 서비스를 처리하는 것이 아니라, controller라는 중간 제어자 역할을 만들어 A 요청은 A-controller가 맡아 필요한 로직처리를 위한 서비스를 호출

- controller는 MVC 패턴에 포함되며, 역할분담이 핵심

- 스프링부트는 페이지 요청이 발생하면 가장 먼저 컨트롤러에 요청된 페이지의 URL 매핑이 있는지 조사

 

컨트롤러 사용 방법

- @Controller: 해당 애너테이션이 붙은 클래스가 스프링부트의 컨트롤러가 된다.

- @RequestMapping("URL"): 요청된 URL과의 매핑을 담당한다.
   - 도메인명과 포트는 서버 설정에 따라 변하기 때문에, http://localhost:8080과 같은 도메인명과 포트는 적지 않는다.

- @ResponseBody: URL 요청에 대한 응답으로 문자열을 리턴한다.
   - 이 애너테이션을 생략하면 controller 클래스의 메소드가 리턴하는 문자열 이름을 가진 템플릿 파일을 찾게 된다.


JPA

게시판 특성상 질문과 답변에 따라 생성되는 데이터를 관리해야한다.

데이터를 관리하려면 저장, 조회, 수정 등의 기능을 구현해야한다.

게시판을 만드는 프로젝트는 실제 서비스 용도가 아니고, 데이터 양이 적기 때문에

H2 데이터베이스를 사용한다. 

H2 데이터 베이스 설치