본문 바로가기
728x90
반응형

전체 글416

[JPA] @Query, 직접 쿼리 작성 안녕하세요. J4J입니다. 이번 포스팅은 JPA에서 직접 쿼리를 작성할 수 있게 해주는 @Query에 대해 적어보는 시간을 가져보려고 합니다. JPQL JPA가 쿼리를 자동으로 생성해주지만 상황에 따라 직접 쿼리를 작성할 필요가 생기게 됩니다. JPA에서 직접 쿼리를 작성할 수 있는 방법은 다음과 같이 2가지가 있습니다. JPQL로 작성 일반 SQL로 작성 JPQL이라고 하는 것은 JPA의 일부분으로 정의된 플랫폼 독립적인 객체지향 쿼리 언어입니다. JPA에서 사용할 수 있는 쿼리 언어로 일반 SQL이 데이터베이스를 바라보고 작성한다면 JPQL은 엔티티 클래스를 바라보고 작성해야 합니다. JPQL과 SQL모두 직접 쿼리를 작성하는 방법은 동일하게 @Query어노테이션을 이용하면 됩니다. 그리고 @Quer.. 2021. 3. 29.
[JPA] 연관관계 매핑 (양방향) 안녕하세요. J4J입니다. 이번 포스팅은 JPA 연관관계 매핑(양방향)에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 2021.03.24 - [Spring/JPA] - [JPA] 복합키(Composite Key) 엔티티 2021.03.26 - [Spring/JPA] - [JPA] 연관관계 매핑 (단방향) 연관관계 주인 이전 포스팅에서 양방향으로 매핑이 되는 것은 두 .. 2021. 3. 28.
[Programmers] 후보키 문제 2019 KAKAO BLIND RECRUITMENT > 후보키 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr 아이디어 이번 문제의 아이디어는 부분집합을 이용한 완전 탐색이라고 생각합니다. 문제에서 요구하는 후보 키가 되기 위해서는 유일성과 최소성을 모두 만족해야 됩니다. 그리고 컬럼값의 최대 길이는 8까지이기 때문에 컬럼들에 대한 모든 부분집합을 구해도 시간 초과 등의 에러를 마주.. 2021. 3. 27.
[JPA] 연관관계 매핑 (단방향) 안녕하세요. J4J입니다. 이번 포스팅은 JPA 연관관계 매핑(단방향)에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 2021.03.24 - [Spring/JPA] - [JPA] 복합키(Composite Key) 엔티티 연관관계 매핑이란? 객체의 참조와 테이블의 외래 키를 매핑하는 작업을 연관관계 매핑이라고 합니다. 데이터베이스 관점에서는 외래키를 가지고 다른 테이블.. 2021. 3. 26.
[Programmers] 오픈채팅방 문제 2019 KAKAO BLIND RECRUITMENT > 오픈채팅방 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 아이디어 이번 문제의 아이디어는 아이디에 맞는 닉네임 매핑 방법이라고 생각합니다. 그리고 닉네임을 매핑하는 방법은 map을 사용하면 됩니다. key는 아이디, value는 닉네임으로 한 map을 생성하여 채팅방에 사람들이 들어올 때마다 key-value쌍을 지어 순서대로 모두 넣어주게 되면 결과적으로 마지막에 저장되어 있는 값이 아이디에 해당하는 닉네임이 될 것입니다. 들어오거나 나갈 때 발.. 2021. 3. 25.
[JPA] 복합키(Composite Key) 엔티티 안녕하세요. J4J입니다. 이번 포스팅은 JPA 복합키(Composite Key) 엔티티에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 앞서 포스팅을 읽어보신 분들이라면 기본키가 1개일 때는 문제없이 JPA를 활용할 수 있는 환경을 구성하셨을 겁니다. 그리고 본인만의 개성이 드러난 프로젝트를 구성하려고 하는데 기본키가 2개 이상인 경우 JpaRepository의 제네.. 2021. 3. 24.
[JPA] 조건절(where) 메서드 안녕하세요. J4J입니다. 이번 포스팅은 JPA 조건절(where) 메서드에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 더 이해가 잘 되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 조건절(where) 메서드 앞서 포스팅에서 "JPA는 쿼리를 따로 작성하지 않고 인터페이스 구현만으로 실제 쿼리가 작성된 것처럼 동작하도록 해준다"라고 말한 적이 있습니다. 그렇기 때문에 만약 쿼리에 작성되던 조건절을 사용하고 싶다면 단순하게 JpaRepository 인터페이스에 메서드만 작성해주면 됩니다. 이전 포스팅에서 사용했던.. 2021. 3. 23.
[JPA] JPA Repository설정 및 CRUD 안녕하세요. J4J입니다. 이번 포스팅은 JPA Repository설정 및 CRUD에 대해 적어보는 시간을 가져보려고 합니다. 아직 환경설정을 하지 않으신 분들은 이전 포스팅 참고해주시길 바랍니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 학교를 주제로 하여 해당 내용을 테스트해보도록 하겠습니다. 데이터베이스에는 학교라는 테이블을 만들고 스프링에서는 학교 클래스를 생성하여 기본적인 CRUD작업을 수행해보겠습니다. 프로젝트 구성 [ 1. MySQL에 학교 테이블 생성 ] create database jpa; use jpa; create table school ( school_id int auto_increment, name varchar(50), region varcha.. 2021. 3. 22.
[JPA] JPA 환경설정 안녕하세요. J4J입니다. 이번 포스팅은 JPA 환경설정에 대해 적어보는 시간을 가져보려고 합니다. 지금까지 스프링을 사용하며 데이터베이스에 접근하기 위해 MyBatis만 사용해왔었습니다. 하지만 최근에 MyBatis보다 더 핫(?)한 JPA라는 기술이 있다는 것을 알게 되었습니다. 객체와 관계형 DB를 서로 매핑하여 쿼리를 따로 작성하지 않고 정의하지 않은 메서드만을 가지고 DB동작을 실행할 수 있었고 필요시에는 직접 쿼리를 작성할 수도 있었습니다. JPA를 사용하면 개발할 때 MyBatis보다 편리함을 가져다줄 것이라고 생각하여 관련된 내용을 공부하긴 했지만 실상은 러닝 커브가 높아 아직도 이해가 안 되는 부분이 너무 많습니다. 그래서 생각한 것은 한 프로젝트에서 MyBatis와 JPA를 동시에 사용.. 2021. 3. 21.
[Programmers] 블록 이동하기 문제 2020 KAKAO BLIND RECRUITMENT > 블록 이동하기 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 아이디어 이번 문제는 평범한 BFS로 길 찾는 문제들의 심화 버전이라고 생각합니다. 로봇이 차지하는 공간이 2칸이어도 사방탐색을 하는 데는 어려움이 없었지만 회전하는 경우를 구할 때 말썽을 많이 부렸습니다. 초기 코드가 구현되었을 때는 회전하는 부분이 복잡하고 길었지만 구현하고 나서 생각을 다시 정리해보니 회전하는 경우를 판단할 때 매우 간단한 코드로 변경할 수 있었습니다. 생각한 방법에 대해 간단하게 설명드리겠습니다.. 2021. 3. 20.
[Programmers] 자물쇠와 열쇠 문제 2020 KAKAO BLIND RECRUITMENT > 자물쇠와 열쇠 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 아이디어 이번 문제는 처음 접했을 땐 풀지 못하고 시간이 흘러 다시 접했을 때 풀게 된 문제였습니다. 풀이 방법은 단순히 회전을 하며 자물쇠를 열 수 있는 모든 경우를 찾는 완전탐색을 하면 되었습니다. 자물쇠는 고정 시키고 열쇠를 좌측 상단부터 우측 하단까지 옮기며 자물쇠를 열 수 있는지를 확인해주면 됩니다. 마치 2차원 배열을 탐색하는 것처럼요. 그림으로 나타내면 이런 모습이 나오겠습니다. 구현 코드 (Java) class Soluti.. 2021. 3. 19.
[Programmers] 괄호 변환 문제 2020 KAKAO BLIND RECRUITMENT > 괄호 변환 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 아이디어 이 문제의 아이디어는 문제에서 제공해주고 있습니다. 문제에서 설명하는 상황에 맞게 코드를 구현하기만 하면 끝인 문제입니다. 굳이 하나를 선택해보자면 재귀 함수를 이용해야 된다고 말할 수 있을 것 같습니다. 구현 코드 (JavaScript) const solve = (val) => { if(val.length === 0) { return ''; } let count = 0; // '('.. 2021. 3. 18.
[Programmers] 문자열 압축 문제 2020 KAKAO BLIND RECRUITMENT > 문자열 압축 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 아이디어 이 문제는 문제를 푼 사람이 많은 것처럼 큰 아이디어를 요구하지 않았습니다. 문자열을 모두 동일한 길이로 잘라낸 뒤 잘라진 문자열 중 동일한 문자열이 있다면 개수를 세어 그에 걸맞은 새로운 문자열을 만들어주기만 하면 됩니다. 다음과 같은 절차를 통해 코드를 작성하면 됩니다. 1. 자를 문자열 길이 탐색 (1~s문자열의 길이/2) 2. 길이만큼 잘라낸 문자열을 모두 탐색하여 .. 2021. 3. 17.
[JPA] Composite-id class must implement Serializable 에러 안녕하세요. J4J입니다. JPA를 테스트하던 도중 새로운 Entity를 추가했더니 "Composite-id class must implement Serializable" 에러가 저를 반겼습니다. 해결방법은 간단했습니다. Entity에 Serializable을 추가했더니 정상 가동되었습니다. package com.spring.jpaTest.dto; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConst.. 2021. 3. 17.
[Spring] MyBatis ↔ Repository를 연결하는 다양한 방법들 안녕하세요. J4J입니다. 이번 포스팅은 MyBatis ↔ Repository를 연결하는 다양한 방법들에 대해 적어보는 시간을 가져보려고 합니다. 이 포스팅에서도 보실 수 있듯이 저는 DB 연결을 위해 MyBatis와 Repository를 연결할 때 interface, interface를 구현한 class, mapper를 모두 생성하곤 했습니다. 하지만 최근 interface와 mapper만으로 MyBatis와 Repository를 연결할 수 있는 방법을 알게 되었는데 사용하던 방법보다 더 효율적이라고 느껴지고 지식을 얻은 김에 알고 있는 방법들을 정리하는 포스팅을 하고자 글을 적게 되었습니다. 알고 있는 방법이 2개밖에 없지만 이 2개보다도 더 효율적인 방법을 알게된다면 추후 포스팅을 해보도록 하겠습니.. 2021. 3. 16.
[Java] URL을 이용한 파일 업로드 안녕하세요. J4J입니다. 이번 포스팅은 URL을 이용한 파일 업로드에 대해 적어보는 시간을 가져보려고 합니다. 이전에 2021.03.08 - [IT/Java] - [Java] URL을 이용한 이미지 업로드라는 포스팅을 작성한 적이 있는데 이번에 포스팅될 내용은 이미지뿐만 아니라 pptx, jar, txt 등의 다른 파일들도 업로드를 할 수 있습니다. 다른 말로는 이미지 업로드 방식의 상위 버전(?)일 수도 있겠습니다. 적용 방법 업로드 할 타겟 파일을 만들기 위해 텍스트 파일 하나를 첨부해보겠습니다. 위의 파일을 다운로드하는 URL은 https://blog.kakaocdn.net/dn/bhK3bF/btqZ3fko0Nb/GXa1NlyVQzNhT4GYZDeoL1/uploadTestFile.txt?attac.. 2021. 3. 15.
[Programmers] 보행자 천국 문제 2017 카카오코드 예선 > 보행자 천국 코딩테스트 연습 - 보행자 천국 3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6 3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2 programmers.co.kr 아이디어 이번 문제는 DFS/BFS를 이용하여 풀어야 되는 것처럼 보이지만 DP를 이용하여 풀어야만 하는 문제입니다. DP를 활용하는 방법은 간단합니다. city_map배열을 순회하면서 현재 위치에서 다음 위치(오른쪽, 아래)를 이동하는 경우를 생각하거나 또는 이전 위치(왼쪽, 위)에서 현재 위치로 오게 하는 경우를 생각하면 됩니다. 저 같은 경우는 현재 위치에서 다음 위치로 이동하는 경우를 활용하여 풀었습.. 2021. 3. 14.
[Programmers] 단체사진 찍기 문제 2017 카카오코드 본선 > 단체사진 찍기 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 아이디어 이번 문제는 여러가지 아이디어 없이 순열이라는 키워드만 가지고 풀 수 있는 문제였습니다. 카카오프렌즈들의 총 인원수는 8명이었기 때문에 순열을 이용해도 문제가 없었고 순열을 통해 배열된 값을 가지고 data의 조건에 맞는지 체크만 해주면 풀 수 있는 문제입니다. 아이디어를 정리하면 다음과 같습니다. 1. 카카오프렌즈들을 이용한 순열 구하기 2. data의 조건에 맞는지 확인 구현 코드 (Java) cl.. 2021. 3. 13.
728x90
반응형