본문 바로가기

전체 글70

[JPA] JPA에서 CascadeType.REMOVE, orphanRemoval=true 부모와 자식 관계의 엔티티(예를 들어 게시판과 댓글)를 설계 후 연관관계 매핑을 해주었다. 그 후 자식 엔티티의 일부를 제거하는 코드를 작성하는데 연관 관계는 제거되었지만 자식 엔티티의 데이터가 DB에 그대로 남아있었다. 관련된 문제를 해결하는 방법을 적어보았다. 1. JPA와 연관관계 JPA는 엔티티간의 연관관계를 쉽게 관리할 수 있다. CascadeType와 orphanRemoval 옵션을 통해 부모 엔티티와 자식 엔티티의 관계를 효율적으로 관리할 수 있게 된다. 이 글에선 두 옵션의 기능과 발생하는 문제점에 대해서 적어보았다. 2. CascadeType.REMOVE CascadeType.REMOVE는 부모 엔티티가 삭제될 때 연관된 자식 엔티티도 함께 삭제되는 옵션이다. 예를 들어, 부모 엔티티가 .. 2023. 5. 1.
[JAVA/프로그래머스] 가장 큰 수 / 정렬, 스트림 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는.. 2023. 4. 20.
[JAVA] record 클래스, DTO로 이용하기 record 클래스란? Record 클래스는 JAVA14부터 프리뷰로 도입됐으며 JAVA16부터 정식 기능으로 채택된 클래스다. 레코드 클래스는 데이터를 담는 컨테이너로 이용할 수 있으며 특징과 사용방법에 대해 알아보겠다. 언제쓸까? 기존에는 DTO나 VO를 작성할 때 필드, 생성자, getter, toString등 보일러 플레이트 코드를 작정해야하는 번거로움이 있었다. 지금부터 나오는 Record 클래스는 주로 DTO(데이터 전달 객체)나 VO(값 객체) 등 데이터를 담는 컨테이너 역할을 하는 클래스를 더 간결하게 작성할 수 있도록 도와주는 클래스다. 생성 방법 public record Sample(int x, int y) { } 클래스를 정의하는 것처럼 record타입을 명시한 후 클래스 명을 적으면.. 2023. 4. 13.
[JAVA] JVM이란? / JVM의 동작 과정 1. 소스 코드를 실행하기 개발자는 java로 코드를 작성한 후 ide 상단에 Run이라는 버튼을 눌러서 실행 결과를 확인한다. 내부에서 어떤 과정이 일어나길래 이게 가능할까? 이를 알기 위해서는 JVM에 대해 알아야 한다. 2. JVM이란? JVM(Java Virtual Machine)이란 자바의 바이트 코드를 실행할 수 있는 가상의 머신, 컴퓨터다. JVM은 CPU나 운영체제와 무관하게 자바로 작성된 코드를 실행시킬 수 있기 때문에 '플랫폼에 독립적으로 동작한다'라고 할 수 있다. JVM은 여러 구성 요소로 이루어져 있다 클래스 로더(Class Loader) : 클래스 파일을 런타임 데이터 영역으로 로드하는 역할. 실행 엔진(Execution Engine) : 바이트 코드를 해석하고 실행. 런타임 데.. 2023. 4. 12.
[JAVA] ChatGPT API로 요청 보내고 받아오기 / okhttp3, gson java를 통해 하는 방법은 공식문서에 안나와 있어서 ChatGPT API를 통해 요청을 보내고 받아오는 방법을 알아보겠습니다 1. 개발 환경 java 8 이상 Gradle 크레딧이 등록된 ChatGPT API Key가 필요 2. ChatGPT API Key 발급받기 OpenAI API An API for accessing new AI models developed by OpenAI platform.openai.com  위 링크에 접속해서 +Create new secret key를 발급받는다 (중요! 한 번 발급 받은 키는 다시 볼 수 없기 때문에 메모장같은 곳에 백업을 해둬야 한다) 처음 가입하면 크레딧을 주지만 기한이 있기 때문에 만료됐다면 결제정보를 등록하고 유료로 이용하면 된다 3. 의존성 추.. 2023. 4. 4.
[JAVA] Stream의 findFirst vs findAny 자바의 Stream API는 JAVA 8부터 추가된 기능이다 함수형 프로그래밍을 기반으로 컬렉션, 배열과 같은 데이터를 간결하게 처리할 수 있고 병렬 처리가 가능하다 처리한 데이터 요소 중 1개를 가져오는 방법은 findFist와 findAny가 있다 findFist와 findAny 둘 다 조건에 해당하는 요소 하나를 가져오는 것은 동일하다 하지만 findFirst는 Stream의 순서에서 가장 먼저 나오는 요소를 가져오고, findAny는 병렬로 처리할 경우 멀티 스레드에서 가장 먼저 찾은 요소를 가져온다 즉, 실행시마다 결과가 달라질 수 있다 예제 1. Bird record 생성 JAVA 14에 추가된 record 타입 클래스를 생성한다 public record Bird(String name, int.. 2023. 4. 3.