no image
[Network] REST API, RESTful 이해와 설계 방법
GOAL REST의 개념을 이해한다. REST의 특징도 이해한다. REST의 설계 기본 규칙과 방법을 이해한다. RESTful의 개념도 이해한다. REST (Representational State Transfer) 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. REST는 네트워크상에서 Client와 Server 사이의 통신 방식 중 하나이다. 구체적인 개념 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(GET, POST, PUT, DELE..
2022. 3. 17. 19:32
no image
[이펙티브자바 - 아이템90] 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템90. 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라 Serializable을 구현하는 순간 생성자 이외의 방법으로 인스턴스를 생성할 수 있게 되어 버그와 보안 문제가 일어날 가능성이 커진다. 하지만 직렬화 프록시 패턴(serialization proxy pattern)을 사용하면 이 위험을 크게 줄일 수 있다. 직렬화 프록시 패턴 public final class Pe..
2022. 2. 6. 10:24
no image
[이펙티브자바 - 아이템89] 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템89. 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라 아이템 3의 싱글톤 패턴(Singleton pattern)을 보면, 싱글톤 패턴 클래스의 생성자는 오로지 하나의 인스턴스만 생성하도록 보장한다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvi..
2022. 2. 6. 10:13
no image
[이펙티브자바 - 아이템88] readObject 메서드는 방어적으로 작성하라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템88. readObject 메서드는 방어적으로 작성하라 "Item 50. 적시에 방어적 복사본을 만들라" 에서는 불변인 날짜 범위 클래스를 만드는데 있어 가변인 Date 필드를 이용했다. 그래서 불변식을 지키고 불변을 유지하기 위해 생성자와 접근자에서 Date 객체를 방어적으로 복사하느라 코드가 길어졌다. // 방어적 복사를 사용하는 불변 클래스 public final clas..
2022. 2. 6. 09:58
no image
[이펙티브자바 - 아이템87] 커스텀 직렬화 형태를 고려해보라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템87. 커스텀 직렬화 형태를 고려해보라 개발 일정에 쫓기는 상황에서는 API 설계에 노력을 집중하는 편이 나을 것이다. 이 말은 종종 다음 릴리스에서 제대로 다시 구현하기로 하고, 이번 릴리스에서는 그냥 동작만 하도록 만들어 놓으라는 뜻이다. 보통은 크게 문제되지 않는 전략이나, 클래스가 Serializable을 구현하고 기본 직렬화 형태를 사용한다면 다음 릴리스 때 버리려 한..
2022. 2. 5. 16:37
no image
[이펙티브자바 - 아이템86] Serializable을 구현할지는 신중히 결정하라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템86. Serializable을 구현할지는 신중히 결정하라 어떤 클래스의 인스턴스를 직렬화할 수 있게 하려면 클래스 선언에 implements Serializable만 덧붙이면 된다. 직렬화를 지원하기란 짧게 보면 손쉬워 보이지만, 길게 보면 아주 값비싼 일이다. 1. Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵다. 클래스가 Serializable을 구현하면..
2022. 2. 5. 16:07
no image
[이펙티브자바 - 아이템85] 자바 직렬화의 대안을 찾으라
12장. 직렬화 - GOAL 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 알아보자. 아이템85. 자바 직렬화의 대안을 찾으라 직렬화는 위험하다. 직렬화의 위험성을 회피하는 가장 좋은 방법은 아무것도 역직렬화하지 않는 것이다. 직렬화란 무엇일까 넓은 의미로 직렬화는 어떤 데이터를 다른 데이터의 형태로 변환하는 것을 말한다. 이팩티브 자바에서 말하는 직렬화(Serializable)란 바이트 스트림으로의 직렬화로 객체의 상태를 바이트 스트림으로 변환하는 것을 의미한다. ..
2022. 2. 5. 15:38
no image
[이펙티브자바 - 아이템77] 예외를 무시하지 말라
10장. 예외 - GOAL 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아진다. 그러나 잘못 사용하면 반대의 효과만 나타난다. 예외를 효과적으로 활용하는 방법을 습득하자. 아이템77. 예외를 무시하지 말라 API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조취를 취해달라고 말하는 것이다. API 설계자의 목소리를 흘려버리지말자. 안타깝게도 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try문으로 감싼 후 catch 블록에서 아무일도 하지 않으면 끝이다. try { ... } catch (SomeException e) { } 예외는 문제 상황에 잘 대처하기 위해 존재하는데, catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 예외를 무..
2021. 12. 12. 04:28
no image
[이펙티브자바 - 아이템76] 가능한 한 실패 원자적으로 만들라
10장. 예외 - GOAL 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아진다. 그러나 잘못 사용하면 반대의 효과만 나타난다. 예외를 효과적으로 활용하는 방법을 습득하자. 아이템76. 가능한 한 실패 원자적으로 만들라 실패 원자적(failure-atomic) 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 이는 작업 도중 예외가 발생해도 그 객체는 여전히 정상적으로 사용할 수 있음을 의미한다. 만약 여기서 검사 예외를 던진다면 호출자가 오류 상태를 복구할 수 있을테니 특히 더 유용할 것이다. 메서드를 실패 원자적으로 만드는 방법 1. 불변 객체로 설계 불변 객체는 태생적으로 실패 원자적이다. 메서드가 실패하면 새로운 객체가 만들어지지 않을 수 있으나..
2021. 12. 12. 04:22