직렬화 객체를 전송가능한 형태로 말아주는걸 의미 (java object to json)

역직렬화 그 데이터들을 다시 자바 객체로 변환해주는 걸 의미 (json to java object)

 

java object to json

ObjectMapper mapper = new ObjectMapper();

String json = mapper.writeValueAsString(data); // java Object -> String
jsonNode = mapper.readTree(json); // String -> jsonNode

 

json to java object

JsonResponse response = doPost(request);
JsonNode getResData = response.getResponseBodyAsJson();

ObjectMapper mapper = new ObjectMapper();

String jsonString = mapper.writeValueAsString(data); // json -> String
postCjmallQnaList = mapper.readValue(jsonString,class); // String -> java Object

 

Dependencies jackson-databind

maven

더보기

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.11.0</version>

</dependency>

gradle

더보기

mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.0'

 

참고 블로그

 -. pjh3749.tistory.com/281

 -. soulduse.tistory.com/22

문제 링크

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

그리디(Greedy)

package eun;

// 알파벳은 모두 더하고,
// 이동경로의 최소를 찾는 문제

public class Solution {
	static public int solution(String name) {
        int answer = 0;
        
        int len = name.length();
        
        //최대로 가질 수 있는 min값은 끝까지 가는것
        int min_move = len-1;
        
        for(int i=0; i<len; i++) {
        	answer += Math.min(name.charAt(i)-'A', 'Z'-name.charAt(i)+1);
        	
        	//BEAABA
            //012345
        	
        	//좌우: 연속된 A의 등장에 따라 최소 움직임이 달라진다
        	int next = i+1;// 현재 다음 위치부터
        	//내 다음이 A라면 계속 NEXT++
        	while(next<len && name.charAt(next) == 'A')
        		next++;
        	
        	min_move = Math.min(min_move, i+len-next + i);
        }//for
        
        answer += min_move;
        
        return answer;
    }
	
    
	public static void main(String[] args) {
		System.out.println(solution("BEAABA"));
	}
}

'Algorithm > solution' 카테고리의 다른 글

[프로그래머스 #level3] 네트워크.java  (0) 2021.03.16
[HASH] 완주하지 못한 선수  (0) 2019.11.02
#2178. 미로탐색  (0) 2018.12.24
#14503. 로봇 청소기  (1) 2018.01.22
#14891. 톱니바퀴  (0) 2018.01.17

TCP(Transmission Control Protocol)

간단하게 말하면 데이터 전달 규칙!

ex) A라는 데이터를 보낸다면,
 A-1, A-2, ..., A-10 이런식으로 잘게 나누어 데이터를 전송한다.
잘게 나누어진 것들이 패킷!

데이터를 패킷으로 나누는 기준이 MTU(Maximum Trasmission Unit)
MTU란 패킷의 최대 크기를 나타내는 수치.

-. MTU값이 작으면 패킷수가 많아진다

                   => 패킷이 가지고 있는 공통 header들을 처리하는 양이 늘어나므로 overhead가 늘어나는 문제 발생.
-. MTU값이 크면 패킷수가 줄어들기 때문에 한번에 많은 데이터를 보낼수 있으므로 대량의 데이터를 처리할 때 이점이 있다. 

                   => 하지만 패킷이 훼손되어 오는 경우에는 다시 큰 패킷을 요청해야하는데, 패킷이 큰 만큼 오는데 오랜                         시간이 걸리게 된다.

패킷은 하나의 루트로만 전송되지 않는다. 여러 루트를 통해서 전송이 가능한데 여러 루트마다 도착시간이 달라서 순서가 보장되지 않는다.
데이터를 받는쪽은 A-2,A-10,…, A-1 데이터를 순서에 맞게 A-1,A-2,…,A-10으로 재조립 한다. 순서에맞게 재조립이 가능한 이유는, TCP 방식으로 데이터 전송시 Header가 붙게되는데 Header에 순서에 관한 정보(Sequence Number)가 있기 때문이다.

 

[참고] TCP 헤더


TCP헤더 구조를 보면
Source Port는 송신측의 port 번호를 나타낸다.
Destination Port는 수신측의 port번호를 나타낸다.
CheckSum은 패킷의 훼손여부를 체크하는 역할을 한다.
SYN은 통신을 하는 양측의 Sequence Number를 동기화 하기위해 사용된다.
ACK는 데이터를 잘 받았다는 응답을 전달하기 위해 사용되며 Sequence Number에 + 1을 붙이는 방법을 이용한다.

 

IP(Internet Protocol)

인터넷상에서 사용되는 주소

'자기계발 일지' 카테고리의 다른 글

HTTP/HTTPS 란?  (0) 2021.02.22

+ Recent posts