분류 전체보기
Apache Tomcat 아파치 톰캣: 웹 애플리케이션 서버의 기능과 사용법 알아보자
아파치(Apache)와 톰캣(Tomcat) 아파치(Apache): 아파치 소프트웨어 재단에서 만든 오픈 소스 `웹 서버(WS)`입니다. 정적인 웹 페이지를 처리하고, 클라이언트로부터의 HTTP 요청을 받아 해당 요청에 대한 응답을 제공합니다. 톰캣(Tomcat): `아파치 톰캣(Apache Tomcat)`이라고도 불리며, 자바 `웹 애플리케이션 서버(WAS)`입니다. JSP(Java Server Pages)와 서블릿(Servlet)과 같은 자바 기술을 사용하는 동적인 웹 애플리케이션을 실행하는 데 특화되어 있습니다. 웹 애플리케이션을 서비스하기 위해 필요한 자바 `서블릿 컨테이너`를 제공하며, HTTP 요청을 처리하고, JSP와 서블릿 코드를 실행합니다. 아파치 소프트웨어 재단에서 개발하고 있으며, 아파..
실시간 데이터 전송 방법 Server-Sent Events(SSE)와 웹소켓 차이
SSE: Server-Sent Events SSE(Server-Sent Events)는 웹 애플리케이션, `서버에서 클라이언트`로 `단방향`으로 `실시간` 이벤트를 전송하는 `웹` 기술입니다. SSE는 단방향 통신 방식으로 서버에서 클라이언트로 데이터를 전송합니다. 이를 통해 서버에서 발생하는 업데이트나 알림 등을 실시간으로 클라이언트에게 전달할 수 있습니다. SSE는 이런 특징으로 실시간 알림 ,실시간 주가 업데이트 등에 사용됩니다. SSE는 단방향 통신이기 때문에 서버에서 클라이언트로만 데이터를 전송할 수 있습니다. 클라이언트는 HTTP 프로토콜을 통해 SSE 연결을 설정하고, 서버는 HTTP 응답을 유지한 상태에서 데이터를 전송합니다. SSE는 재연결 기능을 제공하기 때문에 연결이 끊어졌을 때 자동..
Java java.io 기반 입출력: 입출력 스트림, 콘솔 입출력, 파일 입출력, 보조 스트림
IO 패키지 IO 패키지는 입출력 작업을 수행하기 위한 클래스와 인터페이스를 제공하는 패키지입니다. 사용자가 키보드로 데이터를 `입력`할 수도 있고, 파일 또는 네트워크로부터 데이터가 입력될 수 있습니다. `출력`도 마찬가지입니다. IO 패키지를 활용하여 데이터를 시스템 콘솔, 파일, 네트워크 등 다양한 소스와 대상으로 전달하고 처리할 수 있습니다. Java에서 데이터는 `Stream`을 통해 입/출력이 되기 때문에 스트림 특징을 이해해야 합니다. 스트림은 데이터를 읽거나 쓰는 작업을 수행합니다. 이때 데이터 교환을 위해서는 입력 스트림과 출력 스트림이 각각 필요한데, 그 이유는스트림은 단방향이기 때문에 하나의 스트림으로 입/출력을 동시에 할 수 없기 때문입니다. 스트림은 `바이트 기반 스트림`과 `문자..
Java 소켓을 사용하여 단체 채팅방 만들기
실행 결과 ChatServer ChatClient 1 ChatClient 2 ChatServer import java.io.*; import java.net.*; import java.util.*; public class ChatServer { private static Set clients = new HashSet(); private static final int PORT = 5000; public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(PORT)) { System.out.println("SERVER START. Listening port " + PORT); while (true) { Sock..
Java try-wtih-resources로 자원 관리하기
입출력 스트림, DB 연결 등과 같은 자원을 사용할 때는 기존에 close() 메서드를 호출하여 자원을 해제해주었어야 합니다. 사용 전: FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); // 파일 읽기 작업 수행 } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } Java 7 부터 도입된 `try-with-resources` 문법을 사용하면 코드를 간결하고 효율적으로 작성할 수 있습니다. 기존에는 코드 안에 c..
Java 소켓 프로그래밍: 네트워크 통신을 위한 Java Socket
Java 소켓(Socket)은 네트워크 통신을 위한 API입니다. 소켓(Socket)은 TCP/IP 기반의 연결 지향형 통신을 제공하며, 소켓 프로그래밍을 통해 클라이언트와 서버 간의 데이터 통신을 구현할 수 있습니다. 소켓(Socket) 관련 용어 `클라이언트와 서버` 클라이언트는 서버에 연결을 요청하고 데이터를 보내고 받는 쪽이며, 서버는 클라이언트의 요청을 수락하고 처리하는 쪽입니다. `TCP/IP` 소켓은 TCP/IP 프로토콜을 기반으로 동작합니다. TCP는 신뢰성 있는 연결 지향형 통신을 제공합니다. IP는 데이터를 패킷으로 분할하여 전송하는 역할을 합니다. Java는 TCP 네트워킹을 위해 `java.net.Socket`과 `java.net.ServerSocket` 클래스를 제공합니다. 소켓 ..
MyBatis INSERT 쿼리 실행 후 auto_increment 키 값 반환하기
MyBatis 쿼리 생성 INSERT INTO TB_USER (USER_NAME, USER_AGE, USER_GENDER ,USER_YN ) VALUES (#{userName}, #{userAge}, #{userGender} ,#{userYn} ); `useGeneratedKeys` DB에서 자동으로 생성된 키를 사용할지 여부입니다. `AUTO_INCREMENT` 또는 `IDENTITY` 속성을 가진 열에 사용합니다. `keyProperty` DB에서 생성된 키를 매핑할 자바 객체의 프로퍼티를 지정합니다. 위 예시처럼 `useGeneratedKeys`와 같이 사용함으로써 자동 생성된 ID 값을 저장하기 위한 프로퍼티를 지정해주어야 합니다. 반환 값 받기 userMapper.insertUserAndGetP..
Spring Security OAuth 2.0를 이해해보자
OAuth란? 게임이나 쇼핑몰 같은 웹사이트를 이용하다보면 [Google로 간편 로그인], [NAVER로 간편 로그인] 등과 같이 타 서비스의 계정으로 로그인할 수 있도록 구현된 것을 확인할 수 있습니다. 타 서비스의 계정을 통해 로그인하는 기능을 구현하는 가장 쉬운 방법은 구현하고자 하는 웹 사이트에서 Google이나, NAVER의 아이디나 비밀번호를 요청하여 제공받고, 이를 저장하여 사용하는 방법일 것입니다. 하지만 이런 방법은 보안상으로 좋지 않은 방법입니다. 사용자들은 가입하고자 하는 웹 사이트에 자신의 Google이나 NAVER 계정 정보를 줘야하고, Google이나 NAVER 입장에서도 자신이 갖고 있는 사용자의 정보를 다른 웹 사이트에 공유한다는 것이 부담스럽기 때문입니다. 이를 해결하고자 ..