목록2026/04/17 (15)
ki-sd 님의 블로그
오라클DB 개발 환경 세팅과 가장 기본적인 데이터 조회 문법을 익혔다. 1. 데이터베이스 환경 구축의 이해오라클 DB와 이를 시각적으로 제어할 수 있는 GUI 툴인 SQL Developer(및 DBeaver)를 설치하고 연동했다.이 과정에서 리스너(Listener), 포트(1521), SID(또는 Service Name)의 개념을 파악하며 DB 서버와 클라이언트가 어떻게 연결되는지 네트워크적 관점을 확인했다.최고 관리자(SYS, SYSTEM)로 접속하여 실습용 일반 사용자 계정을 생성하고, GRANT 명령어를 통해 접속 권한과 리소스 사용 권한을 부여하는 보안 및 계정 관리의 기초 절차를 겪었다.2. DQL(Data Query Language)의 시작데이터를 삽입/수정하기 전에 이미 존재하는 데이터를 꺼..
한 달여간 배운 OOP, 컬렉션, I/O 스트림, 예외 처리, 멀티 쓰레드를 총망라하여 실제 동작하는 네트워크 기반 채팅 애플리케이션을 완성했다. 1. TCP/IP 소켓 프로그래밍의 원리클라이언트의 연결 요청을 지정된 포트(Port)에서 끝없이 대기하는 ServerSocket과, 실제 클라이언트와 연결되어 1:1 데이터 스트림 터널을 뚫어주는 Socket의 역할을 완벽히 분리하여 설계했다.2. 멀티 쓰레드 기반의 서버 아키텍처서버가 한 클라이언트의 메시지 수신(I/O)을 대기하는 동안 멈춰버리면(Blocking), 다른 클라이언트의 접속이나 메시지를 처리할 수 없다.이를 해결하기 위해 새로운 클라이언트가 접속할 때마다 해당 소켓을 담당하는 새로운 쓰레드를 생성하여 할당했다. 각 쓰레드가 독립적으로 동작하..
클래스의 구조적 유연성을 높이는 내부 클래스를 정리하고, 하나의 프로그램에서 여러 작업을 동시에 수행하는 멀티 쓰레딩의 세계에 진입했다. 1. 내부 클래스(Inner Class)의 활용클래스 내부에 선언되는 멤버 클래스, static 클래스, 지역 클래스, 익명 클래스의 선언 위치와 생명주기 차이를 분석했다. 외부에는 불필요한 클래스를 숨기고(캡슐화), 내부 클래스는 외부 클래스의 멤버에 자유롭게 접근할 수 있는 구조적 이점을 확인했다.2. 멀티 쓰레드(Multi-Thread) 구현 아키텍처Thread 클래스를 직접 상속받는 방식과, Runnable 인터페이스를 구현하여 Thread 객체에 주입하는 방식을 비교했다. 자바는 다중 상속이 불가능하므로, 유연한 확장을 위해 주로 Runnable 구현 방식을 ..
데이터의 흐름을 제어하는 I/O 스트림의 깊은 원리를 파악하고, 객체 자체를 파일로 영구 저장하는 고급 기술을 습득했다. 1. 바이트 스트림과 문자 스트림의 분리그림, 오디오, 영상 등 모든 종류의 데이터를 1바이트씩 처리하는 바이트 기반 스트림(InputStream, OutputStream)과, 텍스트 데이터의 한글 깨짐을 방지하기 위해 2바이트 단위로 묶어 처리하는 문자 기반 스트림(Reader, Writer)의 용도를 정확히 구분했다.성능 향상을 위해 내부적으로 메모리 버퍼를 사용하는 보조 스트림(BufferedReader, BufferedWriter)을 덧붙여(Chaining), 디스크 접근 횟수를 줄이고 입출력 속도를 획기적으로 개선하는 아키텍처를 실습했다.2. 객체 직렬화(Object Seri..
자바 프로그램이 단순히 메모리 안에서만 동작하는 것을 넘어, 운영체제(OS)의 파일 시스템에 직접 접근하고 제어하는 기초를 다루었다. 1. File 클래스의 메커니즘java.io.File 클래스는 파일의 실제 데이터(내용)를 다루는 것이 아니라, 파일이나 디렉토리의 '메타데이터(경로, 크기, 생성일 등)'를 다루는 객체다.경로(Path)의 이해: 운영체제 시스템의 최상위 경로부터 시작하는 절대 경로(Absolute Path)와, 현재 프로그램의 실행 위치를 기준으로 하는 상대 경로(Relative Path)의 개념을 명확히 구분하여 적용했다.2. 파일 시스템 제어 실습단순히 파일을 생성(createNewFile())하고 삭제(delete())하는 것을 넘어, 파일이 이미 존재하는지 확인(exists())..
기존의 객체 지향 방식을 넘어, 자바 8부터 도입된 함수형 프로그래밍(Functional Programming)의 패러다임을 받아들이고 코드의 표현력을 극대화했다. 1. 익명 클래스에서 람다식(Lambda Expression)으로의 진화단 한 번만 사용될 일회성 구현 객체를 만들기 위해 매번 익명 클래스를 작성하는 것은 코드가 길어지고 가독성을 해치는 원인이 된다.람다식 (매개변수) -> { 실행문 }을 도입하여, 메서드를 하나의 식(Expression)으로 취급하고 마치 변수처럼 전달하는 메커니즘을 익혔다. 코드가 극적으로 간결해지며, 오직 실행할 '동작(로직)' 자체에만 집중할 수 있게 되었다.2. Stream API를 이용한 선언적 데이터 처리컬렉션이나 배열에 저장된 요소를 반복문(for, whil..
