이노베이션 캠프

[TIL] 18일차

hjkim0502 2022. 8. 18. 23:52

1. Spring

  • 코드를 개선하고 재배포할때 계속 8080포트가 이미 사용중이라는 에러가 떠서 git bash에서 제거해준 뒤 다시 배포하는데 성공했다
  • 맨위 id에 해당하는 프로세스 종료했다
ps -ef | grep java  

kill -9 [process_id]
  • 스프링 MVC의 내부 동작에 대해 좀 더 깊게 알게 되었고, 이는 17일차 TIL에 한꺼번에 작성해놓았다
  • 테스트코드도 연습삼아 짜봤는데, 스프링 데이터 JPA를 사용하면서 단위테스트는 잘 되지 않아서 일단 통합 테스트로 진행해보았다.
    • 서비스 계층의 게시글 등록에 대한 테스트 딱 한개만 진행했고, 단위 테스트로도 할 수 있는지 좀 더 공부해야 할 것 같다
  • 17일차 TIL에 설명했던 것 중 Enum 사용과 ExceptionDto 요소 확장은 오늘 진행했는데, Enum 객체에 @JSONFormat을 사용하여 편하게 두 작업을 진행할 수 있었다.
    • 아래의 ErrorCode에 내가 넣고 싶은 예외 상황에 맞는 메세지를 넣으면 원하는 곳에서 throw exception 하여 에러메세지를 부를 수 있어 확장성이 좋아졌다고 생각한다
@JsonFormat(shape = OBJECT) // Response에서 Enum 객체 전체 반환
@AllArgsConstructor
@Getter
public enum ErrorCode {

    //비밀번호 불일치
    WRONG_PASSWORD("WRONG_PASSWORD", "Wrong Password"),

    //NULL_ID
    NULL_ID("NULL_ID", "Id Doesn't Exist");

    private final String code;
    private final String message;
  • 마지막으로는 계속 걸렸었던 컨트롤러에 남아있던 비밀번호 확인 로직을 서비스 계층에 옮기면서 더 적절하게 배치된 것 같고 코드도 더 깔끔해진 것 같다

2. Leetcode DFS

 

938번

* 내 풀이:

class Solution:
    ans = 0
    
    def rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        def dfs(node):
            if low <= node.val <= high:
                self.ans += node.val
                
            if node.left:
                dfs(node.left)
            if node.right:
                dfs(node.right)
                
        dfs(root)
        return self.ans
  • ans를 rangeSumBST 안에 넣으니 선언하지 않은 것으로 인식해서 클래스 멤버변수로 지정했다

다른 풀이:

class Solution:
    ans = 0
    
    def rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        if low <= root.val <= high:
            self.ans += root.val
            
        if root.left:
            self.rangeSumBST(root.left, low, high)
        if root.right:
            self.rangeSumBST(root.right, low, high)
            
        return self.ans
  • 솔루션 메소드 자체를 재귀로 돌려도 같은 흐름인데, 대신 low와 high를 계속 인자로 넣어줘야 한다