Java code style์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
- 2.1 ๋๋ฉ์ธ ํจํค์ง(domain package)
- 2.2 ๊ธ๋ก๋ฒ ํจํค์ง(global package)
- 2.3 ์ธํ๋ผ ํจํค์ง(Infra package)
- 2.4 ํจํค์ง ๊ตฌ์กฐ(package structure)
- 3.1 ๋ณต์, ๋จ์ ๊ท์น(Plural and singular rules)
- 3.2 ์๋น์ค(Service)
- 3.3 ์ปจํธ๋กค๋ฌ(Controller)
- 3.4 ์ํฐํฐ(Entity)
- 3.5 ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(DTO)
- 3.6 ์ ์ฅ์(Repository)
- 3.7 ํ์ (Type)
- 3.8 ๊ตฌ์ฑ(Config)
๋ณธ ๋ฌธ์๋ Nangman์ Spring ์คํ์ผ์ ์ค๋ช ํฉ๋๋ค.
- ๋ก์ง(Logic) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฉ์๋(Method)
- ํด๋์ค(Class)
- ์ธํฐํ์ด์ค(Interface)
- ๋๋ฉ์ธ(Domain) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ํ๋ก๊ทธ๋จ ์ ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ํน์ ๊ธฐ๋ฅ ์์ญ
- ์๋น์ค(Service) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋น์ฆ๋์ค ์ ํ์ํ ๊ธฐ๋ฅ์ ์ํํ๋ ์์ญ ํน์ ๋ก์ง
- ์ปจํธ๋กค๋ฌ(Controller) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- API ์๋ํฌ์ธํธ๋ฅผ ์ ์ํ๊ณ , ์ ๊ณตํ๋ ์์ญ ํน์ ๋ก์ง
- ์ํฐํฐ(Entity) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ด๊ณผ ํ์ ๋ค๋ฃฐ ์ ์๋ ์์ญ ํน์ ๋ก์ง
- ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(Data Transfer Object) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- DTO๋ผ๊ณ ํ๋ฉฐ ๋ฐ์ดํฐ ์ ์ก๋ง์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด
- ์ ์ฅ์(Repository) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฉ์๋ ํน์ ์ธํฐํ์ด์ค๊ฐ ์ ์๋ ์์ญ
- ๊ตฌ์ฑ(Config)
- ๋์์ ์ํํ๋๋ฐ ํ์ํ ์ค์ ํ์ผ ์์ญ ํน์ ๋ก์ง
- ํ์
(Type) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- Enum Class๋ก ์ ์๋ Type ํด๋์ค
- Type์ DB์ ์ ์ฅํ ๋๋ String์ผ๋ก ์ ์ฅํ๊ณ , ํด๋์ค๋ ์ปฌ๋ผ ๋ช ๋ํ ์ ๋ฏธ์ฌ๋ก Type์ ๋ถ์ ๋๋ค.
- Response์ ๊ฒฝ์ฐ, Type์ String ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
- ์ํ(State)
- Enum Class๋ก ์ ์๋ State ํด๋์ค
- State๋ Integer๋ก ๊ตฌ์ฑ๋ state number์, String์ผ๋ก ๊ตฌ์ฑ๋ Description์ ํญ์ ๊ฐ์ต๋๋ค.
- State๋ฅผ DB์ ์ ์ฅํ ๋๋ ์์๋ก ์ ์ฅํ๊ณ , ํด๋์ค๋ ์ปฌ๋ผ ๋ช ๋ํ ์ ๋ฏธ์ฌ๋ก State๋ฅผ ๋ถ์ ๋๋ค.
- Response์ ๊ฒฝ์ฐ state๋ ๊ธฐ๋ณธ์ ์ผ๋ก Integer Type์ผ๋ก ๋ฐํํฉ๋๋ค.
- ์ํฉ์ ๋ฐ๋ผ FrontEnd ์ธก์์ State์ ๋ํ ์ค๋ช (String)์ด ํ์ํ ๊ฒฝ์ฐ State์ ๋ํ ์ค๋ช ์ ํจ๊ป ๋ฐํํ๋ฉฐ, ์ด ๋ JSON Field ์ด๋ฆ์ ~~StateDescription์ ํ์์ ๊ฐ์ง๋๋ค.
- ๊ฒ์ฆ(Validation) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ์์ญ ํน์ ๋ก์ง
- ์ฃผ์ ํ
ํ๋ฆฟ(Comment(s) Template) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ํด๋์ค ๋ฐ๋ก ์ ์ ์๋๋ ์ฝ๋ ์์ฑ์์ ๊ธฐ๋ณธ์ ๋ณด ์์
๐ก Nangman์ ๋๋ฉ์ธ ๋ณ๋ก ํจํค์ง๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
- ์ด๋ฆ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ๋๋ฉ์ธ ํจํค์ง๋ ์ฌ๋ฌ ๊ฐ์ ๋๋ฉ์ธ ํจํค์ง๋ฅผ ํฌํจํ๋ฉฐ ํด๋น ํจํค์ง์ ๊ตฌ์ฑ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์ปจํธ๋กค๋ฌ ํจํค์ง(controller package) : ์ปจํธ๋กค๋ฌ ๋ก์ง์ ํฌํจ
- ์๋น์ค ํจํค์ง(service package) : ์๋น์ค ๋ก์ง์ ํฌํจ
- DTO ํจํค์ง(dto package) : DTO ๋ก์ง์ ํฌํจ
- ์ํฐํฐ ํจํค์ง(entity package) : ์ํฐํฐ ๋ก์ง๊ณผ ์ ์ฅ์ ๋ก์ง์ ํฌํจ
- ์ด๋ฆ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ๊ธ๋ก๋ฒ : ์ด๋ ํ ๋๋ฉ์ธ์ ์ํ์ง ์๊ณ , ๋๋ฉ์ธ ๋ด์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ ๋ก์ง์ ๊ตฌ๋ถ
- ๊ธ๋ก๋ฒ ํจํค์ง๋ ์๋ ํจํค์ง๋ฅผ ํฌํจํฉ๋๋ค.
- ๊ตฌ์ฑ(config) : ๊ตฌ์ฑ ๋ก์ง์ ํฌํจ
- ์์ธ(exception) : ์์ธ์ฒ๋ฆฌ ๋ก์ง์ ํฌํจ
- ํ์ (type) : ํ์ ๋ก์ง์ ํฌํจ
- ์ ํธ(util) : ์ด๋ก์ด ๊ธฐ๋ฅ์ธ ์ ํธ ๋ก์ง์ ํฌํจ
- ์ด๋ฆ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ์ธํ๋ผ : ์ธ๋ถ API๋ฅผ ์ฌ์ฉํ๋ ๋ก์ง์ ๊ตฌ๋ถ
- ์ธํ๋ผ ํจํค์ง์ ๊ตฌ์ฑ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์๋น์ค ํจํค์ง(service package) : ์๋น์ค ๋ก์ง์ ํฌํจ
- DTO ํจํค์ง(dto package) : DTO ๋ก์ง์ ํฌํจ
- ์ํฐํฐ ํจํค์ง(entity package) : ์ํฐํฐ ๋ก์ง๊ณผ ์ ์ฅ์ ๋ก์ง์ ํฌํจ
(์์)
โโโ ๐com.nangman
โโโ domain
| โโโ user
| | โโโ controller
| | โโโ dto
| | โโโ entity
| | โโโ service
| |
| โโโ post
| โโโ controller
| โโโ dto
| โโโ entity
| โโโ service
|
โโโ global
โโโ config
โโโ exception
โโโ type
โโโ util
๐ก ๋ก์ง์ ๋ํ ๋ช ๋ช ๊ท์น์ ์ค๋ช ํฉ๋๋ค.
- ๋ณต์๋ ๋ก์ง์ ๋ฐํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋จ์๋ ๋ก์ง์ ๋ฐํ ๊ฒฐ๊ณผ๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ณต, ๋จ์์ ๊ด๊ณ์์ด ๋ก์ง์ ์ค๋ช ํ ์ ์๋ ์ ํํ ์ด๋ฆ์ ์์ฑํฉ๋๋ค.
(์์)
(ํ๋์ ๊ฒ์๊ธ)
(O) BoardDetailDto
(X) BoardDto
(๊ฒ์๊ธ ๋ชฉ๋ก)
(O) BoardListDto
- ํ๋์ ๋ก์ง์์ ๋ณต์์, ๋จ์ ๋ก์ง์ ๋์์ ํฌํจํ๋ ๊ฒฝ์ฐ ๋ก์ง์ด ๊ตฌ๋ถ๋๋ ๊ณณ์์ ์ด๋ฅผ ์ ์ํฉ๋๋ค.
(๊ฒ์๊ธ์ ์ฒ๋ฆฌํ๋ ์๋น์ค ๋ก์ง)
//BoardService.java
void findAllBoard() { //๊ฒ์๊ธ ๋ชฉ๋ก ๋ฐํ
......
}
void findDetailBoard() { //ํ ๊ฐ์ ๊ฒ์๊ธ ๋ฐํ
......
}
- ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
- Service ๋ก์ง์ Class ์ด๋ฆ์ Service๋ก ๋๋ฉ๋๋ค.
(์์)
(O) CompanyService
- ์๋ต ํํ์ ๋ฐ๋ผ ์ด๋ฆ์ ๊ตฌ๋ถ ์ง์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
- Controller ๋ก์ง์ Class ์ด๋ฆ์ Controller๋ก ๋๋ฉ๋๋ค.
- RestController ๋ก์ง์ Class ์ด๋ฆ์ ApiController๋ก ๋๋ฉ๋๋ค.
(์์ )
(O) CompanyApiController
(O) UserController
- ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
- ๋ช ์ฌ ํน์ ๋ช ์ฌ ๊ตฌ๋ก ์ด๋ค์ง ์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
(์์ )
(O) Company
(O) AwsS3
-
์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
-
์๋์ ๊ฐ์ ํํ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
(Name)(Behavior)(Request/Response)(Dto)
-
Name : ์ํ ๋๋ฉ์ธ ํน์ ์ ์ค๋ช ํ ์ ์๋ ๋ช ์ฌ ๋ฐ ๋ช ์ฌ๊ตฌ
-
Behavior : ํด๋น DTO๊ฐ ์ํํ๋ ๋์
-
Request/Response : ํด๋น DTO์ ์ฉ๋
-
DTO ๋ก์ง์ Class ์ด๋ฆ์ Dto๋ก ๋๋ฉ๋๋ค.
(๋ชจ๋ Company Behavior์ ๋ํ์ฌ ์ฌ์ฉํ๋ DTO)
(O) CompanyRequestDto
(Boss ์์ฑ์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ DTO)
(O) BossCreateRequestDto
(Boss ์์ ์์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํ ๋ ์ฌ์ฉํ๋ DTO)
(O) BossEditResponseDto
- Repository ๋ก์ง์ Class ์ด๋ฆ์ Entity์ ์ด๋ฆ์ผ๋ก ์์ํ๊ณ , Repository๋ก ๋๋ฉ๋๋ค.
- ๋จ Repository ํํ์ ๋ฐ๋ผ Custom ๋ฐ Impl ์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
(Company Entity์ ๋ํ์ฌ ์ฌ์ฉํ๋ Repository)
(O) CompanyRepository
(O) CompanyRepositoryCustom
(O) CompanyRepositoryImpl
- ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
- Type ํด๋์ค์ ๊ฒฝ์ฐ Type์ผ๋ก ๋๋ฉ๋๋ค.
(์์)
(O) DomainNameType
(O) RoleType
(O) TargetType
- ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ฌ์ ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
- Config ๋ก์ง์ Class ์ด๋ฆ์ Config๋ก ๋๋ฉ๋๋ค.
(์์)
(O) KakaoConfig
(O) AwsS3Config
์ด๋ ธํ ์ด์ ๊ณผ ๋ฉ์๋์ ์์๋ฅผ ๋ค๋ฃน๋๋ค.
-
์ด๋ ธํ ์ด์ ์ ๊ตฌ๋ถ
[Lombok] @Getter @Setter @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor @Builder @Data @ToString @EqualsAndHashCode [JPA - class] @Entity @MappedSuperClass @EntityListener @Table [Jpa - Column] @Column @JoinColumn @NToM @Validation (NotNull, NotBlank, min ...) @Custom (Merge, etc...) @Pattern [Spring] @RestController / @Controller @RequestMapping @Service @Transactional @PathVariable @RequestPart @RequestParam @RequestBody @Valid =============
- @Entity > @Constructor > (@Builder) > @Getter ์์๋ฅผ ๊ฐ์ง๋๋ค.
(์์)
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class UserEditRequestDto... {
}
- @Column > @GeneratedValue > @Id ์์๋ฅผ ๊ฐ์ง๋๋ค.
(์์)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "QNA_ID")
private Long id;
- @Column > @JoinColumn > @NToM > @Pattern > @Validation > @Custom ์์๋ฅผ ๊ฐ์ง๋๋ค.
- NToM : oneTomany ๋ฑ ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ๊ด๋ จ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
- Validation : Max, Min, NotNull ๋ฑ ๊ฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
- Custom : ์ง์ ๊ตฌํํ ์ด๋ ธํ ์ด์ ์ ์๋ฏธํฉ๋๋ค.
(์์)
@Custom
@Validation
@Pattern
@NToM
@JoinColumn
@Column
private User user;
- @Pattern > @Validation > @Custom ์์๋ฅผ ๊ฐ์ง๋๋ค.
(์์)
@Custom
@Validation
@Pattern
private String phoneNumber;
- @Service > @Constructor > @Transactional ์์๋ฅผ ๊ฐ์ง๋๋ค.
(์์)
@Transactional
@RequiredArgsConstructor
@Service
public class UserService{
...
}
- @Controller > @Constructor > @Mapping ์์๋ฅผ ๊ฐ์ง๋๋ค.
(์์)
@RequestMapping("/api/v1/post")
@RequiredArgsContructor
@RestController
public class UserApiController{
...
}
- @Valid์ @RequestBody ๋ฑ ํ๋ผ๋ฏธํฐ์ ์ด๋ ธํ ์ด์ ์ ์ค๋ฐ๊ฟ์ ์์จ์ ์ผ๋ก ์งํํฉ๋๋ค.
@PostMapping("/save")
public Long createUser(@Valid @RequestBody UserRequestDto requestDto){
....
}
- ๋ฉ์๋ A, B, C๊ฐ ์๊ณ ์ด๋ฅผ ๊ฒ์ฆํ๋ ๋ฉ์๋๊ฐ ๊ฐ๊ฐ a, b, c๊ฐ ์์ ๋ ๊ฐ ๋ฉ์๋๊ฐ ์์นํ๋ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
A
a
B
b
C
c
- ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋ ab์ abc๊ฐ ์์ฑ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ต๋๋ค.
A
a
ab
abc
B
b
C
c
- createUser์ editUser ๋ฉ์๋๊ฐ ์กด์ฌ
- createUser๋ฅผ validationํ๋ validationCreateUserRequest ์กด์ฌ
- editUser๋ฅผ validationํ๋ validationEditUserRequest ์กด์ฌ
- createUser์ editUser ๋ฉ์๋์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ validationUserRequest ์กด์ฌ
public void createUser() {
...
}
public void validationCreateUserRequest() {
...
}
public void validationUserRequest() {
...
}
public void editUser() {
...
}
public void validationeditUserRequest() {
...
}
์ผ๋ฐํ ๋ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
- class์์ ์๋์ ๊ฐ์ ํ ํ๋ฆฟ์ ์ ์ฉํ์ฌ ์ฌ์ฉํฉ๋๋ค.
/**
* @date : ${YEAR}-${MONTH}-${DAY}
* @author : Minjun-KANG
*/