
DB의 테이블들은 외래키를 사용해 테이블끼리 관계를 맺게 된다. 이를 JPA에서는 @OneToMany, @ManyToOne 등의 애노테이션을 사용해 엔티티 클래스 간의 연관관계로 매핑시키고, 매핑된 엔티티(객체)를 대상으로 쿼리를 날릴 수 있다. 이 때문에 기존의 SQL로 조회하는 것보다 객체 지향적으로 개발할 수 있다.하지만 지연 로딩 설정, N+1 문제, 페치 조인 최적화 등 고려해야 할 부분이 많다. 특히 @__ToOne 관계를 가지는 엔티티를 함께 조회해야 할 때, 생각한 것과 다른 결과가 도출돼 장애가 나거나 성능도 안 나오게 된다.본 포스팅에서는 조회하고 싶은 엔티티(루트 엔티티)가 1:N 관계를 가지는 컬렉션 객체를 필드로 가지고 있을 때 어떤 부분들을 주의해야 하고, 어떻게 최적화할 수 있..

가비지 컬렉션(Garbage Collection)이란?가비지 컬렉션이란 말 그대로 ’쓰레기 수집’이다. 여기서 쓰레기란 사용하지 않는 메모리 영역이고, 이들을 수집해서 제거하는 것이 가비지 컬렉션이다.사실 자바에서만 국한된 기능이 아니라 예전부터 컴퓨터 과학 분야에서 사용되던 방식이다. 가비지 컬렉션은 메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중 필요없게 된 영역을 해제하는 기능이다.이를 자바에서는 JVM(Java Virtual Machine)이 대신 수행한다. 때문에 개발자가 메모리 누수(Memory Leak)을 크게 신경쓰지 않아도 된다.GC(Garbage Collection)의 대상자바에서는 런타임 시 힙(Heap) 영역에 동적으로 메모리를 할당하게 된다. 힙에는 최상..

본문에 앞서 예시를 하나 들겠다. 다음과 같이 멤버 엔티티와 팀 엔티티가 N:1 연관관계를 맺고 있다고 해 보자.이를 위한 엔티티 클래스는 아래와 같이 간단하게 작성했다.@Entity@Getter @Setterpublic class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @ManyToOne @JoinColumn(name = "team_id") private Team team;}@Entity@Getter @Setterpublic class Team { @Id @GeneratedValue @Column(name = "team_id"..

CORS ?CORS란 Cross-Origin Resource Sharing의 준말로, 우리나라말로 직역하면 교차 출처 자원 공유다. 여기서 교차 출처라는 의미가 가장 헷갈릴 것이다. 교차된다는 것은 서로 다르다는 의미로 생각하면 된다. 다시 말해, 다른 출처에서 온 자원을 공유한다는 의미다. 그럼 출처는 무엇일까?Origin(출처)출처를 이루는 요소는 URL에서 프로토콜 + 호스트 + 포트다.출처 : 인파님 블로그위 그림에서 Origin을 뽑아보면, HTTPS://www.domain.com:3000 이 된다.아래 표는 URL http://store.company.com/dir/page.html의 출처를 비교한 예시다.URL결과이유http://store.company.com/dir2/other.html동일..

Goals영속성 컨텍스트란?엔티티 생명 주기영속성 컨텐스트의 이점영속성 컨텍스트란?JPA를 이해하는데 가장 중요한 용어는 영속성 컨텍스트(persistence context)다. 우리말로 해석해 보면 ‘엔티티를 영구 저장하는 환경’이라는 뜻이다. JPA를 사용해 엔티티(객체)를 데이터베이스에 저장하기 전에 항상 이 영속성 컨텍스트라는 곳에 먼저 저장해야 한다. 다만, 영속성 컨텍스트에 엔티티를 저장한다고 해서 데이터베이스에 저장되는 것은 아니다. 그럼에도 엔티티를 굳이 영속성 컨텍스트에 먼저 저장하는 이유는 다양한 이점이 있는데, 이는 뒤에서 설명하겠다.엔티티 매니저(EntityManager)로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리할 수 있게 된다. 일반적..
웹 서비스를 개발한다고 했을 때, 기능마다 공통으로 가지고 있는 로직이 있다. 예를 들어, 상품을 등록, 수정, 삭제하는 기능들은 검증된 사용자만 사용할 수 있는 기능들이기 때문에 사용자를 인증하는 로직이 공통으로 들어가야 한다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern) 라고 한다.이러한 공통 관심사를 해결하는 대표적인 기술로 스프링의 AOP가 있는데, 웹 애플리케이션이라면 서블릿 필터나 스프링 인터셉터가 더 좋은 대안이 된다.서블릿 필터(Servlet Filter)서블릿 필터는 J2EE 표준 스펙 기술로, HTTP 요청과 응답을 필터링하거나 수정할 수 있는 메커니즘을 제공한다. 주의할 점은, 스프링 컨테이너에서 동작하는게 아..

서비스를 개발할 때, 정상적인 비즈니스 로직을 작성하는 것만큼이나 중요한 부분이 요청 데이터 검증이다. 클라이언트들은 항상 다양하고 창의적인 방법으로 데이터를 입력해 서버로 요청하기 때문에 개발자 입장에서 이를 다 예측하고 걸러내는 작업이 쉽지 않다. 정말 사소한 오류들도 있겠지만, 몇몇 제대로 검증하지 못한 요청 데이터들이 결국 서버 오류로 이어지면, 클라이언트에게 불편한 사용감을 주게 되어 소중한 고객을 잃을 수 있다. 따라서 보통 정상적인 로직보다 검증을 위한 코드가 더 복잡하고, 이를 작성하는 시간이 더 많다고 한다.검증은 보통 다양한 계층에서 이루어질 수 있다. 크게는 클라이언트와 서버로 나누어 볼 수 있다.클라이언트 검증 : 사용자의 입력 폼(form)에서 HTML, Javascript로 실시..

메모리 공간과 주소 바인딩32비트 컴퓨터의 메모리 크기는 4GB우리가 흔히 사용하는 컴퓨터는 32비트 또는 64비트 주소 체계를 사용하고 있다. 32비트 주소 체계를 사용한다는 의미는 메모리의 고유 위치를 나타내기 위해 위해 32비트(4바이트)가 사용되며, 총 2³²개의 고유한 주소를 가질 수 있다는 의미다. 또한, 32비트 컴퓨터의 CPU가 한 번에 처리할 수 있는 데이터 크기이며, 레지스터의 크기이기도 하다.컴퓨터는 바이트 단위로 메모리 주소를 부여하기 때문에 32비트 주소 체계를 사용하게 된다면 최대 약 4GB의 메모리 크기를 가지게 된다. 여기서 직접 비트를 바이트로 환산하는 계산을 해보고 왜 4GB인 지 헷갈릴 수 있다.2³² bit = 4,294,967,296 bit = 536,870,912 ..
- Total
- Today
- Yesterday
- 프로그래머스
- fetch join
- 스프링 mvc
- 패킷 스위칭
- JPA
- 스프링 테스트
- Computer_Networking_A_Top-Down_Approach
- Gradle
- 운영체제 반효경
- 생활코딩 javascript
- Python Cookbook
- 파이썬 for Beginner 솔루션
- 김영환
- git branch
- 방명록 프로젝트
- 스프링
- 쉘 코드
- 선형 회귀
- jsp
- 파이썬 for Beginner 연습문제
- git
- 지옥에서 온 git
- Thymeleaf
- Spring Boot
- 스프링 컨테이너
- Spring Data JPA
- git merge
- Spring
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- 쉽게 배우는 운영체제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |