Greeting spring boot
동작
□ 아래와 같이 동작하는 서비스 만들기

□ 아래와 같이 입력한 값을 기억하고 있다가 계속 화면에 출력하기
□ 똑같이 동작하는 fastAPI 만들기
□ Pepole.java 를 만들기 Pepole 은 num(int), name(String) 속성을 갖고 있음
□ greeting.html num, name 같이 출력
□ 입력받은 이름(영어로) -> Min,Kim,Park 처럼 첫 문자가 대문자로 표현되도록
나는 intellij 사용했다.
먼저 아래와 같이 프로젝트를 생성해주었다.


우선 연결이 되는지 테스트하는 방법이다.
resources -> static 경로에 index.html 파일을 생성하고 아래와 같이 내용을 구성했다.
GreetingApplication을 실행하고 localhost:8080/index.html에 접속해보았다.
오류 없이 <body> 내용이 출력되는 것을 확인할 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>


※ static 과 templates
static | 정적 리소스 (HTML, CSS, JS, 이미지) | 정적 파일 (CSS, JS, 이미지 등) | http://localhost:8080/파일명 | 정적인 웹 리소스 제공 |
templates | 동적 HTML 렌더링 템플릿 | .html (Thymeleaf, FreeMarker 등) | 컨트롤러에서 반환된 뷰 이름을 통해 접근 | 동적인 페이지 생성 및 데이터 렌더링 |
이제 1단계부터 수행해보겠다.

- controller/greetingController.java
package org.example.greeting.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class greetingController {
@GetMapping("/greeting")
public String greeting(
@RequestParam(
name = "name",
required = false,
defaultValue = "HI") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
- resources/templates/greeting.html
<p th:text="${name}"></p>
- http://localhost:8080/greeting?name=사과

- greetingController.java 수정 : Stack 사용
package org.example.greeting.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Stack;
@Controller
public class greetingController {
Stack<String> names = new Stack<>();
@GetMapping("/greeting")
public String greeting( @RequestParam(
name="name",
required = false,
defaultValue = "HI") String name,
Model model) {
names.push(name);
model.addAttribute("names", names);
return "greeting";
}
}
- greeting.html 수정
<H1>이전까지 입력한 내용</H1>
<li th:each="name: ${names}" td th:text="${name}"></li>
[ 실행결과 ]



- main.py
from fastapi import FastAPI
from typing import List
app = FastAPI()
# 이름 저장을 위한 스택
names = []
@app.get("/greeting", response_model=List[str])
async def greeting(name: str = "HI"):
names.append(name)
return names
- 실행
$ fastapi dev main.py
[실행결과]


- people.java
package org.example.greeting.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
import java.util.Stack;
@Controller
public class people {
private Stack<String> names = new Stack<>();
@GetMapping("/people")
public String greeting(@RequestParam(name="name", required=false, defaultValue="HI") String name, Model model) {
name = capitalizeName(name);
names.push(name);
model.addAttribute("names", names);
return "people";
}
// 입력된 이름의 첫 글자를 대문자로 변환하는 메서드
public String capitalizeName(String name) {
if (name == null || name.isEmpty()) {
return name;
}
return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
}
}
- people.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<H1>Greeting</H1>
<ul>
<li th:each="name, iterStat : ${names}">
<span th:text="${iterStat.index + 1}"></span>. <!-- 자동 증가하는 숫자 출력 -->
<span th:text="${name}"></span> <!-- 이름 출력 -->
</li>
</ul>
</body>
</html>
[ 실행결과 ]


실습 끝!
🩷 좋았던 점
spring 처음 배워봤다.
잘 쓰는 법을 알았다기 보다는 뭐 spring 정말 많이 들어봤는데 뭐 하는 건지 몰랐는데 fastapi가 제공하던 기능을 만드는 것이라고 이해를 하게 되었다.
🥹 아쉬웠던 점
자바, spring에 큰 미련이 없어서..................

sql 공부를 더 했다.
💪 이 상태에서 다음 일주일을 더 잘 보내려면 어떻게 해야 할까?
수업은 다 따라가는게 좋을듯
그리고 sql도 열심히 하기
'playdata > weekly' 카테고리의 다른 글
[플레이데이터 데이터 엔지니어링 캠프 32기] 17주차 회고 (2) | 2024.11.03 |
---|---|
[플레이데이터 데이터 엔지니어링 캠프 32기] 14주차 회고 (0) | 2024.10.14 |
[플레이데이터 데이터 엔지니어링 캠프 32기] 13주차 회고 (4) | 2024.10.06 |
[플레이데이터 데이터 엔지니어링 캠프 32기] 12주차 회고 (1) | 2024.09.30 |
[플레이데이터 데이터 엔지니어링 캠프 32기] 11주차 회고 (0) | 2024.09.23 |