안녕하세요.

프로그래밍을 하다보면, 경로에 관한 것을 처리하곤 합니다.

이때 어떤 API절대 경로로 처리를, 또 다른 API상대 경로 로 처리를 하곤 합니다.

절대 경로 , 상대 경로의 개념이 확실하지 않으면 생각보다 프로그래밍하기 까다롭습니다.

그래서, 오늘은 프로그래밍에서 자주 쓰이는 개념인 절대 경로상대 경로에 대해 포스팅 합니다.

절대 경로란?

컴퓨터의 파일을 찾아가는 방법은 절대 경로로 파일을 찾는 방법 한가지 뿐입니다.

절대 경로란 최초의 시작점으로 경유한 경로를 전부 기입하는 방식입니다.

윈도우 OS의 바탕화면에 위치한 test.txt 파일을 예로 들어봅시다.

test.txt파일의 절대 경로는 최상위 루트 디렉토리인 C 디렉토리 로부터 시작되어 아래와 같이 구성됩니다.

C:\Users\UserID\Desktop\test.txt

어떠한 OS던 이렇게 최상위 루트 로부터 경유한 경로를 전부 기입한 절대 경로로만 파일을 찾을 수 있습니다.

그렇다면, 상대 경로는 왜 탄생했으며 어떻게 파일을 찾는 걸까요?

상대 경로란?

상대 경로상대적 이라는 단어로 개념을 설명해보려 합니다.

네이버 단어 사전에 나와 있는 상대적 은 아래와 같습니다.

서로 맞서거나 비교되는 관계에 있는. 또는 그런 것.

여기서 중요한건 비교 관계 입니다. 상대 경로는 항상 비교할 대상이 있어야 합니다.

즉, 우리가 프로그래밍을 할 때도, 상대 경로를 읽을 때도 어떤 경로로 부터 비교하는지를 염두해야 합니다.

예로 아래와 같은 상대경로 두개로 설명하려 합니다.

  • Desktop\test.txt

  • test.txt

첫번째 상대 경로는 무얼 뜻하며, 두번째 상대 경로는 무얼 뜻하는 걸까요?

확실한건, OS에게 저렇게 경로를 알려준다면 OS는 파일의 위치를 찾지 못합니다.

앞서 말했드시 OS는 절대 경로로 파일을 읽는 방법 밖에 없습니다.

위의 2개의 상대 경로C:\Users\UserID\Desktop\test.txt 를 의미할 거 같지만 비교 대상이 누구인지에 따라, 경로가 천차만별로 바뀝니다.

상대 경로의 비교 대상이 만약, C 드라이버의 Mommoo 디렉토리라면,

위의 2개의 상대 경로는 아래와 같이 절대 경로로 해석됩니다.

  • C:\Mommoo\Desktop\test.txt

  • C:\Mommoo\test.txt

우리 머리속에 담아져 있는 C:\Users\UserID\Desktop\test.txt 경로라는 아예 다른걸 볼 수 있습니다.

결론적으로, 상대 경로기준 경로를 기준으로 절대 경로가 구성되며, 상대 경로로 파일의 위치를 찾을 수 있는 이유는 기준 경로절대 경로로 변환하여 OS에게 전달 하기 때문입니다.

상대 경로가 왜 필요할까?

절대 경로는 정적인 문자열로 특정 컴퓨터의 파일 위치를 정확히 알려줍니다.

하지만, 경로를 다룰때는 이러한 정적인 특징이 오히려 단점으로 다가올 수도 있습니다.

예를들어, test.txt의 경로가 항상 자주 바뀌는 상황이거나 루트 디렉토리가 서로 다른 OS들을 다룬다면 어떨까요?

정적인 특징 때문에 전자는 절대 경로로 작성된 모든 문서를 다시 작성해야 하며, 후자는 OS 별로 절대 경로를 작성해서 관리해야 해야 합니다.

윈도우 OS 같이 GUI로 파일을 더블클릭 해서 들어가지만, GUI가 없는 리눅스는 디렉토리를 접근할 때마다 절대 경로로 풀 패스를 적어야 합니다.

영타를 잘 못쳐서 경로 오타 나는거 생각하면 끔찍...

