- ThreadLocal이란?2024-04-28 12:51:55Thread Local이란?Java에서 지원하는 Thread safe한 기술로 멀티 스레드 환경에서 각각의 스레드에게 별도의 저장공간을 할당하여 별도의 상태를 갖을 수 있게끔 도와준다. ThreadLocal이 필요한 이유예를들어 Spring의 tomcat을 보면 매 요청마다 생성해놓은 Thread pool에서 Thread를 할당하여 유저의 요청을 처리하도록 되어있다. 여기서 문제가 발생하는데 Spring에서 bean을 등록하게 되면 해당 객체는 단 1개만 만들어져서 모든 Thread가 공유하여 사용하도록 되어있다. 이때 해당 인스턴스의 특정 필드를 모든 Thread가 공유하게 되는 것인데 여기서 Thread 동기화 문제가 발생하게 된다. 이해하기 쉽도록 그림을 통해 예시를 들어보도록 하겠다.fieldSe..
- 연관관계 매핑2024-01-22 22:26:27포트폴리오 준비를 하면서 가장 헷갈렸던 내용으로 연관관계 매핑과 데이터베이스의 외래키와 똑같이 생각하다가 함정에 빠진적이 있기에 알아보겠다. 데이터베이스에서는 외래키라는 하나의 컬럼을 가지고 연관관계를 표현한다. 그러나 JPA에서는 객체를 매핑한다. 따라서 JPA에서의 연관관계 매핑은 관계의 방향 다중성(다대일? 일대다? 다대다?) 연관관계의 주인 이 세가지가 중요하다. 아래에 정리한 내용에서 위의 3가지를 알아볼 것이다. 단방향 연관관계 연관관계 중 다대일(N:1)을 먼저 알아보겠다. 다음에서 설명할 예제의 객체들은 다음의 관계이다. 게시글은 작성자가 있습니다. 게시글은 한명의 작성자에게만 소속되어 있습니다. 게시글은 작성자와 다대일 관계입니다. 위의 관계를 나타낸 객체 연관관계와 테이블 연관관계는 아..
- Spring Data JPA란?2024-01-09 19:06:10JPA는 인터페이스로서 자바 표준 명세서이다. 인터페이스를 구현하기 위해서는 구현체가 필요한데 대표적으로 Hibernate, Eclipse, Link 등이 있다. 하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루진 않는다. 어플리케이션의 데이터 액세스 계층을 구현하는 것은 꽤 오랫동안 성가신 일이었다. 간단한 쿼리를 실행하고 pagination 및 auditing을 수행하려면 너무 많은 boilerplate코드를 작성해야 한다. Spring Data JPA는 실제로 필요한 양으로 노력을 줄여 데이터 액세스 계층의 구현을 크게 개선하는 것을 목표로 만들어졌다. 그래서 Spring에서는 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA ..
- Spring JPA란?2024-01-09 18:42:58이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고 한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제 적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크이다. JPA를 구현한 대표적인 오픈 소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록 하자. ORM(Object-Relational Mapping) 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화해주는 것이라고..
- Spring Cache란?2024-01-07 22:00:59애플리케이션을 개발하며 쓰기 동작보다 읽기 동작이 많은 데이터가 있다면 캐시 도입을 고민할 수 있다. 예를 들어, 상품의 카테고리 목록은 자주 바뀌지 않는 데이터들인데 쇼핑몰 내에서 페이지를 이동할 때마다전체 카테고리들을 DB에서 매번 Query해서 모두 불러오는 것은 비효율적이기에 이런 경우에도 캐시를 적용하면 좋은 케이스다. 일반적으로 캐시는 메모리에 데이터를 미리 적재하고 이를 빠르게 읽어 응답하는 구조다. 그래서 읽기 동작이 많은 서비스에 캐시를 사용하면 서비스 응답 속도를 향상할 수 있고, 시스템 리소스도 효율적으로 사용할 수 있다. Spring은 다양한 저장소에 데이터를 캐시할 수 있는 기능을 제공한다. 또한 저장소에 독립적이고 추상화된 캐시 매커니즘을 제공한다. AOP 기반의 어노테이션을 제..
- Spring Boot란?2024-01-04 17:00:511. spring boot 란? 스프링 부트는 단독적이고, 상용화 수준의 스프링 기반 어플리케이션을 단지 실행할 수 있을 정도로 쉽게 만들 수 있다. 기존 스프링 프레임워크 위에 구축되었다. 스프링 부트를 사용하면 독립실행형과 프로덕션 등급 스프링 기반 어플리케이션을 쉽게 만들 수 있다. 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 도와준다. 2. spring과 spring boot의 차이 spring framework의 경우, dependency를 설정해 줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해주어야 한다. org.springframework spring-web 5.3.5 org.springframework spring-web..
- Spring 이란?2024-01-03 10:18:53너무나 당연하게 쓰고 있던 Spring에 대해서 궁금증이 생겼기에 이 글을 쓴다. Spring framework란? 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션 개발을 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션 경량 컨테이너로 자바 객체를 담고 직접 관리 엔터프라이즈급 개발 환경 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경 객체의 생성 및 소멸, 라이프사이클을 관리하며 언제든 spring 컨테이너로부터 필요한 객체를 가져와 사용하기 때문에 spring은 IOC(Inversion Of Control) 기반의 Framework임을 알 수 있다 IOC Spring에서는 일반적인 Java 객체를 new로 생성하여 개발자가 ..
- [Spring Boot] Spring Security & OAuth2.0 사용 - 소셜 로그인 기능 구현하기12023-11-08 22:42:20오늘은 Spring Security 와 OAuth 2.0 으로 소셜 로그인을 구현해 봤는데 각각 뭘 의미하는지와 버전이 달라지면서 바뀐 부분들을 설명하겠다. 0. 환경 설정 Gradle 사용 plugins { id 'java' id 'org.springframework.boot' version '3.1.2' id 'io.spring.dependency-management' version '1.1.2' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } 1. 구글 서비스 등록 구글 클라우드 플랫폼 주소로 이동하여 프로젝트를 생성해야 하는데 이 과정은 여기를 참고하면 되겠다. 2-1. application-oau..