/Winey-Server

πŸ’Έ μ•„λ‹ˆ, μ–΄μ œλ§Œ 해도 μ™•μ‘±μ΄μ—ˆλ˜ λ‚΄κ°€ 평민이라고?

Primary LanguageJava

Winey-Server

image

πŸ‘©πŸ»β€πŸ’» νŒ€μ› μ†Œκ°œ


전선희 (funnysunny08)

Server

κΉ€μˆ˜ν˜„(sss4920)

Server

ν˜‘μ—… λ…Έμ…˜: https://empty-weaver-a9f.notion.site/Server-ba05f43a9dfe44de969af9a27cea4481?pvs=4

πŸ“± 합리적인 μ†ŒλΉ„λ₯Ό ν•˜κ³ μ‹Άμ§€λ§Œ μ‹€νŒ¨ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•œ μ„œλΉ„μŠ€, μœ„λ‹ˆ(Winey)!!

🧐 λ§ˆμ΄νŽ˜μ΄μ§€ API

ν˜„μž¬ λ‚΄κ°€ μ ˆμ•½ν•΄μ„œ λ‚˜μ˜ 레벨과 정보듀을 μ‘°νšŒν•  수 μžˆλŠ” APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“ λͺ©ν‘œ μ„€μ • API

λ‚΄κ°€ μ ˆμ•½ν•˜κ³  싢은 κΈˆμ•‘μ„ μ„€μ •ν•˜λŠ” API 제곡

πŸ’Š μ ˆμ•½ μΆ”μ²œλ²• API

λ‹€μ–‘ν•œ κ²½λ‘œμ—μ„œ μ ˆμ•½μ„ ν•  수 μžˆλŠ” μ ˆμ•½ 방법듀을 μΆ”μ²œν•˜λŠ” APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

😍 ν”Όλ“œ μ’‹μ•„μš”/μ·¨μ†Œ API

λ‹€λ₯Έμ‚¬λžŒλ“€μ΄ λ§Œλ“  ν”Όλ“œλ“€μ— μ’‹μ•„μš”λ₯Ό λ‚¨κΈ°λŠ” μ’‹μ•„μš” κΈ°λŠ₯ API 제곡

πŸ‘€ ν”Όλ“œ 전체 뢈러였기 API

λͺ¨λ‘κ°€ μ ˆμ•½ν•œ λ‚΄μš©λ“€μ„ ν•œ λˆˆμ— λ³΄λŠ” μ „μ²΄μ‘°νšŒ API 제곡

🌱 ν”Όλ“œ 생성 API

λ‚΄κ°€ μ ˆμ•½ν•œ λ‚΄μš©λ“€μ„ κΈ°λ‘ν•˜λŠ” ν”Όλ“œ 생성 API 제곡

🌼 마이 ν”Όλ“œ, 마이 ν”Όλ“œ μ‚­μ œ API

λ‚΄κ°€ μž‘μ„±ν•œ ν”Όλ“œλ“€μ„ μ‘°νšŒν•˜κ³ , μ‚­μ œν•  수 μžˆλŠ” API 제곡


image



πŸ›  기술 μŠ€νƒ

πŸ–₯ Backend

μ—­ν•  μ’…λ₯˜
Framework RED RED
Database RED
Database Service RED
Programming Language RED
API REST
Version Control Git GitHub
CI/CD Slack

πŸ–₯ Common

μ—­ν•  μ’…λ₯˜
ν˜‘μ—… 관리 RED
λ””μžμΈ RED

πŸ“‚ 폴더 ꡬ쑰


β”œβ”€β”€ πŸ“‚.github

β”œβ”€β”€ πŸ“‚ main
	β”œβ”€β”€ πŸ—‚οΈ resources
		β”œβ”€β”€ πŸ“• application.yml


	β”œβ”€β”€ πŸ“‚ controller(컨트둀러 파일)
		β”œβ”€β”€ πŸ—‚οΈ dto
		 β”œβ”€β”€πŸ—‚οΈ request
		 β”œβ”€β”€πŸ—‚οΈ response
			
	β”œβ”€β”€ πŸ“‚ domain(μ—”ν‹°ν‹° 파일)

	β”œβ”€β”€ πŸ“‚ infrastructure(λ ˆν¬μ§€ν† λ¦¬ 폴더)
	
	β”œβ”€β”€ πŸ“‚ service(μ„œλΉ„μŠ€ 파일)
	
	β”œβ”€β”€ πŸ“‚ exception(Exception enum, Exception class 파일)
		β”œβ”€β”€ πŸ—‚οΈ model

	β”œβ”€β”€ πŸ“‚ config(swagger κ΄€λ ¨ 파일)

	β”œβ”€β”€ πŸ“‚ exception(Exception enum, Exception class 파일)

	β”œβ”€β”€ πŸ“‚ external(S3 service 파일)
      β”œβ”€β”€ πŸ—‚οΈ client
          β”œβ”€β”€ πŸ—‚οΈ aws
		          β”œβ”€β”€ πŸ“• S3Service

	β”œβ”€β”€ πŸ“‚ common(곡용 클래슀 관리)
		β”œβ”€β”€πŸ—‚οΈ advice
		β”œβ”€β”€πŸ—‚οΈ dto