만약 상대 경로를 이용하여, 비교 대상이 우리에게 주어지는 상황이라면 위에서 언급한 문제를 해결 할 수 있습니다.

해당 개념을 프로그래밍에 적용해봅시다.

JAVA프로그래밍을 예로 들어 봅시다.

JAVA의 파일 객체를 생성 한다면, 아래와 같이 사용 할 수 있습니다.

public class Main {
private static final String ABSOLUTE_FILE_PATH = "C:\Users\UserID\Desktop\test.txt";
private static final String RELATIVE_FILE_PATH = "test.txt";

   public static void main(String[] args) {
       File absoluteFile = new File(ABSOLUTE_FILE_PATH);
       File relativeFile = new File(RELATIVE_FILE_PATH);
  }
}

첫 번째 파일 객체는 절대 경로를 사용했으므로, 해당 경로의 파일을 참조합니다.

두 번째 파일 객체는 상대 경로를 사용했는데, 어떤 해당 경로의 파일을 참조 할까요?

위에서 설명했드시, 비교 대상 을 생각해야 합니다.

비교 대상은 위에서 작성한 Main.java 파일이 들어있는 디렉토리 기준입니다.

만약 Main.java파일이 C:\Users\UserID\workspace\Test\src 경로에 존재 한다면,

상대 경로test.txt절대 경로 C:\Users\UserID\workspace\Test\src\test.txt로 바꾸어 전달 합니다.

정리하자면, 첫 번째 파일 객체는 C:\Users\UserID\Desktop\test.txt 경로에,

두 번째 파일 객체는 C:\Users\UserID\workspace\Test\src\test.txt 경로를 참조하는 것입니다.

결론적으로

요약하자면, 절대 경로최상위 디렉토리가 반드시 포함 된 경로를 의미하며 상대 경로현재 디렉토리(비교 대상)를 기준으로 작성된 경로를 의미합니다.

설명한 개념을 적용해서 프로그래밍을 한다면, 경로 처리는 완벽하게 할 수 있을거라 생각합니다.

오늘 포스팅은 여기까지 입니다.

읽어주셔서 감사합니다.


'용어정리 > 프로그래밍용어' 카테고리의 다른 글

형상관리의 개념과 이유  (0) 2017.11.01
비즈니스 로직(Business Logic)이란?  (15) 2017.05.24
DTO와 VO란?  (2) 2017.02.08
GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘 포스팅은 형상관리의 개념과 이유에 관해 간략하게 설명해볼까 합니다.

형상관리의 기본적인 것을 알아봅시다.



프로그래밍 패러다임


    오래전부터, 프로그래머에게 사랑을 받고 있는 프로그래밍 패러다임은 단연 객체지향 프로그래밍 이라 할 수 있습니다. 

객체지향 프로그래밍은 항상 절차지향 프로그래밍과 상반적으로 설명되곤 합니다. 

하지만, 이는 조금 잘못된 오해이며, 사실상 객체지향 프로그래밍은 상호 관계는 상반적이 아니라, 상보적 관계입니다. 

프로그램은 절차적으로 수행되는 집합체이며, 이는 객체지향도 마찬가지 입니다. 

다만, 객체지향은 절차적인 부분을 객체에게 맡깁니다. 

프로그래머는 잘 만든 객체를 요구사항에 맞게 알맞게 조합하여 하나의 프로그램을 만드는 것입니다. 

또한 객체지향 패러다임은 프로그래머로 하여금 유지보수를 쉽게 해줍니다. 

현재 패러다임에서의 핵심은 객체, 작게 말해서 클래스를 잘 작성하는 것이라 할 수 있습니다.



클래스를 잘 작성하는 방법


    클래스를 잘 작성하는 방법은 프로그래밍 패러다임에 맞는 개념과 방법론이 잘 적용이 되어야 합니다. 

또한, 유지보수가 쉽게 될 수 있도록 코드를 작성을 해야 합니다. 

유지보수는 코드 뿐만 아니라, 컴퓨터공학적 이론, 요구사항 등이 반영 됩니다. 

그렇다면, 유지보수를 위해서는 클래스를 잘 작성해야 할 뿐만 아니라, 잘 관리를 해야 합니다. 

인간이 어떤 무언가를 관리하기 위해, 오래전부터 사용하는 방법은 '기록' 입니다. 

