Skip to content

Latest commit

ย 

History

History
130 lines (91 loc) ยท 4.18 KB

File metadata and controls

130 lines (91 loc) ยท 4.18 KB

MADA Server v2.0

์ธ์ฆ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ๋ฒ•

@Authenticated

๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ API์— ๋ถ™์ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ Spring Security์˜ @PreAuthorize("isAuthenticated()")๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ ๋˜๋Š” ํด๋ž˜์Šค ๋‹จ์œ„์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋ฉ”์„œ๋“œ ๋‹จ์œ„
@Authenticated
@GetMapping("/me")
public ResponseEntity<AccountDto> getMyProfile(...) { ... }

// ํด๋ž˜์Šค ๋‹จ์œ„ โ€” ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ์— ์ธ์ฆ ์ ์šฉ
@Authenticated
@RestController
@RequestMapping("/api/posts")
public class PostController { ... }

@CurrentAccount

์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ์ž…๋ฐ›๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค.
AccountDto(id, nickname) ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Authenticated์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

@Authenticated
@GetMapping("/me")
public ResponseEntity<AccountDto> getMyProfile(
    @CurrentAccount AccountDto account
) {
    return ResponseEntity.ok(account);
}

์ฃผ์˜: ์ธ์ฆ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ @CurrentAccount๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด UnauthorizedException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


git push ์ „ ํ™•์ธ ์‚ฌํ•ญ

๋ฐ˜๋“œ์‹œ ServerApplicationTests๋ฅผ ์‹คํ–‰ํ•œ ๋’ค pushํ•˜์„ธ์š”.

./gradlew test --tests "com.mada.server.ServerApplicationTests"

์ด ํ…Œ์ŠคํŠธ๋Š” Spring Modulith๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ๊ทœ์น™ ์œ„๋ฐ˜์„ ๊ฒ€์ฆํ•˜๊ณ , PlantUML ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ ๊ทœ์น™์„ ์–ด๊ธฐ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ํ…Œ์ŠคํŠธ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.


๋ชจ๋“ˆ ๊ตฌ์กฐ ๋ฐ ์ฐธ์กฐ ๊ทœ์น™ (Spring Modulith)

์ด ํ”„๋กœ์ ํŠธ๋Š” Spring Modulith๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๊ฒฝ๊ณ„

com.mada.server ํ•˜์œ„์˜ ๊ฐ ํŒจํ‚ค์ง€(์˜ˆ: account, auth, common, notification)๊ฐ€ ํ•˜๋‚˜์˜ ๋…๋ฆฝ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
๊ฐ ๋ชจ๋“ˆ์˜ package-info.java์— @ApplicationModule์„ ์„ ์–ธํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

com.mada.server
โ”œโ”€โ”€ account        โ† ๋ชจ๋“ˆ
โ”œโ”€โ”€ auth           โ† ๋ชจ๋“ˆ
โ”œโ”€โ”€ common         โ† ๋ชจ๋“ˆ
โ””โ”€โ”€ notification   โ† ๋ชจ๋“ˆ

์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ์˜์—ญ

๋ชจ๋“ˆ์˜ ๋ฃจํŠธ ํŒจํ‚ค์ง€์— ์œ„์น˜ํ•œ public ํƒ€์ž…๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

account/
โ”œโ”€โ”€ Account.java          โœ… ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
โ”œโ”€โ”€ AccountDto.java       โœ… ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
โ”œโ”€โ”€ AccountQueryService.java  โœ… ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
โ””โ”€โ”€ internal/
    โ””โ”€โ”€ AccountRepository.java  โŒ ์ฐธ์กฐ ๋ถˆ๊ฐ€ (๋‚ด๋ถ€ ์„œ๋ธŒํŒจํ‚ค์ง€)

๋ชจ๋“ˆ ๋‚ด๋ถ€ ์„œ๋ธŒํŒจํ‚ค์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐธ์กฐ ๋ถˆ๊ฐ€

internal ๋“ฑ ์„œ๋ธŒํŒจํ‚ค์ง€์— ์œ„์น˜ํ•œ ํด๋ž˜์Šค๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ ๋‚ด๋ถ€ ๊ตฌํ˜„์œผ๋กœ ์ทจ๊ธ‰๋˜์–ด, ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

// โŒ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ internal ํŒจํ‚ค์ง€ ์ง์ ‘ ์ฐธ์กฐ โ€” ๋ชจ๋“ˆ ๊ทœ์น™ ์œ„๋ฐ˜
import com.mada.server.account.internal.AccountRepository;

@NamedInterface โ€” ์„œ๋ธŒํŒจํ‚ค์ง€๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ๋…ธ์ถœํ•  ๋•Œ

์„œ๋ธŒํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ์„œ๋ธŒํŒจํ‚ค์ง€์˜ package-info.java์— @NamedInterface๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

// common/error/package-info.java
@NamedInterface(name = "error")
package com.mada.server.common.error;

import org.springframework.modulith.NamedInterface;

์„ ์–ธ ํ›„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ @ApplicationModule์—์„œ ํ•ด๋‹น named interface๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ package-info.java
@ApplicationModule(allowedDependencies = "common::error")
package com.mada.server.auth;

import org.springframework.modulith.ApplicationModule;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด common.error ํŒจํ‚ค์ง€์˜ ํƒ€์ž…(BusinessException, ErrorResponse ๋“ฑ)์„ auth ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌ

์œ„์น˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐ
๋ชจ๋“ˆ ๋ฃจํŠธ ํŒจํ‚ค์ง€์˜ public ํƒ€์ž… ๊ฐ€๋Šฅ
๋ชจ๋“ˆ ๋‚ด ์„œ๋ธŒํŒจํ‚ค์ง€ (internal/ ๋“ฑ) ๋ถˆ๊ฐ€ (๊ธฐ๋ณธ)
@NamedInterface ์„ ์–ธ๋œ ์„œ๋ธŒํŒจํ‚ค์ง€ ๊ฐ€๋Šฅ (allowedDependencies ์„ค์ • ํ•„์š”)