정점 (Node) 와 간선 (Edge) 으로 이루어진 자료구조입니다.
(트리 또한 그래프에 속합니다.)
- 정점 (노드) : 데이터가 담긴 부분을 의미 합니다.
- 간선 (엣지) : 정점간의 연결관계를 말합니다.
➡ 정점과 정점을 연결하는 간선이 있을때, 인접한다고 표현합니다.
➡ 차수는 하나의 정점에 연결된 간선의 갯수를 말합니다.
(D의 차수가 3인 이유)
무방향 그래프, 방향 그래프 : 무방향 그래프틑 방향 그래프와 달리 양방향으로 이동할수 있습니다.
가중치 그래프, 순환 그래프, 완전 그래프
- 2차원 배열 (
int[][] graph = new int[][]) 을 통해 간선 정보를 저장합니다.
➡ 그래프 탐색 BFS, DFS 알고리즘 문제를 푸는데 99% 사용하게됩니다.
서버에서 받아서 처리할수 있는 값인지 검증 하는것입니다
신입 백엔드 개발자에게는 필수적인 역량은 아니라고 하며, 개념 정도만 알고있어도 추후에 써먹을수 있습니다.
➡ 아래와 같은 코드로 검사를 할수 있지만 문제가 있습니다.
서비스가 커지다보면, 검사하는 로직으로 뒤덮일것입니다.
//이름이 비어있으면 exception을 발생합니다.
if (user.getName() == null) {
throw Exception;
}
build.gradle에 의존성을 추가해줘야 합니다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' // TODO }
예시를 위해 사용할 DTO 클래스를 만들어 줍니다.
@Data
public class UserDto {
private Long id;
private String username;
private String email;
private String phone;
}
URL 요청을 받기위한 Controller를 만들어 줍니다.
@RestController
public class UserController {
@PostMapping("/user")
public String createMember(@RequestBody UserDto userDto) {
System.out.println("UserDto.getusername() = " +
UserDto.get username());
System.out.println("UserDto.getemail() = " + UserDto.getemail());
System.out.println("UserDto.getphone() = " + UserDto.getphone());
// 비지니스 로직이 들어가는 자리.
return "성공!";
}
}
- 포스트맨을 통해
/userURL로 Post 요청을 보내게되면, 정상적으로 동작하는것을 알수있습니다.- 하지만
phone등의 필드값이null이거나, 공백인 경우에도 정상적이게 동작하게 됩니다.
➡ 요청을 받는 메소드에 @Vaild 어노테이션과, DTO 클래스의 필드에 조건 어노테이션을 작성해주면 됩니다.
(조건 어노테이션은 다양하니 사용시 찾아서 작성하면 됨)
✔ @NotNull, @NotEmpty, @NotBlank 작성
@Data
public class UserDto {
private Long id;
@NotNull
private String username;
@NotEmpty
private String email;
@NotBlank
private String phone;
}
✔ @Vaild 작성
@PostMapping("/user")
public String createMember(@Vaild @RequestBody UserDto userDto) {
// TODO
}
- 위와 같이 포스트맨에서 요청을 보내게되면,
필드의 조건에 때문에 400 에러를 뱉게 됩니다.
➡ 예외핸들링
(@ExceptionHandelr) 을 통해 예외에 대한 핸들링을 할수있습니다.)
null 만 허용 X, "", " " (공백) 은 허용null, ""은 허용 X, " " (공백) 은 허용
- 현업에서 사용하는것은 극히 드물다. 방법만 그냥 아는정도면 될것 같습니다