[Spring] 01. 기본 개념
실습하며 직접 코드를 작성하는 것도 좋지만 개념을 알고 쓰다보면 더 폭넓게 응용하고 이해할 수 있지 않을까요
그래서 이번 글에서 조금 간단하게나마 필요한 개념들을 몇 가지 알아보고 진행해보도록 하겠습니다
1. Spring이라는 프레임워크
Spring은 Java의 기술들을 훨씬 더 쉽게 사용할 수 있도록 해주는 오픈소스 프레임워크 입니다
여기서 프레임워크(Framework)는 자주 사용되는 기능들을 모아놓은 뼈대 또는 틀이라고 보시면 됩니다
Math
나 Queue
같은 어떤 클래스를 사용하기 위해 불러오는 라이브러리(Library)와는 차이가 있습니다
- 개발자는 프레임워크를 사용하기 위해 정해진 규칙들을 따라야 합니다
- 라이브러리는 개발자가 만든 클래스로, 흐름 제어의 주도성을 개발자가 가지고 있습니다
잘 모를 때에는 대충 프레임워크는 개발 틀, 라이브러리는 메소드를 가져와 쓰는 것 정도?로 그쳤었는데..
앞서 언급했던 것처럼 프레임워크와 라이브러리의 차이는 전체적인 흐름을 누가 쥐고 있는 것인지 알면 되겠습니다
그러면 Spring은 어떤 것을 만들기 위한 뼈대가 되는 것인지?
-> Web Application을 만드는게 주 목적입니다
2. 네트워크에 대한 기본 지식
IP(Internet Protocol)는 인터넷 네트워크에서 어떤 정보를 수신 또는 송신하는 통신에 대한 규약을 의미합니다
마인크래프트에서 다른 사람과 멀티를 할 때 서버장의 주소를 입력하기도 하죠 (렐름 제외)
www
어쩌구저쩌구 일 수도 있고 아니면 192.168.?.? 어렇게 될 수도 있구요
아니면 공유기를 설정할 때라던가…
아무튼, 전화할 때에는 전화번호가 필요하듯이 인터넷을 사용할 때에는 IP 주소를 가지고 있어야 합니다
2-1. DNS
요약 : DNS (Domain Name System)은 IP와 도메인 이름을 서로 변환하는 역할을 수행
저희가 네이버나 구글, 깃허브 등에 연결할 때 “https://www. … .com”같은걸 작성하죠
이상하게 162.186.2.12 같이 숫자로 이루어진 IP 주소로 연결하진 않습니다
이렇게 어떤 이름으로 해당 사이트에 접속할 수 있게 DNS를 사용하게 됩니다
마치 localhost를 입력하면 127.0.0.1로 이동하는 것 같은 느낌입니다
2-2. URI, URL
URI : Unifrom(Resource를 식별하는 통일된 방식) Resource(페이지, 이미지 등과 같은 자원) Identifier(식별자)
URL : Uniform Resource Locator
URL은 URI의 한 종류이기도 한데 (단, 모든 URI가 URL은 아님)
URI는 Identifier, URL은 Locator로 각각 식별하거나 위치를 가르키는 차이점이 있습니다
“github.com/twotechside”가 URI이라면 “https://github.com/twotechside”는 URL이 됩니다
URL에는 https://
가 붙으면서 접근 방법이 명시되어 있다는 차이점이 있습니다
3. 용어 모음집
변수명을 짓는건 늘 고민이 되면서 어렵습니다
snake_case : 문자와 문자 사이를
_
언더바로 이어줍니다
보통 Python, DB Table, Column에 사용됩니다camelCase : 첫 글자는 소문자로 시작하며, 문자와 문자 사이를 대문자로 이어줍니다
Java에서는 변수, 함수, 메서드 이름을 만들 떄 사용합니다PascalCase : camelCase와는 첫 글자가 대문자로 시작하는 차이점이 있습니다
대부분의 클래스 이름은 파스칼 케이스가 사용됩니다kebab-case : 문자와 문자 사이를
-
대시로 이어줍니다
종류 | 설명 | 예시 |
---|---|---|
project | 대/소문자 구분없이 시작 | MyProject |
package | 소문자 시작 | com.twotechside.blog |
class | 대문자 시작, 명사 사용, PascalCase | class Person; |
interface | 대문자 시작, 형용사 사용, PascalCase | interface Runnable; |
method | 소문자 시작, 동사 사용, camelCase | add(); move(); |
variable | 소문자로 시작, camelCase | String inputNumber; |
constant | 대문자로 시작, 문자와 문자 사이 언더바(_ )로 구분 | static final int MAX_COUNT = 999; |
3-1. JSON
JSON : JavaScript Object Notation
클라이언트
와 서버
가 통신하며 데이터를 주고받을 때 ‘JSON’이라는 데이터 양식에 따르고 있습니다
마치 전세계 공통어로 영어를 사용하듯이 Web에서는 JSON을 공통어로 사용하는 느낌입니다
- JSON 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"user": [
{
"first_name": "wonuk",
"last_name": "Hwang",
"age": 100,
"phone_agree": false,
"hobby": ["Java", "Spring"]
},
{
"firstName": "sparta",
"lastName": "Team",
"age": 200,
"phone_agree": true,
"hobby": ["React", "Spring", "Node"]
},
]
}
snake_case
,camelCase
모두 사용할 수 있습니다key - value
형태로 구성되어 있습니다null, number, string, array, object, boolean
형태의 데이터를 사용할 수 있습니다
4. HTTP
HTTP : HyperText Transfer Protocol
방금 알아낸 JSON이나 HTML, 파일 등은 HTTP를 통해 전송됩니다
‘클라이언트 -> 서버’로 request
를 보내고 다시 ‘서버 -> 클라이언트’로 response
를 받는거죠
- HTTP의 특징
클라이언트와 서버 구조
클라이언트는 UI, 서버는 데이터와 비지니스 로직을 담당하여 독립적으로 발전할 수 있게 되었습니다무상태 (Stateless)
서버는 클라이언트의 상태를 보존하지 않습니다비연결 (Connectionless) HTTP는 연결을 유지하지 않는 모델입니다
클라이언트-서버 구조의 특징때문에 프론트엔드와 백엔드가 나누어진게 아닐까요, 저의 주관적인 생각입니다
4-1. HTTP의 Status Code
어느 사이트로 접속하다가 404 Error가 뜨면서 접속이 안되는 경우를 한 번 이상은 겪어보셨을 것입니다
여기에 나오는 숫자 ‘404’는 HTTP 요청에 어떤 상태로 응답이 돌아온 것인지 알 수 있습니다
- 1xx : 정보
- 요청 수신 후 처리중인 상태, 잘 사용하지 않음
- 2xx : 성공
- 200 : OK (요청 성공)
- 201 : Created (새로운 리소스 생성)
- 202 : Accepted (요청은 성공했으나 처리X)
- 204 : No Content (요청은 성공했으나 응답 데이터X)
- 3xx : 리다이렉션
- 요청을 완료하려면 추가 행동이 필요한 상태입니다
- 3xx 응답 + Location HTTP Header가 있으면 Location 위치로 리다이렉트
- 4xx : 클라이언트 에러
- 400 : Bad Request (예를 들어 GET 메서드에 POST로 요청하는 경우)
- 401 : Unauthorized (인증 필요)
- 403 : Forbidden (승인 거부)
- 404 : Not Found (리소스가 서버에 없음)
- 5xx : 서버 에러
- 요청은 정상이지만 예를 들어 서버가 일정시간 다운되었다가 살아난 경우처럼 서버가 처리하지 못하는 경우
- 대부분 500으로 처리