분류 전체보기 75

[JPA] 영속성 컨텍스트

영속성 컨텍스트 - 엔티티를 영구 저장하는 환경을 의미한다. - EntityManager API를 통해 영속성 컨텍스트에 접근하여 엔티티 인스턴스를 생성, 조회, 삭제할 수 있다. 엔티티의 생명주기 비영속 - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태를 의미한다. - new로 객체를 생성했을 때, 이 객체는 비영속 상태라고 말할 수 있다. Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 - 영속성 컨텍스트에 의해 관리되는 상태를 의미한다. - em.persist로 객체를 영속성 컨텍스트에 저장할 수 있다.(영속화) * 이 시점에 객체를 영속성 컨텍스트에 저장하는 것이지 DB에 저장하는 건 아니다!..

Spring 🌱 2023.07.25

[Spring] 싱글톤 컨테이너

싱글톤 패턴 객체의 인스턴스가 딱 1개만 생성되어 공유되는 패턴을 의미한다. 인스턴스가 하나씩만 생성되므로 효율적인 메모리 관리가 가능하다. 객체가 호출됐을 때, 이미 만들어놓은 인스턴스를 공유함으로써 효율적인 재사용 또한 가능하다. 그러나 싱글톤 패턴은 ① 구현 코드가 많고, ② 의존관계상 클라이언트가 구체 클래스에 의존하여 DIP, OCP를 위반할 가능성이 높으며*, ③ 테스트하기 어렵단 이유 등으로 유연성이 떨어진다. public class SingletonService { public static final SingletonService instance = new SingletonService(); ... } * 클라이언트가 구체 클래스(SingletonService)에 의존하며 DIP, OCP를..

Spring 🌱 2023.07.19

빌더 패턴(Builder Pattern)

