BE전문가 프로젝트

입사 1일차 공부 본문

입사 후 정리

입사 1일차 공부

원호보고서 2022. 4. 25. 15:46

1. JRE, JVM, JDK

개념 정리
JRE
(Java Runtime Element)
java 프로그램을 실행하는 환경 만 제공
- JVM, java 클래스 라이브러리 및 Java 응용 프로그램을 실행하는데 필요한 기타 파일 조합
JVM
(Java Virtual Machine)
Java 프로그램은 컴퓨터에 특정 작업을 수행하도록 지시하는 Java 프로그래밍 언어를 사용하여 작성된 지침 세트입니다. 소스 코드라고도합니다. 프로그래머가 Java 프로그램을 작성하고 컴파일 할 때 Java 컴파일러는 Java 프로그램을 바이트 코드라는 중간 코드로 변환합니다. JVM은 JVM (Java Virtual Machine)의 약자입니다. 바이트 코드를 기계어 코드로 변환하는 추상 기계입니다.
JDK
(Java Develop Kite)
java develop kite의 약자로 자바 개발 킷이다
java기반 응용 프로그램을 개발하는 데 도움이 된다.

JDK와 JRE 간의 관계

JDK는 JRE와 다른 개발 도구의 조합입니다.

 

JDK와 JRE의 차이점

 

JDK는 Java 플랫폼에서 Java 응용 프로그램을 개발하는 데 사용되는 소프트웨어 개발 환경입니다. JRE는 Java 응용 프로그램을 실행하는 데 필요한 최소 요구 사항을 제공하는 JDK의 일부입니다. 이것이 JDK와 JRE의 기본적인 차이점입니다.

용법

JDK는 Java 프로그램을 개발하고 실행할 수 있지만 JRE는 Java 프로그램을 실행할 수있는 유일한 부분입니다.

 

2. main Method가 필요한 이유

java 소스는 무조건 main 함수부터 시작되기 때문이다.

 

3. Java Memory 구조

JVM구조

<<JVM구조>>

 

Java Memory구조
Method Area JVM이 읽어들인 클래스와 인터페이스들의 런타임 상수 풀이
즉 클래스의 구셩요소인 정적 변수, 생성자, 매소드, 맴버 변수가 이공간에 저장됨
Stack 메소드가 호출되면 이 영역에 할당됨
먼저 들어온 것이 마지막 나가는 구조(FILO)이다
기본타입 변수는 스택에 직접 생성된다.(객체는 힙 영역)
스레드 생성 시 각 스레드마다 하나의 스택을 할당받음
스택에는 메소드 수행시 발생되는 지역변수 또한 저장됨
Heap 자바 프로그램이 실행되면서 동적으로 생성된 객체가 저장되는 공간
이곳에 생성된 객체들은 다른 객체의 필드 또는 스택에 존재하는 다른 메소드에 의해 참조될 수 있다

4. Spring

Spring
핵심 ioC
활용방식 DI

 

 

- IOC

IOC는 제어의 역전이라고 하며 Container가 개발자대신 제어하기 때문이다.

loc container인 Spring이 객체의 생성과 의존성을 관리한다. 따라서 우리는 mata설정파일만 만들면 된다.

IOC를 Spring에서 구현하는 방법은 크게 2가지(XML, Annotation)가 있으며 injection하는 방법은 세가지

(Setter Injection, Constructor Injecttion, Method Injection)가 존재하는데 그 중 setter와 constructor를 자주 사용한다.

 

용어

IoC용어 설명
빈(bean) container가 관리하는 객체
빈 팩토리 빈을 생성하고 소멸하는  lifeCycle를 관리하는 인터페이스
어플리케이션 컨텍스트 빈 팩토리를 바로 사용하지 않고 빈 팩토리 + 추가기능을 붙인것
applicationcontext를 xml에서 사용할 때 사용하는 것이 GenericXmlApplicationContext 클래스
Annotation을 사용시 사용하는 것이 AnnotaionApplicationContext 클래스
설정정보/ 설정메타정보 어플이케이션 컨텍스트 및 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보
스프링 프레임워크 IoC 컨테이너, 어플리케이션 컨텍스트를 포함한 스프링이 제공하는 모든 기능을 칭함

 

- DI(Dependency Injecktion)

1. DI의 개념

각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 Contaioner가 자동으로 연결해주는 것이다.

객체는 interfacedp에 의한 의존관계만 알고 있으며, 구현 클래스에 대한 차이를 모르기 때문에 서로 다른 구현체로 대체가 가능하다. 

 

2. DI의 유형

유형 설명
Setter Injection setter method를 이용한 injection이며 <property>를 이용하여 주입해준다.
Constructor Injection 생성자를 이용한 injection이며 <Constructor-arg>를 이용하여 값을 지정한다.
이전과 같이 순서에 맞게 바인딩하며 index로 순서를 지정해줄 수 있지만 지정하지 않는다면 순서대로 해당되는 값을 넣어준다.