Code Convention


  1. File Naming
  • 파일 이름 및 클래슀, μΈν„°νŽ˜μ΄μŠ€ 이름: 파슀칼 μΌ€μ΄μŠ€(Pascal Case)
public class ControllerExceptionAdvice {
  1. Entityμ—μ„œ μ‚¬μš©λ˜λŠ” 속성값듀은 ? 카멜 μΌ€μ΄μŠ€(camel Case)
private String email;
  1. λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜ 및 기타 μ‚¬μš©: 카멜 μΌ€μ΄μŠ€(camelCase)
public ApiResponse createEmail(@RequestBody @Valid final BoardRequestDto request) {
  1. μ—”ν‹°ν‹° μƒμ„±μž κ΄€λ¦¬λŠ” Builder Pattern μ‚¬μš©
@Builder

μΈν„°νŽ˜μ΄μŠ€ 이름에 λͺ…사/ν˜•μš©μ‚¬ μ‚¬μš© [interface-noun-adj]

μΈν„°νŽ˜μ΄μŠ€(interface)의 이름은 λͺ…사/λͺ…μ‚¬μ ˆλ‘œ ν˜Ήμ€ ν˜•μš©μ‚¬/ν˜•μš©μ‚¬μ ˆλ‘œ μ§“λŠ”λ‹€.

// Good Exemples
public interface RowMapper {
public interface AutoClosable {

클래슀 이름에 λͺ…사 μ‚¬μš© [class-noun]

클래슀 이름은 λͺ…μ‚¬λ‚˜ λͺ…μ‚¬μ ˆλ‘œ μ§“λŠ”λ‹€.

λ©”μ„œλ“œ 이름은 동사/μ „μΉ˜μ‚¬λ‘œ μ‹œμž‘ [method-verb-preposition]

λ©”μ„œλ“œλͺ…은 기본적으둜 λ™μ‚¬λ‘œ μ‹œμž‘ν•œλ‹€.

βœ”οΈ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ μ „ν™˜ν•˜λŠ” λ©”μ„œλ“œλ‚˜ λΉŒλ” νŒ¨ν„΄μ„ κ΅¬ν˜„ν•œ 클래슀의 λ©”μ„œλ“œμ—μ„œλŠ” μ „μΉ˜μ‚¬λ₯Ό μ“Έ 수 μžˆλ‹€.

- λ™μ‚¬μ‚¬μš© : renderHtml()
- μ „ν™˜λ©”μ„œλ“œμ˜ μ „μΉ˜μ‚¬ : toString()
- Builder νŒ¨ν„΄ μ μš©ν•œ 클래슀의 λ©”μ„œλ“œμ˜ μ „μΉ˜μ‚¬ : withUserId(String id)

πŸ‘ μƒμˆ˜

μƒμˆ˜λŠ” λŒ€λ¬Έμžμ™€ μ–Έλ”μŠ€μ½”μ–΄λ‘œ ꡬ성[constant_uppercase]

"static final"둜 μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν•„λ“œμΌ λ•Œ μƒμˆ˜λ‘œ κ°„μ£Όν•œλ‹€.

μƒμˆ˜ 이름은 λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λ©°, λ³΅ν•©μ–΄λŠ” μ–Έλ”μŠ€μ½”μ–΄'_'λ₯Ό μ‚¬μš©ν•˜μ—¬ 단어λ₯Ό κ΅¬λΆ„ν•œλ‹€.

public final int UNLIMITED = -1;
public final String POSTAL_CODE_EXPRESSION = β€œPOST”;

λ³€μˆ˜

λ³€μˆ˜μ— μ†Œλ¬Έμž μΉ΄λ©œν‘œκΈ°λ²• 적용 [var-lower-camelcase]

μƒμˆ˜κ°€ μ•„λ‹Œ 클래슀의 λ©€λ²„λ³€μˆ˜/μ§€μ—­λ³€μˆ˜/λ©”μ„œλ“œ νŒŒλΌλ―Έν„°μ—λŠ” μ†Œλ¬Έμž μΉ΄λ©œν‘œκΈ°λ²•(Lower camel case)을 μ‚¬μš©ν•œλ‹€.

private boolean authorized;
private int accessToken;

μž„μ‹œ λ³€μˆ˜ μ™Έμ—λŠ” 1 κΈ€μž 이름 μ‚¬μš© κΈˆμ§€ [avoid-1-char-var]

λ©”μ„œλ“œ λΈ”λŸ­ λ²”μœ„ μ΄μƒμ˜ 생λͺ… μ£ΌκΈ°λ₯Ό κ°€μ§€λŠ” λ³€μˆ˜μ—λŠ” 1κΈ€μžλ‘œ 된 이름을 쓰지 μ•ŠλŠ”λ‹€.

반볡문의 μΈλ±μŠ€λ‚˜ λžŒλ‹€ ν‘œν˜„μ‹μ˜ νŒŒλΌλ―Έν„° λ“± 짧은 λ²”μœ„μ˜ μž„μ‹œ λ³€μˆ˜μ—λŠ” κ΄€λ‘€μ μœΌλ‘œ 1κΈ€μž λ³€μˆ˜λͺ…을 μ‚¬μš©ν•  수 μžˆλ‹€.

HtmlParser parser = new HtmlParser();