Entity, Dto에서 자주 사용하는 @Builder 어노테이션의 역할과 의미를 확실히 이해하고 싶어 정리해보았다. 빌더 패턴 - 객체를 생성할 때 사용하는 디자인 패턴이다. 생성자에서 인자가 많을 때 빌더 패턴의 사용을 고려해볼 수 있다. - 클래스를 설계할 때 필수로 받아야 할 인자와 선택적으로 받아야 할 인자가 존재한다면 클래스의 객체를 생성할 때, 사용할 수 있는 디자인 패턴은 점층적 생성자 패턴, 자바 빈즈 패턴, 빌더 패턴으로 총 3가지가 있다. 먼저 점층적 생성자 패턴부터 알아보자 점층적 생성자 패턴 - 생성자로 데이터를 받아 객체를 생성한다. - User 객체 생성 시, 필수 값은 id, userName이며 선택 값은 nickName, age다. public class User { pri..

Spring 🌱 2023.07.17

[Spring] 의존성 주입(DI)이란?

1. 의존성 주입이란? 2. 의존성 주입의 필요성 3. 의존성 주입 예 4. 의존성 주입의 장점 5. 스프링 컨테이너와 스프링 빈 6. 스프링 빈을 등록하는 방법 의존성 주입이란? - 객체 간 의존관계를 외부에서 넣어주는 것 - 스프링 컨테이너(=IoC 컨테이너)에 정의된 스프링 빈 등록 정보를 바탕으로, 의존관계를 자동으로 주입해준다. - 객체의 대한 제어 권한은 모두 스프링 컨테이너에 위임되며, 스프링 컨테이너에서는 인스턴스들을 불필요하게 여러개 만들지 않고, 단 하나만 생성하는 싱글톤 방식으로 관리하여, 메모리 관리의 효율성을 제공한다. 의존성 주입의 필요성 1. 클래스간 결합도가 느슨해진다. ( = 한 클래스가 변경될 경우, 다른 클래스가 변경될 필요성이 적어진다) 2. 싱글톤의 객체 공용으로 사..

Spring 🌱 2023.07.13

[쿠버네티스] 쿠버네티스(Kubernetes, k8s)란?

쿠버네티스란? 쿠버네티스란 컨테이너를 관리하는 툴이다. 즉, 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 재시작 등을 제공하는 관리시스템이다. 개발, 배포에 항상 쿠버네티스가 필요한가? nodejs로 만든 웹사이트를 도커 컨테이너에 넣어서 AWS로 배포하는 프로세스(한 개의 인스턴스만 사용) : 쿠버네티스 쓸 필요 X 도커가 여러 개의 컨테이너를 가지고 있고, micro-service architecture를 가지고 있다. 그래서 어떤 컨테이너는 업로드만, 또 어떤 컨테이너는 인증만, 또 다른 어떤 컨테이너는 결제만 다룬다면 이 컨테이너들은 동시에 업로드 돼야 한다. 배포엔 문제가 없으나 운영을 하며 문제가 생기기 시작한다. 쿠버네티스를 쓰는 이유 1. 컨테이너 상태 관리 컨테이너 중 하나가 죽으면..

[Docker] 도커란? 도커 간단 정리

도커란? 내 컴퓨터는 윈도우고, 서버는 리눅스다. 그런데 코드를 서버에 올렸더니 환경이 달라서 제대로 작동하지 않는다. 이러한 문제를 environment disparity라고 한다. 이를 도커로 해결할 수 있다! 도커를 이용하면 다른 머신에 동일한 환경을 구현할 수 있다. 도커 설정 방법 1. docker를 내 컴퓨터와 서버에 모두 설치한다. 2. 구현 환경(우분투, 파이썬, 깃 등)을 담은 docker 파일을 생성한다. 3. 생성한 docker 파일을 컴퓨터와 서버에 모두 준다. 4. docker는 파일을 읽어 설정한 환경과 같은 virtual container를 만든다. 5. 이제 컴퓨터에서 서버로 docker 파일과 함께 코드를 업로드하면 잘 작동한다! 도커의 장점 docker 컨테이너들은 독립적..

[Spring] JUnit5와 assertJ로 테스트 코드 작성하기

* JUnit5로 테스트를 진행하였다. 좋은 테스트의 조건 테스트는 각각 독립적으로 실행되어야 한다. 테스트 순서에 의존관계가 있다면 좋은 테스트가 아니다! given, when, then을 이용하여 테스트 코드의 가독성을 높인다. 1. 값의 비교로 기능이 정상동작하는지 검증하기 assertThat(비교대상).isEqualTo(사용자가 예상하는 값)으로 회원이 잘 저장되었는지 검증한다. MemoryMemberRepository.java @Test public void save() { Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.g..

Spring 🌱 2023.06.19

[Java] Optional이란?

Optional이란? Null이 올 수 있는 값을 감싸는 Wrapper 클래스 NullPointException을 방지할 수 있다. (NPE를 방지하기 위해 Null을 직접 검사하는 것보다 코드가 간단하다) Optional 관련 메서드 .get() Optional 객체 안의 값을 반환한다. .ofNullable() - 값이 Null일 수도 있고, 아닐 수도 있는 경우 - 값이 Null이면 빈 Optional 객체를 반환하고, Null이 아니면 특정 값을 반환한다.

Java ☕ 2023.06.19

[Git Bash] 원격저장소에 push하기(+원격저장소 branch 가져오기)

git init - 현재 디렉터리 기준으로 git 저장소 생성 및 초기화 git remote add origin - 로컬 git 저장소에 원격 저장소를 추가한다. + git remote -v : 원격저장소의 주소를 확인할 수 있다. git pull origin - 원격 저장소에 있는 프로젝트 내용을 가져온다. - 내가 로컬에서 작업하고 있는 프로젝트와 병합하므로 기존 작업 내용을 유지할 수 있다. - git clone도 원격 저장소에 있는 프로젝트 내용을 가져오는 명령이지만 해당 프로젝트의 폴더를 새롭게 생성한다는 차이점이 있다. git add . git commit -m "commit message" - 업데이트된 내용을 추가 / 커밋한다. - git commit --amend : 직전 커밋 수정 gi..

Etc/Github 2023.04.04

[Git Bash] 경로에 공백(띄어쓰기)이 있을 때 cd, git add 방법

Problem 📁 Toy Project라는 폴더가 있을 때 폴더명 그대로 명령어를 실행하려하면 경로를 찾지 못한다 $ cd Toy Project bash: cd: too many arguments $ git add Toy Project fatal: pathspec 'Toy' did not match any files Solution 1. 큰 따옴표로 경로를 감싸기 $ cd "Toy Project" 2. 특수문자인 공백을 백슬래시(\)로 이스케이프 처리하기 $ cd Toy\ Project

Etc/Github 2023.03.28