본문 바로가기

java8

[Spring Tip] 엔티티 설계시 주의점 Setter Setter가 열려있다면 프로젝트 사이즈가 커진 뒤 유지보수가 굉장히 어렵다. 모든 연관관계는 지연로딩으로 설정!!! (중요) 즉시 로딩(EAGER)을 사용한다면 연관된 모든 테이블을 로딩해야한다. 따라서 지연 로딩(LAZY)로 설정하고 사용해야 한다. 만약 연관된 엔티티를 함께 조회해야 한다면, fetch join 또는 엔티티 그래프를 사용한다.(n+1문제?) ! ManyToOne은 default가 EAGER, OneToMany는 LAZY. 따라서 ManyToOne은 LAZY로 fetch 값을 변경이 필수적이다. 초기화와 동시에 메모리 할당을 하는것이 'null' 문제에서 안전하다. best practice. 테이블 네이밍 전략 주로 언더바 전략을 사용하고 스프링에서 카멜케이스와 .을 _로.. 2022. 10. 3.
[JPA] 키워드 JPA(java persistence api) 기본 구조 Entity Manager 생성 Entity Manager로 DB 조작 Entity Transaction으로 트랜잭션 관리 Spring과 같이 사용할 때에는 대부분의 작업을 스프링이 알아서 해주기 때문에 매핑 설정과 쿼리를 사용하는 정도의 작업에 사용됨 Entity Manager EntityManagerFactory를 통해 생성 JPQL JPA에서 사용하는 쿼리 영속 컨텍스트 DB에서 읽어온 객체, EM을 통해 생성, 읽어온 객체를 저장하고 있는 일종의 메모리 공간. EntityManager 단위로 영속 컨텍스트 관리 영속 객체를 보관하고 있다가 commit 시점에 DB 값 변경 2022. 10. 2.
[JAVA, JPA, SPRING] 어노테이션 모음집 @SpringBootApplication - 해당 어노테이션이 존재하는 패키지와 하위 패키지를 모두 스캔함. @Entity - DB 테이블과 매핑 대상임을 알림 @Id - primary key @GeneratedValue - auto increment @Column - 매핑할 column과 변수 명이 다를 경우 지정 가능 @ManyToMany @ManyToOne @OneToOne @OneToMany @JoinColumn @Controller @Service - component scan 대상 @Transactional - 쓸 수 있는 옵션이 spring에서 제공하는 어노테이션에 더 많다. 하지만 spring에 종속적이다. class에 어노테이션을 걸면 public 메소드에 모두 적용된다. ReadOnly.. 2022. 9. 30.
[Spring Boot] 스프링 컨테이너, @Bean, @Component 스프링 프로젝트에서 Configuration 관련 코드를 스프링 컨테이너에 Bean으로 등록시키는 데는 2가지 방법이 있다. 어노테이션 Bean을 사용하는 방법과 어노테이션 Component를 사용하는 방법이 그것이다. 해당 포스팅에서는 스프링 컨테이너, @Bean, @Component, 그리고 스프링 컨테이너에 등록된 Bean을 가져오는 방법을 기록해 보려 한다. 스프링 컨테이너 생성 방법 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. AnnotationConfigA.. 2022. 3. 29.
SOLID SOLID란? 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것. SOLID의 5가지 내용 SRP : 단일 책임 원칙 OCP : 개방-폐쇄 원칙 LSP : 리스코프 치환 원칙 ISP : 인터페이스 분리 원칙 DIP : 의존관계 역전 원칙 하나하나 뜯어 보자! SRP (single responsibility principle) 한 클래스는 하나의 책임만을 가져야 한다. 쉽게 말해 변화가 있을 때 최대한 적은 수정을 할 수 있어야 한다. OCP (Open/Closed principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 최대한 활용해야 함. LSP (Liskov substitution principle) 프로그램의 속성을 변경하지 않고.. 2022. 3. 18.
[Algorithm]Programmers_17678_셔틀버스_Java 문제링크 셔틀버스 : 링크 문제 풀이 생각 다 필요없고 마지막 셔틀버스가 사람으로 꽉 찼는지 아닌지만 체크하면 될듯허다. 풀이 방법 String Type의 시간 HH:MM을 Int Type으로 전환 시킬 함수와 그 반대의 함수를 생성 크루들이 셔틀을 기다리기 시작하는 시간을 toMinute함수를 통해 Int로 전환하여 그 값을 오름차순으로 sorting 앞의 셔틀부터 기준에 맞게 크루를 태워나간다. 마지막 셔틀버스에 사람이 가득 찬다면 : 콘은 마지막에 탄 사람보다 1분 일찍 나와야한다. 빈자리가 있다면 : 마지막 셔틀버스가 출발하는 시간에 나가야 한다. 4의 결과를 toTime을 통해 String으로 전환하여 return한다. 코드 import java.util.ArrayList; import java.. 2021. 9. 14.