STUDY

    [1-2] JPA 소개

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 JPA란? Java Persistence API 자바 진영의 ORM 기술 표준 ORM : Object-relational mapping(객체 관계 매핑) 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계 ORM 프레임워크가 중간에서 객체와 관계형 DB를 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 JPA를 왜 사용해야 하는가? SQL 중심적 개발에서 객체 중심 개발로! 1. 생산성 기존 Entity를 쿼리 문이 아니라 간단한 메서드로 필요한 작업을 수행할 수 있다. persist(), find(), set(), remove() 2. 유지보수 예전에는 필드 변경시 모든 쿼리를 수정하여야 했는데, JPA에서는 필드 변경만 해주면 쿼리..

    [1-1] JPA가 나오게 된 배경 - SQL 중심적인 개발의 문제점

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 보통 애플리케이션을 개발할 때는 객체 지향 언어로 개발한다.(Java, Python, Scala, ...) 데이터베이스를 사용할 때는 보통 관계형 DB를 많이 사용한다. NoSQL은 부가적으로 사용하는 경우가 많다. 그러면 객체를 관계형 데이터베이스에 저장하는 것이 필수적인 작업이다. 객체를 관계형 데이터베이스에 저장하려면 SQL을 이용하여 저장하여야 한다. SQL 중심적인 개발의 문제점 SQL을 이용하여 저장할 때, 한 객체에서 필드 하나만 추가 되어도 쿼리 문이 많이 복잡해진다. 객체와 관계형 데이터베이스는 비슷하면서도 다르다. 1. 상속 Table 슈퍼타입 서브타입 관계 -> 부모의 ID를 PK, FK로 가져와서 필요할때마다 Join..

    [TIL] 프로그래머스 - 같은 숫자는 싫어 (GPT 첫 개시!)

    문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 ..

    [TIL] UnsatisfiedDependencyException : Unsatisfied dependency expressed through constructor parameter 0 해결하기

    스프링부트로 MemoApplication을 실행시켰더니 발생한 예외 내용 예외 내용(길다...) org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memoController' defined in file [D:\memo\build\classes\java\main\com\sparta\memo\controller\MemoController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'memoService' defined in file [D:\me..

    [TIL] java.lang.IllegalStateException 해결하기

    영속성 컨텍스트의 기능 중 1차 캐시 저장을 Test해보려고 했는데, 객체를 데이터베이스에 저장하려는 과정 중 java.lang.IllegalStateException: Cannot get a connection as the driver manager is not properly initialized 오류 발생. 뭐가 문젠지 몰라서 일단 파일을 엎고 다시 만들었는데, 연결되어 있어야 할 데이터베이스가 없어져 있었다. 아까 table을 드롭한다는게 database를 drop을 해서 객체를 데이터베이스에 저장하려고 하니까 오류가 난 것 같았다. 데이터베이스를 다시 create 해준 뒤, 같은 코드로 실행시켰더니 멀쩡히 잘 실행이 되었다. 진작에 알았으면 안 엎었지... ㅠ0ㅜ...

    [TIL] 피보나치 수열 구하기 - 메모이제이션

    재귀 함수를 공부해보자. 스터디에서 프로그래머스 최대공약수 최소공배수를 구하는 문제를 같이 풀었는데, 다른 사람의 풀이에 유클리드 호제법을 과, 재귀함수를 이용하여 최대공약수를 구하는 풀이가 나와있었다. 재귀함수에 대해서 발표를 해야겠다는 생각이 들어 공부해보기 시작했다. 피보나치 수열을 재귀함수를 이용해 구해보자. 재귀함수를 이용하는 대표적인 문제는 피보나치 수열을 구하는 것이 있었다. 점화식 a (n) = a (n-1) + a (n-2) 에 따라서 다음과 같이 간단하게 구할 수 있었다. public int fibonacci(int nth) { switch (nth) { case 0: return 0; case 1: return 1; } return fibonacci(nth - 1) + fibonacc..

    [TIL] 프로그래머스 lv.2 다음 큰 숫자 (비트연산자)

    문제 문제 설명 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한 사항 n은 1,000,000 이하의 자연수 입니다. 나의 풀이 풀이 로직 String을 매개변수로 받아 1의 개수를 세어 int로 return하는 메서드 countOneOfStr을 만든다. int..

    [TIL] 예외 되던지기(Exception re-throwing)는 언제 사용될까?

    예외 되던지기란? 예외를 처리한 후에 인위적으로 다시 발생시키는 방법 예외가 발생할 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업을 행한 후에 throw문을 사용해서 예외를 다시 발생시킨다. 예외 되던지기의 예시 1. BadInputException 클래스를 하나 만들어준다. public class BadInputException extends Exception { BadInputException() { super("잘못된 값을 입력하셨습니다."); } } 2. InputMismatchException이 발생하면 BadInputException을 던지도록 한다. import java.util.InputMismatchException; import j..

    [TIL] ConcurrentModificationException

    ConcurrentModificationException linkedList를 이용하여 다음 코드와 같이 문제를 풀어보려고 했는데 ConcurrentModificationException이 발생했다. public static void main(String[] args) { LinkedList linkedList = new LinkedList(); Iterator it = linkedList.iterator(); for (int i = 1; i

    [TIL] 포크 저장소와 내 로컬을 동기화하기

    [TIL] 포크 저장소와 내 로컬을 동기화하기

    > * 첫 번째 방법 - sync fork * 두 번째 방법 - bash를 이용하여 포크 주소를 이용하여 fetch해오는 방법 첫 번째 방법 sync fork -> 내 원격 master브랜치로 복사 완료 -> 내 로컬에서 pull 로 원격 master 데이터 가져오기 -> 내 로컬 브랜치를 내 로컬 master와 merge하기. 1. sync fork 클릭! sync fork 하는 것은 내가 포크해온 레포지토리와 내 레포지토리의 master 브랜치에 싱크가 맞춰지는 것. 2. 포크 레포지토리와 연결된 프로젝트가 있는 폴더로 가서 git bash 열기. 3. git checkout master branch를 master로 checkout. ( 옆에 master 뜨는지 확인. ) ※ 브랜치를 옮길 때는 ch..