playdata/weekly

[플레이데이터 데이터 엔지니어링 캠프 32기] 15주차 회고

soojin1 2024. 10. 20. 21:34

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도 열심히 하기