전체 글 40

[Java] 직렬화(Serialization)

예전에 운영 배포 할 때 직렬화 문제를 마주한 적이 있었다. 서버 한 대에서는 직렬화를 구현한 객체에 새로운 변수를 추가했었는데, 다른 서버 한 대에 수정한 객체를 반영하지 않아 계속 역직렬화 에러가 발생하였다.. 요청할 때의 객체와 응답 받을 때의 객체가 다른 버전의 클래스를 갖고 있던 것이 문제였다. 직렬화에 대한 개념이 없어 에러를 찾는데 쉽지 않았다. 1. 직렬화란? 객체를 데이터 스트림으로 만드는 것을 뜻한다. 객체에 저장된 데이터를 스트림에 쓰기위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는것을 역직렬화(deserialization)라고 한다. 2. ObjectInputStream, ObjectOutputStream 직렬화는 ObjectOutp..

Study/Java 2021.10.25

[Spring] spring JDBC

JDBC 는 자바의 데이터 액세스 기술의 기본이 되는 로우레벨의 API다. JDBC는 표준 인터페이스를 제공하고 개발자가 이 인터페이스를 구현한 드라이버를 제공하는 방식으로 사용된다. 그 덕분에 SQL의 호환성만 유지한다면 JDBC로 개발한 코드는 DB가 변경돼도 그대로 재사용할 수 있다는 장점이 있다. 그렇다면 단점은? 간단한 SQL을 하나 실행하는 데도 복잡한 코드가 필요하다. DB에 따라 일관성 없는 정보를 가진 채로 던져지는 예외 처리를 해야하며 SQL은 코드 내에서 문자로 제공해야 한다. 스프링 JDBC 기술과 동작 원리 - 스프링의 JDBC 접근 방법 1. SimpleJdbcTemplate -> 가장 많이 사용되는 기능을 통합하였다. 방대한 템플릿 메소드와 내장된 콜백을 제공하며 jdbc의 모..

Study/Spring 2021.10.04

[Spring] RestTemplate

[1] RestTemplate란 ? - org.springframework.http.client - Spring 3.0 부터 지원 - 스프링에서 http 통신에 쓸 수 있다. - HTTP 서버와 통신을 단순화하고 RESTful 원칙을 지킨다. 그 외 스프링의 REST 서비스 호출 방법 AsyncRestTemplate Spring 4부터 사용 가능한 비동기 RestTemplate WebClient Spring 5부터 사용 가능한 Non-Blocking, Single Thread 이며 동기&비동기 둘다 지원 RestTemplate를 많이 사용하고 있지만 최근 추세는 WebClient로 마이그레이션 중인 것 같다. [2] RestTemplate의 동작 - HttpClient는 Http를 사용하여 통신하는 범용..

Study/Spring 2021.09.23

[Java] 멀티 쓰레드(Multi Thread)

1. Main Thread 모든 Java Application은 main thread 가 main 메소드를 실행하면서 시작된다. 이러한 메인 쓰레드안에서 싱글 스레드가 아닌 멀티 스레드 애플리케이션은 필요에 따라 작업 스레드를 만들어 병렬로 코드를 실행할 수 있다. Multi Thread는 메인 스레드가 종료되어도 실행 중인 Thread가 하나라도 있으면 프로세스는 종료되지 않는다. 2. Thread 생성 2.1 Thread 클래스로부터 직접 생성 java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable을 매개 값으로 갖고 있는 생성자를 호출한다. Runnable에는 run() 메소드 하나가 정의되어 있으며, 구현 클래스에서 run()을 재정의하여 실행할 코드를 작성..

Study/Java 2021.09.14

[Spring] Handler Method(ResponseEntity)

ResponseEntity "개발자가 직접 데이터와 HTTP 상태 코드를 제어할 수 있는 클래스" 스프링에서는 HttpEntity라는 클래스가 있다. 이 클래스를 타고 들어가면 HttpHeader와 HttpBody를 포함하고 있는 것을 볼 수 있다. 그리고 이 HttpEntity를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다. 그렇다면 나는 이 클래스들을 이용하여 좀 더 세밀하게 요청&응답 값을 작업할 수 있을 것이다. 간단한 예시를 들어보자. 컨트롤러는 전에 modelattribute를 공부할 때 썼던 메서드를 재활용하였다. 중간 값은 무시하고 값을 return 할 때, ResponseEntity에 dante 클래스와 http 상태 코드를 함께 담아서 보낸다..