setter와 다르게 id가 아닌 name으로 설정한다
Method Injection 일반 method를 이용한 injection (일반적으로 사용x)
  생성자 Setter
장점 Bean객체를 생성하는 시점에 모든 의존 객체 주입 이름을 통해 어떤객체가 주입되는지 쉽게 알 수 있음
단점 parameter의 개수가 많을 경우 어떤 객체에 binding하는지 생성자코드를 일일이 확인해야함 NULL POINTEXCEPTION이 발생할 확률 높음
각자의 장단점이 있기때문에 섞어서 사용하는 것을 권장

Collection을 이용하여 set하기

Collection  
List타입 <list>와 <value>
Set타입 <set>과 <value>
Map타입 <map>과 <entry>
Properties타입 <props>와 <prop>
<bean>
	<property name="user">
		<list>
			<value>감자</value>
			<value>고구마</value>
			<value>호박</value>
		</list>
	</property>
</bean>

<bean>
	<property name="user">
		<set>
			<value>감자</value>
			<value>고구마</value>
			<value>호박</value>
		</set>
	</property>
</bean>

<bean>
	<property name="user">
		<map>
			<entry key="감자" value="5000원" />
			<entry key="고구마" value="3000원" />
			<entry key="호박" value="7000원" />
		</map>
	</property>
</bean>
    
<bean>
	<property name="user">
		<props>
			<prop key="감자">5000원</prop>
			<prop key="고구마">3000원</prop>
			<prop key="호박">7000원</prop>
		</props>
	</property>
</bean>

 

5. Spring MVC2 Pattern

3-Tier를 기반으로하는 전혁적인 계층형 구조

 

 

 

 

MVC는 여러가지 디자인 패턴 중 하나며 어떻게 소프트웨어를 개발할 것인지의 공식화 한 패턴

M : 비즈니스 영역의 로직을 처리함

V : 비즈니스 영역에 대한 프레젠테이션 뷰

C : 사용자의 입력 처리와 흐름 제어를 담당한다

1. 웹 브라우저에서 요청

 

2. 요청을 서블렛이 받아 로직 클래스를 통해 요청을 처리함, 여기서 비즈니스 로직에 알맞는 모델을 선택하여 처리함

 

3. 포워딩을 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 생성함

 

4. 결과를 클라이언트에게 응답한다.

 

MVC 흐름

 

MVC 개념
컨트롤러 - 서블릿(Servlet) 사용자의 요청을 받아드리는 컨트롤러는 서블릿으로 작성됨
서블릿을 통해 요청 받아 처리하기에 알맞은 모델을 선택하여 처리하도록 흐름을 제어한다
뷰 - JSP 최종적으로 보여지는 결과물
서블릿으로 부터 완벽한 결과물을 받아 JSP페이지로 포워딩하여 결과를 생성함
모델  

6. Spring 3-Tier

Spring 3-Tier

Spring 3-Tier
Presentation Tier
(화면계층)
- 화면에 보여주는 기술을 사용하는 영역
- Spring MVC 객체를 이야기함
- 프론트 컨트롤러(DispatcherServlet), 컨트롤러, 뷰, 모델이 포함됨
Business Tier
(비즈니스 계층)
- 순수 비지니스 로직을 담고 있는 영역
- 프레젠테이션 계층(View)와 영속 계층(DBMS)의 중간다리 역할을 한다.
- 영속 계층은 DBMS를 기준으로, 비즈니스 계층은 로직을 기준으로 처리한다.
- service라는 용어를 많이 사용한다.
Persistence Tier
(데이터 계층)
- 데이터를 어떤 방식으로 보관하고, 사용하는 가에 대한 설계가 들어가는 계층
- 데이터의 CRUD 연산을 수행하는 mapper와 결과를 객체로 리턴하는 DAO까지 영속 계층

7. DTO와 VO 그리고 Entity에 대하여

1. DTO

DTO(Data Transfer Object)는 계층(Layer)간 데이터 교환을 위해 사용하는 객체

데이터 교환만을 위해 사용함으로 로직을 갖지 않고, getter/setter 메소드만 갖는다.

class CarDto {
   private int red;
   private int green;
   private int blue;
  
   public RGBColor(int red, int green, int blue) {
      this.red = red;
      this.green = green;
      this.blue = blue;
   }
  
   public int getRed() {
      return red;
   }
  
   public int setRed(int red) {
      this.red = red;
   }
   ...
}

2. VO

VO(Value Object)는 값 그 자체를 표현하는 객체

 

DTO와 반대로 로직을 포함할 수 있으며, 객체의 불변성(객체의 정보가 변경하지 않음)을 보장함

 

