개발공부(173)
-
[Effective-Java] 아이템 85 자바 직렬화의 대안을 찾으라
아이템 85 자바 직렬화의 대안을 찾으라 Java에 처음으로 직렬화가 도입되었을 때 어렵지 않게 *분산객체를 만들 수 있다는 것은 매력적이었지만, 보이지 않는 생성자, API와 구현 사이의 모호해진 경계, 잠재적인 정확성 문제, 성능, 보안, 유지보수성 등 그 대가가 컸습니다. 실제로 *2016년 샌프란시스코 시영 교통국이 랜섬웨어 공격을 받아 무인발급기가 이틀간 마비되어 무료로 메트로를 타는 사태를 겪기도 했습니다. ObjectInputStream의 readObject 메서드를 호출하면서 객체 그래프가 역직렬화되는데, readObject 메서드는 (Serializable) 인터페이스를 구현했다면, 클래스패스 안의 거의 모든 타입의 객체를 만들어낼 수 있는 마법 같은 생성자입니다. 따라서 클래스패스 안의..
2022.03.20 -
[Effective-java] 아이템 78 - 공유 중인 가변 데이터는 동기화에 사용하라
아이템 78 공유 중인 가변 데이터는 동기화에 사용하라 단일 스레드보다 동시성 프로그래밍은 어렵습니다. 하지만 멀티코어 프로세서의 힘을 제대로 활용하려면 반드시 내 것으로 만들어야하는 기술이기도 합니다. synchronized 해당 메서드는 해당 스레드나 블록을 한 스레드씩 수행하도록 보장합니다. 한 객체가 일관된 상태를 가지고 생성되고, 이 객체에 접근하는 메서드는 그 객체에 락을 겁니다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정합니다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킵니다. 동기화를 제대로 사용한다면 어떤 메서드도 이 객체의 상태가 일관되지 않는 순간을 볼 수 없을 것입니다. 또다른 중요한 기능은 동시성을 사용하지 않으면 한 스레드가 만든 변화를 다른 스레..
2022.03.09 -
[Java] jackson 라이브러리는 왜 non-static Inner class를 매핑하지 못할까?
프런트와 http로 통신할 때 JSON 형식으로 데이터를 받는 경우가 많습니다. 객체지향언어인 Java에서 객체로 바인딩 하는 문제를 도와주는 라이브러리 중 하나인 jackson은 대표적인 ObjectMapper 클래스를 제공합니다. ObjectMapper 클래스는 JSON을 읽기, 쓰기 기능 뿐만아니라 JSON Tree Model인 JsonNode 형태 가공해주기도 합니다. 기본적인 jackson 라이브러리에 대한 설명은 마치고, 다룰 주제인 non-static Inner class인 경우 convertValue(Object fromValue, Class toValue) 메서드에서 왜 com.fasterxml.jackson.databind.exc.InvalidDefinitionException를 날리는..
2022.03.01 -
[UML] UML(Unified Modeling Language) Diagram
UML(Unified Modeling Language) Diagram UML이란 시스템 설계를 시각화 하기위해 만들어진 다이어그램입니다. 객체 지향 언어인 Java 진영에선 시스템 설계를 표현하기 위한 표준 모델링으로 볼 수 있을 것 같습니다. UML 클래스 관계도 [출처: https://www.visual-paradigm.com/guide/uml-unified-modeling-language/uml-class-diagram-tutorial/] Inheritance(상속) 상속은 클래스가 IS-A 관계일 때 성립하는 상태입니다.(하위 클래스가 상위 클래스를 대체할 수 있어야 함; potato -> vegetables, bus -> vehicle) *참고로 HAS-A 관계는 조립(composition) 상..
2022.01.22 -
[Regex] Pattern and Matcher in Java
Regex: Pattern and Matcher in Java /* Predefined character classes . Any character (may or may not match line terminators) \d A digit: [0-9] \D A non-digit: [^0-9] \s A whitespace character: [ \t\n\x0B\f\r] \S A non-whitespace character: [^\s] \w A word character: [a-zA-Z_0-9] \W A non-word character: [^\w] Greedy quantifiers X? X, once or not at all X* X, zero or more times X+ X, one or more ti..
2022.01.21 -
[Docker] "No space left on device" 에러
docker "No space left on device" 에러 회사에서는 docker 컨테이너를 사용해 서버를 실행시키는데, 작업 도중 docker container가 실행된 즉시 exit 되는 오류가 있었습니다. 개발팀 방에 이슈를 올리고 시니어 개발자 분의 도움을 받아 docker-compose log를 확인해서 해결할 수 있었습니다. :) 즉, 문제해결 과정은 이런식으로 이루어져야 한다는 것을 되새겼습니다. 인프라 문제 발생 -> (내부 공유; 도움 요청) -> log 확인 -> google -> 해결 *(내부 공유; 도움요청)은 스킵가능 docker log 확인 docker-compose logs [options] --tail="1"을 options로 사용해 모든 컨테이너의 마지막 n 라인 lo..
2022.01.21