변경사항을 하나 하나 기억할 수 없으므로, '기록'을 함으로서, 인간은 어떤 무언가를 효과적으로 관리를 해왔습니다.

클래스의 관리도 '기록'의 관점에서 접근 할 것입니다.



어떻게 기록 할까?


    클래스를 기록하는 것은 단순히 코드를 복사한 후 외부 파일로 저장하는 것이 아닙니다.

코드 뿐만 아니라 그 코드에 반영된 컴퓨터 공학적 이론, 기술, 사용자 요구사항 등 많은 요소들이 기록이 되어야 합니다.

또한, 소프트웨어 특성상 '개발환경' 까지 보존 해 줄 수 있어야 합니다.

이러한 것들을 반영한 것을 문서로 기록을 해야합니다.

하지만, 이렇게 작성할 시 문서들은 점점 많아지고, 그로인해 찾아서 읽기가 여간 만만하지 않습니다.

또한 찾더라도, 문서로만 읽은 '개발환경'은 사실상 적용하기가 불가능 합니다.

결국 문서를 넘어서, 프로젝트 그 자체를 기록할 수 있어야 합니다. 즉, '형상관리'를 해줄 수 있는 프로그램 필요해졌습니다.



Git의 등장


    Git이 등장하기 이전에는, 위에서 설명한 형상관리를 하기 위해 SVN을 썼었습니다.

Git이 등장 함에 따라, SVN 보다는 Git을 많이 쓰이는 추세로 바뀌었는데요. 

대표적으로 큰 변화중 하나는 저장방식 입니다. SVN은 중앙 집중 저장 방식인 반면, Git은 분산 저장 방식을 채택했습니다.

그로인하여, 좀더 효과적으로 형상관리를 할 수 있게 됬습니다. 

이러한 Git프로그램 덕분에, 프로그래머는 Git만 잘 사용한다면 프로젝트를 효과적으로 형상관리 할 수 있습니다.

또한, 협업 환경에서의 프로젝트에서도 효과적인 커뮤니티를 위해 반드시 다룰줄 알아야 합니다.  형상관리를 통해 소스코드를 서로 주고 받는 것이 아닌 메인 저장소에서 필요할 때마다 받을 수 있으며, 효과적인 버전 관리로 인해 생산성이 증대됩니다. 



어느곳에 저장할까?


    Git은 로컬저장소원격저장소 라는 2가지 개념의 저장소가 존재합니다. 로컬저장소는 본인의 컴퓨터나 원하는 곳에 만들 수 있습니다.

다만, 로컬저장소로써 기능을 하려면 Git을 이용해 원격저장소랑 연결을 해야합니다.  로컬저장소를 만들어 원격저장소에 remote연결을 하기도 하고, 원격저장소에서 clone하여 로컬저장소를 만들 기도 합니다. 

이때 원격 저장소는 여러가지가 있으며, 대표적으로는 GitHub, BitBucket등이 있습니다.



마치며


    이번 포스팅에서 말하고 싶었던 바는, 형상관리는 단순히 프로젝트를 백업하기 위한 용도로 사용하는것이 아닌, 효과적인 개발을 위해 필수적으로 사용되어야 한다는 점입니다. 저 포함하여 Git을 쓰는 많은 초보 개발자들은, 단순히 '저장'용도로 사용하고 있습니다. 이러한 저장 용도 보다는 클래스를 설계했을시, 또는 개념을 추가했을시 그러한 것들을 잘 반영하고, 기록하기 위해 형상관리를 활용해보는 것을 추천합니다.


'용어정리 > 프로그래밍용어' 카테고리의 다른 글

절대경로, 상대경로란?  (7) 2018.12.06
비즈니스 로직(Business Logic)이란?  (15) 2017.05.24
DTO와 VO란?  (2) 2017.02.08
GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

안녕하세요. Mommoo 입니다.


프로그래밍에 관한 일을 하다보면 많이 듣는 용어중 하나 인,

비즈니스 로직(Business Logic)에 대하여 포스팅 합니다.




영역 구분하기



홈페이지 회원가입으로 예를 들어봅시다.


유저는 회원가입 양식 폼에 회원정보를 작성하고, 회원가입 버튼을 누르면 회원가입이 진행됩니다. 


