이노베이션 캠프

[TIL] 29일차

hjkim0502 2022. 8. 30. 00:37

1. Spring

  • 스프링 info level log 달기
@Slf4j

log.info("게시물 <{}>이 삭제되었습니다.", post.getTitle());
  • 저번주 JPA 연관관계 정리
  • @Column에 name 속성을 따로 지정하지 않으면 그 필드명으로 자동 지정
  • @JoinColumn
    • 외래키 매핑할 때 사용하는 어노테이션
    • 1:N 관계인 경우 보통 N쪽에 외래키를 두므로 연관관계의 주인이 되며 해당 어노테이션을 붙힌다
      • 연관관계의 주인 = 외래키 관리(등록, 수정, 삭제) 
      • 양방향인 경우 주인이 아닌 1쪽에 mappedBy를 사용하여 주인이 아님을 알려준다
// 댓글이 연관관계의 주인
// 게시글에서 댓글 객체를 불러와 사용 가능
@OneToMany(mappedBy = "article")
private List<Comment> comments = new ArrayList<Comment>();
  • 결국 게시글 엔티티는 응답으로 댓글 목록을 보여주기 위해 @OneToMany로 댓글 정보 끌어오고, 댓글 엔티티는 자신이 속해있는 게시글의 Id를 참조하기 위해 @ManyToOne으로 게시글 정보 끌어오는 것이다
  • 개인 과제에서 이렇게 양방향 매핑을 했더니 Json parsing 에러가 떠서 댓글쪽의 게시글 필드에 JsonIgnore을 붙혀 해결했는데, 이것이 근본적인 해결책이 아닐 수 있어 좀 더 알아봐야 할 것 같다

 

2. Leetcode DFS

 

897번

* 내 풀이:

class Solution:
    prev = cur = TreeNode()
    def increasingBST(self, root: TreeNode) -> TreeNode:
        
        def dfs(node):
            if node.left:
                dfs(node.left)
            
            # 중위 순회
            self.cur.right = TreeNode(node.val)
            self.cur = self.cur.right
            
            if node.right:
                dfs(node.right)
            
        dfs(root)
        return self.prev.right
  • 입력 트리가 BST이기 떄문에 중위 순회로 하면 되겠다고 생각했고, 기억을 더듬어 구현해냈으며, prev는 가만히 있고 cur.right를 설정해준 후 cur을 하나씩 옮겨가면서 트리를 재귀적으로 구성하도록 했다