Spring Boot 레이어드 아키텍처는 아래와 같이 구성되어 있습니다. 이 구조에서 각 컴포넌트의 역할을 간단하게 설명해보겠습니다.
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@ToString
public class UserDTO {
private String name;
private Integer age;
private String major;
}
@Entity
@Table(name = "user")
@NoArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class UserEntity{
@Id // primary Key
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private String address;
@Column(name = "major")
private String major;
}
@Controller
public class UserController {
UserService userService;
@Autowired
public UserController (UserService userService){
this.userService = userService; // Service 주입
}
@RequestMapping(value = "/user",method = RequestMethod.POST)
public String saveUser(UserDTO user){
userService.saveUser(user); // service에서 비즈니스 로직 수행 후
return "save";
}
@GetMapping(value = "/user/{id}")
public UserDTO getUser(@PathVariable("id") Long id){
UserDTO getUserDTO = userService.getUser(id);
return user;
}
}
@Service
public class UserService {
UserDAO userDAO;
@Autowired
public UserService (UserDAO userDAO){
this.userDAO = userDAO;
}
// User 저장
public void saveUser(UserDTO user){
UserEntity userEntity = UserEntity.builder()
.name(user.getName())
.address(user.getAddress())
.major(user.getMajor())
.build();
userDAO.saveUser(userEntity);
}
// User id로 User 정보 조회
public UserDTO getUser(Long id){
UserEntity userEntity = userDAO.getUserEntity(id);
UserDTO user = UserDTO.builder()
.name(userEntity.getName())
.address(userEntity.getAddress())
.major(userEntity.getMajor())
.build();
return user;
}
}
@Repository
public class UserDAOImpl implements UserDAO{
UserRepository userRepository;
@Autowired
public UserDAOImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserEntity getUserEntity(Long id){
UserEntity user = userRepository.getReferenceById(id);
return user;
}
@Override
public void saveUser(UserDTO user){
UserEntity user = userRepository.save(user);
}
}
public interface UserRepository extends JpaRepository<UserEntity,Long>{
UserEntity findByName(String name);
UserEntity findById(Long id);
}