Study/Spring 2021.09.12

[Java] 파일 입출력 정리

업무를 보던 중 특정 기간내에 몇 천 건의 DB 자료들을 뽑아야하는 일이 있었다. 하지만 내가쓰고 있는 DB Tool인 MySql workbench 로는 부하가 많이 가서 쿼리 실행중에 계속 오류가 발생하였다. 이를 해결하기 위해 임시로 로컬에서 DB를 접속하여 자바 코드를 통해 데이터를 뽑아 냈다. 파일 입출력은 자주 쓰지 않아서인지 사용할 때 마다 매번 까먹고 다시 찾고를 반복한다.. 그래서 다시 찾아보더라도 내가 정리한 걸 보기위해 이번 기회에 제대로 정리해본다.. File 클래스 OutputStream FileReader FileWriter BufferedWriter BufferedReader Scanner .. .. 스트림 Stream 파일에서 입력과 출력이라는 동작을 하려면 파일로 데이터를 전..

Study/Java 2021.09.08

[Spring] @ModelAttribute

@ModelAttribute Client가 전송하는 multipart/form-data 형태의 Http body와 Http 파라미터들을 Setter를 통해 객체에 1대 1 바인딩하는 역할이다. URI path, 요청 파라미터, 세션 등 다양한 곳에서 선언 가능하다. 바인딩 에러를 직접 다루고 싶은 경우 BindingResult 타입을 추가할 수 있으며, @Validate 어노테이션을 통해 매개변수에 대한 검증을 할 수 있다. 객체 먼저 Dante 객체를 선언하여 지역변수를 선언하고 Getter와 Setter를 작성한다. (여기서는 Getter, Setter는 생략) public class Dante { private String deadLift; private String squat; private St..

Study/Spring 2021.09.08

[Spring] Spring IoC Container 그리고 Bean

Spring IoC Container 이번에는 스프링의 특징이자 핵심인 Inversion of Control(IoC) 에 대해 공부하였다. IoC는 객체의 생성 / 삭제 / 관리 등 주기에 대해 관리를 한다. 내부적으로 조작할 객체를 외부로부터 주입받도록 하며 이때 외부로부터 주입받는 작업을 DI(dependency injection) 라고 한다. 개발자 대신 위 작업을 대신해주는 등 프로그램의 제어 흐름 구조가 뒤바뀐다고 하여 붙여진 이름이다. 그리고 이때 IoC에 관리되는 객체를 Bean 이라고 부른다. Bean은 IoC에 의해 인스턴스화, 조립 및 관리 된다. 컨테이너는 메타데이터를 읽어 인스턴스화, 구성 및 조립할 객체에 대한 정보를 가져오게 된다. Application 클래스는 메타데이터와 결합..

Study/Spring 2021.08.29

[Spring] Dispatcher Servlet

DispatcherServlet 에서 dispatcher란 "보내다, 급파하다" 라는 뜻을 가지고 있다. 디스패처 서블릿의 역할은 이처럼 Http 프로토콜 요청이 들어오는 가장 앞 단에서 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 하는 Front Controller 이다. Spring Framework 의 유일한 프론트 컨트롤러인 DispatcherServlet 은 Spring MVC의 핵심 요소이다. 먼저 web.xml 쪽을 살펴보자. contextConfigLocation /WEB-INF/spring/root-context.xml org.springframework.web.context.ContextLoaderListener ap..

Study/Spring 2021.08.24

[Spring] @RequestMapping

RequestMapping 어노테이션은 설정이 쉽고 간편하며 가장 많이 사용하는 어노테이션 중 하나다. 그리하여 설정하는 방법이 아닌 기본적인 속성을 중점적으로 다루었다. @RequestMapping 해당 어노테이션은 클래스와 메소드 레벨에서 모두 사용할 수 있다. 대부분의 경우 메소드 레벨의 응용 프로그램은 HTTP 메소드별 종류 중 하나를 사용하는 것을 선호한다.(get, post, delete, put 등등) 많은 *meta-annotation이 정의 되어 있는 것을 볼 수 있다. *meta-annotation : 다른 annation 에서도 사용되는 annotation @see 관련 항목으로 외부 링크 또는 텍스트를 표시하거나, 다른 필드나 메소드에 대한 모든 참조 링크를 나타내는 경우에 사용한다..

Study/Spring 2021.08.19