전체 글 41

스프링 핵심 원리 기본 - 컴포넌트 스캔

지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 으로 직접 등록을 했습니다. 직접 등록하는 방법은 등록해야 할 스프링 빈이 많아지면 설정 정보가 커지고, 누락하는 문제가 발생은 데 이 문제를 해결하고자 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공해준다. 컴포넌트 스캔(Component Scan) 컴포넌트 스캔이란 빈으로 등록될 준비를 마친 클래스들을 스캔하여, 빈으로 자동 등록해주는 것이다. @Component, @Configuration, @Service, @Repository, @Controller 등의 어노테이션은 전부 컴포넌트 스캔 대상이 된다. (소스 코드를 열어보면 @Component 어노테이션이 붙어있기 때문이다.) 컴포넌트 스캔 ..

스프링 2022.07.22

스프링 핵심 원리 기본 - 싱글톤 컨테이너

스프링으로 개발하지 않고 순수 자바로 개발한다고 합시다. 고객 요청이 들어올 때마다 새로운 객체를 생성하고 객체가 쌓이고 쌓이다 보면 트래픽이 감당이 안 되는 상황이 올 것이다. 그렇다면 어떻게 해결해야 할까? 이미 존재하고 있는 객체를 조회해서 사용하면 객체를 계속해서 만들 필요도 없고 트래픽 문제도 해결이 될 것입니다. 싱글톤 패턴 싱글톤 패턴은 클래스의 객체를 딱 1개만 생성하고 공유할 수 있게 해주는 디자인 패턴입니다. 싱글톤 패턴 구현 public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance..

스프링 2022.07.19

스프링 핵심 원리 기본 - 스프링 컨테이너와 스프링 빈

이번에는 저번에 하던걸 이어서 스프링을 AppConfig에 적용시켜 보겠습니다. 스프링 컨테이너 생성 과정 1. 스프링 컨테이너 생성 스프링 컨테이너 : 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. 제어 흐름을 외부에서 관리 하고 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. ApplicationContext를 스프링 컨테이너라고 한다. 스프링 컨테이너를 생성할 때는 구성 정보(AppConfig.clss)를 지정해주어야 한다. 2. 스프링 빈 등록 @Configuration public class AppConfig { @Bean public MemberService memberService() { r..

스프링 2022.07.18

[그림으로 공부하는 IT 인프라 구조] 책 정리

인프라 인프라란 경제활동의 기반을 형성하는 시실·제도 등의 의미로 사용된다. 하지만 IT에서 인프라는 다른 의미를 가지고 있는데 개발이나 서비스를 하기 위해 필요한 모든 자원을 관리하는 기반 즉 네트워크, 서버, 데이터베이스, 정보보안, 시스템 소프트웨어 및 기반시설 등 IT 서비스의 기반이 되는 시스템이나 구조를 의미한다. 가장 많이 쓰는 시스템 구조 우리가 오늘날 가장 많이 사용하는 IT 인프라는 대부분 웹 서비스를 위해 구성되어 있고, 가장 많이 사용하는 인프라 구조가 웹서버, AP 서버, DB서버로 이루어진 3계층형 시스템이다. 프로세스와 스레드 프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것이다. 정의 차이점 장점 단점 프로세스 ..

책 리뷰 2022.07.12

스프링 핵심 원리 기본

토이 프로젝트를 시작하기에 앞서 스프링을 써야 하는 이유와 정의, 객체지향 프로그래밍을 자세하게 알아보고 시작하려고 합니다. 스프링의 정의 스프링은 자바 언어 기반의 프레임워크로 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와준다. 프레임워크 : 어떤 프로그램을 만들기 위한 기본 틀(기능 확장 가능, 자체 수정 불가능) 객체 지향 프로그래밍(OOP) 사람들이 자바를 많이 쓰는 이유는 자바가 객체 지향 언어이기 때문이다. 그렇다면 이 객체 지향이란 건 뭘 뜻하는 걸까? 객체 지향 프로그래밍은 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구상하는 방법이다. 객체 지향 프로그래밍 키워드 5가지 클래스 + 인스턴스(객체) 추상화 캡슐화 상속 다..

스프링 2022.07.06

스프링 데이터 JPA - 다양한 기능2

JPA Hint & Lock Hint JAP 구현체에게 제공하는 힌트 (SQL 힌트랑 다름) Read Only Hint를 사용하면 영속성 콘텍스트에 저장되는 것을 막고 변경사항이 업데이트되지 않도록 막을 수 있습니다. 말 그대로 읽을 수만 있게 해주는 기능입니다. 실습 Repository에 사용자 이름으로 조회하는 메서드를 추가합니다. @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly",value = "true")) Member findReadOnlyByUsername(String username); @QueryHints 어노테이션을 추가해줌으로써 Hint를 사용할 수 있고 hibernate의 readOnly 속성을 true로 지정해야 합니다...

JPA 2022.07.05

[학교에서 알려주지 않는 17가지 실무 개발 기술] 책 리뷰

비전공자 출신으로 기술만 익혀서 개발자로 취업해보니, 기초 이론 지식이 많이 부족하다는 걸 느꼈습니다. 처음에는 무겁게 접근하기보다는 가볍게 접근할 수 있는 책을 찾아보았고 "학교에서 알려주지 않는 17가지 실무 개발 기술"이라는 책을 선정하게 되었습니다. 데이터 처리 기술 개발을 하다 보면 기능도 중요하지만 데이터(입력값, 출력 값)를 어떻게 처리해야 하나 한 번쯤은 생각해보셨을 겁니다. 사람들이 쉽게 이해할 수 있고 확장성이 뛰어난 대표적인 기술들을 알아보겠습니다. JSON(JavaScript Object Notation) JSON은 숫자, 문자, boolean 값 등 여러 형태의 데이터를 key와 value으로 구조화된 객체에 담아 처리하는 기술입니다. { "key": value, "number":..

책 리뷰 2022.06.29

스프링 데이터 JPA - 다양한 기능들

페이징과 정렬 순수 JPA로만 페이징과 정렬을 하고 싶을 때 사용법입니다. public List findByPage(int age, int offset, int limit) { return em.createQuery("select m from Member m where m.age=:age order by m.username desc",Member.class) .setParameter("age",age) // 파라미터 받아오기 .setFirstResult(offset) // 몇번째부터? .setMaxResults(limit) // 몇명까지? .getResultList(); } public long totalCount(int age) { return em.createQuery("select count(m) ..

JPA 2022.06.26

스프링 데이터 JPA - 다양한 쿼리 기능

스프링 데이터 JPA란? Spring data JPA는 Spring Framework에서 JPA를 편리하게 사용할 수 있게 지원해주는 프로젝트입니다. Spring Data JPA는 공통 인터페이스를 적용시키기만 해도 내부에서 자동으로 구현체를 생성해줍니다. 공통 인터페이스 적용 public interface MemberRepository extends JpaRepository { ... } 인터페이스를 생성한 후 JpaRepository 인터페이스를 상속받는다. JpaRepository 인터페이스는 공통 CRUD를 제공한다. 쿼리 메소드 기능 메소드 이름으로 쿼리 생성 List findByMemberGreaterThan(String username, int age); 스프링 데이터 JPA는 메소드 이름을..

JPA 2022.06.21

JPA 영속성 컨텍스트란?

JPA를 공부할 때 가장 중요한 게 ORM과 영속성 컨텍스트를 이해하는 것이다. 영속성 컨텍스트를 제대로 이해하고 JPA를 써보도록 하자. 영속성 컨텍스트란? 영속성 컨텍스트는 엔티티를 저장하고 관리하는 가상의 데이터베이스 같은 개념이다. 엔티티 매니저를 통해 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 엔티티의 생명주기 영속 (managed) 영속성 컨텍스트에 저장된 상태이고 엔티티가 영속성 컨텍스트에 의해 관리된다. @Authwired private EntityManager entityManager; // 비영속 상태 Member member = createMember("1", "회원1"); // 영속 상태 entityManager.persist(member); 비영속 (new/transient) ..

JPA 2022.06.15