본문 바로가기

분류 전체보기36

2024-05-07 Spring Data Jpa에서 입력으로 들어온 외래키가 유효한지 확인하기 위해 findById()를 자주 사용한다.이런 방식이 안티 패턴이고 getReferenceById()를 사용하라는 글을 우연히 발견했다.두 메서드의 차이점은 뭘까.먼저 findById()는 Eager Loading을 한다. 즉 메서드를 호출하는 즉시 Persistence Context에 해당 엔티티를 저장한다.반면 getReferenceById() Lazy Loading을 한다. 호출된 시점에는 Persistence Context에 빈 Proxy 객체를 가지고 있다가 실제 isnert 되는 시점에 쿼리가 나간다.(Select 없이 isnert 쿼리만 나간다.)Persistence Context에 실제 객체를 저장하지 않기 때문에 .. 2024. 5. 7.
1월 요즘 드는 생각 취업 준비를 하며 생긴 부작용이 하나 있다. 무엇을 하던 취업에 도움이 되는지 고민을 한다. 내가 궁금한 걸 공부하면서도 '지금 하고 있는 게 취업에 도움이 될까.. 다른 공부도 해야 하는데..' 같은 생각을 한다. 이러는데 하고 있는 공부에 집중이 될 리가 없었다. 사이드 프로젝트도 취업을 위한 숙제로 느껴진다. 아무것도 손에 안잡히는 상황이 지속되고 있다. 취업을 위한 과제가 산처럼 쌓여있고, 이걸 외면하며 가만히 서있는 느낌? 나는 개발이 재밌어서 시작했는데 목적과 수단이 바뀐 거 아닐까. 좋은 기업에 취업하는 건 내가 좋아하는 개발을 하기 위한 수단에 불가한데 이것이 목적인 양 달리고 있었다. 개발을 업으로 삼은 이유는 개발을 하며 밤을 새도 재밌었고, 고민하며 나온 결과물을 보며 성취도 있었기 .. 2024. 1. 17.
프레임워크를 사용하는 이유 자바만으로 어플리케이션을 만들 수 있는데 우리는 왜 프레임워크를 사용하는지가 문득 궁금해졌다. 자바는 어플리케이션 개발을 위한 많은 오픈소스들과 라이브러리가 있고, 활발하게 업데이트가 되고있다. 때문에 프레임워크는 어플리케이션을 완성하기 위해 필수품은 아니다. 그러나 아래와 같은 이유로 프레임워크를 사용하는 것을 권장한다. 보일러 플레이트가 아닌 핵심업무에 집중할 수 있다. 다년간의 정보들이 디자인 패턴의 형태로 모아져 있다. 업계 및 규제 표준을 준수할 수 있다. 어플리케이션의 총비용을 줄일 수 있다. 아래와 같은 문제점도 존재한다. 특정 방식으로 어플리케이션을 만들도록 강요한다. 특정 버전의 언어와 라이브러리에 묶인다. 어플리케이션이 차지하는 리소를 늘린다. 보일러 플레이트(boilerplate) :.. 2023. 10. 6.
@Transactional의 작동 방식과 롤백되지 않는 문제(Checked Exception) HTML 삽입 미리보기할 수 없는 소스 ‘스프링 부트 쇼핑몰 프로젝트 with jpa’ 책의 코드를 따라가던 중 상품 등록 과정에서 문제가 생겼다. 상품의 이미지 등록이 실패하면 상품 정보는 DB에 저장되고 이미지는 저장되지 않았다. 이미지가 저장되지 않았던 원인은 파일을 저장할 폴더가 없기 때문이었다. 하지만 @Transactional 이 제대로 작동한다면 상품정보와 상품이미지 모두 데이터베이스에 들어가지 않았어야 한다고 생각했고, 원인을 찾기 위해 @Transactional의 동작방식과 원인에 대해 알아봤다. 원인 @Transactional 에서 Checked Exception은 롤백하지 않는. 이미지 파일을 저장할 때 FileNotFoundException 이 발생했고, 이는 Checked Exce.. 2023. 8. 31.
.gitignore 없이 변경사항 추적하지 않기 로컬에서만 git에 추적되지 않았으면 하는 파일이 있을 때 사용 1. 프로젝트 최상단에서 exclude 파일을 연다. vim .git/info/exclude 2. 파일 추가 i를 눌러 insert 모드로 변경한 후 제외시키고 싶은 파일을 적는다. (.gitignore와 형식 동일) 이후 esc를 누른 후 :wq 로 저장하고 나온다. # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want.. 2023. 8. 14.
Annotation 동작 원리(2) 오늘은 annotation processor에 대해 학습하기 전 @Target과 @Retention을 통해 어노테이션이 어디에 적용되며 언제까지 소스가 유지될지에 대해 알아보자. @Target @Target을 통해 어떠한 값에 어노테이션을 적용할 지 나타낸다. (ex. 클래스, 메서드, 필드,어노테이션 등…) 아래와 같이 사용되며 @Override는 메서드에 적용되는걸 알 수있다. @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } 적용되는 대상은 아래 문서에서 더 자세히 볼 수 있다. ElementType (Java Platform SE 8 ) The constants of this en.. 2023. 8. 7.