Spring 20

싱글톤 컨테이너

싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 이다. 그래서 객체 인스턴스르 2개 이상 생성하지 못하도록 해야한다. pricate 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야한다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성 private static final SingletonService instance = new SingletonService(); //2. public 으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다. public static SingletonService getInstance() { return instance; ..

Spring 2022.07.10

스프링 컨테이너와 스프링 빈

스프링 컨테이너란? 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부른다. 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸시킬 수 있는데, 스프링 컨테이너가 이 역할을 대신해 준다. 즉, 제어 흐름을 외부에서 관리하고 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. 스프링 컨테이너의 종류 BeanFactory와 ApplicationContext가 있다. BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할이다. getBean() 메서드를 통해 빈을 인스턴스화 할수 있다. Ap..

Spring 2022.07.10

객체 지향 프로그래밍

객체 지향은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용이 된다. 객체 지향의 특징으로는 추상화, 캡슐화, 상속, 다형성 이 있는데 이 중에서 가장 중요한 것이 다형성이다. 다형성을 좀더 쉽게 알기 위해서 실세계와 비유해보겠다. 실세계와 객체 지향을 1:1로 매칭 하면 안 되고 역할과 구현으로 세상을 구분해보겠다. Ex1. 운전자와 자동차 운전자는 자동차를 운전할 때 면허증만 있으면 운전이 가능하다. 이때 자동차의 기종이 무엇이든 상관없이 운전이 가능하다. 아직 감이 안 오면 다른 예시를 들어보자 Ex2. 공연 남자 주인공과 여자 주인공을 정해야 한다. 이때 주인공들을 역할이고 그 배우들은 구현이라고 해보자. 남자 배우가 누가 오든 여자 배우가 누가 오든 공연을 ..

Spring 2022.06.01

Spring 과 Spring boot

Spring과 Spring boot에 대해서 알아보도록 하겠다. Spring이란? 스프링은 웹사이트 개발을 위한 백엔드 프레임워크이다. Java의 활용도가 높아졌고 따라서 프로젝트 규모도 커지게 되었다. Java에서 JSP, MyBatis, JPA 등 여러 가지 기술을 사용하는데 이 기술을 Spring을 이용하여 좀 더 편하게 사용할 수 있다. 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크이다. Spring의 특징 1. Ioc(Inversion of Control, 제어의 역행) 제어의 주체가 개발자가 아닌 프레임워크라는 뜻으로 때에따라 프레임워크가 작성된 코드를 호출하는 기술 객체의 생명주..

Spring 2022.06.01

JpaReporitory vs EntityManager

JpaRepository란? Spring Framework에서 제공하는 JpaRepository를 제공해준다. JpaRepository는 인터페이스이다. JpaRepository는 자동으로 클래스를 만들고 Bean을 생성해준다. CRUD처리를 위한 공통 인터페이스 제공 @Repository public interface MemberRepository extends JpaRepository { } 안에는 엔티티 클래스 이름과 ID 필드 타입이 지정된다. 주의할 점은 "기본형의 경우, 래퍼 클래스를 지정한다는 점이다. 위에 코드에 보면 기본형 int가 래퍼 클래스를 지정하여 Integer로 해준걸 확인 할수가 있다. 또 하나 주의해야 할 것은 어노테이션이다. 클래스의 선언 앞에 @Repository라는 어노..

Spring 2021.11.23

엔티티 설계 주의점

연관관계 매핑 분석 1:N, N:1 양방향 관계에서는 외래키가 있는엔티티를 주인으로 정하는것이 좋다. 연관관계의 주인쪽의 값을 세팅해야 값이 변경된다. 1:N에서 일 부분에 있는 mappedBy는 단순히 읽기만 하는 역할(단순 조회용)이며, 연관관계의 주인쪽에 세팅을 해야 값이 변경된다. 외래키가 가까운 곳에 있는 것을 연관관계의 주인으로 정하는 것이 좋다. N:N 돤계에서는 @ManyToMany 사용은 권장되지 않고 1:N + N:1로 풀어내는 것을 권장한다. 엔티티 설계시 주의점 Entity에서는 가급적 Setter를 사용하지 말자. 변경포인트가 많아서 유지보수가 어렵다. 모든 연관관계는 지연로딩으로(lazy loading) 설정한다. 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될지 추..

Spring 2021.11.21

Maven vs Gradle

Maven 자바용 프로젝트 관리 도구이다 아파치 앤트의 대안으로 만들어 졌다. 아파치 앤트는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다 쉽게 말해 프로젝트를 진행하면서 사용할 수있는 많은 라이브러리들을 관리해두는 도구이다. 메이븐은 네트워크를 통해서 연관된 라이브러리 까지 같이 업데이트를 해주기 때문에 과거에 일일히 수동으로 다 업데이트 혹은 견결 시켜주던 것을 자동으로 해준다는 편리함이 있다. Gradle Gradle은 작업 의존성 그래프를 기반으로하는 반면 Maven은 고정적이고 선형적인 단계의 모델을 기반으로한다고 한다. 성능 측면에서는 둘 다 다중 모듈 빌드를 병렬로 실행할 수 있지만, Gradle은 어떤 task가 업데이트되었고 안되었는지를 체크하기 때문에 increme..

Spring 2021.11.05

Spring 이란?

스프링이란? JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용한다. JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀이라 할 수 있다. JAVA의 활용도가 높아졌고 따라서 프로젝트 규모도 커지게 되었다. JAVA에서 JSP, MyBatis, JPA 등 여러가지 기술을 사용하는데 이 기술을 Spring을 이용하여 좀더 편하게 사용할수 있는것이다. Spring은 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해줄수 있다. 그리고 오픈소스를 좀더 효율적으로 가져다 쓰기도 좋다. 결론적으로 Spring은 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어 스프링은 객체 지향 언..

Spring 2021.07.14

Spring boot S3 업로드, 수정, 삭제

프로젝트 설정 Window 10 Java 11 Spring boot 2.4.5 Gradle MySql Intellj IDEA 2021.1 의존성 추가 (Gradle) implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws', version: '2.2.6.RELEASE', ext: 'pom' implementation group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.1021' spring-cloud-aws 와 aws-java-sdk-s3에 대한 의존성 추가합니다. 프로젝트 구조 AWS 설정 aws 설정은 applcation.yml 파일에 작성합니다. cloud: ..

Spring 2021.06.18

JAR vs WAR

JAR이란? JAR은 Java Arcihive의 약자입니다. JAr파일은 자바 환경 위에서 바로 동작할수 있는 어플레케이션 혹은 라이브러리입니다. class 및 설정 파일들이 모여서 만들어진 하나의 어플리케이션이나 라이브러리 입니다. WAR(Web ApplicationArchive) WAR은 WebApplication Archive의 약자입니다. JSP나 Servlet등 WAS 컨테이너 위에서 동작하게끔 빌드된 형태입니다. WAR은 web.xml파일을 포함하고 있는데, AWS가 동작을 하면 web.xml파일에서 설정들을 불러옵니다. 결론 스프링 부트는 디폴트 세팅으로는 Jar로 빌드가 됩니다. 하지만 스프링MVC는 War로 빌드를 하며 Was 컨테이너 위에서 동작하게 됩니다. Was가 Jar내에 내장되어..

Spring 2021.06.18