이 과정 중 아이디 중복 검사, 본인 인증, 비밀번호 재 검사 등 유저가 통과해야 할 것이 많습니다. 


유저는 단순한 버튼 클릭으로 아이디 중복인지 아닌지,


본인의 인증이 올바른지, 비밀번호 가 올바른지 등등을  홈페이지의 글이나, 다이얼로그로 확인합니다.


유저 입장에선 아무렇지 않게 확인하고 있는 것 들이지만, 


프로그래머는 위에 일련의 인증할 것들을 구현하기 위해서는 생각보다 많은 수고를 들입니다.

프로그래머 입장에 서서, 영역을 나누어 보겠습니다.


위의 아이디 중복 검사를 예시로 들자면,

프로그래머는 유저가 입력한 아이디가 회원 중 아이디를 중복으로 쓰고 있는지 검사하기 위해


데이터베이스를 조사합니다. 데이터베이스를 조사 후, 중복 아이디가 없다면 유저에게 페이지 속 글


또는 다이얼로그로 아이디를 사용해도 된다는 표시를 해줍니다.


여기서 크게 2영역으로 나눌 수 있습니다. 


하나는 중복 아이디가 있는지 없는지를 검사하기위한 일련의 과정들 ( 1번째 영역 )


나머지는,  유저에게 단순히 텍스트나 다이얼로그로 알려주는 것이 있습니다. ( 2번째 영역 )


2번째 영역은 흔히, Presentation 영역 혹은 View 영역 이라고 많이 불리우는데,


가공된 데이터를 단순히 표시만 해주는 것입니다. (ex 아이디가 중복됬습니다 표시, 비밀번호 재 검사를 실패 했습니다. 등등)


그 데이터 가공을 담당하는것이 1번째 영역 흔히들 Logic 영역, Model 영역이라 불립니다.



비즈니스 로직이란?



위에서 소개한 영역 2가지 중, 첫번째 영역에서의 코딩을 흔히, 비지니스 로직이라 부릅니다.


위의 아이디 중복찾기를 다시 예시로 들자면, 아래와 같은 비지니스 로직이 작성될 것입니다.


회원이 작성한 아이디 값 저장하기 -> 회원정보가 있는 데이터베이스 연결 ->

데이터베이스에 회원이 작성한 아이디 값이 있는지 Select 
-> 


회원의 아이디가 이미 있는지 없는지 여부를 데이터화 하여 저장 -> 


데이터베이스 연결 끊기 -> View영역에게 가공된 데이터 전달


이러한 비지니스 로직은 유저 눈엔 보이진 않지만, 유저가 바라는 결과물을 올바르게 도출하기 위해 코드로 짜여집니다.


즉, 프로그래머는 유저가 원하는 행위를 컴퓨터에게 잘 전달하기 위해서는 비즈니즈 로직을 잘 구상해야 한다는 의미입니다.

이처럼, 비지니스 로직은 프로그래밍에서 빠질 수 없는 요소이며, 응용 프로그램의 핵심이 됩니다.




비지니스 로직은 유저가 바라는 결과물을 코드로 옮기므로 코드가 자주 변경되므로, 코드 품질도 매우 중요합니다.


비지니스 로직이 정리되지 않고 이곳 저곳 산재 배치되면,


프로그래머는 코드 관리에 어려움을 느끼고, 개발을 어렵게 하는 요인이 될 수 있는 것입니다.


그로 인하여 생산성, 품질등이 저하 됩니다.








비즈니스 로직은 정말 중요하지만, 유지보수 와 확장성을 고려한 코딩을 하기란 쉽지 않습니다.


프로그래머들은, 조금 이라도 더 비즈니스 로직을 잘 작성하기 위해 


프로그래밍 아키텍쳐를 공부를 해야하는 이유가 아닐까 합니다.

( 예를들어, 웹에서 주로 쓰이지만 대중적인 MVC, 안드로이드 에서 인기를 얻고 있는 MVP등등 ) 

'용어정리 > 프로그래밍용어' 카테고리의 다른 글

절대경로, 상대경로란?  (7) 2018.12.06
형상관리의 개념과 이유  (0) 2017.11.01
DTO와 VO란?  (2) 2017.02.08
GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘은 DTO에 관하여 포스팅 한다.


