[Java] HTTP 서버 구현: postman과 자바 HttpClient를 사용한 요청
·
JAVA
스프링을 사용하지 않고 순수 자바로 HTTP 서버를 구현해 보자 📌 서론 개발을 하다 보면 필수적으로 http 프로토콜을 사용하게 된다. 스프링 부트를 사용해서 백엔드 개발을 한다면 @Controller와 @RequestMapping 조합을 통해 http 요청을 간편하게 처리할 수 있다. 이것은 스프링이 http 요청 처리를 추상화해서 지원하기 때문인데 스프링은 이 기능을 dispatcherServlet를 사용해서 지원한다. (고수준 처리) dispatcherServlet은 http요청을 직접적으로 받는 것이 아니라 tomcat으로부터 HttpServletRequest객체를 받은 다음 HandlerMapping을 통해 요청에 적절한 컨트롤러를 찾아서 매핑하고 처리하도록 구성되어 있다. 내가 궁금했던 것은..
[Java] Optional로 Null 처리하기
·
JAVA
자바8부터 지원하기 시작한 Optional을 사용하여 Null을 처리하는 방법을 예시를 통해 이해해 보자 📌 서론 개발을 하다보면 null을 종종 보게 되는데 'null' 값의 관리는 굉장히 중요한 문제 중 하나다. 'null' 값은 종종 예기치 못한 NullPointerException을 일으키며, 이는 애플리케이션의 신뢰성과 안정성을 저하시키기 때문이다. 자바 8에서는 이런 문제를 해결하기 위해 Optional이라는 기능이 등장한다. 이번 포스트에서는 Optional을 사용하여 어떻게 안전하게 'null' 값을 처리할 수 있는지 예제를 통해 알아보자 1. Optional로 조건에 따른 필터링 이 예시는 Optional.filter를 사용하여 특정 조건을 만족하는 값에만 접근하는 방법이다. public..
[Java] 자바 리플렉션(Reflection) 실습하기
·
JAVA
자바 코드를 직접 적어보며 자바 리플렉션의 사용 방법을 알아보자 혹시 자바 리플렉션에 대해서 잘 알지 못한다면 아래의 포스트를 보고 오자! [Java] 자바 리플렉션(reflection)이란? 이번 포스트에서는 자바 리플렉션과 이걸 사용하는 스프링에 대해서 알아보자 1. 자바 리플렉션이란 리플렉션이란? 리플렉션은 자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작 curiousjinan.tistory.com 1. 리플렉션으로 private 필드와 메서드에 접근하기 클래스와 생성자 정의 이 코드에서 FirstReflectionExample 클래스는 secret과 number라는 두 개의 private final 필드를 가지고 있다. 생성자는 이 두 필드에 값을 할당하는 역할을 한다. 비공개 메서..
[Java] 자바 리플렉션(reflection)이란?
·
JAVA
이번 포스트에서는 자바 리플렉션과 이걸 사용하는 스프링에 대해서 알아보자 1. 자바 리플렉션이란 리플렉션이란? 리플렉션은 자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작할 수 있는 기능이다. 예를 들어, 클래스의 이름, 메서드, 필드, 생성자 등에 대한 정보를 프로그램 실행 중에 알아내고, 이를 통해 객체를 생성하거나 메서드를 호출할 수 있다. 이 기능 덕분에, 개발자는 코드의 유연성과 확장성을 높일 수 있다. 리플렉션 예시 코드를 보면 Class.forName("java.lang.String")은 String 클래스에 대한 Class 객체를 가지고 온다. 그리고 getDeclaredMethods() 메서드를 사용해서 가져온 클래스에 정의된 모든 메서드의 정보를 얻어내는 것이다. 이렇게 리..
[Java] 추상화란 무엇인가?
·
JAVA
자바의 "추상화"의 개념을 알아보고 스프링을 이것을 어떻게 사용하는지 알아보자 📌 서론 항상 추상화를 사용하고 있지만 누군가 "그래서 대체 추상화가 뭔데?"라고 물어볼때마다 바로바로 떠오르지 않았고 많은 고민을 해야했다. 이런 점에서 알지도 못하면서 사용하고 있다는 점에 답답함이 느껴져서 정리를 시작했다. 1. 추상화(Abstraction)의 기본 개념 추상화란? 추상화는 복잡한 시스템을 단순화하는 프로그래밍 기술이다. 이는 개발자가 복잡한 내부 작업을 몰라도 기능을 사용할 수 있게 해준다. 왜 필요한가? 복잡한 시스템을 이해하고 사용하기 위해서는 많은 시간과 노력이 필요하다. 추상화를 통해 이러한 복잡성을 줄이고, 빠르게 그리고 안전하게 시스템을 사용할 수 있다. 실생활 예시 예를 들어, 자동차를 운전..
Java I/O: BufferedReader, BufferedWriter, Buffer 사용법
·
JAVA
스프링 부트를 통해 개발을 진행하다 I/O작업에서 주로 사용되는 BufferedReader, BufferedWriter에 대한 궁금증이 생겼다. 이에 이번에는 이것들에 대해서 알아봤다. BufferedReader와 BufferedWriter는 자바(Java) 프로그래밍 언어에서 입출력(I/O) 작업을 효율적으로 수행하기 위해 사용되는 클래스이다. 이 클래스들은 버퍼를 사용하여 데이터를 읽고 쓰는 작업을 최적화한다. 1. BufferedReader 1-1. BufferedReader란? BufferedReader는 텍스트 파일이나 입력 스트림에서 문자를 읽을 때 사용된다. 이 클래스는 내부 버퍼를 사용하여 한 번에 여러 문자를 읽어 들이므로, 매번 디스크나 네트워크에서 직접 읽는 것보다 훨씬 빠르다. tr..
[Java] 동시성과 병렬 처리 part2: 함정, 고급 패턴, 성능 최적화
·
JAVA
자바의 동시성과 병렬 처리를 고급지게 해보자. [Java] 동시성과 병렬 처리 part1자바의 동시성과 병렬 처리를 알아보자.📌 서론백엔드 개발에서 높은 성능과 효율성을 달성하기 위해 동시성 프로그래밍은 필수적인 요소다. 이번 포스팅에서는 Java를 활용하여 병렬 처리, 스curiousjinan.tistory.com 1. Java 동시성의 함정 피하기: 데드락과 레이스 컨디션동시성 프로그래밍에서 가장 흔히 마주치는 문제 중 두 가지는 데드락(Deadlock)과 레이스 컨디션(Race Condition)이다. 이러한 문제는 프로그램의 안정성과 성능에 심각한 영향을 미칠 수 있으므로, 이를 이해하고 적절히 대처하는 것이 중요하다. 데드락(Deadlock)데드락은 두 개 이상의 스레드가 서로가 보유한 자원을..
[Java] 동시성과 병렬 처리 part1
·
JAVA
자바의 동시성과 병렬 처리를 알아보자.📌 서론백엔드 개발에서 높은 성능과 효율성을 달성하기 위해 동시성 프로그래밍은 필수적인 요소다. 이번 포스팅에서는 Java를 활용하여 병렬 처리, 스레드 동기화, 뮤텍스, 세마포어 등 다양한 동시성 제어 메커니즘을 실용적인 예제와 함께 살펴보자. 1. 병렬 처리의 실용적인 활용: Java 코드 예제로 알아보기병렬처리의 필요성현대의 애플리케이션은 대용량 데이터를 신속하게 처리해야 하는 경우가 많다. 이를 위해 시스템은 작업을 병렬로 처리하여 성능을 극대화할 수 있어야 한다. 예를 들어, 대규모 데이터셋을 여러 부분으로 나누어 각 파트를 독립적으로 처리한 후 결과를 합치는 방식이 효과적이다. Java에서의 병렬 처리 구현Java에서는 ForkJoinPool과 병렬 스트..