spring

반응형

프레임 워크(Framework)

 

개념


원하는 기능 구현에만 집중하여 빠르게 개발할 수 있도록 기본적으로 필요한 기능을 갖추고 있는 것

 

프로그램의 기본이 되는 뼈대라고 보면 된다.

뼈대? 뼈대? 이해가 가지 않는다.

 

예를 들면 공룡제작 프레임워크 다운받아서 써보자.

기본으로 공룡 뼈대가 제작돼있다.


-티라노사우루스 뼈대

-벨로키랍토르 뼈대

-스피노사우루스 뼈대

-알로사우루스 뼈대

 

 

그럼 우리가 티라노사우루스 뼈대(프레임워크) 골라 제작(코딩) 한다고 가정했을 ,

티라노의 형태가 이미 만들어져있으니 살을 어떻게 붙일까만 집중해서 코딩할 있겠죠

그리고

뼈대엔 팔이 2 있는데 새로운 뼈를 만들어서 팔을 3 만들 없다.

 

? 2개라고 정의 해놨으니까요 "티라노사우르스 뼈대는 팔이 2개다." 라고 말이죠

하지만? 팔을 굵게 만들고, 꼬리는 짧게 다리는 길게(메소드길게(메서드) 만들순 있습니다.

 

사용 이유


만약 공룡 제작 프레임워크가 없다면

뼈대 자체를 만드는데만 세월이 걸리게 됩니다.

 

하지만 프레임워크를 이용한다면 더욱 빠르게 만들 있고,

2 다리 2 꼬리 1 이렇게 정해져있으니 표준을 정할 있습니다.

예를 들어

공룡 제작프레임워크 소스를 받는다면 " 2 다리 2 꼬리 1개이겠구나" 있습니다.

 

언어별 대표 프레임워크


Java - Spring

Python - Django

PHP - Laravel

JavaScript - React

GO - Revel

Ruby - Rails

 

라이브 러리(Library)

 

개념


필요한 기능을 미리 준비 해놓은 개념

 

굉장히 범위가 포괄적이다.

미리 작성된 코드서브루틴(함수), 클래스자료형 

모두가 라이브러리에 속한다.

 

한마디로 재사용이 가능한 코드의 집합 이라고 보시면 됩니다.

 

예를 들면 예시처럼 공룡 제작 프레임워크를 쓰고 있다가

 

그냥 발톱이 아닌 강철 발톱 쓰고 싶다면?

발톱은 2 다리 2

4개나 들어간다.

 

그럼 라이브러리를 쓰지 않는다면 강철 발톱을 하나 만들어서

일일이 복사 붙여넣기 해야 한다.

 

매우 가독성이 떨어지며 유지보수도 굉장히 힘들다.

하지만 이미 만들어진 강철 발톱라이브러리 있다면 라이브러리를 적용 시킴으로써

바로 강철 발톱 장착 시킬 있다.

 

여기서 프레임워크의 강점이 또 나온다. 강철 발톱은 반드시 공룡 제작 프레임워크에만 사용 가능하다는 점.

(특정 프레임워크에 맞게 나온 라이브러리들이 많이 존재한다)

 

사용 이유


재사용이 필요한 기능으로 반복적인 코드 작성을 없앨 있다.

그러므로 개발이 훨씬 수월해진다.

 

 

대표 라이브러리


JavaScript - jQuery, Chart.js

Python - 아파치 Libcloud, Arrow,Behold

Java - JUnit, Jackson

반응형
반응형

DTO(Data Transfer Object)

 

개념


이름과 같이 계층 간 데이터 교환을 위해 사용하는 객체다.

*여기서 말하는 계층이란, View - Controller - Service - DAO와 같은 각 계층을 말한다.

VO와 혼용되어 쓰이나, 이는 보통 DTO를 지칭하는 말이다.

데이터를 담을 private 변수와 그 변수를 조작할 수 있는 Getter, Setter 메서드로 구성돼있음..

 

데이터를 오브젝트로 변환하는 객체 Getter, Setter 메서드로 구성!

 

 

사용 이유


form, ajax에서 name 필드 값을 프로퍼티에 맞춰서 값을 다른 페이지로 넘겼을 시 ,

값을 받아야 할 페이지에서는 값을 하나씩 일일이 받는 것이 아니라 name 속성의 이름이랑 매칭 되는 프로퍼티에 자동적으로 DTO가 인스턴스화 되어 UserDTO를 자료형으로 값을 받을 수 있음

 

말이 어려워졌는데, 한 상황으로 정리하겠습니다.

DB : 데이터 줄게

DAO : 일일이 담기 귀찮다. 딱 맞는 바구니에 담을 수 없을까?

DAO : 아 유레카! 주는 데이터에 맞춰서 데이터 형식들을 만들어 놓은

클래스를 만들어야겠군 이름은 DTO라고 불러야겠다.

 

DB 값 → DAO Service DTO

 

문법


List<Company>  result = menuservice.getCompanyList();
//getCompanyList() == select * from Company;
//DB 컬럼 이름에 맞춘 Company 클래스(DTO)에 자동으로 데이터 삽입됨
//예시 DTO
public class Company {

private int id;

private String name;

private String address;

private String registration_number;

private String representative;

private String description;

private String created_on;

private String updated_on;

public int getId() {
return id;

}

public void setId(int id) {
this.id = id;

}

public String getName() {
return name;

}

public void setName(String name) {
this.name = name;

}

public String getAddress() {
return address;

}

public void setAddress(String address) {
this.address = address;

}

public String getRegistration_number() {
return registration_number;

}

public void setRegistration_number(String registration_number) {
this.registration_number = registration_number;

}

public String getRepresentative() {
return representative;

}

public void setRepresentative(String representative) {
this.representative = representative;

}

public String getDescription() {
return description;

}

public void setDescription(String description) {
this.description = description;

}

public String getCreated_on() {
return created_on;

}

public void setCreated_on(String created_on) {
this.created_on = created_on;

}

public String getUpdated_on() {
return updated_on;

}

public void setUpdated_on(String updated_on) {
this.updated_on = updated_on;
}

@Override
public String toString() {
return "Company [id=" + id + ", name=" + name + ", address=" + address + ", registration_number="
+ registration_number + ", representative=" + representative + ", description=" + description
+ ", created_on=" + created_on + ", updated_on=" + updated_on + "]";
}
}

VO(Value Object)

 

개념


값을 가진 객체

데이터만 가지고 있다는 것만 보면 DTO와 비슷한데,

가장 큰 특징은 value가 같으면 같은 객체라고 보는 거예요.

Company a = new Company("대기업");
Company b = new Company("대기업");

a.hashCode();
b.hashCode();

해쉬 값이 동일하다. 즉 같은 것으로 판단

 

그리고  read-only 값을 가지고 있음 즉, 변하지 않는 immutable 한 성질을 가지고 있음. 중간에 값을 바꿀 수가 없음.

 

 

문법


DTO와 VO를 구분할 수 있는 아주 좋은 형태

get/set = DTO

get = VO

 

setter는 없고 getter만 있는 형태!

public class BoardVO {
	
	private int id;
	private String subject;
	private String context;
	private String attachments;
	private int likes;
	private int views;
	private int writer;
	private Date create_time;
	public int getId() {
		return id;
	}
	public String getSubject() {
		return subject;
	}
	public String getContext() {
		return context;
	}
	public String getAttachments() {
		return attachments;
	}
	public int getLikes() {
		return likes;
	}
	public int getViews() {
		return views;
	}
	public int getWriter() {
		return writer;
	}
	public Date getCreate_time() {
		return create_time;
	}
	
	@Override
	public String toString() {
		return "BoardVO [id=" + id + ", subject=" + subject + ", context=" + context + ", attachments=" + attachments
				+ ", likes=" + likes + ", views=" + views + ", writer=" + writer + ", create_time=" + create_time + "]";
	}
	
}

DTO VS HashMap


DTO 쓰지 않고 HashMap을 쓰면 안 될까?

 

가장 큰 이유는 compile time 오류와 관련 있습니다.

HashMap은 컴파일 시에 오류를 잡아내질 못합니다.

 

DTO

dto.setName("gildong");
String name = dto.getName();

HashMap

map.put("name", "gildong");
String name = map.get("name");

정리


HashMap 단점

 

1. 해쉬 맵은 get이나 put에서의 key가 잘못돼도 컴파일 시에는 에러를 잡아내질 못함.

     즉, map.put("names")라고 해도 에러가 나질 않죠.

     반면에, dto.steNames() 나 dto.getNames()는 에러가 나서 컴파일조차 되지 않을 겁니다.

 

2. 데이터 타입에 대한 에러를 잡아내질 못합니다.

    String인지 Integer인지를 컴파일 시에는 모르죠.

 

3. 해쉬 맵은 프로그램 말고도 별도의 정보가 필요합니다.

    dto는 그 자체가 필요한 정보를 담고 있습니다.

    name, address, age 등 dto의 정의만 봐도 대충은 알 수 있는데 반하여,

    해쉬 맵은 이 데이터를 정의한 다른 문서가 필요합니다.

    이는 규모가 큰 프로그램일수록 더 필요하죠.

 

HashMap 장점 및 사용 이유

 

1. 데이터의 필드들이 가변적인 경우

2. 매우 복잡한 구조로 되어 있어 DTO로 규정하기는 곤란한 경우

3. DTO가 너무나 많아지는 경우

4. 한 select 문 쿼리에 여러 개의 count 정보를 담을 때

5. 한번 쓸건데, 이걸 위해 DTO를 만들기도 뭐할 때

 

반응형
반응형

글은 이클립스(IDE) 기반으로 설명합니다.

 

어제까지 잘되던 프로젝트가 내일 출근하고 보니 맛(?)이 갈 때가 있습니다. 바아로 따라해봅시다

 

1.Project

2.Clean

 

 

1.Servers

2.Tomcat version Server at localhost [] 마우스 우클릭

3.Clean or Clean tomcat work directory

 

Tomcat Clean VS Clean tomcat work directory

 

Clean… : 모든 파일(java, jsp, xml)등의 파일들을 컴파일하여 재적용

기존 컴파일 Class 덮어쓰기

 

Clean tomcat work directory : context별 폴더에 저장된 컴파일 Class 파일들을 지우고 재컴파일

기존 컴파일 Class 파일들 삭제 다시 생성

 

이 방법에도 안된다면 Java Build Path 재컴파일...아니면 Git Pull 할때 이상한 파일이 딸려왔는지 확인

 

pom.xml maven 디펜던시 추가 안될

1.이클립스 프로그램 종료

2.C:\Users\사용자이름\.m2\repository 폴더 삭제 다시 이클립스 재가동

3.우측 하단에 Building workspace ( ?% ) 없어질 까지 대기 Run on Server

반응형

+ Recent posts