DTO는 Data Transfer Object의 약자로서,


VO ( Value Object )랑 혼용해서 쓴다.


보통은 DTO와 VO를 혼용해서 사용들 하지만,


필자는 용어를 정확히 구분해서 쓰는걸 중요하다고 생각한다.



DTO란?



풀 명칭에서 유츄 할 수 있드시, 데이터를 오브젝트로 변환하는 객체이다. 

중요한 것은 주체가 누구인가를 아는 것이 중요하다.

Data Transfer Object에서 Object는 우리가 만드는 DTO 클래스이다. PersonDTO를 예를들자면, 아래와 같다.




  위 클래스는 name, age 필드에 데이터를 쓰고/읽는 역할인 setter/getter가 존재한다.
여기서 중요한건 Property(프로퍼티) 개념이다. C#은 Property 개념을 문법으로써 제공해준다.
윗 클래스를 C#에서는 간단하게 public int Name{ set; get; } 과 같이 간단하게 표현 할 수 있다. 

C# 예시 에서의 Property는 Name이다.  하지만 자바에서 Property는 문법적으로 제공되지 않는다. 

자바에서, 프로퍼티라는 개념을 사용하기 위해 우리는 지켜야 할 약속이 있다. 

setter/getter에서 set과 get 이후에 나오는 단어(또는 단어들)가 property라고 약속한다.

따라서, 윗 클래스에서의 프로퍼티는 name과 age이다. 

중요한 점은 프로퍼티는 멤버변수 name,age로 결정되는 것이 아닌 getter/setter에서의 name과age임을 명심해야한다.

다른 말로 하자면 멤버변수의 변수명은 아무렇게나 지어도 영향이 없고 setter/getter로 프로퍼티를 표현 한다는 의미이다. 


  이러한 프로퍼티 개념을 왜 설명하냐면, DTO에 들어갈 데이터 셋팅 때문이다. 자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법을 사용한다. 데이터 자동화 처리에서 제일 중요한것은 표준규격이다. 예를 들어, 윗 클래스 DTO에서 property가 name,age면 name, age의 키값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있다. 중요한 것은, 우리가 setter를 요청하는 것 이 아닌, 프레임워크단(우리눈에 안보이는)에서 setter가 실행된다는 점이다. 그로 인하여, Layer간(쉽게 한가지 예를 들자면, 서버 코딩 -> view 코딩)에 데이터를 넘길때는 DTO를 쓰면 편하다는 것이다.  데이터가 자동적으로 클래스화가 된다는 것이다. 한가지 더 예를 들자면,

form 에서 name 필드 값을 프로퍼티에 맞춰서 값을 다른 페이지로 넘겼을 시 , 값을 받아야할 페이지에서는 값을 하나씩 일일이 받는 것이 아니라 name속성의 이름이랑 매칭되는 프로퍼티에 자동적으로 DTO가 인스턴스화 되어 PersonDTO를 자료형으로 값을 받을 수 있다는 것이다. 결론적으로, key & value로 존재하는 데이터는 자동화 처리된 DTO로 변환되여 우리는 손 쉽게 데이터가 셋팅된 오브젝트를 받을 수 있다. 우리가 흔히 마주치는 JSP에서 JavaBeans 또한 표준규격 DTO며, json 조차도 프로퍼티 규격만 잘 지킨다면, 얼마든지 편하게 DTO로 받을 수 있다.



VO란?



DTO와 마찬가지로 풀 명칭에서 유추 할 수 있드시, 값 오브젝트이다. 값 오브젝트는 말 그대로 값을 위해 쓰는것이다. 

자바는 값 타입을 표현하기 위해 불변 클래스를 만들어 사용한다. 

불변 클래스라 하면, readOnly 특징을 가진다. 예를 들자면 String,Integer,Color 클래스등이 있다. 

이러한 클래스는 중간에 값을 바꿀 수 없고 새로 만들어야 한다. 

Color 클래스를 예로 들어 설명 해보자면, Red를 표현 하기 위해서는 Color.RED등 과 같이 값을 표현하기 위해 getter 기능만이 존재한다.


왜 DTO랑 VO랑 혼용해서 사용할까?



