본문 바로가기

전체 글

(164)
JPA - column 'column_name' cannot be null 에러 해결하기 문제 상황 Product 테이블의 category_pk는 not null 제약조건이 걸려있는 컬럼이였습니다. Product entity에 @ColumnDefault 어노테이션을 사용하여 default 값을 설정하였지만 계속해서 위와 같은 에러가 발생하였습니다. 문제 해결 @ColumnDefault를 삭제하고 @DynamicInsert를 추가하였습니다. ColumnDefault의 역할을 잘못 이해하였는데, ColumnDefault는 DDL 시에 테이블 스키마 설정을 해주는 역할입니다. 따라서, insert시에 특정값을 기본으로 넣어주는 기능은 없습니다! @DynamicInsert 는 insert를 할때 null인 필드를 제외시켜주는 역할을 하기 때문에 Product에 default로 잡혀있는 값으로 ins..
의존성 주입(Dependency Injection) 3가지 방법, @Autowired 란? 스프링에는 다양한 의존주입 방법이 있습니다. 대표적으로 생성자 주입, setter 주입, 필드 주입 이렇게 3가지가 있습니다. 1. 생성자 주입 스프링 컨테이너가 올라오고 어플리케이션이 setting이 되는 시점에 생성자 주입을 통해 한번만 호출되는 것이 보장되어 '불변, 필수' 의존관계에서 사용됩니다. 대부분의 의존관계 주입은 한번 설정이 되고 나면 의존관계를 변경할 일이 없습니다. 2. setter 주입 set이 public하게 노출이 될 경우 setter가 실행되어 변경될수있는 문제점이 있습니다. 하지만, 변경 가능성이 있는 의존관계에서는 사용할 필요가 있습니다. 3. 필드 주입 필드에 @Autowired 어노테이션을 붙이는 방법입니다. 중간에 외부에서 변경이 불가능하기 때문에 테스트하기 힘들다는 ..
[LeetCode] Python - 207. Course Schedule https://leetcode.com/problems/course-schedule/ Course Schedule - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 생각 예전에 SWEA에서 비슷한 문제를 풀었던것 같은데 다시 풀어도 어려운 문제같습니다. DFS +백트래킹으로 노드들을 탐색했습니다. 선수 과목을 들어야만 다음 과목을 들을 수 있기 때문입니다. (위상 정렬을 통해 문제를 풀 수 있다고 합니다.) 1. prerequisites에 대한 dictionary..
[LeetCode] Java - 36. Valid Sudoku https://leetcode.com/problems/valid-sudoku/ Valid Sudoku - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 생각 2차원 배열 형태로 스도쿠의 정보가 주어졌을때, 올바른 스도쿠인지 판단하는 문제입니다. 숫자가 없는 칸이 존재하기때문에 올바른 스도쿠인지 판단하기 위해 다음과 같이 확인하였습니다. 1. 가로방향 1~9가 중복되었는지 체크한다. 2. 세로방향 1~9가 중복되었는지 체크한다. 3. 3*3 영역에서 1~9가 중복..
[LeetCode] Java, Python - 743. Network Delay Time https://leetcode.com/problems/network-delay-time/ Network Delay Time - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 생각 모든 노드를 방문하고 가장 오래 걸리는 노드까지의 최단 비용을 구하기 위해 다익스트라 알고리즘을 사용하여 풀었습니다. 다익스트라 알고리즘을 구현하기위해 최소힙을 사용하여 문제를 풀었는데, heapq는 첫번째 요소를 기준으로 힙 정렬을 해줍니다. 저는 여기서 (노드, 비용) 이렇게 설정해..
ApplicationContext와 다양한 빈 설정 방법 BeanFactory 스프링 빈 컨테이너의 최상위 인터페이스입니다. Bean을 생성하고 의존성 주입을 지원하는 간단한 컨테이너입니다. 1. Bean 생성 2. 라이프사이클 관리 ApplicationContext BeanFactory를 상속한 형태로 BeanFactory 보다 익숙해보입니다. BeanFactory를 상속했기때문에 최상위 인터페이스의 모든 기능을 가지고 있습니다. 트랜잭션 관리, AOP 처리, DI, IoC 를 지원합니다. BeanFactory와의 가장 큰 차이점은 컨테이너가 구동되는 시점에 객체들을 미리 생성하는 Pre-Loading 방식으로 보입니다. Bean 등록 방법 이러한 Bean 들을 생성하고 의존성을 관리해줄려면 우선 IoC 컨테이너에 Bean을 등록해줘야 합니다. 1. Bean..
[LeetCode] Python - 129. Sum Root to Leaf Numbers https://leetcode.com/problems/sum-root-to-leaf-numbers/ Sum Root to Leaf Numbers - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 생각 Leetcode 트리 문제를 계속 풀다보니 base case만 잘 생각해내면 된다라는 자신감을 얻었습니다ㅎㅎ leaf node까지 가면서 거쳐온 노드들을 차례대로 붙여준다음 이를 누적합으로 계산하는 문제입니다. 다음 레벨로 갈 경우 현재까지 거쳐온 비용*10을 하여..
[LeetCode] Python - 100. Same Tree https://leetcode.com/problems/same-tree/ Same Tree - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 생각 트리가 같은지를 비교하려면 각각의 트리를 왼쪽의 서브트리, 오른쪽 서브트리가 동일한지를 판단하면 된다. 이를 재귀함수로 isSameTree(p의 왼쪽 서브트리, q의 왼쪽 서브트리) and isSameTree(p의 오른쪽 서브트리, q의 오른쪽 서브트리)로 판단할 수 있다. 이때 기저조건은 두가지가 있다. 첫번째, 양..