서로 다른 이름을 갖는 VO인스턴스라도 모든 속성 값이 같으면 두 인스턴스는 같은 객체라고 할 수 있음

이를 위해 VO에는 Object 클래스의 equals() 와 HashCode()를 오버라이딩 해야함

 

class Car {
   private final int red;
   private final int green;
   private final int blue;
  
   public RGBColor(int red, int green, int blue) {
      this.red = red;
      this.green = green;
      this.blue = blue;
   }
  
   public static RGBColor of(int red, int green, int blue){
      return new RGBColor(red, green, blue);
   }
  
   @Override
   public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      RGBColor rgbColor = (RGBColor) o;
      return red == rgbColor.red && green == rgbColor.green && blue == rgbColor.blue;
      // 모든 속성값이 같으면 이름이 다른 인스턴스라도 같은 객체로 인식한다
   }
}

 

3. Entity

- 실제 DB의 테이블과 매핑되는 객체.

- id를 통해 각각의 Entity를 구분함

- VO와 같이 로직을 갖을 수 있다

@Entity
public class User {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   privae Long id;
  
   @Column(nullable = false)
   private String name;
  
   @Column(nullable = false)
   private String email;
  
   @Builder
   public User(String name, String email) {
      this.name = name;
      this.email = email;
   }
  
   public User update(String name, String email) {
      this.name = name;
      this.email = email;
      return this;
   }
}

 

개념 정리
DTO 계층(Layer) 간 데이터를 이동을 위해 사용되는 객체
VO 값을 갖는 순수한 도메인
Entity 이를 DB 테이블과 매핑하는 객체

 

8. URL

1. URL과 도메인의 차이

URL과 도메인의 차이
도메인 ip 주소를 갖게 서버를 사용자가 쉽게 기억하고 찾을 수 있도록 만들어준 시스템 즉 네임서버
URL 도메인을 포함한 경로 즉 프로토콜, 도메인, path 등이 포함되어 있는 것을 의미한다.

URL 구조

9. HTTP의 특징

1. 비연결성(Connectionless)

클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버리는 것을 의미

비 연결성의 장단점
장점 HTTP는 인터넷 상 불특정 다수의 통신 환경을 기반으로 설계되었음
따라서 서버가 다수의 클라이언트와 연결을 계속 유지하려면 많은 리소스가 발생하게 됨
- 연결을 해제하여 더 많은 연결을 할 수 있기 떄문에 비 연결적인 특징을 갖음
단점 매번 새로운 연결을 시도/해제의 과정을 거쳐 오버헤드가 발생함

1.1) 비연결성의 해결책

오버헤드를 줄이기 위해 HTTP의 *Keep Alive 속성을 사용할 수 있음

*Keep Alive :  지정된 시간동안 서버와 클라이언트 사이에서 패킷 교환이 없을 경우, 확인을 위해 패킷을 주기적으로 보내는 것

이 때 패킷에 반응이 없으면 접속을 끊게 된다.

하지만 트래픽이 늘어나게 되면 메모리 사용량이 많이지기 때문에 주의해야함

 

2. 무상태(Stateless)

Connectionless로 인해 서버는 클라이언트를 식별할 수 없는데, 이를 Stateless라고 함

즉, 매번 새로운 인증을 해야함

 

2.1 Stateless를 보완하기 위한 방법

Stateless를 보완하기 위한 방법
쿠키(Cookie) 사용자의 데이터를 브라우저에 저장하여 사용할 수 있음
세선(Session) 쿠키는 데이터가 브라우저에 저장되기 때문에 보안에 취약할 수 있음

서버에 데이터를 저장하기 때문에 쿠키보다는 안전함
하지만 트래픽이 많을 경우 서버에 과부화의 원인이 될 수 있음
JWT  

 

3. HTTP Method

 HTTP Method의 종류
Get 서버에게 리소스를 달라는 요청(조회)
Post 서버에 입력 데이터를 전송하며 요청 엔티티 본문에 데이터를 넣어 서버에 전송함(삽입)
HEAD 정확히 GET과 같지만, 서버는 응답으로 엔터티 본문 변환 없이 헤더만을 반환
클라이언트는 리소스를 가져올 필요 없이 헤더만을 통해 정보를 얻을 수 있다.
PUT 서버가 요청의 본문을 갖고 요청 URI의 이름대로 새 문서를 만들거나, 이미 URI가 존재한다면 요청 본문을 수정할 때 사용(수정)
DELETE 서버에서 요청 URI 리소스를 삭제하도록 요청함(삭제)
TRACE 클라이언트와 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지의 이상 유무를 파악함
주로 진단을 위해 사용함

 

'입사 후 정리' 카테고리의 다른 글

3. 파일 업로드(Spring shop)  (0) 2022.05.02
2. myBatis 쿼리문(Spring shop)  (0) 2022.05.02
Comments