필자의 주관적인 생각이지만, 관용적으로 잘못 쓰이는 표현이지 않나 싶다. 

DTO도 VO도 결론적으로는, 직접 데이터를 넣어주기 보다는 넣어진 데이터를 getter를 통해 사용하므로 주 목적은 같다. 하지만 앞서 설명했드시, DTO는 불변 클래스 성격과는 거리가 멀다. 또한, DTO는 인스턴스 개념이고 VO는 리터럴 값 개념이다. (엄연히 말해서 리터럴을 흉내 낸것이지만)

'용어정리 > 프로그래밍용어' 카테고리의 다른 글

형상관리의 개념과 이유  (0) 2017.11.01
비즈니스 로직(Business Logic)이란?  (15) 2017.05.24
GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20
URL 이란?  (2) 2016.06.14

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘 포스팅 할 내용은, 


Http 프로토콜이 제공해주는 7가지 메서드들 중


웹서비스 개발에 주로 사용하는,

GET 메서드와 POST 메서드에 대하여 기술한다.




GET메서드 POST메서드 란?



  위에서 말했다시피, 웹 서비스 개발에 주로 사용하는 메서드 이다.


사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면


원하는 웹페이지가 나온다. 사용자는 웹페이지를 보기위해 단순한 일을 한 것 이지만,

특정 웹페이지를 사용자 웹브라우저에게 보여주기 위해서는 내부적인 처리들이 있다.


그 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것을


우리는 요청 이라 부르고, 서버가 클라이언트에게 요청받은 것에 대한 대답으로, 웹페이지


내용을 표현하기 위해 html문서로 주는것을 응답 이라 부른다. 




HTTP 패킷



  클라이언트가 서버로 요청을 했을때, 보내는 데이터를 HTTP 패킷이라 표현한다. 


HTTP 프로토콜을 쓰므로, 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라 표현하므로,


HTTP패킷 이라 부른다. HTTP패킷의 구조는 크게 헤더 바디로 나뉘어진다.



  헤더에는 7가지 HTTP 메서드 방식중 무엇을 썻는지, 클라이언트의 정보, 브라우저 정보,


접속할 URL 등등 과 같은 클라이언트 정보를 담는다. 

  

바디는 보통 비어있다. 하지만, 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다.


이러한 웹 개념아래, 우리는 GET메서드와 POST메서드를 통해서 요청을 할 수 있다.




GET방식 vs POST방식


  

  두 방식 모두, 서버에 요청을 하는 메서드이다.


클라이언트가 서버에 요청을 할때, 제공해야 하는 자원이 있다고 하자. 


예를 들면, 어떤 홈페이지의 로그인 페이지에서 로그인을 하는 경우이다.


아이디 와 패스워드는 클라이언트가 작성한 후, 그 정보를 서버에 요청하여


클라이언트가 작성한 아이디와 패스워드가 올바른 것인지 검사를 해야한다.


위의 예시를 보듯, 요청에는 자원을 보내야 하는경우가 존재한다.


  • GET방식으로 데이터를 보내기

클라이언트의 데이터를 URL뒤에 붙여서 보낸다. 위에서 쓴 예시처럼 아이디 패스워드를 보낸다고 하면,


www.example.com?id=mommoo&pass=1234 (예시로 쓴 URL입니다. 존재하지 않습니다.)


이런식으로 보낸다. URL 뒤에 "?" 마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다.


데이터는 key 와 value 쌍으로 넣어야 한다 윗 예시에서의 key는 id 랑 pass고 value는 mommoo랑 1234가 되겠다.

중간에 &마크는 구분자 이다. 2개이상의 key - value 쌍 데이터를 보낼때는 &마크로 구분해준다.


URL에 붙이므로, HTTP패킷의 해더에 포함되여 서버에 요청한다.


따라서, GET 방식에서 BODY에 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내진다.


그러므로, 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다.


URL형태로 표현되므로, 특정 페이지를 다른사람 에게 접속하게 할 수 있다. 


또한 간단한 데이터를 넣도록 설계되어, 데이터를 보내는 양의 한계가 있다.


  • POST방식으로 데이터를 보내기

POST 방식은 GET 방식과 달리, 데이터 전송을 기반으로 한 요청 메서드이다.


