๐Ÿ“š TIL 19์ผ์ฐจ

temprmnยท2023๋…„ 6์›” 12์ผ
0
post-thumbnail

์˜ค๋Š˜์˜ ์ฃผ์š”์‚ฌํ•ญ (6/12, ์›”์š”์ผ)

  1. Spring ์ž…๋ฌธ ์ฃผ์ฐจ ๋ฐœ์ œ
  2. ์ƒˆ๋กœ์šด ํŒ€ ํŽธ์„ฑ

์•„์นจ์— ์ผ์–ด๋‚˜๋‹ˆ๊นŒ ๋„ˆ๋ฌด ํ”ผ๊ณคํ•ด์„œ... ๋”ฑ ์ƒค์›Œ๋งŒ ํ•˜๊ณ  ์˜ค์ž~ ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ํ—ฌ์Šค์žฅ์— ๋„์ฐฉํ–ˆ๋”๋‹ˆ ๋„์ฐฉํ•˜์ž๋งˆ์ž ์ •์‹ ์ด ๋ง‘์•„์ ธ์„œ ์šด๋™๊นŒ์ง€ ํ•˜๊ณ  ์™”์Šต๋‹ˆ๋‹ค

๐ŸŒฑ Spring ์ž…๋ฌธ

1. Gradle ๐Ÿ˜

Gradle = ๋นŒ๋“œ ์ž๋™ํ™” ์‹œ์Šคํ…œ

  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ Java ์ฝ”๋“œ๋ฅผ ์„ค์ •์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ Build ํ•ด์ค€๋‹ค.

  • Gradle์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ Java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ๊ฐ€๋Šฅํ•œ jar ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

build.gradle

build.gradle = Gradle ๊ธฐ๋ฐ˜์˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ

  • ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ฐ„์˜ ์ถฉ๋Œ ๊ฑฑ์ •์—†์ด ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • groovy ํ˜น์€ kotlin ์–ธ์–ด๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

dependencies

(1) ํ•„์š”ํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ dependencies์— ์ž‘์„ฑ โ†’ (2) Gradle์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ Maven Repository๏ผŠ์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ์—์„œ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ

๏ผŠMaven Repository: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋ชจ์•„๋‘” ์ €์žฅ์†Œ. ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฒ€์ƒ‰ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š” (^^)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2. Postman ์‹œ์ž‘ํ•˜๊ธฐ

Postman์ด๋ž€ API ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ.

  • API์— ๋งž์ถฐ์„œ HTTP ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ํ™•์ธํ•ด์•ผ ๋งŒ๋“  ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ™•์ธ ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”Œ๋žซํผ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์„ค์น˜

https://www.postman.com/downloads/

๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

1) API ๋ช…์„ธ
NameMethodURL์„ค๋ช…
์ธ์‚ฌGET/api/helloHello World! ๋ฅผ ์ถœ๋ ฅ
2) ์ฝ”๋“œ ์ž‘์„ฑ

๏ผ  ์• ๋…ธํ…Œ์ด์…˜ ์ฐธ๊ณ 

  • @RestController
  • @GetMapping("/api/hello")
package com.sparta.springprepare.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/api/hello")
    public String hello() {
        return "Hello World!";
    }

}
3) postman ์‹คํ–‰
  1. Workspace โ†’ New
  2. HTTP Request
  3. GET ๋ฐฉ์‹ ์„ ํƒ
  4. URL ์ž…๋ ฅ (http://localhost:8080/api/hello)
  5. Send ํด๋ฆญ
  6. ๊ฒฐ๊ณผ โ†“
    postman

3. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

Spring์—์„œ๋Š” 'ํ…Œ์ŠคํŠธ ์ฝ”๋“œ' ์ž˜ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” Java์šฉ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ JUnit์„ ์‚ฌ์šฉํ•œ๋‹ค. JUnit์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” main() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์•„๋„ ๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ ํ˜น์€ ๊ธฐ๋Šฅ๋ณ„๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. (JUnit์€ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค)

4. Lombok

ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ/์ƒ์„ฑ์ž ๋“ฑ์„ ์ž๋™ ์ƒ์„ฑํ•ด์คŒ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์˜ˆ์‹œ)
@Getter // getter ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑ
@Setter // setter ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑ
public class Memo {
    private String username;
    private String contents;
}

@Getter์™€ @Setter ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์• ๋…ธํ…Œ์ด์…˜๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@NoArgsConstructor // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
@AllArgsConstructor // ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ€์ง„ ์ƒ์„ฑ์ž (์˜ค๋ฒ„๋กœ๋”ฉ ๋จ)
@RequiredArgsConstructor // final ์ œ์–ด์ž๊ฐ€ ๋ถ™์€ ํ•„๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ€์ง„ ์ƒ์„ฑ์ž (์˜ค๋ฒ„๋กœ๋”ฉ ๋จ)

5. Servlet๊ณผ Front Controller

1) Spring MVC์—์„œ์˜ Servlet

Servlet(์„œ๋ธ”๋ฆฟ)์€ Java๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ๊ทธ ์‚ฌ์–‘์„ ๋งํ•œ๋‹ค.

Servlet ์ •๋ฆฌ

2) Front Controller ํŒจํ„ด

Spring์€ DispatcherServlet์„ ์‚ฌ์šฉํ•œ Front Controller ํŒจํ„ด ๋ฐฉ์‹์œผ๋กœ API ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.

Front Controller ํŒจํ„ด ์ •๋ฆฌ

profile
`ISFJ` T 49% F 51% /

0๊ฐœ์˜ ๋Œ“๊ธ€