억대 연봉 백엔드 개발자의 스프링 공부노트
[백엔드 개발자의 스프링 공부노트] 각 색깔은 IntelliJ IDEA(인텔리제이) 레인보우플러그에서 색깔별 의미는 무엇이냐?
보라색 (Public): public은 접근 지정자(Access Modifier)로, 다른 클래스에서 해당 메서드 또는 변수에 접근할 수 있는 범위를 표시합니다. public은 가장 큰 범위로, 어떤 클래스에서든 접근이 가능합니다.
파랑색 (BoardController): 클래스 이름을 나타냅니다. 여기서는 BoardController가 파랑색으로 표시됩니다. 클래스 이름은 항상 파랑색으로 표시되어 명확하게 구분되게 됩니다.
황금색 (BoardService): 인터페이스 또는 클래스의 타입을 나타냅니다. 인터페이스와 클래스 타입은 황금색으로 표시되어 쉽게 구분할 수 있습니다.
갈색 (boardService): 인스턴스 변수를 나타냅니다. 인스턴스 변수는 각 객체에 속한 변수입니다. 여기서 boardService 인스턴스 변수는 BoardService 타입의 객체를 저장하고 있습니다.
보라색 (this): this 키워드는 현재 객체의 인스턴스를 참조합니다. 여기서는 생성자에서 받은 boardService 인자를 현재 객체의 인스턴스 변수인 this.boardService에 할당하는 데 사용됩니다.
빨강색 (boardService 매개변수): 메서드나 생성자에서 사용되는 매개변수를 나타냅니다. 여기서는 생성자 BoardController의 boardService 매개변수가 빨강색으로 표시됩니다. 이 매개변수는 일반적으로 메서드 또는 생성자에서 사용되는 변수로, 호출 시에 전달된 값을 가집니다.
[백엔드 개발자의 스프링 공부노트] @RequestMappin 무엇이냐?
Spring MVC에서 HTTP 요청을 Java 메서드와 매핑하는데 사용되는 어노테이션입니다. 이를 통해 클라이언트가 보낸 웹 요청을 처리하는 데 사용할 메서드를 지정할 수 있습니다. 주어진 코드 조각을 제공하지 않았기 때문에, 예제 코드를 사용하여 단어별 의미와 코드 리뷰 순서를 설명하겠습니다.
예를 들어 다음과 같은 @RequestMapping을 사용하는 코드가 있다고 가정해보겠습니다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping("/hello")
public String sayHello() {
return "hello";
}
}
- @Controller: 클래스 레벨에서 사용되며, 이 클래스를 Spring MVC 컨트롤러로 선언합니다. @Controller가 지정된 클래스는 요청(request)을 처리하는데 사용되는 메서드를 포함합니다.
- MyController: 클래스 이름입니다. 사용자가 정의한 컨트롤러 클래스명입니다.
- @RequestMapping: 메서드 레벨에서 사용되며, 이 어노테이션으로 지정된 URL 패턴의 요청을 처리할 메서드를 지정할 수 있습니다. 여기서는 /hello URL 패턴을 처리하기 위해 sayHello 메서드를 지정하였습니다.
- "/hello": @RequestMapping 어노테이션에 사용되는 URL 패턴입니다. 클라이언트가 /hello로 요청을 보내면 sayHello 메서드가 처리합니다.
- public String sayHello(): 클라이언트의 요청에 대해 처리하는 메서드입니다. 이 경우 sayHello 메서드는 /hello URL에 대한 요청을 처리합니다.
코드 리뷰 및 진행 순서
- @Controller 어노테이션을 사용하여 MyController 클래스를 Spring MVC 컨트롤러로 지정합니다.
- /hello URL에 대한 요청을 처리할 메서드를 지정하기 위해 sayHello 메서드 위에 @RequestMapping("/hello") 어노테이션을 사용합니다.
- 클라이언트가 /hello URL로 요청을 보내면, Spring MVC는 요청을 처리하기 위해 해당 URL 패턴에 매핑된 sayHello 메서드를 호출합니다.
- sayHello 메서드는 "hello"라는 문자열을 반환합니다. 이 문자열은 보통 뷰 이름으로 사용되어 클라이언트에게 전달되는 웹 페이지를 결정합니다. 이 예제에서는 "hello"라는 뷰를 사용하여 요청에 대한 응답을 처리하게 됩니다.
@RequestMapping을 사용하면 웹 애플리케이션에서 URL 요청을 처리할 메서드를 쉽게 지정할 수 있고, 클라이언트의 요청을 처리하는데 필요한 로직을 구현할 수 있습니
[백엔드 개발자의 스프링 공부노트] RequestMapping에 대한 공부
// src/main/java/com/example/demo/MyController.java
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping("/hello")
public String sayHello() {
return "hello";
}
}
hello.html 뷰 파일을 작성합니다:
<!-- src/main/resources/templates/hello.html -->
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
이제 DemoApplication을 실행하고, 웹 브라우저에서 http://localhost:8080/hello 주소에 접속하면 다음과 같은 콘솔 출력을 확인할 수 있습니다:
2022-04-20 12:34:56.789 INFO 1234 --- [main] com.example.demo.DemoApplication : Starting DemoApplication on hostname with PID 1234 (/path/to/application/app.jar started by user in /path/to/application)
...
2022-04-20 12:34:58.001 INFO 1234 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2022-04-20 12:34:58.005 INFO 1234 --- [main] com.example.demo.DemoApplication : Started DemoApplication in 1.842 seconds (JVM running for 2.312)
웹 브라우저에서는 hello.html 뷰 파일에 정의된 페이지를 확인할 수 있습니다. 이 예제에서는 웹 브라우저에 "Hello, world!"라는 문자가 출력되어 있을 것입니다.
이렇게 sayHello 메서드가 반환한 "hello" 문자열이 뷰 이름으로 사용되었으며, 이를 통해 클라이언트에게 전달되는 웹 페이지가 결정되었습니다. 코드에서 작성한 @RequestMapping("/hello")을 통해 "/hello" URL 요청에 대한 응답으로 "hello" 뷰를 처리하도록 지정되었습니다.
[백엔드 개발자의 스프링 공부노트] BoardService boardService: BoardController에서 사용되는 BoardService 클래스입니다.
private BoardService boardService;
BoardService는 데이터베이스와 관련된 작업을 추상화한 서비스 레이어입니다. BoardService가 내부적으로 데이터베이스 테이블과 관련된 작업을 처리하고 있습니다(예를 들어, CRUD 작업). 여기서는 findAll 메서드를 사용하여 게시판의 모든 게시물을 조회하는 기능을 수행하고 있습니다.
[백엔드 개발자의 스프링 공부노트] List<Board> boards = boardService.findAll();
BoardService의 findAll 메서드를 호출하여 게시판의 모든 게시물을 조회합니다. 이 경우, Board 클래스의 객체들은 데이터베이스에서 가져온 게시물 테이블의 각 행과 일치합니다. findAll 메서드는 데이터베이스 테이블에서 데이터를 조회하는 작업을 수행하고 결과를 반환합니다.
[백엔드 개발자의 스프링 공부노트] model.addAttribute("boards", boards);
조회된 게시물 목록 boards가 뷰에 전달되어야 하고, Model 객체에 추가됩니다. Model 객체에 포함되는 boards가 뷰(예: Thymeleaf 템플릿)에서 사용되어 목록을 표시합니다.
BoardService 인스턴스를 통해 데이터베이스에서 게시물 목록을 조회하는 작업을 수행합니다. findAll 메서드는 게시물 테이블에서 모든 게시물을 불러오는 작업을 처리합니다. 이 메서드는 데이터베이스 테이블과 관련된 작업을 수행하고, 결과를 반환합니다.
직접적인 데이터베이스 접근 및 조회 작업은 BoardService 클래스 내부에서 이루어진다고 가정합니다. 일반적으로 이러한 서비스 클래스는 데이터 액세스 객체(DAO) 또는 Repository 인터페이스를 사용하여 데이터베이스와 상호 작용합니다. 이들 컴포넌트들은 Spring Data JPA, MyBatis와 같은 데이터베이스 프레임워크를 이용하여 구현되며, 실제 테이블 CRUD 연산을 처리하는 코드를 포함합니다.
결론적으로, List<Board> boards = boardService.findAll(); 코드는 데이터베이스 테이블과 간접적인 연관성이 있으며, 이 코드를 통해 BoardService를 사용하여 데이터베이스에서 게시물 목록을 가져옴으로써 데이터베이스와 상호 작용합니다. 전체 구조는 컨트롤러가 서비스 계층을 통해 데이터베이스 작업을 수행하도록 분리되어있습니다. 이렇게 함으로써 요청 처리, 비즈니스 로직 처리, 데이터베이스 작업 수행을 각각 분리하여 관리할 수 있습니다.
'컴퓨터공부 > Springboot' 카테고리의 다른 글
스프링부트 공부노트 (1) (0) | 2023.08.13 |
---|---|
백엔드 개발자의 스프링 공부노트 (3) (0) | 2023.08.10 |
억대 연봉 백엔드 개발자의 스프링 공부노트 (2) (0) | 2023.08.09 |
백엔드 개발자의 스프링 공부노트 (0) | 2023.08.09 |
댓글