Backend/Java

· Backend/Java
클라이언트에게서 데이터를 전달받아 서버에서 처리하기 위해서는 주로 json 형태의 데이터를 전달받고는 한다. 이 때 Jackson 패키지의 ObjectMapper를 사용해 받아온 문자열 형태의 json 데이터 또는 @RequestBody로 받아온 Map 타입의 데이터를 자용자 정의 타입으로 변환할 수 있다. 먼저, ObjectMapper를 사용할 때에는 ObjectMapper 객체를 생성하여 사용할 수 있다. ObjectMapper objectMapper = new ObjectMapper(); 1. json 문자열에서 특정 타입(Class)로 변환하는 경우 - readValue(String jsonStr, classType) T parsingData = objectMapper.readValue(jsonS..
· Backend/Java
UDP 통신을 위해 필요한 Class ◆ DatagramSocket(접속 설정 필요없이 사용) ◆ DatagramPacket : 이를 통해 데이터를 주고 받음(데이터를 보낼 때는 ip, port 필요, 데이터를 받을 때는 buffer만 필요) 데이터 전송 시 BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); while ((buff = bufReader.readLine()) != null) { str += buff; } byte[] buffer = str.getBytes(); DatagramSocket ds = new DatagramSocket(); InetAddress ip = InetAddress.getByN..
· Backend/Java
아래에 총 세개의 클래스를 생성하는데, 실제로 스레드를 구동시킬 main 메서드를 포함한 public 클래스 SynchronizedEx와 값이 변경되도록 하는 ShareObj 클래스, 스레드인 AddThread 클래스가 그것이다. 스레드가 thread 하나일때는 순차적으로 1, 2, 3, 4, ..., 10이 출력되는 것을 볼 수 있다. 그러나 thread2(또 다른 하나의 스레드)를 생성해 실행시켜보면, 두 스레드가 해당 자원을 점유하기 위해 경쟁하는 것을 볼 수 있다. 이 때, 하나의 스레드만 자원을 점유할 수 있도록 하는 키워드인 synchronized를 사용하면, 하나의 스레드의 작업이 모두 끝난 뒤 다른 스레드의 작업이 이루어지는 것을 볼 수 있다. 동기화란 한 번에 하나의 자원에 하나의 스레드..
· Backend/Java
1:1 채팅 프로그램을 구현해보았다. 서버 측 코드가 서버 소켓을 두고, 클라이언트가 연결될 때마다 소켓을 생성해주는 역할을 한다는 점과 클라이언트 측 코드가 ip, port를 기반으로 소켓을 생성(연결 시도)한다는 점이 다르다. 그 외의 실제 데이터를 주고 받는 코드는 양 측 코드가 매우 흡사하다. Source Code 서버 측 public class ChattingServer implements Runnable { Socket sk; public ChattingServer() { System.out.println("Server Start"); try { ServerSocket ssk = new ServerSocket(6060); sk = ssk.accept(); System.out.println("C..
· Backend/Java
이번 차수에서는 소켓의 스트림을 통해 데이터를 전송하는 것에 대해서 다루었다. 데이터 전송 눈여겨 보아야 할 부분은 ServerSocket이 클라이언트 측과 연결되면 생성되는 소켓(Socket Class)에서 제공되는 OutputStream을 통해 데이터를 보낸다는 것이다. 이를 클라이언트 측에서는 소켓(서버 측에서 생성되는 소켓과 동일한 Class)에서 제공되는 InputStream을 통해 데이터를 받을 수 있다. ※ Java의 Socket을 이용한 네트워크 통신에 대해 알고 싶어 이 부분에 대해서 공부하기 시작하면서 추가적으로 Stream에 대한 공부가 이어져야 할 것 같다... Stream에 대한 이해도가 낮은 것을 많이 느낀다. ※ 서버 측에서 DataOutputStream을 Filter Stre..
· Backend/Java
서버 측 소켓 생성(ServerSocket) public class DemoServer { public static void main(String[] args) throws IOException { int port = 5050; // 서버 소켓(리스너 역할 뿐) 생성 ServerSocket ssk = new ServerSocket(port); // 소켓과 연결할 포트 번호를 인자로 지님 System.out.println("접속 대기중"); Socket socket = ssk.accept(); // Client와 연결되면 새로운 소켓 생성(accept) if (socket.isConnected()) { } } } 클라이언트 측 소켓 생성 public class DemoClient { public stati..
· Backend/Java
public static void main(String[] args) throws Exception { String str = "https://skbp.learningmate.co.kr/usrs/lms/classrm/classrmPrgrsItm.do"; // File까지 있는 URL을 부여 URL url = new URL(str); URLConnection conn = url.openConnection(); int size = conn.getContentLength(); // 가끔 불러오지 못하는 경우 존재 String fileType = conn.getContentType(); long time = conn.getDate(); // 1970.01.01 00:00부터 시작되어 천분의 일초로 계산된 값 S..
· Backend/Java
웹 페이지의 URL에 접속해 그 내용을 출력하는 실습 중 컴파일 오류가 발생했다. 오류가 발생한 부분에는 한글이 입력되어 있는데, 해당 부분을 빼도 다른 한글이 들어간 부분에서 오류가 발생하길 반복했다. 이를 해결하기 위해 구글링한 결과 javac -encoding UTF8을 사용하면 UTF8로 인코딩 가능하단 것을 찾게 되었다. javac [package/className.java] -encoding UTF8
· Backend/Java
java.net.URL 클래스 package Networking; import java.net.URL; public class URLEx1 { public static void main(String[] args) throws Exception { URL url = new URL(args[0]); System.out.println("Protocol : " + url.getProtocol()); System.out.println("Host : " + url.getHost()); System.out.println("Port : " + url.getPort()); System.out.println("File : " + url.getFile()); } } getProtocol() 프로토콜 조회 getHost() ..
· Backend/Java
항상 Intellij로만 프로젝트를 수행하다가 자바 네트워크 강의를 듣기 시작한 후로 실습 중에 CLI를 통해 Java 파일을 컴파일하고 호출하는 일이 생겼다. 한창 Java를 처음 배울 때나 해보던 것이라 별거 아니게 생각했는데 다음과 같은 오류가 떴다. C:\...\프로젝트명\src\패키지명 Error: Could not find or load main class 클래스파일명 Caused by: java.lang.NoClassDefFoundError: 패키지명/클래스파일명 찾아보니 Java는 클래스 파일을 찾을 때 패키지명을 포함한 전체 클래스명을 찾기 때문에, 1. Root Directory에서 호출해야 하고, 2. 패키지명을 포함한 Full Class Name을 사용해야 한다는 것이었다. 그래서 ..
devYH
'Backend/Java' 카테고리의 글 목록 (2 Page)