전체 글 (66) 썸네일형 리스트형 JPA의 여러가지 팁 짧은 팁들모든 연관관계는 지연로딩 으로 하자예상하지 못한 지연로딩을 방지하자fetch join을 사용하여 필요한 데이터를 한 번에 조회하도록 최적화한다.@JsonIgnore를 활용하여 JSON 직렬화 과정에서 불필요한 로딩을 방지한다.IDE 디버그 모드에서 toString() 호출로 인해 지연로딩이 동작할 수 있다@ToString(exclude = "entity")를 활용하여 toString() 호출 시 연관 엔티티 접근을 막는다.Bulk Insert는 JPA가 아닌 JDBC 혹은 Hibernate Batch Insert 사용JpaRepository의 saveAll() 메소드는 엔티티 개별 INSERT 쿼리를 실행하므로 대량 삽입에 적합하지 않다.성능을 고려할 경우, JdbcTemplate 또는 Hibe.. 테스트 코드의 여러가지 팁 깔끔한 Application.class 유지하기@ComponentScan({"com.sample.product"})@EnableJpaAuditing@ConfigurationPropertiesScan@SpringBootApplicationpublic class SampleApplication {}메인 애플리케이션 클래스에 @ComponentScan과 같은 어노테이션을 추가하면, 애플리케이션이 로드될 때 불필요한 스캔이 이루어질 수 있다. 이는 특히 테스트 환경에서 문제가 될 수 있다. 예를 들어 @WebMvcTest를 사용하여 컨트롤러 단위 테스트를 수행할 때, 이 어노테이션은 기본적으로 컨트롤러와 관련된 컨포넌트(application.class 포함)만 스캔한다. 이때 @ComponentScan이 app.. Redis 를 사용한 Distributed Lock 분산 환경에서 서로 다른 클라이언트가 공유 리소스를 사용하는 경우동시성 문제가 발생할 수 있으며Redis를 사용하여 원자성을 보장할 수 있다.분산 환경에서 다양한 클라이언트가 공유 리소스를 사용할 때 동시성 문제가 발생할 수 있으며이러한 문제를 해결하기 위해 Redis를 사용하여 원자성을 보장할 수 있다.Spin LockRedis에서는 SET NX (SET if Not Exists)라는 명령을 통해 값이 존재하지 않을 때만 설정할 수 있다. 이를 활용하여 Lock 메커니즘을 구현할 수 있다.💡 NX의 명령 구성은 key, value, 유지시간(ms)으로 구성된다. 스핀 락은 클라이언트가 값을 설정할 때까지 SET NX 명령을 반복 시도하여 락을 획득하는 방법이며 아래는 Spin Lock의 작동 방식이다.. JPA Entity ID 타입 선택시 후보들 GenerationType identity, sequence, tableidentity키 생성 방식을 데이터베이스에게 위임하는 방식영속성 컨텍스트에 저장하기 위해 데이터베이스에 insert를 전달하여 PK를 얻어 오기에 insert에서 쓰기 지연이 되지 않는다sequence유일한 값을 순서대로 생성하는 데이터베이스 오브젝트를 사용한다.시퀀스를 제공하는 오라클, PostgreSQL, DB2, H2 데이터베이스에 사용insert시 데이터베이스 시퀀스를 사용하여 PK 를 얻기에 쓰기 지연이 가능하다table키 생성 전용 테이블을 만들어서 시퀀스 전략처럼 동작하는 방식이다전용 테이블을 만들어서 처리하는것이기때문에 시퀀스를 제공하지 않는 데이터베이스도 가능하다table는 키를 얻기 위해 select를 사용 후 다.. HTTPCP(Hyper Text Coffee Pot Control Protocol) RFC 2324과 RFC 7158에 의하면커피를 만들고 싶어 하는 컴퓨터 엔지니어들을 위한 프로토콜 'HTTPCP'이 정의되어있다HTTPCP는 HTTP 1.1을 기반으로 동작한다.HTTP 1.1 ([RFC2068]) permits the transfer of web objects from origin servers to clients. The web is world-wide. HTCPCP is based on HTTP. This is because HTTP is everywhere. It could not be so pervasive without being good. Therefore, HTTP is good. If you want good coffee, HTCPCP needs to be good. T.. @Transactional(readOnly = true) 는 Flush 가 동작안할꺼라 믿었다 public class MarineService { WeaponService weaponService; @Transactional public Marine getMarine(){ Factory factory = factoryRepository.findById(1L).get(); Marine marine = factory.createMarine("marine"); Weapon weapon = weaponService.getWeapon(); marine.setWeaponName(weapon.getName()); return marine } } public class WeaponService { @Transactional(readOnly = true) public Weapon getWeapon(){ retur.. c 와 java 에서 call by reference는 없다 Call by Reference(Pass by Reference) call by reference는 프로그래밍 언어 설계에서 사용되는 용어로, 함수에 인수를 전달할 때 값의 복사본 대신 원래 값의 참조를 전달 받는 것을 의미한다. 함수 내에서 참조를 통해 직접 값을 접근함으로써 원본을 변경할 수 있게 된다. 예를 들어 다음과 같은 Java 코드를 살펴보면 public static void main(String[] args) { List list = new ArrayList(); add(list); System.out.println(list.size()); //output: 1 } public static void add(List collection){ collection.add("1"); } 위 코드는 .. 깃허브 잔디 조작해서 아스키 아트 그리기 로컬에만 커밋을 해 두고 푸시 안 하고 있다가 며칠이 지난 나중에 푸시하니 로컬에 커밋한 시간에 깃허브 잔디가 심어진것을 보았다. 그걸 본 나는 이상한 생각이 들었다 깃 커밋 구조를 파악하면 깃허브 잔디로 재미좀 보겠는걸? 그러기 위해서는 github 가 어떤 정보를 보고 잔디를 생성해 주는지 알아보아야 한다. 먼저 알아야 할 것은 git이 데이터를 관리하는 위치는. git/objects 디렉터리인데 여기에는 파일 해시, 커밋 해시 등 git 이 특정 상태를 기록하기 위한 모든 것을 해시로 관리하고 있다 먼저 문제의 커밋이다 commit 0f6f8949e6dbc748b098d88377c806dbd341e196 (HEAD -> main, origin/main) Author: birariro Date: Mo.. 이전 1 2 3 4 ··· 9 다음