백엔드

1. 접근 제어자자바는 public이나 private 같은 접근 제어자(access modifier)를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다.  접근 제어자 종류자바는 4가지 종류의 접근 제어자를 제공한다. 접근 제어자를 명시하지 않으면, 같은 패키지 안에서의 호출을 허용하는 default 접근 제어자가 적용된다. default라는 용어는 해당 접근 제어자가 기본값으로 사용되기 때문에 붙여진 이름이지만, 실제로는 package-private가 더 정확한 표현이다.private모든 외부 호출을 막는다.나의 클래스 안으로 속성과 기능을 숨길 때 사용한다.default(package-private)같은 패키지 안에서의 호출은 허용..
이번 강의는 새로 학습한 내용이나 실무에서 중요하다고 하신 내용만 정리하려고 한다. 1. 예제 도메인 모델도메인 모델 동작 확인아래 코드에 적용된 롬복(Lombok)에 대해 간단하게 설명한다.@Setter실무에서는 가급적 Setter는 사용하지 않기@NoArgsConstructor(AccessLevel.PROTECTED)기본 생성자를 막고 싶어도 JPA 스펙상 PROTECTED로 열어 둬야 함@ToString가급적 연관관계가 없는 내부 필드에만 사용하기@Entity@Getter @Setter@NoArgsConstructor(access = AccessLevel.PROTECTED)@ToString(of = {"id", "username", "age"})public class Member { @Id @..
이번 섹션에선 클래스의 생성자와 프로젝트 패키지에 대해 학습한다. '객체 지향 프로그래밍' 섹션은 생략했다. 요약해 보면, 클래스 안에 속성(멤버 변수, 필드)과 기능(메서드)을 만들어 객체로서 온전한 역할을 하도록 하고, 객체들끼리 협력하도록 하는 게 객체 지향 프로그래밍이다. 메서드 모듈화와 클래스의 캡슐화 덕분에 유지 보수하기 쉽고 깔끔한 코드를 작성할 수 있다. 1. 생성자객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자(Constructor)를 이용하면 된다. 생성자는 객체 생성 직후 객체를 초기화하기 위한 특별한 메서드라고 생각하면 된다. this 키워드아래 Member() 코드를 보면, 메서드의 매개변수에 정의한 지역 변수와 Member의 멤버 변수 이름이 똑같다. 이때 두 변수를 구분..
이번 섹션에선 클래스(Class)와 객체(Object)라는 개념의 필요성과 발전 방식에 대해 학습한다. 이 강의는 2배속으로 듣고, 헷갈렸던 내용이나 중요하다고 말씀하신 내용만 정리해두려고 한다. 1. 클래스가 필요한 이유변수와 배열을 사용해 여러 명의 학생 정보(이름, 나이, 성적)를 출력하는 프로그램을 만든다고 가정해 보자. 학생 수가 아주 적을 땐 각각 다른 변수를 선언하거나 배열에 저장해 출력해도 된다. 그러나 학생 수가 늘어날수록 개발자가 추가해야 할 코드가 많아지고, 데이터에 정확하게 접근해야 한다는 문제가 발생한다. 개발자가 관리하기 좋은 방식은 학생이라는 개념을 하나로 묶고, 각각의 학생 별로 이름과 나이, 성적을 관리하는 방식이다. 클래스 도입위에서 말한 문제들은 클래스라는 개념을 도입해..
실무에서 너무 성능이 안 나와서 튜닝을 해야 할 경우, 코드를 확인해 보면 대부분 아래에 나열해 둔 문제가 자주 발생한다고 한다.지연 로딩과 조회 성능 최적화컬렉션 조회 최적화페이징과 한계 돌파OSIV와 성능 최적화등록 및 수정에선 거의 문제가 발생하지 않고, 90% 정도 조회할 때 성능 문제가 발생한다. 따라서 조회용 샘플 데이터를 입력한 뒤 각 문제에 맞춰 API 성능을 최적화하는 방법을 학습한다. 이번 섹션에선 OSIV(Open Session In View)에 따라 성능을 최적화할 수 있는 방법을 학습한다. JPA에서 사용하는 EntityManager가 하이버네이트에선 Session으로 변경됐다. 따라서 JPA에선 Open EntityManager In View로 불려야 하지만 관례상 OSIV로 부..
실무에서 너무 성능이 안 나와서 튜닝을 해야 할 경우, 코드를 확인해 보면 대부분 아래에 나열해 둔 문제가 자주 발생한다고 한다.지연 로딩과 조회 성능 최적화컬렉션 조회 최적화페이징과 한계 돌파OSIV와 성능 최적화등록 및 수정에선 거의 문제가 발생하지 않고, 90% 정도 조회할 때 성능 문제가 발생한다. 따라서 조회용 샘플 데이터를 입력한 뒤 각 문제에 맞춰 API 성능을 최적화하는 방법을 학습한다. 이번 섹션에선 주문 내역에서 추가로 주문한 상품 정보를 추가로 조회하는 API를 만든다. Order 기준으로 컬렉션인 OrderItem과 Item이 필요하다.이전 섹션에서는 xToOne 관계만 있었다. 이번에는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 학습한다. 참고이전 섹션..
실무에서 너무 성능이 안 나와서 튜닝을 해야 할 경우, 코드를 확인해 보면 대부분 아래에 나열해 둔 문제가 자주 발생한다고 한다.지연 로딩과 조회 성능 최적화컬렉션 조회 최적화페이징과 한계 돌파OSIV와 성능 최적화등록 및 수정에선 거의 문제가 발생하지 않고, 90% 정도 조회할 때 성능 문제가 발생한다. 따라서 조회용 샘플 데이터를 입력한 뒤 각 문제에 맞춰 API 성능을 최적화하는 방법을 학습한다. 이번 섹션에선 주문 및 배송 정보와 회원을 조회하는 API를 만들면서, 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결해 본다.참고실무에서 JPA를 사용하려면 지금부터 설명하는 내용을 100% 이해해야 한다. 안 그러면 엄청난 시간을 날리게 될 수도 있다. 간단한 주문 조회 V1: 엔티티를 직접 노..
1. 자바 표준 스펙자바 표준 스펙과 구현자바는 표준 스펙과 구현으로 나눌 수 있다.자바 표준 스펙은 자바를 이렇게 만들어야 한다는 설계도이자 문서이며, 자바 커뮤니티 프로세스(JCP)를 통해 관리한다.여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 만든다.회사마다 각각 장단점이 있다. 예를 들어 Amazon Corretto는 AWS에 최적화되어 있다.각 회사들은 대부분 윈도우, MAC, 리눅스 같이 다양한 OS에서 작동하는 버전의 자바도 함께 제공한다. 참고다양한 자바 구현에 대해서는 다음 사이트를 참고하자. 변경의 용이자바 구현들은 모두 자바 표준 스펙에 맞도록 개발돼 있다. 따라서 오라클 Open JDK를 사용하다가 Adoptium Eclipse Temurin 자바나 Amazo..
이번 강의는 API 개발과 성능 최적화에 초점을 맞춘 강의다. 최근에는 주로 REST API로 개발하기 때문에 이전 [스프링 부트와 JPA 활용1] 편에서 구현해 둔 핵심 기능을 REST API로 구현해 보고, 스프링 부트와 JPA를 사용할 때의 API 개발 실무 노하우를 학습한다. 참고템플릿 엔진을 사용해 렌더링 하는 Controller와 API 스타일의 Controller를 둘 다 사용한다면 패키지를 분리하는 게 낫다.- 예외 처리 등을 공통으로 하는 경우가 많은데, 화면의 경우 템플릿 엔진에서 문제가 생기면 공통 에러 화면(HTML)이 나오게 된다. 그러나 API의 경우는 공통 에러용 JSON API 스펙이 나가야 한다.- 따라서 공통 처리 같은 관점에서 조금씩 차이가 발생하기 때문에 패키지를 분리..
저번 글에 이어서 객체지향 쿼리 언어인 JPQL의 문법을 학습한다. [자바 ORM 표준 JPA 프로그래밍 - 기본편] (9) 객체지향 쿼리 언어1 - 기본 문법1. 객체지향 쿼리 언어 소개JPA는 다양한 쿼리 방법을 지원한다. DB에서 특정 조건으로 데이터를 뽑으려면 결국 SQL이 실행돼야 한다. 이전 섹션들에서 JPA가 제공한 em.find() 같은 것 말고도, 검색 조dev-meung.tistory.com 1. JPQL(Java Persistence Query Language)경로 표현식a. 개념경로 표현식은 .(점)을 찍어서 객체 그래프를 탐색하는 것을 말한다. 아래처럼 사용해서 엔티티의 필드를 읽어오거나 엔티티와 연관된 엔티티 필드를 읽어올 수 있다.SELECT m.username # -> 상태 ..