JVM

· JVM/JPA
객체 - DB 간 패러다임 불일치 객체는 참조 (Reference) 로, DB는 외래키(foreign key) 로 연관관계를 맺는다. 이 때문에 OOP 와 DB 간의 패러다임 불일치가 발생한다. 1. 객체지향 언어는 참조로, RDB 는 외래키로 맵핑한다. Team 이 부모, Member 가 자식 테이블이라 해보자. MemberTeam.java member_team.sql 참조가 아닌 Foreign Key (teamId) 로 맵핑한다. -- 팀별로 소속된 멤버를 모두 불러옴 SELECT * FROM Member AS m JOIN Team AS t -- teamId 와 team.id 를 매핑 ON m.teamId = team.id 2. Entity 신뢰 문제 DB Entity - Class 간 매핑시 최초에..
· JVM/JPA
🎯 Goals Entity 는 사실상 Getter Setter 및 핵심 비즈니스 메소드만 있어야한다. 화면 디자인과 관련된 로직을 추가해선 안된다. API 설계시 entity 객체를 반환하지 않아야한다. 라는 위 두 명제를 이해한다. 잘못된 예제 Member.java @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String userName; @Embedded private Address address; // 연관 관계의 주인이 아닌 경우 읽기 전용이 됨. // `member` field in order 에 의해 매핑되었다는 것을 명시. @..
· JVM/Spring
빈 스코프는 빈이 존재할 수 있는 범위를 말한다. Spring Scope 구분 설명 실행 순서 싱글톤 기본 스코프, 스프링 컨테이너 시작-종료까지 유지되는 가장 넓은 범위 스코프 스프링 컨테이너 생성 시점에 Bean 생성, DI 및 초기화 메소드 실행 프로토타입 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 Bean 을 조회할 때 생성되고 초기화 메소드도 실행됨. 90% 이상은 싱글톤, 간혹 프로토타입 스코프를 사용한다. 왠만하면 다 싱글톤으로 해결하라. 웹 관련 스코프 구분 설명 Request 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 Session 세션이 생성되고 종료될 때까지 유지되는 스코프 Application 웹의 서블릿 컨텍스트 같은 범위..
· JVM/Spring
Conclusion @Postonstruct, @PreDestory annotation 으로 콜백메소드를 지정하라. 외부 라이브러리 콜백 메소드 지정이 필요할 때만 @Bean 메소드 지정 방식을 사용하라. Why to use? 애플리케이션을 개발하다보면 초기에 DB 커넥션 풀이나 Socket 등 을 미리 열어두는 것이 필요할 수 있다. 반대로 이렇게 연결을 유지하는 객체들은 애플리케이션 종료시 안전하게 연결 해제 (혹은 반납)을 해줄 필요가 있다. 이를 'release' 혹은 'close' 라 하는데, Spring은 이 동작을 안정적이고 편하게 할 수 있는 매커니즘을 제공한다. 스프링 빈은 객체 생성 -> 의존 관계 주입 초기화 작업은 의존관계 주입 '후'에 되야한다. 이 "의존 관계 주입 완료" 시점을..
· JVM/Spring
한 타입(Interface)에 대해 여러 Bean 이 등록되어 있으면 어떻게 해결할 것인가? Autowired 동작 순서 Type Matching Type Matching 결과가 2개 이상인 경우 필드명이나 파라미터 명으로 빈 이름 매칭. public class OrderServiceImpl implements OrderService{ // 구현체가 아닌 Interface (역할) 에만 의존해야한다. => DIP 원칙 준수 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // Type Matching 시도 // 타입 매칭 결과가 2개 이상인 경우 필드명 혹은 파라미터..
· JVM/Spring
When to use component scan? 코드레벨에서 설정 정보가 없어도 자동으로 스프링 빈을 자동 등록하려 할 때 How to use? class 어노테이션으로 '@Component' 혹은 그 자식 어노테이션을 붙여준다. 이때, 생성자에는 '@Autowired' 등으로 자동으로 DI가 일어날 수 있도록 매핑해주는 것이 좋다. @Component public class RateDiscountPolicy implements DiscountPolicy { private final int discountPercent = 10; // .. 생략 } 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. (PascalCase -> camelCase) 빈 이름 직접 지정시 @Compo..
M_Falcon
'JVM' 카테고리의 글 목록 (4 Page)