엔터프라이즈 애플리케이션 : 대규모의 복잡한 데이터를 관리하는 애플리케이션
복잡하고 어려운 웹 어플리케이션 구현 암흑기를 지나, 개발자의 어려움을 해결해주는 Spring 봄처럼 등장!
스프링이란?
자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 프레임워크임.
- 개발자들이 복잡한 서버 성능과 안정성, 보안 등을 고려하지 않고도 기능 개발에 집중할 수 있도록 도와줌.
- 다양한 기능을 제공하며, 의존성 주입 (Dependency Injection) 과 관점 지향 프로그래밍 (Aspect-Oriented Programming) 등의 개념을 통해 애플리케이션을 유지보수하기 쉽도록 도와줌.
+) 의존성 주입이란, 우리가 클래스를 가지고 객체를 생성하는 것을 개발자가 직접 하는게 아니라 스프링 프레임워크에서 주입해줌. (= 개발자가 직접 객체를 생성new하지 않고도, 스프링 프레임워크에서 대신 해줌)
+) 관점 지향 프로그래밍이란, 개발자가 비즈니스 핵심 로직만 구현할 수 있도록 도와줌.
스프링 부트 프로젝트 직접 만들어보기!
- Gradle-Groovy : 빌드할 때도 사용하고, 하나의 파일로 말아줄 때 사용함(후에 서버 배포). 개발자가 필요한 라이브러리를 가져다주는 역할을 함.
코드 생성 (동적 컨텐츠 호출)
package com.estsoft.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
class HelloApplicationTests {
public static void main(String[] args) {
SpringApplication.run(HelloApplicationTests.class, args);
}
}
-> com.estsoft.hello.HelloApplicationTests 를 실행하면 로컬호스트8080 에서 사이트를 열 수 있음.
package com.estsoft.hello.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HiController {
@GetMapping("/hi") // localhost:8080/hi
public String test(@RequestParam(value = "name", defaultValue = "word!") String name) {
return String.format("Hello %s!", name);
}
}
-> com.estsoft.hello.controller.HiController.java 에서 컨트롤러를 설정해주고 다시 서버를 띄우면
-> 이렇게 생성된 것을 볼 수 있음! 주소창에서
localhost:8080/hi?name=queryparameter
queryparameter 내용을 수정하면 수정한 내용이 반영된다. 그래서 동적인가보다!
코드 생성 (정적 컨텐츠 호출)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
static content : Hello World!
</body>
</html>
-> resources.static.hello.html
자바 코드로 어노테이션을 사용해서 스프링의 기능들을 쓸 수 있다!
-> 복습할 때 한번 쭉 읽기
PostMapping 실습 (& PostMan)
-> 나는 /hi (위 예시에선 /user)로 들어오는 요청을 모두 처리하려고 하는 것이다.
밑에 있는 예시를 정리하자면, postman에서 코드를 입력하고 send를 누르면 json 형태로 값이 전달되는데, @RequestBody에서 해당 내용을 Java Object로 변환하여 전달해줘서 실행한 Java sout 콘솔에 찍히는 것이다!
실제 실습 내용)
// POST localhost:8080/hi
// POST 요청이니까 클라이언트 쪽에서 뭔가 값을 전달해줄 것임.
@PostMapping("/hi")
public String postTest(@RequestBody String value) { // 그걸 value로 받아줌.
System.out.println("value = "+value);
return value; // json 형태로 리턴된다.
}
어떻게 하는진 알겠는데, 그래서 이걸로 뭘 하는거지..? 아직은 잘 모르겠다
ObjectMapper 실습 (& PostMan)
ObjectMapper는 json을 java object 형태로 deSerialize 해준다. 아래의 실습 예시로 복습하자.
@PostMapping("/hi")
public String testPost(@RequestBody String value) { // 그걸 value로 받아줌.
ObjectMapper objectMapper = new ObjectMapper();
// json -> java object : deSerialize
try {
Person person = objectMapper.readValue(value, Person.class);
// Person.class 한 이유는 readValue 자체가 (클래스명).class 로 받아와야하기 때문이다.
System.out.println("person = "+person);
} catch (JsonProcessingException e) {
System.out.println(e.getMessage());
}
System.out.println("value = " + value);
return value; // json
}
-> 다시 한번 더 정리하면, Postman에서 입력한 json을 java object로 바꿔주는 실습이다.
objectMapper를 사용해서 person과 value에 값을 받아오고 sout로 출력한다. 에러를 방지하기 위해 예외처리를 해준다.
이렇게 Postman에서 json으로 값을 입력해주고 Send 후 인텔리제이 출력 결과를 확인해보았다.
json -> java object가 이루어져 person과 value에 값이 잘 담긴걸 확인 할 수 있었다!
뭔가 신기하고 재밌다 ㅎㅎㅎㅎ
1. 클라이언트와 서버
- 클라이언트 (웹 브라우저) : 서버에 다양한 정보를 요청 ex) Postman
- 서버 : 클라이언트가 요청한 내용을 처리 ex) SpringBoot
2. 서버의 이해
서버
서버는 계속 대기하고 있다가 클라이언트의 요청이 있을 때 거기에 응답하는 장치 또는 프로그램이다. 서버가 다운되었다(= 서버가 대기 상태가 아니어서 클라이언트 요청에 응답을 할 수 없는 상태이다.)
웹 서버
"웹"을 제공하는 역할
-> 사용자가 웹 브라우저에서 www.naver.com을 입력했을 때 네이버의 웹 서버가 이를 알아채고 응답한다. 웹 서버가 응답을 보낸 자원을 이용해서 웹 브라우저는 화면을 그린다.
이때 2가지 경우가 있다. 정적인 컨텐츠를 가져올 때와, 동적인 컨텐츠를 가져올 때다. 위에서 코드로 실습해본 내용이다.
정적인 컨텐츠로 응답
이 경우에는 데이터베이스를 사용하지 않아도 바로 웹서버에서 정보를 꺼내 응답할 수 있음.
1. 사용자 A가 브라우저에서 HTML 페이지(static contents)를 요청함.
2. 웹 서버가 요청에 해당하는 static 한 페이지를 찾아서 응답함.
동적인 컨텐츠로 응답
1. 사용자 A가 정보를 요청함.
2. 웹 서버가 사용자 A의 정보를 데이터베이스에서 가져오기 위한 비즈니스로직을 실행함.
3. 데이터베이스에서 사용자 A의 정보를 꺼내어 응답함.
웹 서버는 클라이언트의 다양한 요청을 처리하기 위해 비즈니스로직이라는 것을 미리 준비해둠. 웹 서버는 여러 개의 비즈니스 로직이 합쳐진 것임. 비즈니스로직을 만드는 Java의 규격 이름은 Servelt
정리하자면, 자바를 이용해 웹 페이지를 동적으로 생산하는 백엔드 웹 애플리케이션 개발 기술을 Servelt 이라고 함.
+) Servelt은 Tomcat의 역할과 비슷하다 (ex 문 역할)
Servelt에 대해선 추후에 더 자세하게 배울듯
위에서 실습한 코드를 그림으로 보면,
'Back-End > Spring' 카테고리의 다른 글
[Spring] MyBatis 실습 / JPA 개념 (외부) (0) | 2024.03.07 |
---|---|
[Spring] Docker, JPA 기초 실습 (외부) (0) | 2024.03.06 |
[Spring] 동적 페이지 구현/스프링 핵심 개념 (0) | 2024.03.05 |
[Spring] 스프링 부트 실습&데베연결/MVC 개념 (0) | 2024.03.04 |
[Spring] 의존성/컴포넌트 스캔/의존관계 주입/스프링부트 디렉터리 (0) | 2024.02.29 |