GET방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 URL에 붙여서 보내지 않고


BODY에다가 데이터를 넣어서 보낸다.  


따라서, 헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가


들어가고 어떤 데이터 타입인지 명시한다.


컨텐츠 타입으로는 여러가지가 있지만, 몇가지를 적자면,


  1. application/x-www-form-urlencoded
  2. text/plain
  3. multipart/form-data

등이 있다.

따라서 POST 방식으로 데이터를 보낼때는 위와 같이 컨텐츠 타입을 꼭 명시해줘야한다.

보통 작성하지 않는 경우는 1번의 컨텐츠 타입으로 셋팅된다.

1번의 컨텐츠 타입은, GET방식과 마찬가지로 BODY에 key 와 value 쌍으로 데이터를 넣는다. 똑같이 구분자 &를 쓴다.

2번의 컨텐츠 타입은, BODY에 단순 txt를 넣는다.

3번의 컨텐츠 타입은, 파일전송을 할때 많이 쓰는데 BODY의 데이터를 바이너리 데이터로 넣는다는걸 알려준다.

자바와 같이 oop 프로그래밍에서는 BODY에 데이터를 InputStream/OutputStream 클래스를 통해서 읽고/쓰고 한다.


GET방식 과 POST방식에 대한 상식
  • POST방식이 GET방식보다 보안측면에서 더 좋다?
   POST든 GET이든 보내는 데이터는 전부 클라이언트측에서 볼 수 있다. 단지 GET방식은 URL에 데이터가 표시되여 별다른 
   
   노력없이 볼 수 있어서지, 두 방식 전부 보안을 생각한다면 암호화 해야한다.

  • GET방식이 POST방식보다 속도가 빠르다?
    빠른건 맞다. 하지만 왜 빠른지를 알아야 하는데, 이유는 GET방식의 요청은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해
    
    데이터를 저장시켜 놓는다)때문에 빠른것이다.
   




'용어정리 > 프로그래밍용어' 카테고리의 다른 글

비즈니스 로직(Business Logic)이란?  (15) 2017.05.24
DTO와 VO란?  (2) 2017.02.08
컴포넌트(Component)란?  (8) 2016.10.20
URL 이란?  (2) 2016.06.14
URI 이란?  (0) 2016.06.13

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

컴포넌트(Component)개념의 등장배경 과 의미에 대해 기술한다.


컴포넌트 개념의 유래

 

  많은 하드웨어 제품들은 각각 독립된 기능을 가진 모듈로 만들어진다.

이 제품들은 회사 상관없이 서로 조합하여 하나의 제품이 만들어진다.

이러한 제품들의 부품은 문제가 발생했을 시,

해당 부품만 다른 부품으로 바꾸어도 제품은 문제없이 작동한다.

컴퓨터와 스마트폰과 같은 제품들을 상상해보면 금방 이해가 갈것이다.


 반면에, 소프트웨에 에서는 상황이 틀리다.

소프트웨어를 독립적으로 개발되지 않은 경우가 많을 뿐더러, 독립적으로 개발되어도

다른 모듈과의 호환을 생각하지 않고 개발한다. 

이는 결국 소프트웨어의 재사용을 어렵게 하고 유지보수 비용이 크게 증가하는 원인이 된다.

이러한 상황에서 소프트웨어의 재사용의 중요성 과 필용성을 위해 나온 기술이 컴포넌트 기술이다.


컴포넌트는 독립적인 단위모듈이다.

 

  하드웨어처럼 독립적인 기능을 수행하고 추후에 교환될 수 있도록 해야한다.

또한 컴포넌트의 세부사항은 겉으로 드러나선 안되는것 이며, 일부러 끄집어 내려는 시도조차

하지 말아야 한다. 필요한것은 단지 해당 컴포넌트를 쓰기 위해 제공해주는 일종의 '장치'가 필요하다.

예를들어서, 스마트폰의 밧데리 수명이 다했을 경우 밧데리를 새로 구입하여,

스마트폰에서 밧데리만 교체했을 것이다. 이때 스마트폰 단자와 밧데리 단자가 맞물려야 제 기능을

발휘하는데 이때 밧데리 단자가 앞서 말했던 일종의 '장치'가 된다.


