멋사 Backend 46일차 🦁

신재원·2023년 6월 26일

그래프 (Graph)

  • 그래프 란?

정점 (Node) 와 간선 (Edge) 으로 이루어진 자료구조입니다.
(트리 또한 그래프에 속합니다.)

  • 정점 (노드) : 데이터가 담긴 부분을 의미 합니다.
  • 간선 (엣지) : 정점간의 연결관계를 말합니다.
    ➡ 정점과 정점을 연결하는 간선이 있을때, 인접한다고 표현합니다.
    ➡ 차수는 하나의 정점에 연결된 간선의 갯수를 말합니다.
    (D의 차수가 3인 이유)

그래프의 종류

  • 무방향 그래프, 방향 그래프 : 무방향 그래프틑 방향 그래프와 달리 양방향으로 이동할수 있습니다.

  • 가중치 그래프, 순환 그래프, 완전 그래프

그래프의 구현

  • 2차원 배열 (int[][] graph = new int[][]) 을 통해 간선 정보를 저장합니다.
    ➡ 그래프 탐색 BFS, DFS 알고리즘 문제를 푸는데 99% 사용하게됩니다.

📗 Spring

Spring Validation

  • 오늘의 주제는 유효성 검사입니다.
  • 유효성 검사란 ?

서버에서 받아서 처리할수 있는 값인지 검증 하는것입니다

신입 백엔드 개발자에게는 필수적인 역량은 아니라고 하며, 개념 정도만 알고있어도 추후에 써먹을수 있습니다.

➡ 아래와 같은 코드로 검사를 할수 있지만 문제가 있습니다.
서비스가 커지다보면, 검사하는 로직으로 뒤덮일것입니다.

//이름이 비어있으면 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 "성공!";
    }
}
  • 포스트맨을 통해 /user URL로 Post 요청을 보내게되면, 정상적으로 동작하는것을 알수있습니다.
  • 하지만 email, 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) 을 통해 예외에 대한 핸들링을 할수있습니다.)

@NotNull vs @NotEmpty vs @NotBlank

  • NotNull : null 만 허용 X, "", " " (공백) 은 허용
  • NotEmpty : null, ""은 허용 X, " " (공백) 은 허용
  • NotBlank (가장 강력) : 3개다 허용 X

어노테이션 만들기 (커스텀)

  • 현업에서 사용하는것은 극히 드물다. 방법만 그냥 아는정도면 될것 같습니다

0개의 댓글