본문 바로가기

분류 전체보기141

JPA 조회 동작 방식 비교 : findById(), getOne(), getReferenceById() JPA 주요 조회 메서드는 아래와 같다. findById() getReferenceById() getOne() → 현재는 Deprecated된 메서드 아무 생각없이 쓰던 findById()와 다른 메서드는 어떤 차이를 가지는지 동작 방식과 구현 코드를 보며 비교해 보자. JpaRepository @Repository public interface BookRepository extends JpaRepository { } JPA를 사용하면 엔티티 단위로 위와 같이 JpaRepository를 상속 받은 Repository interface를 생성 위와 같이 JpaRepository 상속 받는 경우 기존에 구현된 기능을 그대로 사용할 수 있음 사용 가능 주요 메서드 S save(S entity) Iterable.. 2024. 3. 27.
DB 인덱스, 옵티마이저 인덱스 시간 복잡도 풀스캔 : O(n) 인덱스가 걸린 경우(B-tree 기반 인덱스) : O(logN) 인덱스 사용 이유 조건을 만족하는 튜플들을 빠르게 조회하기 위해 빠르게 정렬(order by)하거나 그룹핑(group by) 하기 위해 인덱스 생성 쿼리 전체 텍스트 인덱스 텍스트 형식의 데이터를 대상으로 하는 인덱스 주로 긴 텍스트 열에 대한 검색을 효율적으로 수행하기 위해 사용 전체 텍스트 검색 기능은 단순 문자열 일치를 넘어 단어 간의 일치도 고려 예) 블로그 게시말이나 제품 설명 같은 텍스트 데이터 검색 시 사용 공간 인덱스 지리 정보(Geometry 또는 Geography)를 포함하는 열에 대한 인덱스 주로 지리 정보 시스템(GIS)에서 사용되며, 지도 데이터나 위치 기반 서비스에서 지리적 위.. 2024. 3. 22.
2023년 개발 공부 회고(+ 자바 개발자 인프런 강의 추천) 2023년은 다른 년도에 비해 정말 공부를 많이 했던 해! 23년 하반기 전에도 개발 관련 책을 읽거나 인강을 듣기는 했지만 매일 공부하는 습관을 들이기 위해서 본격적으로 공부를 했던 한해로 2023년을 회고할 수 있다! 정리하다 보니 진짜 열심히 공부했구나! 2023년 개발 공부 회고 2023년 git 잔디 2023년 인프런 강의 수강 이력 개발자가 된지 5년이 다 되어 가고 있는데, 개발은 공부를 하면 할수록 더욱더 배울 것이 많아져서 정말 신기한 분야다. 자바 개발자로 실무를 하면서 스프링, JPA 관련해서 별도로 공부도 해야하고, 연차가 올라갈수록 도커, 네트워크, 인프라까지 공부해야 하고 할게 점점 더 늘어난다! 다들 왜 개발자는 평생 공부해야 하는 직업이라고 했는지 알겠다는... 기존 공부 스.. 2024. 1. 29.
책리뷰 - 객체지향의 사실과 오해(+ 요약) 자바 백엔드 개발자로 실무를 하다보면 객체지향에 대한 이야기를 가끔 듣게된다. 사실 변명이지만, 업무를 할때는 일정에 쫒겨 원칙이나 개념적인 것 보다는 구현에 더 집중할 수 밖에 없다. 그래서 객체지향을 자주 듣고 개념관련된 내용도 알고 있지만 자신있게 다른 사람에게 설명할 수 없는 정도의 지식을 가지고 있었던 것 같다. 근래에 서비스 설계를 하면서 좋은 설계에 대한 고민을 하다보니 근본적인 객체지향에 대한 궁금증이 생겼다. 나와 비슷한 고민을 가지고 있는 개발자들을 위해 객체 지향 관련한 서적 중 유명한 책인 '객체지향의 사실과 오해'를 읽고 서평을 써보고자 한다. 객체지향이라 하면 다들 Object-Oriented Programing (OOP)를 가장 많이 들어 봤을 것이다. 특히, 면접을 준비하는 .. 2024. 1. 7.
스프링 AOP 기본 개념 잡기! 스프링을 공부하고 서비스를 운영하다 보면 AOP를 적용해야 하는 경우가 생긴다. 핵심 기능은 아니지만, 핵심 기능을 보조하기 위한 부가 기능을 구현해야 하는 경우에 AOP를 사용하게 된다. 기존에 공부하고 사용했던 부분이긴 한데, 오랜만에 강의를 들으면서 공부하니, 정리해 놓으면 좋겠다 싶어서 기본 개념 정리를 해보려 한다. 만약 아래와 같은 고민을 하고 있다면 AOP에 대해 공부해 보면 좋다. 공통적으로 처리해야 하는 로직이 있는데, 중요 관심사는 아니다. 추가 기능을 적용해야할 메서드가 많다. 소스 코드에 핵심 로직이 아닌 불필요 로직이 섞여 있는것이 맘에 들지 않는다. 나는 아래와 같은 요구 사항이 있어서 AOP를 공부하고 실무에 적용한 적이 있다. 관리자 페이지에서 개인정보가 포함된 정보를조회하는.. 2024. 1. 3.
Spring boot 3.2.0 마이그레이션 가이드 (+끝 없는 오류 해결 방법!) 토이 프로젝트 백엔드 서비스의 스프링 부트 버전을 3.2.0 으로 업그레이드를 했다. 기존에 스프링 부트를 2.7 버전을 사용하고 있었기 때문에 버전을 변경하는게 간단할줄 알았는데 아니었다...! 아직 회사에서 사용하는 프로젝트들은 2 버전을 모두 사용하고 있기 때문에 버전을 업하는 경우 똑같은 오류를 볼 수밖에 없어서 이김에 정리하려고 한다. 그리고 생각보다 오류 관련해서 포스팅이 별로 없어서 생각보다 헤매면서 삽질을 했기 때문에 나와 같은 다른 개발자들에게 조금의 삽질이라도 덜어 줄 수 있기를! 스프링 부트 3.0 주요 변경 사항 Java EE에서 Jakarta EE API 로 마이그레이션 예시 - (기존) javax.servlet:javax.servlet-api > (변경) jakarta.servl.. 2023. 12. 21.
Java 파일 업로드, 다운로드 처리(+파일 사이즈 제한 세팅 방법) 프로그램을 개발하다 보면 파일 업로드, 다운로드 처리하는 경우가 다수 있다. 간단하게 게시판을 만들더라도, 첨부파일을 올리거나 이미지를 올릴 수 있게 하는 기능을 기본적으로 구현한다. 웹 서비스에서 파일 업로드 게시판 서비스를 제공한다면, 게시글을 작성할 때 파일만 업로드하는게 아니라 글을 작성하고 파일도 함께 첨부하게 된다. 이런 경우 일반 데이터는 텍스트로 전달하고 첨부파일은 바이너리 데이터로 전송해야 한다.(파일 업로드 시 파일 데이터는 바이너리 데이터로 전송) HTTP로 데이터 전송 시 entype을 multipart/form-data 전송하면 각각의 항목이 Part로 구분해서 한번에 전달이 된다. Form 태그로 전송 시 아래와 같이 써야 한다. enctype="multipart/form-dat.. 2023. 12. 17.
JPA 영속성 컨텍스트 장점(+ 테스트 코드) JPA의 가장 중요한 개념 중 하나가 영속성 컨텍스트라는 것이다. 만약 영속성 컨텍스트를 잘 모르겠다면! 아래 글을 먼저 보고 오길 추천한다. JPA 영속성 컨텍스트 및 내부 동작 방식 JPA 영속성 컨텍스트 및 내부 동작 방식 JPA를 처음 학습하는 경우에 영속성 컨텍스트가 무슨 의미인지 이해하기가 쉽지 않다. 사실 사용하다 보면 자연스럽게 이해가 되긴 하는데, 처음에 해당 개념을 제대로 이해하지 않으면 내 생각 developsd.tistory.com 영속성 컨텍스트는 간단하게 말해서 "엔티티를 영구 저장하는 환경"이라는 뜻이다. 지금은 잘 이해가 가지 않더라도 아래 내용을 보다보면 조금은 이해가 될 것이라 확신한다! 이번 글에서는 영속성 컨텍스의 이점에 대해서 상세하게 설명해 보고자 한다. JPA에서.. 2023. 10. 9.
JPA 영속성 컨텍스트 및 내부 동작 방식 JPA를 처음 학습하는 경우에 영속성 컨텍스트가 무슨 의미인지 이해하기가 쉽지 않다. 사실 사용하다 보면 자연스럽게 이해가 되긴 하는데, 처음에 해당 개념을 제대로 이해하지 않으면 내 생각과 다르게 동작하는 것을 보면서 아주 당황할 수 밖에 없다. 그래서 제대로 이해하고 넘어가는 것이 좋다. 영속성 컨텍스트(Persistence context)란? JPA 이해 시 가장 중요한 용어 entity 영구 저장하는 환경 영속성 컨텍스는 논리적인 개념 entityManager를 통해 영속성 컨텍스트에 접근 entity를 저장하거나 조회하면 entityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리함 위에 내용만으로 바로 이해가 되지 않는 것이 정상이다! 보통 애플리케이션에서 데이터베이스에 데이터를 저장하.. 2023. 10. 8.
반응형