컴포넌트 개념을 객체지향 언어에 대입

 

  스마트폰과 밧데리가 각각 독립적으로 문제없이 돌아간다고 가정할때, 상호간의 단자만 규격에 맞을시, 

어떠한 밧데리를 교환하더라도 스마트폰은 정상 작동할 것이다.

이와 같이 소프트웨어 에서도 단자와 같은 일종의 장치가 필요하다. 객체지향 언어에서는 이러한 장치를

인터페이스(interface)로 제공해준다. 인터페이스는 사용자에게 해당 소프트웨어를 쓰기위한 

메서드(=장치)를 공개하고, 규격화된 메서드 환경에서 소프트웨어를 개발할 수 있는 환경을 제공해준다.

소프트웨어의 세부내용은 인터페이스를 구현받은 클래스가 작성한다.

이렇게 함으로써 객체지향 개념은 정보은닉개념을 수행할 수 있을 뿐더러,

각각 독립된 모듈로 소프트웨어를 만들수 있도록 크게 이바지 할 수 있다.



결론적으로, 컴포넌트는 각각 독립된 모듈을 뜻하며, 이는 흔히 JAVA같은 oop 언어등의 class등의

개념과는 다르다. 하나의 컴포넌트는 하나의 클래스로만 작성될 수 도 있지만, 여러개의 클래스로도

작성될 수 있기 때문이다. 컴포넌트 개념을 잘 적용한 소프트웨어란 부품(인터페이스를 구현받은 클래스)

만 바꾸어 주었을시, 오류 없이 잘 작동 되는것 을 의미한다.


'용어정리 > 프로그래밍용어' 카테고리의 다른 글

DTO와 VO란?  (2) 2017.02.08
GET방식 과 POST방식  (32) 2016.12.10
URL 이란?  (2) 2016.06.14
URI 이란?  (0) 2016.06.13
List와 Map의 차이 (2)  (0) 2016.04.27

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

먼저 URL 의 약자를 풀어보면 아래와 같다.


Uniform Resource Locator


균일화 된 자원 위치 정도로 해석할 수 있겠다.


무슨 의미일까?


URI 랑 비슷하지만, URI랑은 확실한 차이점이 존재한다.


(URI - http://mommoo.tistory.com/42 )


URL은 인터넷에 접속할 때, 네트워크 상에서 해당 자원이 어디 있는지를


알려주는 문자열 이다.


예를 들면, mommoo.tistory.com/preview.php 같은 주소 문자열은 URI 일까 URL일까?


답은 둘다 맞다. 왜냐하면 윗 문자열로 특정한 웹사이트로 이동 되므로 URI다.


또한 mommoo.tistory.com 안에 있는 preview.php 라는 파일을 여는 것이므로 파일위치를 알려주는


URL도 맞는 말이다. 그렇다면 URI 이지만 URL은 아닐 경우는 무엇일까?


아래와 같은 상황이다.


mommoo.tistory.com/users?id=mommoo


이러한 주소 문자열은 특정 웹사이트로 이동 되므로 URI이다.


하지만 get방식으로 id값을 원하는 값으로 셋팅해 웹사이트를 접근 하므로,


파일 위치라 볼 순 없다 따라서, URL은 아닌 것이다.


이렇듯 비슷한 개념이지만, 확실한 차이점이 있다





 


'용어정리 > 프로그래밍용어' 카테고리의 다른 글

GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20
URI 이란?  (0) 2016.06.13
List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

먼저 약자를 살펴보면 아래와 같다.


Uniform Resource Identifier


영어 단어로만 해석 해보면, 


균일하된 자원 식별자 정도로 해석할 수 있겠다.


식별자라 하는 것은 구별되는 것이다.


즉, 인터넷에서 구별되어야 하는곳은 주소창이고


그러한 구분된 식별자를 통해 인터넷 사용자는 원하는 곳으로


접속 할 수 있는 것이다.


바꿔 말하면, 특정 사이트를 접속하기 위해 인터넷 주소창에 적는 문자열은


전부 URI라 표현할 수 있는 것이다.



'용어정리 > 프로그래밍용어' 카테고리의 다른 글

컴포넌트(Component)란?  (8) 2016.10.20
URL 이란?  (2) 2016.06.14
List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts