들어가기 전 사실 실무에서 자바 코드로 파일을 읽어와서 데이터를 처리하거나 할 일이 없어서, 파일을 다루는 부분에 대한 코드를 작성할 일이 생기면, 그 때 마다 구글링해서 사용했던 것 같다. 최근에 .json 파일에 있는 데이터를 읽어와서 처리해야할 일이 있었는데, 매번 구글링 하는 것 보다 머릿속에 한 번 확실히 정리해야 할 것 같다는 생각이 들...
Java - 자바 IO, NIO
Java I/O Input, Output을 나타낸다. In, Out의 기준은 JVM이다. 즉, JVM으로 들어오는 데이터를 다루는 경우엔 Input 데이터를 내보내는 경우엔 Output이다. Stream 기반이다. 한 번에 1byte 또는 그 이상의 byte를 읽는다. 데이터가 캐시되지 않는다. 따라서 ...
try-with-resource 사용시 Socket closed 예외 발생
상황 자바로 만든 간단한 웹 서버에서 404, 500과 같은 에러 페이지 처리를 위해 catch 절 내부에 에러 페이지를 응답하는 로직을 작성했다. 하지만 에러 발생시 에러 페이지가 응답되지 않고 java.net.SocketException: Socket closed가 발생했다. public class HttpServer { ... ...
OOP - 객체 지향 언어의 특징(기능과 책임 분리)
해당 글은 최범균 님의 객체 지향 프로그래밍 입문 강의를 듣고 정리한 내용입니다. 기능 기능은 하위 기능으로 분해 가능하다 각각의 기능을 누가 제공할 것인지 결정하는 것이 객체 지향 설계의 기본이다. 기능은 곧 책임이다. 따라서, 분리한 기능을 알맞게 분배해야한다.(책임 분리) ...
OOP - 객체 지향 언어의 특징(다형성과 추상화)
해당 글은 최범균 님의 객체 지향 프로그래밍 입문 강의를 듣고 정리한 내용입니다. 다형성과 추상화 다형성 (polymorphism) 여러(poly) 모습(morph)을 갖는 것. 즉, 한 객체가 여러 타입을 갖는 것을 의미한다. 즉, 한 객체가 여러 타입의 기능을 제공 타입 상속으로 다형성 구현 하위 타입은 ...
OOP - 객체 지향 언어의 특징(캡슐화)
해당 글은 최범균 님의 객체 지향 프로그래밍 입문 강의를 듣고 정리한 내용입니다. 캡슐화 데이터 + 관련된 기능을 묶는 것 객체가 기능을 어떻게 구현했는지 외부에 감추는 것 구현에 사용된 데이터의 상세 내용을 외부에 감춤 정보 은닉의미 포함 캡슐화를 하지 않는 경우 요구사항의 변경이...
MySQL - 데이터 모델링
들어가기 전 애플리케이션을 설계할 때 ‘DB 테이블은 어떻게 구성해야하지?’ 에 대한 막막함이 있다면 데이터 모델링이 문제 해결의 출발점이라고 생각한다. 공부를 하기에 앞서 나의 언어로 정리해본다면 내가 생각하기에 모델링이라는 것은 먼저 문자 그대로 ‘모델화’ 시킨다는 것인데, 모델이란 ‘어떤 대상을 필요한 특징만 추려서 나타낸 것’ 이라는 생...
MySQL - 트랜잭션과 격리 수준
트랜잭션과 ACID 트랜잭션이란 ? 데이터베이스 상태를 변경시키는 일련의 연산들을 논리적으로 묶을 수 있는 하나의 작업 단위 ex) 주문 - 결제 - 결제 승인 - 주문 접수 트랜잭션에는 중요한 두 가지 목적이 있다. ...
Java - 자바의 메모리 구조와 변수 종류 살펴보기
들어가기 전 스프링 빈은 기본적으로 싱글톤으로 생성되기 때문에, 만약 @Service로 선언된 비즈니스 로직 클래스에 인스턴스 변수가 선언되어 있다면 비즈니스 로직을 처리하는 모든 스레드는 해당 데이터를 공유하게 된다. 이것을 고려하지 않고 무작정 인스턴스 변수로 선언하면, 멀티 스레딩 환경에서 데이터가 꼬여서 시스템 장애를 초래할 수도 있다. 그...
CompletableFuture, Parellel Stream을 통해 성능 개선해보기
들어가기 전 현재 운영하고 있는 시스템(자바 버전8)에서 조회 시간이 꽤 오래 소요되는 화면들이 있었다. 모든 화면이 그런것은 아니었지만 몇몇 화면의 백엔드 로직은 아래와 같이 되어있었다. public Map<String, Object> retrieve() { Object result1 = testProxy.findSomething(...